1 /* This file is part of MED.
2 *
3 * COPYRIGHT (C) 1999 - 2019 EDF R&D, CEA/DEN
4 * MED is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * MED is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public License
15 * along with MED. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18 /******************************************************************************
19 * - Nom du fichier : mdump.c
20 *
21 * - Description : utilitaire de dump pour fichier MED
22 * Ce fichier contient les fonctions suivantes
23 * qui constituent des modeles de programmation
24 * pour une lecture generique d'un fichier MED :
25 * - lecture_maillage_non_structure () :
26 * 1. Noeuds.
27 * 2. Mailles.
28 * 3. Faces (connectivite descendante).
29 * 4. Aretes (connectivite descendante).
30 * 5. Familles.
31 * 6. Equivalences.
32 * 7. Joints.
33 * - lecture_maillage_structure () :
34 * 1. Noeuds.
35 * 2. Mailles.
36 * 3. Familles.
37 * 4. Equivalences.
38 * 5. Joints.
39 * - lecture_resultats () :
40 * 1. Champs de resultats relatifs à un maillage.
41 * - Entites :
42 * - Noeuds
43 * - Mailles
44 * - Faces
45 * - Aretes
46 * - Gestion des pas de temps et numeros d'ordre :
47 * valeurs associees a un ou plusieurs maillages sous
48 * un meme pas de temps.
49 * - Gestion des profils.
50 * - Gestion des liens vers des maillages distants
51 * - Gestion des points de Gauss :
52 * - localisation des points de Gauss.
53 * - lecture_parametres_scalaires () :
54 * - Valeurs scalaires entieres ou flottantes.
55 * - Gestion des pas de temps et numeros d'ordre.
56 * - main() : infos generales + lecture de tous les champs et
57 * du fichier MED passe en parametre.
58 *
59 *****************************************************************************/
60
61 #ifndef MESGERR
62 #define MESGERR 1
63 #endif
64
65 #ifdef __cplusplus
66 extern "C" {
67 #endif
68
69 #include <med.h>
70 #include <med_config.h>
71 #include <med_utils.h>
72 #include <med_misc.h>
73 #include <stdio.h>
74 #include <string.h>
75 #include <stdlib.h>
76
77 #ifdef __cplusplus
78 }
79 #endif
80
81 #ifdef PPRO_NT
82 #define F_OK 0
83 #else
84 #include <unistd.h>
85 #endif
86
87
88 extern med_entity_type MED23MESH_GET_ENTITY_TYPE[MED_N_ENTITY_TYPES+2];
89 extern const char * const MED23MESH_GET_ENTITY_TYPENAME[MED_N_ENTITY_TYPES+2];
90 extern med_geometry_type MED23MESH_GET_CELL_GEOMETRY_TYPE[MED_N_CELL_FIXED_GEO+2];
91 extern const char * const MED23MESH_GET_CELL_GEOMETRY_TYPENAME[MED_N_CELL_FIXED_GEO+2];
92 extern med_geometry_type MED23MESH_GET_FACE_GEOMETRY_TYPE[MED_N_FACE_FIXED_GEO+2];
93 extern const char * const MED23MESH_GET_FACE_GEOMETRY_TYPENAME[MED_N_FACE_FIXED_GEO+2];
94 extern med_geometry_type MED23MESH_GET_EDGE_GEOMETRY_TYPE[MED_N_EDGE_FIXED_GEO+2];
95 extern const char * MED23MESH_GET_EDGE_GEOMETRY_TYPENAME[MED_N_EDGE_FIXED_GEO+2];
96 extern med_geometry_type MED23MESH_GET_NODE_GEOMETRY_TYPE[MED_N_NODE_FIXED_GEO+2];
97 extern const char * MED23MESH_GET_NODE_GEOMETRY_TYPENAME[MED_N_NODE_FIXED_GEO+2];
98
99 extern med_entity_type MED23FIELD_GET_ENTITY_TYPE[MED_N_ENTITY_TYPES+2];
100 extern const char * const MED23FIELD_GET_ENTITY_TYPENAME[MED_N_ENTITY_TYPES+2];
101 extern med_geometry_type MED23FIELD_GET_CELL_GEOMETRY_TYPE[MED_N_CELL_FIXED_GEO+2];
102 extern const char * const MED23FIELD_GET_CELL_GEOMETRY_TYPENAME[MED_N_CELL_FIXED_GEO+2];
103 extern med_geometry_type MED23FIELD_GET_FACE_GEOMETRY_TYPE[MED_N_FACE_FIXED_GEO+2];
104 extern const char * const MED23FIELD_GET_FACE_GEOMETRY_TYPENAME[MED_N_FACE_FIXED_GEO+2];
105 extern med_geometry_type MED23FIELD_GET_EDGE_GEOMETRY_TYPE[MED_N_EDGE_FIXED_GEO+2];
106 extern const char * MED23FIELD_GET_EDGE_GEOMETRY_TYPENAME[MED_N_EDGE_FIXED_GEO+2];
107 extern med_geometry_type MED23FIELD_GET_NODE_GEOMETRY_TYPE[MED_N_NODE_FIXED_GEO+2];
108 extern const char * MED23FIELD_GET_NODE_GEOMETRY_TYPENAME[MED_N_NODE_FIXED_GEO+2];
109
110
111 /* indique si on ecrit seulement la structure */
112 int structure = 0;
113
114 /* types geometriques des mailles references dans le modele MED */
115 const med_geometry_type * const typmai = MED23MESH_GET_CELL_GEOMETRY_TYPE+1;
116 const med_geometry_type * const typfac = MED23MESH_GET_FACE_GEOMETRY_TYPE+1;
117 const med_geometry_type * const typare = MED23MESH_GET_EDGE_GEOMETRY_TYPE+1;
118
119 const char * const *nommai = MED23MESH_GET_CELL_GEOMETRY_TYPENAME+1;
120 const char * const *nomfac = MED23MESH_GET_FACE_GEOMETRY_TYPENAME+1;
121 const char * const *nomare = MED23MESH_GET_EDGE_GEOMETRY_TYPENAME+1;
122
123
124 #define USER_MODE MED_COMPACT_STMODE
125
126 #define xstr(s) str(s)
127 #define str(s) #s
128
lecture_nombre_famille(med_idt fid,const char * const nommaa)129 med_int lecture_nombre_famille(med_idt fid,const char * const nommaa)
130 {
131 med_int nfam = MEDnFamily(fid,nommaa);
132 EXIT_IF(nfam < 0,"lors de la lecture du nombre de familles",NULL);
133 fprintf(stdout,"- Nombre de familles : %d \n",nfam);
134
135 return nfam;
136 }
137
lecture_famille_maillage(med_idt fid,const char * const nommaa,med_int nfam)138 void lecture_famille_maillage(med_idt fid,const char * const nommaa,med_int nfam)
139 {
140 med_int i,j;
141 med_int natt,ngro;
142 char *attdes=NULL,*gro=NULL;
143 med_int *attval=NULL,*attide=NULL;
144 char nomfam[MED_NAME_SIZE+1];
145 med_int numfam;
146 char str1[MED_COMMENT_SIZE+1];
147 char str2[MED_LNAME_SIZE+1];
148 med_err ret = 0;
149 int famille_0 = 0;
150
151 fprintf(stdout,"\n(**************************)\n");
152 fprintf(stdout,"(* FAMILLES DU MAILLAGE : *)\n");
153 fprintf(stdout,"(**************************)\n");
154
155 for (i=0;i<nfam;i++) {
156
157 /* nombre de groupes */
158 ngro = MEDnFamilyGroup(fid,nommaa,i+1);
159 EXIT_IF(ngro < 0,"lors de la lecture du nombre de groupe d'une famille",
160 NULL);
161
162 /* nombre d'attributs */
163 natt = MEDnFamily23Attribute(fid,nommaa,i+1);
164 EXIT_IF(natt < 0,"lors de la lecture du nombre d'attributs d'une famille",
165 NULL);
166
167 fprintf(stdout,"- Famille %d a %d attributs et %d groupes \n",i+1,natt,
168 ngro);
169
170 /* nom,numero,attributs,groupes */
171
172 /* allocation memoire */
173 attide = (med_int*) malloc(sizeof(med_int)*natt);
174 EXIT_IF(attide == NULL,NULL,NULL);
175 attval = (med_int*) malloc(sizeof(med_int)*natt);
176 EXIT_IF(attval == NULL,NULL,NULL);
177 attdes = (char *) malloc(MED_COMMENT_SIZE*natt+1);
178 EXIT_IF(attdes == NULL,NULL,NULL);
179 gro = (char*) malloc(MED_LNAME_SIZE*ngro+1);
180 EXIT_IF(gro == NULL,NULL,NULL);
181 ret = MEDfamily23Info(fid,nommaa,i+1,nomfam,attide,attval,
182 attdes,&numfam,gro);
183 EXIT_IF(ret < 0,"lors de la lecture des informations d'une famille",
184 NULL);
185 if (numfam == 0)
186 famille_0 = 1;
187
188 if (!structure) {
189 /* affichage des resultats */
190 fprintf(stdout," - Famille de nom %s et de numero %d : \n",nomfam,numfam);
191 fprintf(stdout," - Attributs : \n");
192 for (j=0;j<natt;j++) {
193 strncpy(str1,attdes+j*MED_COMMENT_SIZE,MED_COMMENT_SIZE);
194 str1[MED_COMMENT_SIZE] = '\0';
195 fprintf(stdout," ide = %d - val = %d - des = %s\n",*(attide+j),
196 *(attval+j),str1);
197 }
198 }
199
200 /* on libere la memoire */
201 if (attide) {free(attide);attide=NULL;}
202 if (attval) {free(attval);attval=NULL;}
203 if (attdes) {free(attdes);attdes=NULL;}
204
205 if (!structure) {
206 fprintf(stdout," - Groupes :\n");
207 for (j=0;j<ngro;j++) {
208 strncpy(str2,gro+j*MED_LNAME_SIZE,MED_LNAME_SIZE);
209 str2[MED_LNAME_SIZE] = '\0';
210 fprintf(stdout," gro = %s\n",str2);
211 }
212 }
213
214 /* on libere la memoire */
215 if (gro) {free(gro);gro=NULL;}
216 }
217
218 if (famille_0 != 1) {
219 MESSAGE("Erreur : La famille FAMILLE_ZERO n'a pas été trouvée, elle est obligatoire. ");
220 }
221
222 return;
223 }
224
lecture_nombre_equivalence(med_idt fid,const char * const nommaa)225 med_int lecture_nombre_equivalence(med_idt fid,const char * const nommaa)
226 {
227 med_int nequ = MEDnEquivalence(fid,nommaa);
228 EXIT_IF(nequ < 0,"lors de la lecture du nombre d'equivalences",NULL);
229 fprintf(stdout,"- Nombre d'equivalences : %d \n",nequ);
230
231 return nequ;
232 }
233
234 /* nombre de mailles concernees par les equivalences */
lecture_equivalence_maillage(med_idt fid,const char * const nommaa,med_int nequ)235 void lecture_equivalence_maillage(med_idt fid,const char * const nommaa,med_int nequ)
236 {
237 med_int i,j,k;
238 med_int ncor;
239 med_int *cor;
240 char equ[MED_NAME_SIZE+1];
241 char des[MED_COMMENT_SIZE+1];
242 med_err ret = 0;
243 med_int nstep=0,nocstpncor=0;
244 int _cstpit=0;
245 med_int _numdt,_numit;
246
247 fprintf(stdout,"\n(******************************)\n");
248 fprintf(stdout,"(* EQUIVALENCES DU MAILLAGE : *)\n");
249 fprintf(stdout,"(******************************)\n");
250
251 if (nequ == 0)
252 fprintf(stdout,"- Aucune équivalence \n");
253
254 /* lecture de toutes les equivalences associes a nommaa */
255 for (i = 0;i<nequ;i++) {
256 fprintf(stdout,"- Equivalence numero : %d ",i+1);
257
258 /* lecture des infos sur l'equivalence */
259 ret = MEDequivalenceInfo(fid,nommaa,i+1,equ,des,&nstep,&nocstpncor);
260 EXIT_IF(ret < 0,"lors de la lecture des informations sur une equivalence",
261 NULL);
262 fprintf(stdout,"\n - Nom de l'equivalence: %s \n",equ);
263 fprintf(stdout,"\n - Description de l'equivalence : %s \n",des);
264 if (nstep > 1)
265 fprintf(stdout,"\n - L'equivalence est définie sur "IFORMAT" étapes de calcul\n",nstep);
266
267 for (_cstpit=1; _cstpit <= nstep; ++_cstpit) {
268
269 ret = MEDequivalenceComputingStepInfo (fid, nommaa, equ, _cstpit,
270 & _numdt, &_numit,&nocstpncor);
271 EXIT_IF(ret < 0,
272 "lors de la lecture des valeurs de séquence de calcul d'une equivalence",
273 NULL);
274 if ( (_numdt != MED_NO_DT) || (_numit != MED_NO_IT) )
275 fprintf(stdout,"\n - Séquence de calcul définie sur (numdt,numit) ("IFORMAT","IFORMAT") :\n",_numdt,_numit);
276
277 /* lecture des correspondances sur les differents types d'entites */
278
279 /* les noeuds */
280 ret = MEDequivalenceCorrespondenceSize(fid,nommaa,equ,_numdt,_numit,MED_NODE,MED_NONE,&ncor);
281 EXIT_IF(ret < 0,
282 "lors de la lecture du nombre de correspondances d'une equivalence",
283 NULL);
284 fprintf(stdout,"\n - Il y a %d correspondances sur les noeuds \n",ncor);
285
286 if (ncor > 0) {
287
288 /* allocation memoire */
289 cor = (med_int*) malloc(sizeof(med_int)*ncor*2);
290 EXIT_IF(cor == NULL,NULL,NULL);
291 ret= MEDequivalenceCorrespondenceRd(fid,nommaa,equ,_numdt,_numit,
292 MED_NODE,MED_NONE,cor);
293 EXIT_IF(ret < 0,"lors de la lecture du tableau des correspondances",
294 NULL);
295 if (!structure) {
296 for (j=0;j<ncor;j++)
297 fprintf(stdout,"\n - Correspondance %d : %d et %d \n",j+1,*(cor+2*j),
298 *(cor+2*j+1));
299 }
300 free(cor);
301 }
302
303 /* sur les mailles : */
304 for (j=0;j<MED_N_CELL_FIXED_GEO;j++) {
305
306 ret = MEDequivalenceCorrespondenceSize(fid,nommaa,equ,_numdt,_numit,MED_CELL,typmai[j],&ncor);
307 EXIT_IF(ret < 0,
308 "lors de la lecture du nombre de correspondances dans une equivalence",
309 NULL);
310 fprintf(stdout,"\n - Il y a %d correspondances sur les mailles %s \n",ncor,
311 nommai[j]);
312
313 if (ncor > 0) {
314
315 /* allocation memoire */
316 cor = (med_int*) malloc(sizeof(med_int)*ncor*2);
317 EXIT_IF(cor == NULL,NULL,NULL);
318 ret = MEDequivalenceCorrespondenceRd(fid,nommaa,equ,_numdt,_numit,
319 MED_CELL,typmai[j],cor);
320 EXIT_IF(ret < 0,"lors de la lecture du tableau des equivalences",
321 NULL);
322
323 if (!structure) {
324 for (k=0;k<ncor;k++)
325 fprintf(stdout,"\n - Correspondance %d : %d et %d \n",k+1,
326 *(cor+2*k),*(cor+2*k+1));
327 }
328 free(cor);
329 }
330 }
331
332
333 /* sur les faces */
334 for (j=0;j<MED_N_FACE_FIXED_GEO;j++) {
335
336 ret = MEDequivalenceCorrespondenceSize(fid,nommaa,equ,_numdt,_numit,
337 MED_DESCENDING_FACE,typfac[j],&ncor);
338
339 EXIT_IF(ret < 0,
340 "lors de la lecture du nombre de correspondances dans une equivalence",
341 NULL);
342 fprintf(stdout,"\n - Il y a %d correspondances sur les faces %s\n",ncor,
343 nomfac[j]);
344
345 if (ncor > 0) {
346
347 /* allocation memoire */
348 cor = (med_int*) malloc(sizeof(med_int)*ncor*2);
349 EXIT_IF(cor == NULL,NULL,NULL);
350 ret = MEDequivalenceCorrespondenceRd(fid,nommaa,equ,_numdt,_numit,
351 MED_DESCENDING_FACE,typfac[j],cor);
352 EXIT_IF(ret < 0,"lors de la lecture du tableau des equivalences",
353 NULL);
354
355 if (!structure) {
356 for (k=0;k<ncor;k++)
357 fprintf(stdout,"\n - Correspondance %d : %d et %d \n",k+1,*(cor+2*k),
358 *(cor+2*k+1));
359 }
360 free(cor);
361 }
362 }
363
364
365 /* sur les aretes */
366 for (j=0;j<MED_N_NODE_FIXED_GEO;j++) {
367
368 ret = MEDequivalenceCorrespondenceSize(fid,nommaa,equ,_numdt,_numit,
369 MED_DESCENDING_EDGE,typare[j],&ncor);
370 EXIT_IF(ret < 0,"lors de la lecture du nombre de correspondances",
371 NULL);
372 fprintf(stdout,"\n - Il y a %d correspondances sur les aretes %s \n",
373 ncor,nomare[j]);
374
375 if (ncor > 0) {
376
377 /* allocation memoire */
378 cor = (med_int*) malloc(sizeof(med_int)*ncor*2);
379 EXIT_IF(cor == NULL,NULL,NULL);
380 ret =MEDequivalenceCorrespondenceRd(fid,nommaa,equ,_numdt,_numit,
381 MED_DESCENDING_EDGE,typare[j],cor);
382 EXIT_IF(ret < 0,"lors de la lecture du tableau des equivalences",
383 NULL);
384
385 if (!structure) {
386 for (k=0;k<ncor;k++)
387 fprintf(stdout,"\n Correspondance %d : %d et %d \n",k+1,*(cor+2*k),
388 *(cor+2*k+1));
389 }
390
391 free(cor);
392 }
393 }
394 }
395 }
396
397 return;
398 }
399
400
lecture_nombre_joint(med_idt fid,const char * const nommaa)401 med_int lecture_nombre_joint(med_idt fid,const char * const nommaa)
402 {
403 med_int njnt = MEDnSubdomainJoint(fid,nommaa);
404 EXIT_IF(njnt < 0,"lors de la lecture du nombre de joints",NULL);
405 fprintf(stdout,"- Nombre de joints : %d \n",njnt);
406
407 return njnt;
408 }
409
410
lecture_joint_maillage(med_idt fid,const char * const nommaa,med_int njnt)411 void lecture_joint_maillage(med_idt fid,const char * const nommaa,med_int njnt)
412 {
413 med_int i,k;
414 char des[MED_COMMENT_SIZE+1];
415 med_int ndom,nent;
416 med_int typ_ent_local,typ_geo_local,typ_ent_distant,typ_geo_distant;
417 /* med_int geo_ent_local,geo_ent_distant; */
418
419 char jn [MED_NAME_SIZE+1]="";
420 char maa_dist [MED_NAME_SIZE+1]="";
421 char nom_geo_ent_local [MED_NAME_SIZE+1]="";
422 char nom_geo_ent_distant [MED_NAME_SIZE+1]="";
423 med_int *cortab;
424
425 med_err ret = 0;
426 med_int njstep=0,ncor=0,nodtitncor=0;
427 int corit=0,csit=0;
428 med_int _numdt,_numit;
429
430 fprintf(stdout,"\n(******************************)\n");
431 fprintf(stdout,"(* JOINTS DU MAILLAGE : *)\n");
432 fprintf(stdout,"(******************************)\n");
433
434 if (njnt == 0)
435 fprintf(stdout,"- Aucun joint \n");
436
437 /* lecture de touts les joints associes a nommaa */
438 for (i = 0;i<njnt;i++) {
439 fprintf(stdout,"- Joint numero : %d ",i+1);
440
441 /* lecture des infos sur le joint */
442 ret = MEDsubdomainJointInfo(fid,nommaa,i+1,jn,des,&ndom,maa_dist,&njstep,&nodtitncor);
443 EXIT_IF(ret < 0,"lors de la lecture des informations sur un joint",
444 NULL);
445
446 fprintf(stdout,"\n - Nom du joint: %s \n",jn);
447 fprintf(stdout,"\n - Description du joint : %s ",des);
448 fprintf(stdout,"\n - Domaine en regard : %d ",ndom);
449 fprintf(stdout,"\n - Maillage distant : %s ",maa_dist);
450 if (njstep > 1 ) {
451 printf("Nombre d'étapes de calcul : "IFORMAT" \n",njstep);
452 printf("Nombre de correspondance pour (NO_DT,NO_IT) : "IFORMAT" \n",nodtitncor);
453 }
454
455 for (csit=1; csit <= njstep; ++csit) {
456
457 ret = MEDsubdomainComputingStepInfo( fid, nommaa, jn, csit, &_numdt, &_numit, &ncor);
458 EXIT_IF(ret < 0,"Erreur a la lecture des valeurs (numdt,numit) dans les joints",
459 NULL);
460 if ( (_numdt != MED_NO_DT) || (_numit != MED_NO_IT) ) {
461 printf("Séquence de calcul (numdt,numit) : ("IFORMAT","IFORMAT")\n",_numdt,_numit);
462 }
463 corit=1;
464 while ( corit <= ncor ) {
465
466 ret = MEDsubdomainCorrespondenceSizeInfo(fid,nommaa,jn,_numdt,_numit,corit,
467 (med_entity_type *) &typ_ent_local, (med_geometry_type *) &typ_geo_local,
468 (med_entity_type *) &typ_ent_distant,(med_geometry_type *)&typ_geo_distant,
469 &nent);
470 EXIT_IF(ret < 0,"Erreur a la lecture des infos sur le nombre d'entite en regard",
471 NULL);
472 if (nent > 0) {
473 if (typ_ent_local == MED_NODE) strcpy(nom_geo_ent_local,"MED_NOEUD");
474 else ret = _MEDgetExternalGeometryTypeName(nom_geo_ent_local,typ_geo_local);
475 EXIT_IF(ret < 0,"Erreur à l'appel de _MEDgetExternalGeometryTypeName", NULL);
476 if (typ_ent_distant == MED_NODE) strcpy(nom_geo_ent_distant,"MED_NOEUD");
477 else ret = _MEDgetExternalGeometryTypeName(nom_geo_ent_distant,typ_geo_distant);
478 EXIT_IF(ret < 0,"Erreur à l'appel de _MEDgetExternalGeometryTypeName", NULL);
479 fprintf(stdout,"\n\t\t- nb de couples d'entites en regard (local,distant)=(%s,%s) : "IFORMAT" \n",
480 nom_geo_ent_local,nom_geo_ent_distant, nent);
481 /*TODO : Supprimer la ligne suivante*/
482 /* fprintf(stdout," %d \n",nent); */
483 cortab = (med_int*) malloc(sizeof(med_int)*nent*2);
484 if ( (ret=MEDsubdomainCorrespondenceRd(fid,nommaa,jn,_numdt,_numit,
485 typ_ent_local,typ_geo_local,typ_ent_distant,typ_geo_distant,
486 cortab)) < 0) {
487 fprintf(stdout,"\n\t\t- Erreur a la lecture des correspondances sur (%s,%s,%s,%s)",
488 MED23MESH_GET_ENTITY_TYPENAME[typ_ent_local+1],nom_geo_ent_local,
489 MED23MESH_GET_ENTITY_TYPENAME[typ_ent_distant+1],nom_geo_ent_distant);
490 } else {
491 if (!structure) {
492 for (k=0;k<nent;k++)
493 fprintf(stdout,"\n\t\t- Correspondance %d : "IFORMAT" et "IFORMAT" ",k+1,
494 *(cortab+2*k),*(cortab+2*k+1));
495 }
496 }
497 free(cortab);
498 }
499
500 corit++;
501 }
502 }
503 }
504
505 return;
506 }
507
508
lecture_nombre_noeuds_maillage_non_structure(const med_idt fid,const char * nommaa,const med_int numdt,const med_int numit)509 med_int lecture_nombre_noeuds_maillage_non_structure(const med_idt fid,
510 const char * nommaa,
511 const med_int numdt,
512 const med_int numit)
513 {
514
515
516 med_bool chgt=MED_FALSE,trsf=MED_FALSE;
517
518 med_int nnoe = MEDmeshnEntity(fid,nommaa,numdt,numit,
519 MED_NODE,MED_NO_GEOTYPE,
520 MED_COORDINATE,MED_NODAL,&chgt,&trsf);
521 EXIT_IF(nnoe < 0,"lors de la lecture du nombre de noeuds",NULL);
522 fprintf(stdout,"- Nombre de noeuds : %d \n",nnoe);
523
524 return nnoe;
525 }
526
527
lecture_noeuds_maillage_non_structure(const med_idt fid,const char * const nommaa,const med_int numdt,const med_int numit,const med_int mdim,const med_int edim,const med_int nnoe,const med_switch_mode mode_coo,const char * const nomcoo,const char * const unicoo,const med_axis_type * const rep)528 void lecture_noeuds_maillage_non_structure(const med_idt fid,
529 const char * const nommaa,
530 const med_int numdt,
531 const med_int numit,
532 const med_int mdim,
533 const med_int edim,
534 const med_int nnoe,
535 const med_switch_mode mode_coo,
536 const char * const nomcoo,
537 const char * const unicoo,
538 const med_axis_type *const rep)
539 {
540 med_float *coo;
541 char *nomnoe;
542 med_int *numnoe;
543 med_int *nufano;
544 med_bool inonoe,inunoe,ifano;
545 med_err ret = 0;
546 med_int i;
547 char str[MED_SNAME_SIZE+1];
548
549
550 /* Allocations memoires */
551 /* table des coordonnees
552 profil : (dimension * nombre de noeuds ) */
553 coo = (med_float*) malloc(sizeof(med_float)*nnoe*edim);
554 EXIT_IF(coo == NULL,NULL,NULL);
555 /* table des numeros, des numeros de familles des noeuds
556 profil : (nombre de noeuds) */
557 numnoe = (med_int*) malloc(sizeof(med_int)*nnoe);
558 EXIT_IF(numnoe == NULL,NULL,NULL);
559 nufano = (med_int*) malloc(sizeof(med_int)*nnoe);
560 EXIT_IF(nufano == NULL,NULL,NULL);
561 /* table des noms des noeuds
562 profil : (nnoe*MED_SNAME_SIZE+1) */
563 nomnoe = (char*) malloc(MED_SNAME_SIZE*nnoe+1);
564 EXIT_IF(nomnoe == NULL,NULL,NULL);
565
566 /* lecture des noeuds :
567 - coordonnees
568 - noms (optionnel dans un fichier MED)
569 - numeros (optionnel dans un fichier MED)
570 - numeros des familles */
571 ret = MEDmeshNodeRd(fid,nommaa,numdt,numit, mode_coo, coo,
572 &inonoe,nomnoe,&inunoe,numnoe,&ifano,nufano);
573
574
575 EXIT_IF(ret < 0,"lors de la lecture des noeuds du maillage \n",NULL);
576
577 /* affichage des resultats */
578 fprintf(stdout,"\n(************************)\n");
579 fprintf(stdout,"(* NOEUDS DU MAILLAGE : *)\n");
580 fprintf(stdout,"(************************)\n");
581 fprintf(stdout,"- Type de repere des coordonnees : %d \n",*rep);
582 fprintf(stdout,"- Nom des coordonnees : \n");
583 for (i=0;i<edim;i++) {
584 strncpy(str,nomcoo+i*MED_SNAME_SIZE,MED_SNAME_SIZE);
585 str[MED_SNAME_SIZE] = '\0';
586 fprintf(stdout," %s ",str);
587 }
588 fprintf(stdout,"\n- Unites des coordonnees : \n");
589 for (i=0;i<edim;i++) {
590 strncpy(str,unicoo+i*MED_SNAME_SIZE,MED_SNAME_SIZE);
591 str[MED_SNAME_SIZE] = '\0';
592 fprintf(stdout," %s ",str);
593 }
594 if (!structure) {
595 fprintf(stdout,"\n- Coordonnees des noeuds : \n");
596 for (i=0;i<nnoe*edim;i++) {
597 if (mode_coo == MED_FULL_INTERLACE && !(i % edim))
598 fprintf(stdout,"\n [ %5d ] : ", (i/edim + 1) );
599 if (mode_coo == MED_NO_INTERLACE && ! (i % nnoe))
600 fprintf(stdout,"\n\n ");
601 fprintf(stdout," %-+9.6f ",*(coo+i));
602 }
603
604 if (inonoe) {
605 fprintf(stdout,"\n- Noms des noeuds : \n");
606 for (i=0;i<nnoe;i++) {
607 strncpy(str,nomnoe+i*MED_SNAME_SIZE,MED_SNAME_SIZE);
608 str[MED_SNAME_SIZE] = '\0';
609 fprintf(stdout," %s ",str);
610 }
611 }
612 if (inunoe) {
613 fprintf(stdout,"\n- Numeros des noeuds : \n");
614 for (i=0;i<nnoe;i++)
615 fprintf(stdout," %d ",*(numnoe+i));
616 }
617
618 fprintf(stdout,"\n- Numeros des familles des noeuds : \n");
619 for (i=0;i<nnoe;i++) {
620 if (ifano)
621 fprintf(stdout," %d ",*(nufano+i));
622 else
623 fprintf(stdout," %d ",0);
624 }
625 fprintf(stdout,"\n");
626 }
627
628
629 /* liberation memoire */
630 free(coo);
631 free(nomnoe);
632 free(numnoe);
633 free(nufano);
634
635 return;
636 }
637
638
lecture_nombre_mailles_standards(const med_idt fid,const char * const nommaa,const med_int numdt,const med_int numit,const med_geometry_type typ_geo,const med_connectivity_mode typ_con,const int indice)639 med_int lecture_nombre_mailles_standards(const med_idt fid,
640 const char * const nommaa,
641 const med_int numdt,
642 const med_int numit,
643 const med_geometry_type typ_geo,
644 const med_connectivity_mode typ_con,
645 const int indice)
646 {
647
648 med_bool chgt=MED_FALSE,trsf=MED_FALSE;
649
650 med_int nmailles = MEDmeshnEntity(fid,nommaa,numdt,numit,
651 MED_CELL,typ_geo,
652 MED_CONNECTIVITY,typ_con,&chgt,&trsf);
653 EXIT_IF(nmailles < 0," lors de la lecture du nombre de mailles",NULL);
654
655 if ( (indice < (MED_N_CELL_GEO_FIXED_CON-5) ) ||
656 (indice >= (MED_N_CELL_GEO_FIXED_CON-5) && (nmailles > 0) ) )
657 fprintf (stdout,"- Nombre de mailles de type %s : %d \n",nommai[indice],
658 nmailles);
659
660 return nmailles;
661 }
662
lecture_mailles_standards(const med_idt fid,const char * nommaa,const med_int numdt,const med_int numit,const med_int mdim,const med_int * const nmailles,const med_switch_mode mode_coo,const med_connectivity_mode typ_con)663 void lecture_mailles_standards(const med_idt fid,
664 const char *nommaa,
665 const med_int numdt,
666 const med_int numit,
667 const med_int mdim,
668 const med_int * const nmailles,
669 const med_switch_mode mode_coo,
670 const med_connectivity_mode typ_con)
671 {
672 med_int taille;
673 med_int *connectivite;
674 char *nomele;
675 med_int *numele;
676 med_int *nufael;
677 med_bool inoele=MED_FALSE, inuele=MED_FALSE, inufael=MED_FALSE;
678 med_geometry_type typgeo;
679 med_int entdim;
680 med_int nnodes;
681 med_int nndes;
682 med_int i,j;
683 med_err ret = 0;
684 char str[MED_SNAME_SIZE+1];
685
686 fprintf(stdout,"\n(**************************)\n");
687 fprintf(stdout,"(* ELEMENTS DU MAILLAGE : *)\n");
688 fprintf(stdout,"(**************************)");
689
690 /* Lecture des connectivites, noms, numeros des mailles */
691 for (i=0;i<MED_N_CELL_GEO_FIXED_CON;i++)
692 if (nmailles[i] > 0) {
693
694 ret=_MEDgetGeometricParameter(MED_CELL, typmai[i],&entdim,&nnodes,&nndes);
695 EXIT_IF(ret < 0,"lors de la lecture des caractéristiques des mailles",NULL);
696
697 switch(typ_con) {
698 case MED_NODAL :
699 taille = nnodes;
700 break;
701
702 case MED_DESCENDING :
703 taille = nndes;
704 break;
705
706 default :
707 ret = -1;
708 }
709
710 /* allocation memoire */
711 connectivite = (med_int*) malloc(sizeof(med_int)*taille*nmailles[i]);
712 EXIT_IF(connectivite == NULL,NULL,NULL);
713 nomele = (char*) malloc(sizeof(char)*MED_SNAME_SIZE*nmailles[i]+1);
714 EXIT_IF(nomele == NULL,NULL,NULL);
715 numele = (med_int*) malloc(sizeof(med_int)*nmailles[i]);
716 EXIT_IF(numele == NULL,NULL,NULL);
717 nufael = (med_int*) malloc(sizeof(med_int)*nmailles[i]);
718 EXIT_IF(nufael == NULL,NULL,NULL);
719
720 /* lecture des données */
721 ret = MEDmeshElementRd( fid,nommaa,numdt,numit,MED_CELL,typmai[i],
722 typ_con, mode_coo, connectivite,
723 &inoele,nomele,&inuele,numele,&inufael,nufael );
724
725 EXIT_IF(ret < 0,"lors de la lecture des mailles",NULL);
726
727 if (!structure) {
728 /* affichage des resultats */
729 fprintf(stdout,"\n\n- Mailles de type %s : ", nommai[i]);
730 fprintf(stdout,"\n - Connectivité : \n");
731 for (j=0;j<nmailles[i]*taille;j++) {
732 if (mode_coo == MED_FULL_INTERLACE && !(j % taille))
733 fprintf(stdout,"\n [ %5d ] : ", (j/taille +1) );
734 if (mode_coo == MED_NO_INTERLACE && !(j % nmailles[i]))
735 fprintf(stdout,"\n");
736 fprintf(stdout," %9d ",*(connectivite+j));
737 }
738
739 if (inoele) {
740 fprintf(stdout,"\n - Noms : \n");
741 for (j=0;j<nmailles[i];j++) {
742 strncpy(str,nomele+j*MED_SNAME_SIZE,MED_SNAME_SIZE);
743 str[MED_SNAME_SIZE] = '\0';
744 fprintf(stdout," %s ",str);
745 }
746 }
747 if (inuele) {
748 fprintf(stdout,"\n - Numeros :\n");
749 for (j=0;j<nmailles[i];j++)
750 fprintf(stdout," %d ",*(numele+j));
751 }
752 fprintf(stdout,"\n - Numéros de familles : \n");
753 for (j=0;j<nmailles[i];j++)
754 if (inufael)
755 fprintf(stdout," %d ",*(nufael+j));
756 else
757 fprintf(stdout," %d ",0);
758 }
759
760 /* liberation memoire */
761 free(connectivite);
762 free(nomele);
763 free(numele);
764 free(nufael);
765 }
766
767 return;
768 }
769
770
lecture_nombre_mailles_polygones(const med_idt fid,const char * const nommaa,const med_int numdt,const med_int numit,const med_connectivity_mode typ_con)771 med_int lecture_nombre_mailles_polygones(const med_idt fid,
772 const char * const nommaa,
773 const med_int numdt,
774 const med_int numit,
775 const med_connectivity_mode typ_con)
776 {
777
778 med_bool chgt=MED_FALSE,trsf=MED_FALSE;
779
780 med_int nmpolygones = MEDmeshnEntity(fid,nommaa,numdt,numit,
781 MED_CELL,MED_POLYGON,
782 MED_INDEX_NODE,typ_con,&chgt,&trsf);
783
784 EXIT_IF(nmpolygones < 0,"lors de la lecture du nombre de mailles polygone\n",
785 NULL);
786 if (nmpolygones > 0 ) nmpolygones--; else nmpolygones=0;
787 fprintf(stdout,"- Nombre de mailles de type MED_POLYGONE : %d \n",
788 nmpolygones);
789
790 return nmpolygones;
791 }
792
lecture_mailles_polygones(const med_idt fid,const char * const nommaa,const med_int numdt,const med_int numit,const med_int nmpolygones,const med_switch_mode mode_coo,const med_connectivity_mode typ_con)793 void lecture_mailles_polygones(const med_idt fid,
794 const char * const nommaa,
795 const med_int numdt,
796 const med_int numit,
797 const med_int nmpolygones,
798 const med_switch_mode mode_coo,
799 const med_connectivity_mode typ_con)
800 {
801 med_int i,j;
802 med_err ret = 0;
803 med_int taille;
804 med_int *connectivite;
805 char *nomele;
806 med_int *numele;
807 med_int *nufael;
808 med_int *indexp;
809 int ind1,ind2;
810 char tmp[MED_NAME_SIZE+1];
811 med_err ret1,ret2,ret3;
812 med_bool chgt=MED_FALSE,trsf=MED_FALSE;
813
814 /* lecture des mailles de type MED_POLYGONE */
815
816 /* quelle taille pour le tableau des connectivites ? */
817 taille=MEDmeshnEntity(fid,nommaa,numdt,numit,
818 MED_CELL,MED_POLYGON,MED_CONNECTIVITY,typ_con,
819 &chgt,&trsf);
820 EXIT_IF(taille < 0,"lors de la lecture des parametres des mailles polygones",
821 NULL);
822
823 /* allocation memoire */
824 indexp = (med_int *) malloc(sizeof(med_int)*(nmpolygones+1));
825 EXIT_IF(indexp == NULL,NULL,NULL);
826 connectivite = (med_int *) malloc(sizeof(med_int)*taille);
827 EXIT_IF(connectivite == NULL,NULL,NULL);
828 numele = (med_int *) malloc(sizeof(med_int)*nmpolygones);
829 EXIT_IF(numele == NULL,NULL,NULL);
830 nufael = (med_int *) malloc(sizeof(med_int)*nmpolygones);
831 EXIT_IF(nufael == NULL,NULL,NULL);
832 nomele = (char *) malloc(sizeof(char)*MED_SNAME_SIZE*nmpolygones+1);
833 EXIT_IF(nomele == NULL,NULL,NULL);
834
835 /* lecture de la connectivite des mailles polygones */
836 ret = MEDmeshPolygonRd(fid,nommaa,numdt,numit,MED_CELL,typ_con,
837 indexp,connectivite);
838
839 EXIT_IF(ret < 0,"lors de la lecture des connectivites des mailles polygones",
840 NULL);
841
842 /* lecture noms */
843 ret1 = MEDmeshEntityNameRd(fid,nommaa,numdt,numit,
844 MED_CELL,MED_POLYGON, nomele);
845
846 /* lecture des numeros */
847 ret2 = (med_int) MEDmeshEntityNumberRd(fid,nommaa,numdt,numit,
848 MED_CELL, MED_POLYGON, numele);
849
850 /* lecture des numeros de familles */
851 ret3 = MEDmeshEntityFamilyNumberRd(fid, nommaa, MED_NO_DT, MED_NO_IT,
852 MED_CELL, MED_POLYGON, nufael);
853
854 if (!structure) {
855 /* affichage des resultats */
856 fprintf(stdout,"\n\n- Mailles de type MED_POLYGONE : ");
857 for (i=0;i<nmpolygones;i++) {
858 fprintf(stdout,"\n >> Maille MED_POLYGONE %d : \n",i+1);
859 fprintf(stdout,"\n - Connectivité : ");
860 ind1 = *(indexp+i)-1;
861 ind2 = *(indexp+i+1)-1;
862 for (j=ind1;j<ind2;j++)
863 printf(" %d ",*(connectivite+j));
864 if (ret1 == 0) {
865 strncpy(tmp,nomele+i*MED_SNAME_SIZE,MED_SNAME_SIZE);
866 tmp[MED_SNAME_SIZE] = '\0';
867 fprintf(stdout,"\n - Nom : %s \n",tmp);
868 }
869 if (ret2 == 0)
870 fprintf(stdout,"\n - Numero : %d \n",*(numele+i));
871
872 if ( ret3 >= 0 )
873 fprintf(stdout,"\n - Numéro de famille : %d \n",*(nufael+i));
874 else
875 fprintf(stdout,"\n - Numéro de famille : %d \n",0);
876 }
877 }
878
879 /* on libere la memoire */
880 free(indexp);
881 free(connectivite);
882 free(numele);
883 free(nufael);
884 free(nomele);
885
886 return;
887 }
888
889
lecture_nombre_mailles_polyedres(const med_idt fid,const char * const nommaa,const med_int numdt,const med_int numit,const med_connectivity_mode typ_con)890 med_int lecture_nombre_mailles_polyedres(const med_idt fid,
891 const char * const nommaa,
892 const med_int numdt,
893 const med_int numit,
894 const med_connectivity_mode typ_con)
895 {
896 med_bool chgt=MED_FALSE,trsf=MED_FALSE;
897
898 med_int npolyedres = MEDmeshnEntity(fid,nommaa,numdt,numit,
899 MED_CELL,MED_POLYHEDRON,
900 MED_INDEX_FACE,typ_con,&chgt,&trsf);
901
902 EXIT_IF(npolyedres < 0,"lors de la lecture du nombre de mailles polyedre \n",
903 NULL);
904 if ( npolyedres > 0 ) npolyedres--; else npolyedres=0;
905 fprintf(stdout,"- Nombre de mailles de type MED_POLYEDRE : %d \n",
906 npolyedres);
907
908 return npolyedres;
909 }
910
911
lecture_mailles_polyedres(const med_idt fid,const char * const nommaa,const med_int numdt,const med_int numit,const med_int npolyedres,const med_switch_mode mode_coo,const med_connectivity_mode typ_con)912 void lecture_mailles_polyedres(const med_idt fid,
913 const char * const nommaa,
914 const med_int numdt,
915 const med_int numit,
916 const med_int npolyedres,
917 const med_switch_mode mode_coo,
918 const med_connectivity_mode typ_con)
919 {
920 med_int i,j,k;
921 med_err ret = 0;
922 med_int taille;
923 med_int *connectivite;
924 char *nomele;
925 med_int *numele;
926 med_int *nufael;
927 med_int *indexf, *indexn;
928 int ind1,ind2;
929 char tmp[MED_SNAME_SIZE+1];
930 med_err ret1,ret2,ret3;
931 med_int nfa;
932 med_int nnoe;
933 med_int nindn;
934 med_bool chgt=MED_FALSE,trsf=MED_FALSE;
935
936
937 /* lecture des parametres de base */
938 taille = MEDmeshnEntity(fid,nommaa,numdt,numit,
939 MED_CELL,MED_POLYHEDRON,MED_CONNECTIVITY,typ_con,
940 &chgt,&trsf);
941 EXIT_IF(taille < 0,"lors de la lecture des parametres des mailles polyedres",
942 NULL);
943
944 nindn = MEDmeshnEntity(fid,nommaa,numdt,numit,
945 MED_CELL,MED_POLYHEDRON,MED_INDEX_NODE,typ_con,
946 &chgt,&trsf);
947 EXIT_IF(nindn < 0,"lors de la lecture des parametres des mailles polyedres",
948 NULL);
949
950 /* allocation memoire */
951 /* nindf == npolyedres+1 */
952 indexf = (med_int *) malloc(sizeof(med_int)*(npolyedres+1));
953 EXIT_IF(indexf == NULL,NULL,NULL);
954 indexn = (med_int *) malloc(sizeof(med_int)*nindn);
955 EXIT_IF(indexn == NULL,NULL,NULL);
956 connectivite = (med_int *) malloc(sizeof(med_int)*taille);
957 EXIT_IF(connectivite == NULL,NULL,NULL);
958 numele = (med_int *) malloc(sizeof(med_int)*npolyedres);
959 EXIT_IF(numele == NULL,NULL,NULL);
960 nufael = (med_int *) malloc(sizeof(med_int)*npolyedres);
961 EXIT_IF(nufael == NULL,NULL,NULL);
962 nomele = (char *) malloc(sizeof(char)*MED_SNAME_SIZE*npolyedres+1);
963 EXIT_IF(nomele == NULL,NULL,NULL);
964
965 ret = MEDmeshPolyhedronRd(fid,nommaa,numdt,numit,MED_CELL,typ_con,
966 indexf,indexn,connectivite);
967 EXIT_IF(ret < 0,
968 "lors de la lecture de la connectivite des mailles polyedres",
969 NULL);
970
971 /* lecture des noms */
972 ret1 = MEDmeshEntityNameRd(fid,nommaa,numdt,numit,MED_CELL,MED_POLYHEDRON,nomele);
973
974 /* lecture des numeros */
975 ret2 = MEDmeshEntityNumberRd(fid,nommaa,numdt,numit,MED_CELL,MED_POLYHEDRON,numele);
976
977 /* lecture des numeros de familles */
978 ret3 = MEDmeshEntityFamilyNumberRd(fid,nommaa,numdt,numit,MED_CELL,MED_POLYHEDRON,nufael);
979
980 if (!structure) {
981 /* affichage des resultats */
982 fprintf(stdout,"\n\n- Mailles de type MED_POLYEDRE : ");
983 for (i=0;i<npolyedres;i++) {
984 fprintf(stdout,"\n >> Maille MED_POLYEDRE %d : \n",i+1);
985 fprintf(stdout,"\n - Connectivité : \n");
986 nfa = *(indexf+i+1) - *(indexf+i);
987 /* ind1 = indice dans "faces" pour acceder aux numeros des faces */
988 ind1 = *(indexf+i) - 1;
989 for (j=0;j<nfa;j++) {
990 if (typ_con == MED_NODAL) {
991 /* ind2 = indice dans "connectivite"
992 pour acceder au premier noeud de la face */
993 ind2 = *(indexn+ind1+j) - 1;
994 nnoe = *(indexn+ind1+j+1) - *(indexn+ind1+j);
995 fprintf(stdout," - Face %d : [ ", j+1);
996 for (k=0;k<nnoe;k++)
997 printf(" %d ",*(connectivite+ind2+k));
998 printf(" ] \n");
999 }
1000 else {
1001 nfa = *(indexf+i+1) - *(indexf+i);
1002 /* ind1 = indice dans "connectivite"
1003 pour acceder aux numeros des faces */
1004 ind1 = *(indexf+i) - 1;
1005 for (j=0;j<nfa;j++)
1006 fprintf(stdout," - Face %d de numero : %d et de type %d \n", j+1,
1007 *(connectivite+ind1+j),*(indexn+ind1+j));
1008 }
1009 }
1010 if (ret1 == 0) {
1011 strncpy(tmp,nomele+i*MED_SNAME_SIZE,MED_SNAME_SIZE);
1012 tmp[MED_SNAME_SIZE] = '\0';
1013 fprintf(stdout,"\n - Nom : %s \n",tmp);
1014 }
1015 if (ret2 == 0)
1016 fprintf(stdout,"\n - Numero : %d \n",*(numele+i));
1017 if (ret3 >= 0)
1018 fprintf(stdout,"\n - Numéro de famille : %d \n",*(nufael+i));
1019 else
1020 fprintf(stdout,"\n - Numéro de famille : %d \n",0);
1021
1022 }
1023 }
1024
1025 /* on libere la memoire */
1026 free(indexf);
1027 free(indexn);
1028 free(connectivite);
1029 free(numele);
1030 free(nufael);
1031 free(nomele);
1032
1033 return;
1034 }
1035
lecture_nombre_faces_standards(const med_idt fid,const char * const nommaa,const med_int numdt,const med_int numit,const med_geometry_type typ_geo,const med_int indice)1036 med_int lecture_nombre_faces_standards(const med_idt fid,
1037 const char * const nommaa,
1038 const med_int numdt,
1039 const med_int numit,
1040 const med_geometry_type typ_geo,
1041 const med_int indice
1042 )
1043 {
1044
1045 med_bool chgt=MED_FALSE,trsf=MED_FALSE;
1046
1047 med_int nfaces = MEDmeshnEntity(fid,nommaa,numdt,numit,
1048 MED_DESCENDING_FACE,typ_geo,
1049 MED_CONNECTIVITY,MED_DESCENDING,&chgt,&trsf);
1050 EXIT_IF(nfaces < 0,"lors de la lecture du nombre de faces",NULL);
1051
1052 if ( (indice < (MED_N_FACE_GEO_FIXED_CON-2) ) ||
1053 (indice >= (MED_N_FACE_GEO_FIXED_CON-2) && (nfaces > 0) ) )
1054 fprintf (stdout,"- Nombre de faces de type %s : %d \n",
1055 nomfac[indice],nfaces);
1056
1057 return nfaces;
1058 }
1059
lecture_faces_standard(const med_idt fid,const char * const nommaa,const med_int numdt,const med_int numit,const med_int mdim,const med_int * const nfaces,const med_switch_mode mode_coo)1060 void lecture_faces_standard(const med_idt fid,
1061 const char * const nommaa,
1062 const med_int numdt,
1063 const med_int numit,
1064 const med_int mdim,
1065 const med_int *const nfaces,
1066 const med_switch_mode mode_coo)
1067 {
1068 med_int taille;
1069 med_int *connectivite;
1070 char *nomele;
1071 med_int *numele;
1072 med_int *nufael;
1073 med_bool inoele,inuele,inufael;
1074 med_geometry_type typgeo;
1075 med_int i,j;
1076 med_err ret = 0;
1077 char str[MED_SNAME_SIZE+1];
1078 med_int entdim;
1079 med_int nnodes;
1080
1081 for (i=0;i<MED_N_FACE_GEO_FIXED_CON;i++)
1082 if (nfaces[i] > 0 ) {
1083
1084 /* taille de la description : nombre d'aretes */
1085 ret=_MEDgetGeometricParameter(MED_DESCENDING_FACE, typfac[i],&entdim,&nnodes,&taille);
1086 EXIT_IF(ret < 0,"lors de la lecture des caractéristiques des mailles",NULL);
1087
1088 /* allocation memoire */
1089 connectivite = (med_int*)malloc(sizeof(med_int)*taille*nfaces[i]);
1090 EXIT_IF(connectivite == NULL,NULL,NULL);
1091 nomele = (char*)malloc(sizeof(char)*MED_SNAME_SIZE*nfaces[i]+1);
1092 EXIT_IF(nomele == NULL,NULL,NULL);
1093 numele = (med_int*)malloc(sizeof(med_int)*nfaces[i]);
1094 EXIT_IF(numele == NULL,NULL,NULL);
1095 nufael = (med_int*)malloc(sizeof(med_int)*nfaces[i]);
1096 EXIT_IF(nufael == NULL,NULL,NULL);
1097
1098 /* lecture des données */
1099 ret = MEDmeshElementRd( fid,nommaa,numdt,numit,MED_DESCENDING_FACE,typmai[i],
1100 MED_DESCENDING, mode_coo, connectivite,
1101 &inoele,nomele,&inuele,numele,&inufael,nufael );
1102 EXIT_IF(ret < 0,"lors de la lecture des faces",NULL);
1103
1104 if (!structure) {
1105 /* affichage des resultats */
1106 fprintf(stdout,"\n- Faces de type %s : ", nomfac[i]);
1107 fprintf(stdout,"\n - Connectivité : \n");
1108 for (j=0;j<nfaces[i]*taille;j++) {
1109 if (mode_coo == MED_FULL_INTERLACE && !(j % taille))
1110 fprintf(stdout,"\n [ %5d ] : ", (j/taille+1) );
1111 if (mode_coo == MED_NO_INTERLACE && !(j % nfaces[i]))
1112 fprintf(stdout,"\n");
1113 fprintf(stdout," %9d ",*(connectivite+j));
1114 }
1115
1116 if (inoele) {
1117 fprintf(stdout,"\n - Noms : \n");
1118 for (j=0;j<nfaces[i];j++) {
1119 strncpy(str,nomele+j*MED_SNAME_SIZE,MED_SNAME_SIZE);
1120 str[MED_SNAME_SIZE] = '\0';
1121 fprintf(stdout," %s ",str);
1122 }
1123 }
1124 if (inuele) {
1125 fprintf(stdout,"\n - Numeros :\n");
1126 for (j=0;j<nfaces[i];j++)
1127 fprintf(stdout," %d ",*(numele+j));
1128 }
1129 fprintf(stdout,"\n - Numéros de familles : \n");
1130 for (j=0;j<nfaces[i];j++)
1131 if ( inufael )
1132 fprintf(stdout," %d ",*(nufael+j));
1133 else
1134 fprintf(stdout," %d ",0);
1135 }
1136
1137 /* liberation memoire */
1138 free(connectivite);
1139 free(nomele);
1140 free(numele);
1141 free(nufael);
1142 }
1143
1144 return;
1145 }
1146
lecture_nombre_faces_polygones(const med_idt fid,const char * const nommaa,const med_int numdt,const med_int numit)1147 med_int lecture_nombre_faces_polygones(const med_idt fid,
1148 const char * const nommaa,
1149 const med_int numdt,
1150 const med_int numit)
1151 {
1152
1153 med_bool chgt=MED_FALSE,trsf=MED_FALSE;
1154
1155 med_int nfpolygones = MEDmeshnEntity(fid,nommaa,numdt,numit,
1156 MED_CELL,MED_POLYGON,
1157 MED_INDEX_NODE,MED_DESCENDING,&chgt,&trsf);
1158
1159 EXIT_IF(nfpolygones < 0,"lors de la lecture du nombre de faces polygone \n",
1160 NULL);
1161 nfpolygones--;
1162 fprintf(stdout,"- Nombre de faces de type MED_POLYGONE : %d \n",
1163 nfpolygones);
1164
1165 return nfpolygones;
1166 }
1167
lecture_faces_polygones(const med_idt fid,const char * const nommaa,const med_int numdt,const med_int numit,const med_int nfpolygones,const med_switch_mode mode_coo)1168 void lecture_faces_polygones(const med_idt fid,
1169 const char * const nommaa,
1170 const med_int numdt,
1171 const med_int numit,
1172 const med_int nfpolygones,
1173 const med_switch_mode mode_coo)
1174 {
1175 med_int i,j;
1176 med_err ret = 0;
1177 char *nomele;
1178 med_int *numele;
1179 med_int *nufael;
1180 med_int *connectivite;
1181 med_int taille;
1182 med_int *indexp;
1183 int ind1,ind2;
1184 char tmp[MED_NAME_SIZE+1];
1185 med_err ret1,ret2,ret3;
1186 med_bool chgt=MED_FALSE,trsf=MED_FALSE;
1187
1188 /* quelle taille pour le tableau des connectivites ? */
1189 taille=MEDmeshnEntity(fid,nommaa,numdt,numit,
1190 MED_DESCENDING_FACE,MED_POLYGON,MED_CONNECTIVITY,MED_DESCENDING,
1191 &chgt,&trsf);
1192 EXIT_IF(taille < 0,"lors de la lecture des parametres des faces polygones",
1193 NULL);
1194
1195 /* allocation memoire */
1196 indexp = (med_int *) malloc(sizeof(med_int)*(nfpolygones+1));
1197 EXIT_IF(indexp == NULL,NULL,NULL);
1198 connectivite = (med_int *) malloc(sizeof(med_int)*taille);
1199 EXIT_IF(connectivite == NULL,NULL,NULL);
1200 numele = (med_int *) malloc(sizeof(med_int)*nfpolygones);
1201 EXIT_IF(numele == NULL,NULL,NULL);
1202 nufael = (med_int *) malloc(sizeof(med_int)*nfpolygones);
1203 EXIT_IF(nufael == NULL,NULL,NULL);
1204 nomele = (char *) malloc(sizeof(char)*MED_SNAME_SIZE*nfpolygones+1);
1205 EXIT_IF(nomele == NULL,NULL,NULL);
1206
1207 /* lecture de la connectivite des faces polygones */
1208 ret = MEDmeshPolygonRd(fid,nommaa,numdt,numit,MED_DESCENDING_FACE,MED_DESCENDING,
1209 indexp,connectivite);
1210 EXIT_IF(ret < 0,"lors de la lecture des connectivites des faces polygones",
1211 NULL);
1212
1213 /* lecture noms */
1214 ret1 = MEDmeshEntityNameRd(fid,nommaa,numdt,numit,
1215 MED_DESCENDING_FACE,MED_POLYGON, nomele);
1216
1217 /* lecture des numeros */
1218 ret2 = (med_int) MEDmeshEntityNumberRd(fid,nommaa,numdt,numit,
1219 MED_DESCENDING_FACE, MED_POLYGON, numele);
1220
1221 /* lecture des numeros de familles */
1222 ret3 = MEDmeshEntityFamilyNumberRd(fid, nommaa, MED_NO_DT, MED_NO_IT,
1223 MED_DESCENDING_FACE, MED_POLYGON, nufael);
1224
1225 if (!structure) {
1226 /* affichage des resultats */
1227 fprintf(stdout,"\n\n- Faces de type MED_POLYGONE : ");
1228 for (i=0;i<nfpolygones;i++) {
1229 fprintf(stdout,"\n >> Face MED_POLYGONE %d : \n",i+1);
1230 fprintf(stdout,"\n - Connectivité : ");
1231 ind1 = *(indexp+i)-1;
1232 ind2 = *(indexp+i+1)-1;
1233 for (j=ind1;j<ind2;j++)
1234 fprintf(stdout," %d ",*(connectivite+j));
1235 if (ret1 == 0) {
1236 strncpy(tmp,nomele+j*MED_SNAME_SIZE,MED_SNAME_SIZE);
1237 tmp[MED_SNAME_SIZE] = '\0';
1238 fprintf(stdout,"\n - Nom : %s \n",tmp);
1239 }
1240 if (ret2 == 0)
1241 fprintf(stdout,"\n - Numero : %d \n",*(numele+j));
1242 if ( ret3 > 0 )
1243 fprintf(stdout,"\n - Numéro de famille : %d \n",*(nufael+i));
1244 else
1245 fprintf(stdout,"\n - Numéro de famille : %d \n",0);
1246 }
1247 }
1248
1249 /* on libere la memoire */
1250 free(indexp);
1251 free(connectivite);
1252 free(numele);
1253 free(nufael);
1254 free(nomele);
1255
1256 return;
1257 }
1258
1259
lecture_nombre_aretes_standards(const med_idt fid,const char * const nommaa,const med_int numdt,const med_int numit,const med_geometry_type typ_geo,const med_int indice)1260 med_int lecture_nombre_aretes_standards(const med_idt fid,
1261 const char *const nommaa,
1262 const med_int numdt,
1263 const med_int numit,
1264 const med_geometry_type typ_geo,
1265 const med_int indice)
1266 {
1267
1268 med_bool chgt=MED_FALSE,trsf=MED_FALSE;
1269
1270 med_int naretes = MEDmeshnEntity(fid,nommaa,numdt,numit,
1271 MED_DESCENDING_EDGE, typ_geo,
1272 MED_CONNECTIVITY,MED_DESCENDING,&chgt,&trsf);
1273 EXIT_IF(naretes < 0,"lors de la lecture du nombre d'aretes",NULL);
1274 if ( (indice < (MED_N_EDGE_GEO_FIXED_CON-1) ) ||
1275 (indice >= (MED_N_EDGE_GEO_FIXED_CON-1) && (naretes > 0) ) )
1276
1277 fprintf (stdout,
1278 "- Nombre d'aretes de type %s : %d \n",nomare[indice],naretes);
1279
1280 return naretes;
1281 }
1282
lecture_aretes_standards(const med_idt fid,const char * const nommaa,const med_int numdt,const med_int numit,const med_int mdim,const med_int * const naretes,const med_switch_mode mode_coo)1283 void lecture_aretes_standards(const med_idt fid,
1284 const char * const nommaa,
1285 const med_int numdt,
1286 const med_int numit,
1287 const med_int mdim,
1288 const med_int * const naretes,
1289 const med_switch_mode mode_coo)
1290 {
1291 med_int taille;
1292 med_int *connectivite;
1293 char *nomele;
1294 med_int *numele;
1295 med_int *nufael;
1296 med_bool inoele,inuele,inufael;
1297 med_geometry_type typgeo;
1298 med_int i,j;
1299 med_err ret = 0;
1300 char str[MED_SNAME_SIZE+1];
1301 med_int entdim;
1302 med_int nnodes;
1303
1304 for (i=0;i<MED_N_EDGE_GEO_FIXED_CON;i++)
1305 if (naretes[i] > 0) {
1306
1307 ret=_MEDgetGeometricParameter(MED_DESCENDING_EDGE, typare[i],&entdim,&nnodes,&taille);
1308 EXIT_IF(ret < 0,"lors de la lecture des caractéristiques des mailles",NULL);
1309
1310 /* allocation memoire */
1311 connectivite = (med_int*)malloc(sizeof(med_int)*taille*naretes[i]);
1312 EXIT_IF(connectivite == NULL,NULL,NULL);
1313 nomele = (char*)malloc(sizeof(char)*MED_SNAME_SIZE*naretes[i]+1);
1314 EXIT_IF(nomele == NULL,NULL,NULL);
1315 numele = (med_int*)malloc(sizeof(med_int)*naretes[i]);
1316 EXIT_IF(numele == NULL,NULL,NULL);
1317 nufael = (med_int*)malloc(sizeof(med_int)*naretes[i]);
1318 EXIT_IF(nufael == NULL,NULL,NULL);
1319
1320 /* lecture des données */
1321 ret = MEDmeshElementRd( fid,nommaa,numdt,numit,MED_DESCENDING_EDGE,typare[i],
1322 MED_DESCENDING, mode_coo, connectivite,
1323 &inoele,nomele,&inuele,numele,&inufael,nufael );
1324 EXIT_IF(ret < 0,"lors de la lecture des aretes",
1325 NULL);
1326
1327 if (!structure) {
1328 /* affichage des resultats */
1329 fprintf(stdout,"\n- Aretes de type %s : ", nomare[i]);
1330 fprintf(stdout,"\n - Connectivité : \n");
1331 for (j=0;j<naretes[i]*taille;j++) {
1332 if (mode_coo == MED_FULL_INTERLACE && !(j % taille))
1333 fprintf(stdout,"\n [ %5d ] : ", (j/taille+1) );
1334 if (mode_coo == MED_NO_INTERLACE && !(j % naretes[i]))
1335 fprintf(stdout,"\n");
1336 fprintf(stdout," %9d ",*(connectivite+j));
1337 }
1338
1339 if (inoele) {
1340 fprintf(stdout,"\n - Noms : \n");
1341 for (j=0;j<naretes[i];j++) {
1342 strncpy(str,nomele+j*MED_SNAME_SIZE,MED_SNAME_SIZE);
1343 str[MED_SNAME_SIZE] = '\0';
1344 fprintf(stdout," %s ",str);
1345 }
1346 }
1347 if (inuele) {
1348 fprintf(stdout,"\n - Numeros :\n");
1349 for (j=0;j<naretes[i];j++)
1350 fprintf(stdout," %d ",*(numele+j));
1351 }
1352 fprintf(stdout,"\n - Numéros de familles : \n");
1353 for (j=0;j<naretes[i];j++)
1354 if ( inufael )
1355 fprintf(stdout," %d ",*(nufael+j));
1356 else
1357 fprintf(stdout," %d ",0);
1358 }
1359
1360 /* liberation memoire */
1361 free(connectivite);
1362 free(nomele);
1363 free(numele);
1364 free(nufael);
1365 }
1366
1367 return;
1368 }
1369
1370
1371 /******************************************************************************
1372 * - Nom de la fonction : lecture_maillage_non_structure
1373 * - Description : lecture et affichage d'un maillage MED_NON_STRUCTURE.
1374 * - Parametres :
1375 * - fid (IN) : ID du fichier MED.
1376 * - nommaa (IN) : nom du maillage a lire.
1377 * - mdim (IN) : dimension du maillage.
1378 * - mode_coo (IN) : mode de stockage en memoire :
1379 * MED_FULL_INTERLACE : entrelace |
1380 * MED_NO_INTERLACE : non entrelace.
1381 * - typ_con (IN) : mode de connectivite :
1382 * MED_DESCENDING : descendante |
1383 * MED_NODAL : nodale.
1384 * - lecture_en_tete_seulement (IN) : mode de lecture et d'affichage.
1385 ******************************************************************************/
1386
lecture_maillage_non_structure(med_idt fid,const char * nommaa,const med_int numdt,const med_int numit,const med_int mdim,const med_int edim,const med_switch_mode mode_coo,const med_connectivity_mode typ_con,const char * const nomcoo,const char * const unicoo,const med_axis_type * const rep,const int lecture_en_tete_seulement)1387 void lecture_maillage_non_structure(med_idt fid,
1388 const char *nommaa,
1389 const med_int numdt,
1390 const med_int numit,
1391 const med_int mdim,
1392 const med_int edim,
1393 const med_switch_mode mode_coo,
1394 const med_connectivity_mode typ_con,
1395 const char * const nomcoo,
1396 const char * const unicoo,
1397 const med_axis_type *const rep,
1398 const int lecture_en_tete_seulement)
1399 {
1400 med_int i;
1401 /* nombre d'objets MED : noeuds, mailles, faces, aretes , ... */
1402 med_int nnoe;
1403 med_int nmailles[MED_N_CELL_GEO_FIXED_CON];
1404 med_int nfaces[MED_N_FACE_GEO_FIXED_CON];
1405 med_int naretes[MED_N_EDGE_GEO_FIXED_CON];
1406 /* polygones et polyedres */
1407 med_int nmpolygones, npolyedres, nfpolygones;
1408 /* familles */
1409 med_int nfam;
1410 /* equivalences */
1411 med_int nequ;
1412 /* joints */
1413 med_int njnt;
1414
1415 /* Combien de noeuds dans le maillage ? */
1416 nnoe = lecture_nombre_noeuds_maillage_non_structure(fid,nommaa,numdt,numit);
1417
1418 /*TODO : ELEMENTS DE STRUCTURE */
1419 /*TODO : AFFICHER DT ( DTUNIT ) */
1420 /* Combien de mailles, faces ou aretes pour chaque type geometrique ? */
1421 for (i=0;i<MED_N_CELL_GEO_FIXED_CON;i++)
1422 nmailles[i] = lecture_nombre_mailles_standards(fid,nommaa,numdt,numit,typmai[i],
1423 typ_con,i);
1424
1425 /* Combien de mailles polygones quelconques ? */
1426 nmpolygones = lecture_nombre_mailles_polygones(fid,nommaa,numdt,numit,typ_con);
1427
1428 /* Combien de mailles polyedres quelconques ? */
1429 npolyedres = lecture_nombre_mailles_polyedres(fid,nommaa,numdt,numit,typ_con);
1430
1431 /* Pour la connectivite descendante */
1432 if (typ_con == MED_DESCENDING) {
1433
1434 /* Combien de faces : types geometriques standards ? */
1435 for (i=0;i<MED_N_FACE_GEO_FIXED_CON;i++)
1436 nfaces[i] = lecture_nombre_faces_standards(fid,nommaa,numdt,numit,typfac[i],i);
1437
1438 /* Combien de faces polygones quelconques ? */
1439 nfpolygones = lecture_nombre_faces_polygones(fid,nommaa,numdt,numit);
1440
1441 /* Combien d'aretes */
1442 for (i=0;i<MED_N_EDGE_GEO_FIXED_CON;i++)
1443 naretes[i] = lecture_nombre_aretes_standards(fid,nommaa,numdt,numit,typare[i],i);
1444 }
1445
1446 /* combien de familles ? */
1447 nfam = lecture_nombre_famille(fid,nommaa);
1448
1449 /* combien d'equivalences ? */
1450 nequ = lecture_nombre_equivalence(fid,nommaa);
1451
1452 /* combien de joints ? */
1453 njnt = lecture_nombre_joint(fid,nommaa);
1454
1455 /* en fonction du mode de lecture, on continue ou non */
1456 if (lecture_en_tete_seulement)
1457 return;
1458
1459 /****************************************************************************
1460 * LECTURE DES NOEUDS *
1461 ****************************************************************************/
1462 lecture_noeuds_maillage_non_structure(fid,nommaa,numdt,numit,mdim,edim,nnoe,mode_coo,nomcoo,unicoo,rep);
1463 /*ICI;_MEDobjetsOuverts(fid);*/
1464
1465
1466 /****************************************************************************
1467 * LECTURE DES ELEMENTS *
1468 * Mailles : *
1469 * - Types geometriques classiques : MED_SEG2, MED_SEG3, MED_TRIA3, ... *
1470 * - Polygones quelconques. *
1471 * - Polyedres quelconques. *
1472 * Faces (connectivite descendante uniquement) : *
1473 * - Types geometriques classiques. *
1474 * - Polygones quelconques. *
1475 ****************************************************************************/
1476
1477 /* lecture et affichage des mailles */
1478 lecture_mailles_standards(fid,nommaa,numdt,numit,mdim,nmailles,mode_coo,typ_con);
1479 /*ICI;_MEDobjetsOuverts(fid);*/
1480
1481 if (nmpolygones > 0)
1482 lecture_mailles_polygones(fid,nommaa,numdt,numit,nmpolygones,mode_coo,typ_con);
1483 /*ICI;_MEDobjetsOuverts(fid);*/
1484
1485 if (npolyedres > 0)
1486 lecture_mailles_polyedres(fid,nommaa,numdt,numit,npolyedres,mode_coo,typ_con);
1487 /*ICI;_MEDobjetsOuverts(fid);*/
1488
1489 /* lecture et affichage des faces en connectivite descendante uniquement */
1490 if (typ_con == MED_DESCENDING) {
1491 lecture_faces_standard(fid,nommaa,numdt,numit,mdim,nfaces,mode_coo);
1492 if (nfpolygones > 0)
1493 lecture_faces_polygones(fid,nommaa,numdt,numit,nfpolygones,mode_coo);
1494 }
1495 /*ICI;_MEDobjetsOuverts(fid);*/
1496
1497 /* lecture et affichage des aretes en connectivite descendante uniquement */
1498 if (typ_con == MED_DESCENDING)
1499 lecture_aretes_standards(fid,nommaa,numdt,numit,mdim,naretes,mode_coo);
1500 /*ICI;_MEDobjetsOuverts(fid);*/
1501
1502 /****************************************************************************
1503 * LECTURE DES FAMILLES *
1504 ****************************************************************************/
1505 lecture_famille_maillage(fid,nommaa,nfam);
1506 /*ICI;_MEDobjetsOuverts(fid);*/
1507
1508
1509 /****************************************************************************
1510 * LECTURE DES EQUIVALENCES *
1511 ****************************************************************************/
1512 lecture_equivalence_maillage(fid,nommaa,nequ);
1513 /*ICI;_MEDobjetsOuverts(fid);*/
1514
1515
1516 /****************************************************************************
1517 * LECTURE DES JOINTS *
1518 ****************************************************************************/
1519 lecture_joint_maillage(fid,nommaa,njnt);
1520 /*ICI;_MEDobjetsOuverts(fid);*/
1521
1522 return;
1523 }
1524
1525
lecture_caracteristiques_grille(const med_idt fid,const char * const nommaa,const med_int numdt,const med_int numit,const med_int mdim,med_int * nind,med_int * nnoe,med_int * nmai,med_grid_type * type)1526 void lecture_caracteristiques_grille(const med_idt fid,
1527 const char * const nommaa,
1528 const med_int numdt,
1529 const med_int numit,
1530 const med_int mdim,
1531 med_int *nind,
1532 med_int *nnoe,
1533 med_int *nmai,
1534 med_grid_type *type)
1535 {
1536 med_err ret = 0;
1537 med_int axe;
1538 med_int *structure_grille;
1539 med_data_type quoi;
1540 med_int j;
1541 med_bool chgt=MED_FALSE,trsf=MED_FALSE;
1542
1543 /* lecture de la nature du maillage structure : MED_GRILLE_CARTESIENNE ,...*/
1544 ret = MEDmeshGridTypeRd(fid,nommaa,type);
1545 EXIT_IF(ret < 0,"a la lecture du type d'une grille ",NULL);
1546
1547 switch(*type) {
1548
1549 case MED_CARTESIAN_GRID :
1550 case MED_POLAR_GRID :
1551 if (*type == MED_CARTESIAN_GRID)
1552 fprintf(stdout,"- Type de grille : MED_GRILLE_CARTESIENNE \n");
1553 else
1554 fprintf(stdout,"- Type de grille : MED_GRILLE_POLAIRE \n");
1555 for (axe=1;axe<=mdim;axe++) {
1556 switch(axe) {
1557
1558 case 1:
1559 quoi = MED_COORDINATE_AXIS1;
1560 break;
1561
1562 case 2:
1563 quoi = MED_COORDINATE_AXIS2;
1564 break;
1565
1566 case 3:
1567 quoi = MED_COORDINATE_AXIS3;
1568 break;
1569 }
1570 nind[axe - 1] = MEDmeshnEntity(fid,nommaa, numdt, numit,
1571 MED_NODE, MED_NONE, quoi, MED_NO_CMODE, &chgt, &trsf);
1572
1573 EXIT_IF(nind[axe - 1] < 0,
1574 "lors de la lecture de la taille d'un indice d'une grille",
1575 NULL);
1576 *nnoe = nind[axe - 1] * (*nnoe);
1577 *nmai = (nind[axe - 1] - 1) * (*nmai);
1578 fprintf(stdout,
1579 "- Taille de l'indice de l'axe %d des coordonnees : %d \n",
1580 axe,nind[axe - 1]);
1581 }
1582 break;
1583
1584 case MED_CURVILINEAR_GRID:
1585 fprintf(stdout,"- Type de grille : MED_GRILLE_DESTRUCTUREE \n");
1586 *nnoe = MEDmeshnEntity(fid, nommaa, numdt, numit,
1587 MED_NODE, MED_NONE, MED_COORDINATE, MED_NO_CMODE, &chgt, &trsf);
1588 EXIT_IF(*nnoe < 0,"lors de la lecture du nombre de noeuds du maillage "
1589 ,nommaa);
1590
1591 /* on alloue la memoire */
1592 structure_grille = (med_int *) malloc(sizeof(med_int)*mdim);
1593 EXIT_IF(structure_grille == NULL,NULL,NULL);
1594 /* on lit la structure de la grille
1595 et on affiche le resultat */
1596 ret = MEDmeshGridStructRd(fid,nommaa,numdt, numit, structure_grille);
1597 EXIT_IF(ret < 0,"lors de la lecture de la structure de la grille",
1598 NULL);
1599 fprintf(stdout,"- Structure de la grille : [ ");
1600 for (j=0;j<mdim;j++) {
1601 *nmai = (*(structure_grille+j) - 1) * (*nmai);
1602 fprintf(stdout," %d ",*(structure_grille+j));
1603 }
1604 fprintf(stdout," ] \n");
1605 /* on nettoie la memoire */
1606 free(structure_grille);
1607 break;
1608
1609 MED_UNDEF_GRID_TYPE:
1610 default:
1611 EXIT_IF(-1,"Type de grille non reconnu.",nommaa);
1612
1613 }
1614
1615 fprintf(stdout,"- Nombre de noeuds : %d \n",*nnoe);
1616 fprintf(stdout,"- Nombre de mailles : %d \n",*nmai);
1617
1618 return;
1619 }
1620
1621
lecture_noeuds_maillage_structure(const med_idt fid,const char * const nommaa,const med_int numdt,const med_int numit,const med_int mdim,const med_int edim,const med_int * const nind,const med_int nnoe,const char * const comp,const char * const unit,const med_grid_type type,const med_switch_mode mode_coo)1622 void lecture_noeuds_maillage_structure(const med_idt fid,
1623 const char * const nommaa,
1624 const med_int numdt,
1625 const med_int numit,
1626 const med_int mdim,
1627 const med_int edim,
1628 const med_int * const nind,
1629 const med_int nnoe,
1630 const char * const comp,
1631 const char * const unit,
1632 const med_grid_type type,
1633 const med_switch_mode mode_coo)
1634 {
1635 med_err ret = 0;
1636 med_int axe,i,j;
1637 char str[MED_SNAME_SIZE+1];
1638 med_float *coo = NULL;
1639 med_float *indices = NULL;
1640 med_int *nufano = NULL;
1641 med_int *numnoe = NULL;
1642 char *nomnoe = NULL;
1643 med_bool inufael=MED_FALSE;
1644
1645 fprintf(stdout,"\n(*************************)\n");
1646 fprintf(stdout,"(* NOEUDS DE LA GRILLE : *)\n");
1647 fprintf(stdout,"(*************************)\n");
1648
1649 switch(type) {
1650
1651 case MED_CARTESIAN_GRID :
1652 case MED_POLAR_GRID :
1653 /* on affiche les coordonnees de chacun des axes */
1654 for (axe = 1; axe<=mdim; axe++) {
1655 /* on alloue la memoire */
1656 indices = (med_float *) malloc(sizeof(med_float)*nind[axe - 1]);
1657 EXIT_IF(indices == NULL,NULL,NULL);
1658 /* on lit le tableau des indices de coordonnees
1659 et on affiche le resultat */
1660 ret = MEDmeshGridIndexCoordinateRd(fid,nommaa,numdt,numit, axe,indices);
1661 EXIT_IF(ret < 0,"lors de la lecture d'un tableau d'indice",
1662 NULL);
1663 fprintf(stdout,"\n - Axe %." xstr(MED_SNAME_SIZE) "s [%." xstr(MED_SNAME_SIZE) "s] : [ ",
1664 &comp[MED_SNAME_SIZE*(axe-1)],&unit[MED_SNAME_SIZE*(axe-1)]);
1665 for (j=0;j<nind[axe - 1];j++)
1666 fprintf(stdout," %f ",*(indices+j));
1667 printf(" ] \n");
1668 /* on nettoie la memoire */
1669 free(indices);
1670 }
1671 break;
1672
1673 case MED_CURVILINEAR_GRID:
1674 /* on alloue la memoire */
1675 coo = (med_float *) malloc(sizeof(med_float)*nnoe*edim);
1676 EXIT_IF(coo == NULL,NULL,NULL);
1677 /* on va lire les coordonnees des noeuds */
1678 ret = MEDmeshNodeCoordinateRd(fid,nommaa,numdt,numit, MED_FULL_INTERLACE,coo);
1679
1680 EXIT_IF(ret < 0,"lors de la lecture des noeuds du maillage",NULL);
1681 /* on affiche le resultat */
1682 fprintf(stdout,"- Nom des coordonnees : \n");
1683 for (i=0;i<edim;i++) {
1684 strncpy(str,comp+i*MED_SNAME_SIZE,MED_SNAME_SIZE);
1685 str[MED_SNAME_SIZE] = '\0';
1686 fprintf(stdout," %s ",str);
1687 }
1688 fprintf(stdout,"\n- Unites des coordonnees : \n");
1689 for (i=0;i<edim;i++) {
1690 strncpy(str,unit+i*MED_SNAME_SIZE,MED_SNAME_SIZE);
1691 str[MED_SNAME_SIZE] = '\0';
1692 fprintf(stdout," %s ",str);
1693 }
1694 if (!structure) {
1695 fprintf(stdout,"\n - Coordonnees des noeuds : [ ");
1696 for (j=0;j<nnoe*edim;j++)
1697 fprintf(stdout," %f ",*(coo+j));
1698 fprintf(stdout," ] \n");
1699 }
1700
1701 /* on nettoie la memoire */
1702 free(coo);
1703 break;
1704
1705 MED_UNDEF_GRID_TYPE:
1706 default:
1707 EXIT_IF(-1,"Type de grille non reconnu.",nommaa);
1708
1709 }
1710
1711 /* lecture et affichage des :
1712 - numeros de familles des noeuds
1713 - noms des noeuds (optionnel)
1714 - numeros des noeuds (optionnel) */
1715
1716 /* on alloue la memoire */
1717 numnoe = (med_int *) malloc(sizeof(med_int)*nnoe);
1718 EXIT_IF(numnoe == NULL,NULL,NULL);
1719 nomnoe = (char*) malloc(MED_SNAME_SIZE*nnoe+1);
1720 EXIT_IF(nomnoe == NULL,NULL,NULL);
1721 nufano = (med_int *) malloc(sizeof(med_int)*nnoe);
1722 EXIT_IF(nufano == NULL,NULL,NULL);
1723
1724 /* on va lire les numeros de familles des noeuds */
1725 ret = MEDmeshEntityFamilyNumberRd(fid,nommaa,numdt,numit,MED_NODE,MED_NO_GEOTYPE,nufano);
1726 if (ret < 0) ret=0; else inufael=MED_TRUE;
1727
1728 EXIT_IF(ret < 0,"lors de la lecture des numeros de familles des noeuds",
1729 NULL);
1730 if (!structure) {
1731 /* on affiche le resultat */
1732 fprintf(stdout,"\n- Numeros des familles des noeuds : \n");
1733 for (i=0;i<nnoe;i++)
1734 if (inufael)
1735 fprintf(stdout," %d ",*(nufano+i));
1736 else
1737 fprintf(stdout," %d ",0);
1738 fprintf(stdout,"\n");
1739 }
1740
1741 /* on va lire et afficher les noms des noeuds */
1742 if (MEDmeshEntityNameRd(fid,nommaa,numdt,numit,MED_NODE,MED_NO_GEOTYPE,nomnoe) == 0) {
1743 if (!structure) {
1744 fprintf(stdout,"\n- Noms des noeuds : \n");
1745 for (i=0;i<nnoe;i++) {
1746 strncpy(str,nomnoe+i*MED_SNAME_SIZE,MED_SNAME_SIZE);
1747 str[MED_SNAME_SIZE] = '\0';
1748 fprintf(stdout," %s ",str);
1749 }
1750 }
1751 }
1752
1753 /* on va lire et afficher les numeros des noeuds */
1754 if (MEDmeshEntityNumberRd(fid,nommaa,numdt,numit,MED_NODE,MED_NO_GEOTYPE,numnoe) == 0) {
1755 if (!structure) {
1756 fprintf(stdout,"\n- Numeros des noeuds : \n");
1757 for (i=0;i<nnoe;i++)
1758 fprintf(stdout," %d ",*(numnoe+i));
1759 }
1760 }
1761
1762 /* on nettoie la memoire */
1763 free(nufano);
1764 free(numnoe);
1765 free(nomnoe);
1766
1767 return;
1768 }
1769
1770
lecture_mailles_maillage_structure(const med_idt fid,const char * const nommaa,const med_int numdt,const med_int numit,const med_int mdim,const med_int nmai)1771 void lecture_mailles_maillage_structure(const med_idt fid,
1772 const char * const nommaa,
1773 const med_int numdt,
1774 const med_int numit,
1775 const med_int mdim,
1776 const med_int nmai)
1777
1778 {
1779 med_err ret = 0;
1780 med_int i;
1781 med_int *nufael = NULL;
1782 char *nomele = NULL;
1783 med_int *numele = NULL;
1784 char str[MED_SNAME_SIZE+1];
1785 /* type geometrique des elements */
1786 med_geometry_type typgeo;
1787
1788 fprintf(stdout,"\n(***************************)\n");
1789 fprintf(stdout,"(* ELEMENTS DE LA GRILLE : *)\n");
1790 fprintf(stdout,"(***************************)\n");
1791
1792 /* type des mailles */
1793 switch(mdim) {
1794 case 0 :
1795 typgeo = MED_POINT1;
1796 break;
1797 case 1 :
1798 typgeo = MED_SEG2;
1799 break;
1800 case 2 :
1801 typgeo = MED_QUAD4;
1802 break;
1803 default :
1804 typgeo = MED_HEXA8;
1805 }
1806
1807 /* On va lire et afficher :
1808 * - Les numeros de familles
1809 * - Les noms (optionnel)
1810 * - Les numeros (optionnel)
1811 */
1812
1813 /* on alloue la memoire */
1814 numele = (med_int *) malloc(sizeof(med_int)*nmai);
1815 EXIT_IF(numele == NULL,NULL,NULL);
1816 nomele = (char *) malloc(sizeof(char)*MED_SNAME_SIZE*nmai+1);
1817 EXIT_IF(nomele == NULL,NULL,NULL);
1818 nufael = (med_int *) malloc(sizeof(med_int)*nmai);
1819 EXIT_IF(nufael == NULL,NULL,NULL);
1820
1821 /* lecture des numeros de famille */
1822 ret = MEDmeshEntityFamilyNumberRd(fid,nommaa,numdt,numit,MED_CELL,typgeo,nufael);
1823 if (ret < 0)
1824 for (i=0;i<nmai;i++)
1825 *(nufael+i) = 0;
1826
1827 if (!structure) {
1828 /* on affiche le resultat */
1829 fprintf(stdout,"\n- Numeros des familles des mailles : \n");
1830 for (i=0;i<nmai;i++)
1831 fprintf(stdout," %d ",*(nufael+i));
1832 fprintf(stdout,"\n");
1833 }
1834
1835 /* on va lire et afficher les noms des mailles */
1836 if (MEDmeshEntityNameRd(fid,nommaa,numdt,numit,MED_CELL,typgeo,nomele) == 0) {
1837 if (!structure) {
1838 fprintf(stdout,"\n - Noms : \n");
1839 for (i=0;i<nmai;i++) {
1840 strncpy(str,nomele+i*MED_SNAME_SIZE,MED_SNAME_SIZE);
1841 str[MED_SNAME_SIZE] = '\0';
1842 fprintf(stdout," %s ",str);
1843 }
1844 }
1845 }
1846
1847 /* on va lire et afficher les numeros des mailles */
1848 if (MEDmeshEntityNumberRd(fid,nommaa,numdt,numit,MED_CELL,typgeo,numele) == 0) {
1849 if (!structure) {
1850 fprintf(stdout,"\n - Numeros :\n");
1851 for (i=0;i<nmai;i++)
1852 fprintf(stdout," %d ",*(numele+i));
1853 }
1854 }
1855
1856 /* on libere la memoire */
1857 free(nufael);
1858 free(nomele);
1859 free(numele);
1860
1861 return;
1862 }
1863
lecture_maillage_structure(const med_idt fid,const char * const nommaa,const med_int numdt,const med_int numit,const med_int mdim,const med_int edim,const med_switch_mode mode_coo,const char * const comp,const char * const unit,const int lecture_en_tete_seulement)1864 void lecture_maillage_structure(const med_idt fid,
1865 const char * const nommaa,
1866 const med_int numdt,
1867 const med_int numit,
1868 const med_int mdim,
1869 const med_int edim,
1870 const med_switch_mode mode_coo,
1871 const char * const comp,
1872 const char * const unit,
1873 const int lecture_en_tete_seulement)
1874 {
1875 med_err ret = 0;
1876 /* nombre de valeurs selon les axes du repere */
1877 med_int nind[3];
1878 med_int nnoe = 1;
1879 med_int nmai = 1;
1880 /* type de la grille */
1881 med_grid_type type;
1882 /* nombre de familles */
1883 med_int nfam;
1884 /* nombre d'equivalences */
1885 med_int nequ;
1886 /* nombre de joints */
1887 med_int njnt;
1888
1889 /* lecture selon la nature de la grille des caracteristiques
1890 du maillage :
1891 - nombre de noeuds
1892 - nombre de mailles
1893 */
1894 lecture_caracteristiques_grille(fid,nommaa,numdt,numit,mdim,nind,&nnoe,&nmai,&type);
1895
1896 /* nombre de familles */
1897 nfam = lecture_nombre_famille(fid,nommaa);
1898
1899 /* nombre d'equivalences */
1900 nequ = lecture_nombre_equivalence(fid,nommaa);
1901
1902 /* combien de joints */
1903 njnt = lecture_nombre_joint(fid,nommaa);
1904
1905 if (lecture_en_tete_seulement)
1906 return ;
1907
1908 /****************************************************************************
1909 * LECTURE DES NOEUDS *
1910 ****************************************************************************/
1911 lecture_noeuds_maillage_structure(fid,nommaa,numdt,numit,mdim,edim,nind,nnoe,comp,unit,type,mode_coo);
1912
1913 /****************************************************************************
1914 * LECTURE DES ELEMENTS *
1915 ****************************************************************************/
1916 lecture_mailles_maillage_structure(fid,nommaa,numdt,numit,mdim,nmai);
1917
1918 /****************************************************************************
1919 * LECTURE DES FAMILLES *
1920 ****************************************************************************/
1921 lecture_famille_maillage(fid,nommaa,nfam);
1922
1923 /****************************************************************************
1924 * LECTURE DES EQUIVALENCES *
1925 ****************************************************************************/
1926 lecture_equivalence_maillage(fid,nommaa,nequ);
1927
1928 /****************************************************************************
1929 * LECTURE DES JOINTS *
1930 ****************************************************************************/
1931 lecture_joint_maillage(fid,nommaa,njnt);
1932
1933 return ;
1934 }
1935
getFieldsOn(const med_idt fid,const char * const maillage,const med_int mnumdt,const med_int mnumit,const char * const nomcha,const char * const dtunit,const med_field_type typcha,const med_int ncomp,const med_entity_type entite,const med_switch_mode stockage,const med_int ncstp)1936 med_err getFieldsOn(const med_idt fid,
1937 const char * const maillage,
1938 const med_int mnumdt,
1939 const med_int mnumit,
1940 const char * const nomcha,
1941 const char * const dtunit,
1942 const med_field_type typcha,
1943 const med_int ncomp,
1944 const med_entity_type entite,
1945 const med_switch_mode stockage,
1946 const med_int ncstp) {
1947
1948 int i,j,k,l,m,n,nb_geo=0;
1949 med_int nbpdtnor=0,pflsize,*pflval,ngauss=0,ngauss_maa_ass=0,ngroup,*vale=NULL,nval;
1950 med_int numdt=0,numo=0,_nprofile;
1951 med_int meshnumdt=0,meshnumit=0;
1952 med_float *valr=NULL,dt=0.0;
1953 med_err ret=0;
1954 char pflname [MED_NAME_SIZE+1]="";
1955 char locname [MED_NAME_SIZE+1]="";
1956 char meshname [MED_NAME_SIZE+1]="";
1957 char maa_ass [MED_NAME_SIZE+1]="";
1958 char * lien = NULL;
1959 med_bool localmesh;
1960 med_int nmesh=0;
1961 med_int lnsize=0;
1962 med_geometry_type * type_geo;
1963
1964 const char * const * AFF;
1965 const char * const * AFF_ENT=MED23FIELD_GET_ENTITY_TYPENAME+1;
1966 switch (entite) {
1967 case MED_NODE :
1968 type_geo = MED23FIELD_GET_NODE_GEOMETRY_TYPE;
1969 nb_geo = MED_N_NODE_FIXED_GEO;
1970 AFF = MED23FIELD_GET_NODE_GEOMETRY_TYPENAME;
1971 break;
1972 case MED_CELL :
1973 case MED_NODE_ELEMENT :
1974 type_geo = MED23FIELD_GET_CELL_GEOMETRY_TYPE;
1975 nb_geo = MED_N_CELL_FIXED_GEO;
1976 AFF = MED23FIELD_GET_CELL_GEOMETRY_TYPENAME;
1977 break;
1978 case MED_DESCENDING_FACE :
1979 type_geo = MED23FIELD_GET_FACE_GEOMETRY_TYPE;
1980 nb_geo = MED_N_FACE_FIXED_GEO;
1981 AFF = MED23FIELD_GET_FACE_GEOMETRY_TYPENAME;
1982 break;
1983 case MED_DESCENDING_EDGE :
1984 type_geo = MED23FIELD_GET_EDGE_GEOMETRY_TYPE;
1985 nb_geo = MED_N_EDGE_FIXED_GEO;
1986 AFF = MED23FIELD_GET_EDGE_GEOMETRY_TYPENAME;
1987 break;
1988 }
1989
1990 for (k=1;k<=nb_geo;k++) {
1991
1992 /* Combien de (PDT,NOR) a lire */
1993 nbpdtnor = ncstp;
1994 if (nbpdtnor < 1 ) continue;
1995
1996 for (j=0;j<nbpdtnor;j++) {
1997
1998 if ( MEDfield23ComputingStepMeshInfo(fid,nomcha,j+1, &numdt, &numo, &dt,
1999 &nmesh, maa_ass,&localmesh, &meshnumdt, &meshnumit ) <0) {
2000 MESSAGE("Erreur a la demande d'information sur (pdt,nor) : ");
2001 ISCRUTE(numdt); ISCRUTE(numo);ISCRUTE(nmesh);SSCRUTE(meshname);ISCRUTE_int(localmesh);
2002 ISCRUTE(meshnumdt);ISCRUTE(meshnumit);
2003 ret = -1; continue;
2004 }
2005
2006 for (i=0;i< nmesh;++i) {
2007
2008 if ( (_nprofile = MEDfield23nProfile(fid,nomcha,numdt,numo,entite,type_geo[k],i+1,meshname,
2009 pflname,locname ) ) < 0 ) {
2010 MESSAGE("Erreur a la demande du nombre de profils referencés par le champ : ");
2011 SSCRUTE(nomcha); ISCRUTE(numdt); ISCRUTE(numo);SSCRUTE(meshname);
2012 ISCRUTE_int(entite);ISCRUTE_int(type_geo[k]);SSCRUTE(pflname);SSCRUTE(locname);
2013 SSCRUTE(AFF_ENT[(int)entite]);SSCRUTE(AFF[k]);
2014 ret = -1; continue;
2015 };
2016
2017 for (l=0;l<_nprofile;l++) {
2018
2019 if ( (nval = MEDfield23nValueWithProfile(fid, nomcha, numdt, numo, entite, type_geo[k],meshname,
2020 l+1, USER_MODE, pflname,&pflsize,
2021 locname, &ngauss) ) < 0 ) {
2022 MESSAGE("Erreur a la lecture du nombre de valeurs du champ : ");
2023 SSCRUTE(nomcha);ISCRUTE(numdt);ISCRUTE(numo);SSCRUTE(meshname);
2024 ISCRUTE_int(entite);ISCRUTE_int(type_geo[k]);
2025 ISCRUTE_int(USER_MODE);
2026 ret = -1; continue;
2027 };
2028 if (!strcmp(meshname,maa_ass) ) ngauss_maa_ass = ngauss;
2029
2030 if (_nprofile > 1 )
2031 printf("\n +Pas de Temps n."IFORMAT" (%f) [%s], n. d'ordre "IFORMAT", avec "IFORMAT" valeur(s) par entité.\n",numdt,dt,dtunit,numo,ngauss);
2032 else {
2033 printf("\n +Pas de Temps n."IFORMAT" (%f) [%s], n. d'ordre "IFORMAT", avec "IFORMAT" pts de gauss sur le maillage par defaut.\n",numdt,dt,dtunit,numo,ngauss_maa_ass);
2034 printf("\tLe maillage par defaut est : |%s|, sur un total de : %i maillages associes\n", maa_ass, nmesh);
2035 }
2036
2037 if ( (!strcmp(meshname,maillage)) && (meshnumdt == mnumdt) && (meshnumit == mnumit) ) {
2038
2039 if (_nprofile > 1 ) {
2040 printf("\t- Il y a "IFORMAT" entités qui portent des valeurs en mode %i. Chaque entite %s\
2041 de type geometrique %s associes au profile |%s| a "IFORMAT" valeurs associées \n",
2042 nval,USER_MODE,AFF_ENT[(int)entite],AFF[k],pflname,ngauss);
2043 printf("\t- Le maillage associé est |%s|\n",meshname);
2044 } else {
2045 /*TODO : Rétablir un affichage en nombre d'entité et pas en nombre de valeurs */
2046 printf("\t- Il y a %d valeurs en mode %i. Chaque entite %s\
2047 de type geometrique %s associes au maillage |%s| a %i pts de gauss \n",
2048 nval*ngauss,USER_MODE,AFF_ENT[(int)entite],AFF[k],
2049 maa_ass,ngauss);
2050 }
2051
2052 if ( (meshnumdt != MED_NO_DT) || (meshnumit != MED_NO_IT) )
2053 printf("\t- La séquence de calcul utilisée dans le maillage associé |%s| est (numdt,numit) : ("IFORMAT","IFORMAT") \n",meshname,meshnumdt,meshnumit);
2054
2055 /* Le maillage reference est-il porte par un autre fichier */
2056 if ( !localmesh ) {
2057
2058 if ( (lnsize=MEDlinkInfoByName(fid,maa_ass) ) < 0 ) {
2059 MESSAGE("Erreur a la lecture de la taille du lien : ");
2060 SSCRUTE(maa_ass);
2061 ret = -1;
2062 } else {
2063 lien = (char *)malloc(lnsize*sizeof(char) + 1);
2064 EXIT_IF(lien == NULL,NULL,NULL);
2065
2066 if ( MEDlinkRd(fid, maa_ass, lien) < 0 ) {
2067 MESSAGE("Erreur a la lecture du lien : ");
2068 SSCRUTE(maa_ass);SSCRUTE(lien);
2069 ret = -1;
2070 } else {
2071 lien[lnsize] = '\0';
2072 printf("\tLe maillage |%s| est porte par un fichier distant |%s|\n",maa_ass,lien);
2073 }
2074 free(lien);
2075 }
2076 }
2077
2078 /*Lecture des valeurs du champ */
2079 if (typcha == MED_FLOAT64) {
2080
2081 valr = (med_float*) calloc(ncomp*nval*ngauss,sizeof(med_float));
2082 EXIT_IF(valr == NULL,NULL,NULL);
2083
2084 if (MEDfield23ValueWithProfileRd(fid, nomcha, numdt,numo, entite,type_geo[k],meshname,
2085 USER_MODE, pflname, stockage,MED_ALL_CONSTITUENT,
2086 (unsigned char*) valr) < 0 ) {
2087 MESSAGE("Erreur a la lecture des valeurs du champ : ");
2088 SSCRUTE(nomcha);ISCRUTE_int(entite);ISCRUTE_int(type_geo[k]);
2089 ISCRUTE(numdt);ISCRUTE(numo);
2090 ret = -1;
2091 }
2092 } else {
2093
2094 vale = (med_int*) calloc(ncomp*nval*ngauss,sizeof(med_int));
2095 EXIT_IF(vale == NULL,NULL,NULL);
2096
2097 if (MEDfield23ValueWithProfileRd(fid, nomcha, numdt,numo, entite,type_geo[k],meshname,
2098 USER_MODE, pflname, stockage,MED_ALL_CONSTITUENT,
2099 (unsigned char*) vale) < 0 ) {
2100 MESSAGE("Erreur a la lecture des valeurs du champ : ");
2101 SSCRUTE(nomcha);ISCRUTE_int(entite);ISCRUTE_int(type_geo[k]);
2102 ISCRUTE(numdt);ISCRUTE(numo);
2103 ret = -1;
2104 }
2105 }
2106
2107 if ( strlen(locname) && (_nprofile > 1) )
2108 printf("\t- Modèle de localisation des points de Gauss de nom |%s|\n",locname);
2109
2110 if (entite == MED_NODE_ELEMENT)
2111 ngroup = (type_geo[k] % 100);
2112 else
2113 ngroup = ngauss;
2114
2115 switch (stockage) {
2116
2117 case MED_FULL_INTERLACE :
2118 if (!structure) {
2119 printf("\t- Valeurs :\n\t");
2120 for (m=0;m<(nval*ngauss)/ngroup;m++) {
2121 printf("|");
2122 for (n=0;n<ngroup*ncomp;n++)
2123 if (typcha == MED_FLOAT64)
2124 printf(" %f ",*(valr+(m*ngroup*ncomp)+n));
2125 else
2126 printf(" "IFORMAT" ",*(vale+(m*ngroup*ncomp)+n));
2127 }
2128 }
2129 break;
2130
2131 /*??? Affichage en fonction du profil à traiter ???*/
2132 case MED_NO_INTERLACE :
2133 if (!structure) {
2134 printf("\t- Valeurs :\n\t");
2135 for (m=0;m<ncomp;m++) {
2136 printf("|");
2137 for (n=0;n<(nval*ngauss);n++)
2138 if (typcha == MED_FLOAT64)
2139 printf(" %f ",*(valr+(m*nval)+n));
2140 else
2141 printf(" "IFORMAT" ",*(vale+(m*nval)+n));
2142 }
2143 }
2144 break;
2145 }
2146
2147 if (!structure) {
2148 printf("|\n");
2149 }
2150
2151 if (typcha == MED_FLOAT64) {
2152 if ( valr ) {free(valr);valr = NULL;}}
2153 else
2154 if (vale) { free(vale);vale = NULL; }
2155
2156 /*Lecture du profil associe */
2157 if (strcmp(pflname,MED_NO_PROFILE) == 0 ) {
2158 printf("\t- Profil : MED_NOPFL\n");
2159 /* TODO : Réactiver */
2160 /* printf("\t- Profil : MED_NO_PROFILE\n"); */
2161 } else {
2162 if ( (pflsize = MEDprofileSizeByName(fid,pflname)) <0 ) {
2163 MESSAGE("Erreur a la lecture du nombre de valeurs du profil : ");
2164 SSCRUTE(pflname);
2165 ret = -1; continue;
2166 }
2167
2168 printf("\t- Profil : |%s| de taille "IFORMAT"\n",pflname,pflsize);
2169
2170 pflval = (med_int*) malloc(sizeof(med_int)*pflsize);
2171 EXIT_IF(pflval == NULL,NULL,NULL);
2172 if ( MEDprofileRd(fid,pflname,pflval) <0) {
2173 MESSAGE("Erreur a la lecture des valeurs du profil : ");
2174 SSCRUTE(pflname);
2175 ret = -1;
2176 }
2177 if (!structure) {
2178 printf("\t");
2179 for (m=0;m<pflsize;m++) printf(" "IFORMAT" ",*(pflval+m));
2180 printf("\n");
2181 }
2182 free(pflval);
2183 }
2184 }
2185 }
2186 }
2187 }
2188 } /* fin for sur les mailles*/
2189
2190 return ret;
2191 }
2192
2193 /******************************************************************************
2194 *
2195 * - Nom de la fonction : lecture_resultats
2196 * - Description : lecture et affichage des champs de resultats
2197 * associe a un maillage MED.
2198 * - Parametres :
2199 * - fid (IN) : ID du fichier MED.
2200 * - maillage (IN) : nom du maillage maillage.
2201 * - mode_coo (IN) : mode de stockage en memoire :
2202 * MED_FULL_INTERLACE |
2203 * MED_NO_INTERLACE.
2204 * - lecture_en_tete_seulement (IN) : mode de lecture.
2205 ******************************************************************************/
2206
lecture_resultats(const med_idt fid,const char * const maillage,const med_int mnumdt,const med_int mnumit,const med_switch_mode mode_coo,const int lecture_en_tete_seulement)2207 void lecture_resultats(const med_idt fid,
2208 const char * const maillage,
2209 const med_int mnumdt,
2210 const med_int mnumit,
2211 const med_switch_mode mode_coo,
2212 const int lecture_en_tete_seulement)
2213 {
2214 med_err ret,lret;
2215 char pflname[MED_NAME_SIZE+1]="",nomlien[MED_NAME_SIZE+1]="";
2216 char *lien = NULL;
2217 char *comp, *unit;
2218 char nomcha [MED_NAME_SIZE+1]="";
2219 char locname [MED_NAME_SIZE+1]="";
2220 med_int mdim,ncomp,ncha,npro,nln,pflsize,*pflval,nval,nloc,ngauss;
2221 med_field_type typcha;
2222 med_mesh_type type;
2223 int t1,t2,t3;
2224 med_geometry_type type_geo;
2225 med_float *refcoo, *gscoo, *wg;
2226 int i,j;
2227
2228 char nommaa[MED_NAME_SIZE+1]="";
2229 med_bool localmaa = MED_FALSE;
2230 char dtunit[MED_SNAME_SIZE+1]="";
2231 med_int ncstp=0;
2232
2233 med_int locsdim=0;
2234 char geointerpname [MED_NAME_SIZE+1]="";
2235 char ipointstructmeshname[MED_NAME_SIZE+1]="";
2236 med_int nsectionmeshcell = 0;
2237 med_geometry_type sectiongeotype;
2238
2239 if (! lecture_en_tete_seulement) {
2240 fprintf(stdout,"\n(************************)\n");
2241 fprintf(stdout,"(* CHAMPS DU MAILLAGE : *)\n");
2242 fprintf(stdout,"(************************)\n");
2243 }
2244
2245 /* combien de champs dans le fichier */
2246 ncha = MEDnField(fid);
2247 EXIT_IF(ncha < 0,"lors de la lecture du nombre de champs",NULL);
2248 fprintf(stdout,"- Nombre de champs : %d \n",ncha);
2249
2250 if (lecture_en_tete_seulement)
2251 return;
2252
2253 /****************************************************************************
2254 * LECTURE DES CHAMPS *
2255 ****************************************************************************/
2256 ret = 0;
2257
2258 /* lecture de tous les champs pour le maillage selectionne */
2259 for (i =0;i<ncha;i++) {
2260 lret = 0;
2261 printf("\nChamp numero : |%d| \n",i+1);
2262
2263 /* Lecture du nombre de composantes */
2264 if ((ncomp = MEDfieldnComponent(fid,i+1)) < 0) {
2265 MESSAGE("Erreur à la lecture du nombre de composantes : ");
2266 ISCRUTE(ncomp);
2267 ret = -1; continue;
2268 }
2269
2270 /* Lecture du type du champ, des noms des composantes et du nom de
2271 l'unité*/
2272 comp = (char*) malloc(ncomp*MED_SNAME_SIZE+1);
2273 EXIT_IF(comp == NULL,NULL,NULL);
2274 unit = (char*) malloc(ncomp*MED_SNAME_SIZE+1);
2275 EXIT_IF(unit == NULL,NULL,NULL);
2276
2277 if ( MEDfieldInfo(fid, i+1, nomcha, nommaa, &localmaa,
2278 &typcha, comp, unit, dtunit, &ncstp) < 0 ) {
2279 MESSAGE("Erreur à la demande d'information sur les champs : ");
2280 ret = -1; continue;
2281 }
2282
2283 printf("Nom du champ : |%s| de type |%d|\n",nomcha,typcha);
2284 printf("Nom des composantes : |%s|\n",comp);
2285 printf("Unites des composantes : |%s| \n",unit);
2286 /* TODO: réactiver */
2287 /* if (strlen(dtunit)) */
2288 /* printf("Unité des dates : |%s|\n",dtunit); */
2289 /* if ( ncstp > 1 ) */
2290 /* printf("Nombre d'étapes de calcul : |"IFORMAT"| \n",ncstp); */
2291
2292 free(comp);
2293 free(unit);
2294
2295 /* champs aux noeuds */
2296 lret = getFieldsOn(fid, maillage, mnumdt, mnumit, nomcha, dtunit, typcha, ncomp, MED_NODE,mode_coo, ncstp);
2297
2298 /* champs sur les elements et aux points de Gauss */
2299 if (lret == 0) lret = getFieldsOn(fid, maillage, mnumdt, mnumit , nomcha, dtunit, typcha, ncomp, MED_CELL,mode_coo, ncstp);
2300 else { MESSAGE("Erreur à la lecture des champs aux noeuds "); ret = -1; continue;}
2301
2302 if (lret == 0) lret = getFieldsOn(fid, maillage, mnumdt, mnumit , nomcha, dtunit, typcha, ncomp, MED_DESCENDING_FACE,mode_coo, ncstp);
2303 else { MESSAGE("Erreur à la lecture des champs aux mailles "); ret = -1; continue;}
2304
2305 if (lret == 0) lret = getFieldsOn(fid, maillage, mnumdt, mnumit , nomcha, dtunit, typcha, ncomp, MED_DESCENDING_EDGE,mode_coo, ncstp);
2306 else {MESSAGE("Erreur à la lecture des champs aux faces "); ret = -1; continue;}
2307
2308 if (lret == 0) lret = getFieldsOn(fid, maillage, mnumdt, mnumit , nomcha, dtunit, typcha, ncomp, MED_NODE_ELEMENT,mode_coo, ncstp);
2309 else {MESSAGE("Erreur a la lecture des champs aux aretes "); ret = -1; continue;}
2310
2311 if (lret != 0) {MESSAGE("Erreur a la lecture des champs aux noeuds des mailles "); ret = -1;};
2312 }
2313
2314
2315 /* Interrogation des profils */
2316 npro = MEDnProfile(fid);
2317
2318 printf("\nNombre de profils stockes : "IFORMAT"\n\n",npro);
2319 for (i=1 ; i <= npro ; i++ ) {
2320 if ( MEDprofileInfo(fid, i, pflname, &nval) < 0) {
2321 MESSAGE("Erreur a la demande d'information sur le profil n° : "); ISCRUTE_int(i);
2322 ret = -1;continue;
2323 }
2324 printf("\t- Profil n°%i de nom |%s| et de taille "IFORMAT"\n",i,pflname,nval);
2325 pflval = (med_int*) malloc(sizeof(med_int)*nval);
2326 if ( MEDprofileRd(fid, pflname, pflval) < 0) {
2327 MESSAGE("Erreur a la lecture des valeurs du profil : ");
2328 SSCRUTE(pflname);
2329 ret = -1;
2330 } else {
2331 printf("\t");
2332 for (j=0;j<nval;j++) printf(" "IFORMAT" ",*(pflval+j));
2333 printf("\n\n");
2334 }
2335 free(pflval);
2336 }
2337
2338 /* Interrogation des liens */
2339 nln = MEDnLink(fid);
2340
2341 printf("\nNombre de liens stockes : "IFORMAT"\n\n",nln);
2342 for (i=1 ; i <= nln ; i++ ) {
2343 if ( MEDlinkInfo(fid, i, nomlien, &nval) < 0) {
2344 MESSAGE("Erreur a la demande d'information sur le lien n° : "); ISCRUTE_int(i);
2345 ret = -1;continue;
2346 }
2347 printf("\t- Lien n°%i de nom |%s| et de taille "IFORMAT"\n",i,nomlien,nval);
2348
2349 lien = (char * ) malloc((nval+1)*sizeof(char));
2350 EXIT_IF(lien == NULL,NULL,NULL);
2351
2352 if ( MEDlinkRd(fid, nomlien, lien ) < 0 ) {
2353 MESSAGE("Erreur a la lecture du lien : ");
2354 SSCRUTE(nomlien);SSCRUTE(lien);
2355 ret = -1;
2356 } else {
2357 lien[nval] = '\0';
2358 printf("\t\t|%s|\n\n",lien);
2359 }
2360 free(lien);
2361 }
2362
2363 /* Interrogation des localisations des points de GAUSS */
2364 nloc = MEDnLocalization(fid);
2365
2366 printf("\nNombre de localisations stockees : "IFORMAT"\n\n",nloc);
2367 for (i=1 ; i <= nloc ; i++ ) {
2368 if ( MEDlocalizationInfo(fid, i, locname, &type_geo, &locsdim,&ngauss,
2369 geointerpname, ipointstructmeshname,&nsectionmeshcell,
2370 §iongeotype) < 0) {
2371 MESSAGE("Erreur a la demande d'information sur la localisation n° : "); ISCRUTE_int(i);
2372 ret = -1;continue;
2373 }
2374 printf("\t- Loc. n°%i de nom |%s| de dimension "IFORMAT" avec "IFORMAT" pts de GAUSS \n",i,locname,locsdim,ngauss);
2375 t1 = (type_geo%100)*(type_geo/100);
2376 t2 = ngauss*(type_geo/100);
2377 t3 = ngauss;
2378 refcoo = (med_float *) malloc(sizeof(med_float)*t1 );
2379 gscoo = (med_float *) malloc(sizeof(med_float)*t2 );
2380 wg = (med_float *) malloc(sizeof(med_float)*t3 );
2381
2382 if ( MEDlocalizationRd(fid, locname, mode_coo, refcoo, gscoo, wg ) < 0) {
2383 MESSAGE("Erreur a la lecture des valeurs de la localisation : ");
2384 SSCRUTE(locname);
2385 ret = -1;
2386 } else {
2387 printf("\t Coordonnees de l'element de reference de type %i :\n\t\t",type_geo);
2388 for (j=0;j<t1;j++) printf(" %f ",*(refcoo+j));
2389 printf("\n");
2390 printf("\t Localisation des points de GAUSS : \n\t\t");
2391 for (j=0;j<t2;j++) printf(" %f ",*(gscoo+j));
2392 printf("\n");
2393 printf("\t Poids associes aux points de GAUSS :\n\t\t");
2394 for (j=0;j<t3;j++) printf(" %f ",*(wg+j));
2395 printf("\n\n");
2396 }
2397 free(refcoo);
2398 free(gscoo);
2399 free(wg);
2400 }
2401
2402 return;
2403 }
2404
2405 /******************************************************************************
2406 *
2407 * - Nom de la fonction : lecture_parametres_scalaires
2408 * - Description : lecture des parametres scalaires definis
2409 * hors champs et maillages.
2410 * - Parametres :
2411 * - fid (IN) : ID du fichier MED.
2412 * - lecture_en_tete_seule (IN) : mode de lecture.
2413 *
2414 ******************************************************************************/
2415
lecture_parametres_scalaires(med_idt fid,int lecture_en_tete_seulement)2416 void lecture_parametres_scalaires(med_idt fid,
2417 int lecture_en_tete_seulement)
2418 {
2419 med_err ret = 0;
2420 char nom_scalaire[MED_NAME_SIZE+1];
2421 char description[MED_COMMENT_SIZE+1];
2422 med_int vali;
2423 med_float valr;
2424 med_int i,n,npdt,j;
2425 med_parameter_type type;
2426 med_int numdt,numo;
2427 med_float dt;
2428 char dt_unit[MED_SNAME_SIZE+1];
2429
2430 fprintf(stdout,"\n(*******************************)\n");
2431 fprintf(stdout,"(* VARIABLES SCALAIRES : *)\n");
2432 fprintf(stdout,"(*******************************)\n");
2433
2434 /* Combien de variables scalaire ? */
2435 n = MEDnParameter(fid);
2436 EXIT_IF(n < 0,"lors de la lecture du nombre de scalaires",NULL);
2437 fprintf(stdout,"- Nombre de variables scalaires : %d\n",n);
2438
2439 if (lecture_en_tete_seulement)
2440 return ;
2441
2442 for (i=1;i<=n;i++) {
2443
2444 /* Lecture des infos (type,description) */
2445 ret = MEDparameterInfo( fid,i,nom_scalaire,&type,description,
2446 dt_unit, &npdt );
2447 EXIT_IF(ret < 0,"lors de la lecture des parametres d'un scalaire",NULL);
2448 fprintf(stdout,"- Scalaire n°%d de nom %s \n",i,nom_scalaire);
2449 if (type == MED_FLOAT64)
2450 fprintf(stdout," Type flottant. \n");
2451 else
2452 fprintf(stdout," Type entier. \n");
2453 printf(" Description associee : [%s] \n",description);
2454
2455 /* Pour chaque scalaire on regarde les valeurs associees
2456 eventuellement a des pas de temps et des numeros d'ordre */
2457 EXIT_IF(npdt < 0,
2458 "lors de la lecture du nombre de pas de temps d'un scalaire"
2459 ,NULL);
2460 fprintf(stdout," Nombre de valeurs stockees : %d \n",npdt);
2461
2462 for (j=1;j<=npdt;j++) {
2463
2464 ret = MEDparameterComputationStepInfo(fid,nom_scalaire,j, &numdt,&numo,&dt);
2465 EXIT_IF(ret < 0,
2466 "lors de la lecture des parametres d'un pas de temps d'un scalaire",
2467 NULL);
2468
2469 if (numdt == MED_NO_DT)
2470 fprintf(stdout," - Aucun de pas de temps \n");
2471 else
2472 fprintf(stdout,
2473 " - Pas de de temps de numero %d de valeur %f [%s] \n",numdt,
2474 dt,dt_unit);
2475 if (numo == MED_NO_IT)
2476 fprintf(stdout," - Aucun numero d'ordre \n");
2477 else
2478 fprintf(stdout," - Numero d'ordre : %d \n",numo);
2479
2480 if (type == MED_FLOAT64) {
2481 ret = MEDparameterValueRd(fid,nom_scalaire,numdt,numo,(unsigned char * ) &valr);
2482 fprintf(stdout," - Valeur : %f \n",valr);
2483 }
2484 else {
2485 ret = MEDparameterValueRd(fid,nom_scalaire,numdt,numo,(unsigned char * ) &vali);
2486 fprintf(stdout," - Valeur : %d \n",vali);
2487 }
2488 EXIT_IF(ret < 0,"lors de la lecture de la valeur d'un scalaire",NULL);
2489
2490 }
2491 }
2492
2493 return ;
2494 }
2495
ouverture_fichier_MED(char * fichier)2496 med_idt ouverture_fichier_MED(char *fichier)
2497 {
2498 med_idt fid;
2499 med_err ret = 0;
2500 med_int majeur,mineur,release;
2501 med_bool hdfok;
2502 med_bool medok;
2503
2504 /* on regarde si le fichier existe */
2505 ret = (int) access(fichier,F_OK);
2506 EXIT_IF(ret < 0,"Le fichier n'est pas accessible ou n'existe pas ",
2507 fichier);
2508
2509 /* on regarde s'il s'agit d'un fichier au format HDF 5 */
2510 ret = MEDfileCompatibility (fichier,&hdfok, &medok );
2511 EXIT_IF(ret < 0,"Impossible de déterminer la compatibilité de format. ",
2512 fichier);
2513
2514 EXIT_IF(!hdfok,"Le fichier n'est pas dans un format HDF compatible ", fichier);
2515 EXIT_IF(!medok,"Le fichier n'est pas dans un format MED compatible ", fichier);
2516
2517 /* Quelle version de MED est utilise par mdump ? */
2518 MEDlibraryNumVersion(&majeur,&mineur,&release);
2519 fprintf(stdout,
2520 "- Lecture du fichier à l'aide de la bibliotheque MED V%d.%d.%d \n",
2521 majeur,mineur,release);
2522
2523 /* Ouverture du fichier MED en lecture seule */
2524 fid = MEDfileOpen(fichier,MED_ACC_RDONLY);
2525 EXIT_IF( fid < 0,"Ouverture du du fichier ",fichier);
2526
2527 MEDfileNumVersionRd(fid, &majeur, &mineur, &release);
2528 EXIT_IF(( (majeur < 2) || ( (majeur == 2) && (mineur < 2)) ), "Le fichier est antérieur à la version 2.2", NULL);
2529
2530 return fid;
2531 }
2532
lecture_en_tete(med_idt fid,char * fichier)2533 void lecture_en_tete(med_idt fid,char* fichier)
2534 {
2535 char fichier_en_tete[MED_COMMENT_SIZE+1];
2536 med_err ret = 0;
2537
2538 /* lecture de l'en-tete du fichier (optionnel) */
2539 /* on va lire dans le fichier */
2540 ret = MEDfileCommentRd(fid,fichier_en_tete);
2541
2542 /* on affiche */
2543 if (ret >= 0)
2544 fprintf(stdout,"- En-tete du fichier : %s \n",fichier_en_tete);
2545
2546 return;
2547 }
2548
parametrage(med_switch_mode * mode_coo,med_connectivity_mode * typ_con)2549 void parametrage(med_switch_mode *mode_coo,
2550 med_connectivity_mode *typ_con)
2551 {
2552 int reponse;
2553
2554 fprintf(stdout,"(*****************)\n");
2555 fprintf(stdout,"(* PARAMETRAGE : *)\n");
2556 fprintf(stdout,"(*****************)\n");
2557 fprintf(stdout,"- Mode d'affichage des coordonnées des noeuds ? \n");
2558 fprintf(stdout," 1. Mode entrelacé : taper 1 \n");
2559 fprintf(stdout," 2. Mode non entrelacé : taper 2 \n");
2560 reponse = 0;
2561 do {
2562 fprintf(stdout," Reponse : ");
2563 scanf("%d",&reponse);
2564 } while (reponse != 1 && reponse != 2);
2565 if (reponse == 1)
2566 *mode_coo = MED_FULL_INTERLACE;
2567 else
2568 *mode_coo = MED_NO_INTERLACE;
2569
2570 fprintf(stdout,"- Connectivité des éléments ? \n");
2571 fprintf(stdout," 1. Nodale : taper 1 \n");
2572 fprintf(stdout," 2. Descendante : taper 2 \n");
2573 reponse = 0;
2574 do {
2575 fprintf(stdout," Reponse : ");
2576 scanf("%d",&reponse);
2577 } while (reponse != 1 && reponse != 2);
2578 if (reponse == 1)
2579 *typ_con = MED_NODAL;
2580 else
2581 *typ_con = MED_DESCENDING;
2582
2583 return;
2584 }
2585
2586
lecture_information_maillage(const med_idt fid,const int numero,char * nommaa,med_int * const mdim,med_int * const edim,med_mesh_type * const type_maillage,char * const maillage_description,med_int * const nstep,char * const dtunit,char * const nomcoo,char * const unicoo,med_axis_type * const rep)2587 void lecture_information_maillage(const med_idt fid,
2588 const int numero,
2589 char * nommaa,
2590 med_int * const mdim,
2591 med_int * const edim,
2592 med_mesh_type * const type_maillage,
2593 char * const maillage_description,
2594 med_int * const nstep,
2595 char * const dtunit,
2596 char * const nomcoo,
2597 char * const unicoo,
2598 med_axis_type *const rep)
2599 {
2600 char nom_universel[MED_LNAME_SIZE+1];
2601 med_err ret = 0;
2602 med_sorting_type sortingtype;
2603
2604 fprintf(stdout,"\n(********************************************)\n");
2605 fprintf(stdout,"(* INFORMATIONS GENERALES SUR LE MAILLAGE : *)\n");
2606 fprintf(stdout,"(********************************************)\n");
2607
2608 /* lecture du nom et de la dimension du maillage */
2609 ret = MEDmeshInfo(fid, numero,nommaa,edim,mdim,type_maillage,maillage_description,
2610 dtunit,&sortingtype,nstep,rep,nomcoo,unicoo);
2611 EXIT_IF(ret < 0,"Lecture des informations sur le maillage",NULL);
2612
2613 /* affichage des donnees lues */
2614 fprintf(stdout,"- Nom du maillage : <<%s>>\n",nommaa);
2615 fprintf(stdout,"- Dimension du maillage : "IFORMAT"\n",*mdim);
2616 if (*edim > *mdim)
2617 fprintf(stdout,"- La dimension de l'espace est "IFORMAT" \n",*edim);
2618 if (*type_maillage == MED_UNSTRUCTURED_MESH)
2619 fprintf(stdout,"- Type du maillage : MED_NON_STRUCTURE \n");
2620 else
2621 fprintf(stdout,"- Type du maillage : MED_STRUCTURE \n");
2622 fprintf(stdout,"- Description associee au maillage : %s\n",
2623 maillage_description);
2624
2625 if ( *nstep > 1 )
2626 fprintf(stdout,"- Nombre d'étapes de calcul associées au maillage : "IFORMAT"\n",
2627 *nstep);
2628 if (strlen(dtunit))
2629 fprintf(stdout,"- Unité des dates d'étapes de calcul associées au maillage : %s\n",
2630 dtunit);
2631
2632 /* lecture du nom universel (presence optionnelle) */
2633 ret = MEDmeshUniversalNameRd(fid,nommaa,nom_universel);
2634 if (ret == 0)
2635 fprintf(stdout,"- Nom universel du maillage : %s \n",nom_universel);
2636
2637 return;
2638 }
2639
2640 /******************************************************************************
2641 *
2642 * - Nom de la fonction : main
2643 * - Description : fonction "main" de l'outil de DUMP d'un fichier MED.
2644 * - Parametres :
2645 * - argc (IN) : nombre d'arguments sur la ligne de commande.
2646 * - argv (IN) : liste des arguments.
2647 *
2648 ******************************************************************************/
2649
main(int argc,char ** argv)2650 int main (int argc, char **argv)
2651 {
2652 med_err ret = 0;
2653 med_idt fid;
2654 int numero;
2655 med_switch_mode mode_coo;
2656 med_connectivity_mode typ_con;
2657 int lecture_en_tete_seulement = 0;
2658 med_int mdim,nmaa;
2659 /* nom du maillage */
2660 char nommaa[MED_NAME_SIZE+1];
2661 char maillage_description[MED_COMMENT_SIZE+1];
2662 med_mesh_type type_maillage;
2663 med_int edim;
2664 int decalage;
2665 char nomcoo[3*MED_SNAME_SIZE+1]="";
2666 char unicoo[3*MED_SNAME_SIZE+1]="";
2667 char dtunit[MED_SNAME_SIZE+1]="";
2668 med_int nstep=0,numdt=MED_NO_DT,numit=MED_NO_IT;
2669 int csit=0;
2670 med_float dt=0.0;
2671 med_axis_type rep;
2672 /****************************************************************************
2673 * TEST DU NOMBRE D'ARGUMENTS *
2674 * argument 1 = nom du fichier MED *
2675 ****************************************************************************/
2676
2677 structure = 0;
2678 decalage = 0;
2679 if (argc > 2 && strcmp(argv[1], "--structure") == 0) {
2680 argc--;
2681 decalage = 1;
2682 structure = 1;
2683 }
2684
2685 EXIT_IF(argc != 2 && argc != 5,"nombre de parametres incorrects\n",NULL);
2686
2687
2688 /****************************************************************************
2689 * OUVERTURE DU FICHIER EN LECTURE *
2690 ****************************************************************************/
2691 fid = ouverture_fichier_MED(argv[1 + decalage]);
2692 /* ICI;_MEDobjetsOuverts(fid); */
2693
2694 /****************************************************************************
2695 * QUESTIONS PRELIMINAIRES *
2696 * 1. Mode d'affichage des coordonnees (entrelace ou non) ? *
2697 * 2. Connectivite des elements (nodale ou descendante) ? *
2698 ***************************************************************************/
2699 fprintf(stdout,"\n >>>>>> DUMP DU FICHIER %s >>>>>>\n",argv[1 + decalage]);
2700
2701 /* lecture et affichage de l'en-tete du fichier */
2702 lecture_en_tete(fid,argv[1 + decalage]);
2703 /* ICI;_MEDobjetsOuverts(fid); */
2704
2705 if (argc == 2)
2706 parametrage(&mode_coo,&typ_con);
2707 else {
2708 if (! strcmp(argv[3 + decalage],"NODALE"))
2709 typ_con = MED_NODAL;
2710 if (! strcmp(argv[3 + decalage],"DESCENDANTE"))
2711 typ_con = MED_DESCENDING;
2712
2713 if (!strcmp(argv[4 + decalage],"NO_INTERLACE"))
2714 mode_coo = MED_NO_INTERLACE;
2715 if (!strcmp(argv[4 + decalage],"FULL_INTERLACE"))
2716 mode_coo = MED_FULL_INTERLACE;
2717 if (! strcmp(argv[4 + decalage],"LECTURE_EN_TETE_SEULEMENT"))
2718 lecture_en_tete_seulement = 1;
2719 }
2720
2721
2722 /****************************************************************************
2723 * QUEL MAILLAGE LIRE ? *
2724 ***************************************************************************/
2725 nmaa = MEDnMesh(fid);
2726 /* ICI;_MEDobjetsOuverts(fid); */
2727
2728 EXIT_IF(nmaa < 0,"lors de la lecture du nombre de maillages",NULL);
2729
2730 /* Quel maillage lire ? */
2731 if (argc == 2) {
2732 fprintf(stdout,"- Il y a %d maillages dans ce fichier \n",nmaa);
2733 fprintf(stdout," Lequel voulez-vous lire (1|2|3|...|n) ?\n");
2734 do {
2735 fprintf(stdout," Reponse : ");
2736 scanf("%d",&numero);
2737 } while ( (numero > nmaa) || (numero <= 0) );
2738 }
2739 else {
2740 numero = atoi(argv[2 + decalage]);
2741 EXIT_IF(numero > nmaa || numero <= 0,"ce numero de maillage n'existe pas",
2742 NULL);
2743 }
2744
2745 /****************************************************************************
2746 * PARAMETRES SCALAIRES *
2747 ****************************************************************************/
2748
2749 /* on va lire l'ensemble des parametres scalaire */
2750 lecture_parametres_scalaires(fid,lecture_en_tete_seulement);
2751 /* _MEDobjetsOuverts(fid); */
2752
2753 /****************************************************************************
2754 * INFOS GENERALES SUR LE MAILLAGE *
2755 ****************************************************************************/
2756 lecture_information_maillage(fid,numero,nommaa,&mdim,&edim,&type_maillage,
2757 maillage_description,&nstep,dtunit,nomcoo,unicoo,&rep);
2758 /* _MEDobjetsOuverts(fid); */
2759
2760 for (csit=1; csit <= nstep; ++csit) {
2761
2762 ret = MEDmeshComputationStepInfo(fid, nommaa, csit, &numdt, &numit, &dt);
2763 EXIT_IF(ret < 0,"lors de l'appel à MEDmeshComputationStepInfo",NULL);
2764
2765 /****************************************************************************
2766 * LECTURE DU MAILLAGE ET DES RESULTATS ASSOCIES *
2767 ****************************************************************************/
2768 /* _MEDobjetsOuverts(fid); */
2769
2770 if (type_maillage == MED_UNSTRUCTURED_MESH)
2771 lecture_maillage_non_structure(fid,nommaa,numdt,numit,mdim,edim,mode_coo,typ_con,
2772 nomcoo,unicoo,&rep,lecture_en_tete_seulement);
2773 else {
2774 lecture_maillage_structure(fid,nommaa,numdt,numit,mdim,edim,mode_coo,
2775 nomcoo,unicoo,lecture_en_tete_seulement);
2776
2777 }
2778 /* _MEDobjetsOuverts(fid); */
2779 /* on lit ensuite les resultats associes au maillage selectionne */
2780 lecture_resultats(fid,nommaa,numdt,numit,mode_coo,lecture_en_tete_seulement);
2781 /* _MEDobjetsOuverts(fid); */
2782
2783 }
2784
2785 /****************************************************************************
2786 * FERMETURE DU FICHIER *
2787 ****************************************************************************/
2788 ret = MEDfileClose(fid);
2789 EXIT_IF(ret < 0,"lors de la fermeture du fichier",argv[1 + decalage]);
2790
2791 fprintf(stdout,"\n >>>>>> FIN DU DUMP DU FICHIER %s >>>>>>\n",argv[1 + decalage]);
2792
2793 return EXIT_SUCCESS;
2794 }
2795