1 /*************************************************************************
2 * COPYRIGHT (C) 1999 - 2003 EDF R&D
3 * THIS LIBRARY IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
4 * IT UNDER THE TERMS OF THE GNU LESSER GENERAL PUBLIC LICENSE
5 * AS PUBLISHED BY THE FREE SOFTWARE FOUNDATION;
6 * EITHER VERSION 2.1 OF THE LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION.
7 *
8 * THIS LIBRARY IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
9 * WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
10 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
11 * LESSER GENERAL PUBLIC LICENSE FOR MORE DETAILS.
12 *
13 * YOU SHOULD HAVE RECEIVED A COPY OF THE GNU LESSER GENERAL PUBLIC LICENSE
14 * ALONG WITH THIS LIBRARY; IF NOT, WRITE TO THE FREE SOFTWARE FOUNDATION,
15 * INC., 59 TEMPLE PLACE, SUITE 330, BOSTON, MA 02111-1307 USA
16 *
17 *************************************************************************/
18
19
20 /******************************************************************************
21 * - Nom du fichier : test5.c
22 *
23 * - Description : lecture des noeuds d'un maillage MED.
24 *
25 *****************************************************************************/
26
27 #include <med.h>
28 #include <med_utils.h>
29 #include <string.h>
30 #include <stdlib.h>
31
32 int main (int argc, char **argv)
33 {
34 med_err ret = 0;
35 med_idt fid;
36 /* la dimension du maillage */
37 med_int mdim;
38 /* nom du maillage de longueur maxi MED_TAILLE_NOM */
39 char maa[MED_TAILLE_NOM+1];
40 /* le nombre de noeuds */
41 med_int nnoe = 0;
42 /* table des coordonnees */
43 med_float *coo1,*coo2;
44 /* tables des noms et des unites des coordonnees
45 profil : (dimension*MED_TAILLE_PNOM+1) */
46 char nomcoo[2*MED_TAILLE_PNOM+1];
47 char unicoo[2*MED_TAILLE_PNOM+1];
48 /* tables des noms, numeros, numeros de familles des noeuds
49 autant d'elements que de noeuds - les noms ont pout longueur
50 MED_TAILLE_PNOM */
51 char *nomnoe;
52 med_int *numnoe;
53 med_int *nufano;
54 med_repere rep;
55 med_booleen inonoe,inunoe;
56 char str[MED_TAILLE_PNOM+1];
57 med_int i;
58 med_int profil[2] = { 2, 3 };
59 char desc[MED_TAILLE_DESC+1];
60 med_maillage type;
61
62 /* Ouverture du fichier "test4.med" en lecture seule */
63 fid = MEDouvrir("test4.med",MED_LECTURE);
64 if (fid < 0) {
65 MESSAGE("Erreur a l'ouverture du fichier test4.med");
66 return -1;
67 }
68
69 /* Lecture des infos concernant le premier maillage */
70 if (MEDmaaInfo(fid,1,maa,&mdim,&type,desc) < 0) {
71 MESSAGE("Erreur a la lecture des informations sur le maillage : ");SSCRUTE(maa);
72 return -1;
73 } else
74 printf("Maillage de nom : %s et de dimension : %d \n",maa,mdim);
75
76 /* Combien de noeuds a lire ? */
77 nnoe = MEDnEntMaa(fid,maa,MED_COOR,MED_NOEUD,0,0);
78 if (nnoe < 0) {
79 MESSAGE("Erreur a la lecture du nombre de noeuds dans : ");
80 ret = -1;
81 } else
82 printf("Nombre de noeuds : %d \n",nnoe);
83
84 /* Allocations memoires */
85 if (nnoe > 0) {
86 /* table des coordonnees
87 profil : (dimension * nombre de noeuds ) */
88 coo1 = (med_float*) calloc(nnoe*mdim,sizeof(med_float));
89 coo2 = (med_float*) calloc(nnoe*mdim,sizeof(med_float));
90 /* table des des numeros, des numeros de familles des noeuds
91 profil : (nombre de noeuds) */
92 numnoe = (med_int*) malloc(sizeof(med_int)*nnoe);
93 nufano = (med_int*) malloc(sizeof(med_int)*nnoe);
94 /* table des noms des noeuds
95 profil : (nnoe*MED_TAILLE_PNOM+1) */
96 nomnoe = (char*) malloc(MED_TAILLE_PNOM*nnoe+1);
97 }
98
99 /* Lecture des composantes n°2 des coordonnees des noeuds */
100 if (nnoe > 0) {
101 if (MEDcoordLire(fid,maa,mdim,coo1,MED_FULL_INTERLACE,2,NULL,0,
102 &rep,nomcoo,unicoo) < 0) {
103 MESSAGE("Erreur a la lecture des coordonnees des noeuds");
104 ret = -1;
105 } else {
106 printf("Valeur de coo1 : ");
107 for (i=0;i<nnoe*mdim;i++)
108 printf("%4.2f ",coo1[i]);
109 printf("\n");
110 }
111 }
112
113 /* Lecture des composantes n°1 des coordonnees des noeuds */
114 if (nnoe > 0) {
115 if (MEDcoordLire(fid,maa,mdim,coo1,MED_FULL_INTERLACE,1,NULL,0,
116 &rep,nomcoo,unicoo) < 0) {
117 MESSAGE("Erreur a la lecture des coordonnees des noeuds");
118 ret = -1;
119 } else {
120 printf("Valeur de coo1 : ");
121 for (i=0;i<nnoe*mdim;i++)
122 printf("%4.2f ",coo1[i]);
123 printf("\n");
124 }
125 }
126
127 /* Lecture des composantes n°1 des coordonnees des noeuds du profil */
128 if (nnoe > 0) {
129 if (MEDcoordLire(fid,maa,mdim,coo2,MED_FULL_INTERLACE,2,profil,2,
130 &rep,nomcoo,unicoo) < 0) {
131 MESSAGE("Erreur a la lecture des coordonnees des noeuds");
132 ret = -1;
133 } else {
134 printf("Valeur de coo2 : ");
135 for (i=0;i<nnoe*mdim;i++)
136 printf("%4.2f ",coo2[i]);
137 printf("\n");
138 }
139 }
140
141 /* Lecture des composantes n°2 des coordonnees des noeuds du profil */
142 if (nnoe > 0) {
143 if (MEDcoordLire(fid,maa,mdim,coo2,MED_FULL_INTERLACE,1,profil,2,
144 &rep,nomcoo,unicoo) < 0) {
145 MESSAGE("Erreur a la lecture des coordonnees des noeuds");
146 ret = -1;
147 } else {
148 printf("Valeur de coo2 : ");
149 for (i=0;i<nnoe*mdim;i++) {
150 printf("%4.2f ",coo2[i]);
151 coo2[i] = 0.0;
152 }
153 printf("\n");
154 }
155 }
156
157 /* Lecture de toutes les composantes des coordonnees des noeuds du profil */
158 if (nnoe > 0) {
159 if (MEDcoordLire(fid,maa,mdim,coo2,MED_FULL_INTERLACE,MED_ALL,profil,2,
160 &rep,nomcoo,unicoo) < 0) {
161 MESSAGE("Erreur a la lecture des coordonnees des noeuds");
162 ret = -1;
163 } else {
164 printf("Valeur de coo2 : ");
165 for (i=0;i<nnoe*mdim;i++) {
166 printf("%4.2f ",coo2[i]);
167 coo2[i] = 0.0;
168 }
169 printf("\n");
170 }
171 }
172
173 /* Lecture des composantes des coordonnees des noeuds */
174 if (nnoe > 0) {
175 if (MEDcoordLire(fid,maa,mdim,coo2,MED_FULL_INTERLACE,MED_ALL,NULL,0,
176 &rep,nomcoo,unicoo) < 0) {
177 MESSAGE("Erreur a la lecture des coordonnees des noeuds");
178 ret = -1;
179 } else {
180 printf("Valeur de coo2 : ");
181 for (i=0;i<nnoe*mdim;i++)
182 printf("%4.2f ",coo2[i]);
183 printf("\n");
184 }
185 }
186
187 /* Lecture des noms des noeuds (optionnel dans un maillage MED) */
188 if (nnoe > 0)
189 if (MEDnomLire(fid,maa,nomnoe,nnoe,MED_NOEUD,0) < 0)
190 inonoe = MED_FAUX;
191 else
192 inonoe = MED_VRAI;
193
194 /* Lecture des numeros des noeuds (optionnel dans un maillage MED) */
195 if (nnoe > 0)
196 if (MEDnumLire(fid,maa,numnoe,nnoe,MED_NOEUD,0) < 0)
197 inunoe = MED_FAUX;
198 else
199 inunoe = MED_VRAI;
200
201 /* Lecture des numeros de familles des noeuds */
202 if (nnoe > 0)
203 if (MEDfamLire(fid,maa,nufano,nnoe,MED_NOEUD,0) < 0) {
204 MESSAGE("Erreur a la lecture des numeros de famille des noeuds");
205 ret = -1;
206 }
207
208 /* Fermeture du fichier */
209 if (MEDfermer(fid) < 0){
210 MESSAGE("Erreur a la fermeture du fichier");
211 ret = -1;
212 }
213
214 /* Affichage des resulats */
215 if (ret == 0 && nnoe > 0)
216 {
217 printf("Type de repere : %d \n",rep);
218 printf("Nom des coordonnees : \n");
219 for (i=0;i<mdim;i++)
220 {
221 strncpy(str,nomcoo+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
222 str[MED_TAILLE_PNOM] = '\0';
223 printf("%s ",str);
224 }
225 printf("\nUnites des coordonnees : \n");
226 for (i=0;i<mdim;i++)
227 {
228 strncpy(str,unicoo+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
229 str[MED_TAILLE_PNOM] = '\0';
230 printf("%s ",str);
231 }
232 printf("\nCoordonnees des noeuds : \n");
233 for (i=0;i<nnoe*mdim;i++)
234 printf("%f ",*(coo2+i));
235 if (inonoe)
236 {
237 printf("\nNoms des noeuds : \n");
238 for (i=0;i<nnoe;i++)
239 {
240 strncpy(str,nomnoe+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
241 str[MED_TAILLE_PNOM] = '\0';
242 printf(" %s ",str);
243 }
244 }
245 if (inunoe)
246 {
247 printf("\nNumeros des noeuds : \n");
248 for (i=0;i<nnoe;i++)
249 printf("%d ",*(numnoe+i));
250 }
251 printf("\nNumeros des familles des noeuds : \n");
252 for (i=0;i<nnoe;i++)
253 printf("%d ",*(nufano+i));
254 printf("\n");
255 }
256
257 /* liberation memoire */
258 if (nnoe > 0) {
259 free(coo1);
260 free(coo2);
261 free(nomnoe);
262 free(numnoe);
263 free(nufano);
264 }
265
266 return ret;
267 }
268
269
270
271