Salome HOME
Mantis issue 0021668: [CEA 564] MED2.1 to MED2.3
[modules/med.git] / src / MEDWrapper / V2_1 / Core / mdump_V2_1.cxx
1 /******************************************************************************
2  * - Nom du fichier : mdump.c
3  *
4  * - Description : utilitaire de dump pour fichier MED V2.1
5  *
6  *****************************************************************************/
7 #define NBR_MAILLE_EQU 7
8
9 #include <stdio.h>
10 #include <string.h>
11 #include <stdlib.h>
12
13 #include "med.hxx"
14 using namespace med_2_1;
15
16 /*******************************************************************
17  *  DUMP D'UN FICHIER MED STRUCTURE EN GRILLE :                    *
18  *  NOEUDS, ELEMENTS, FAMILLES, EQUIVALENCES, CHAMPS DE RESULTATS  *
19  *******************************************************************/
20
21 int grid_cartesian_or_polar(med_idt fid, int numero, med_mode_switch mode_coo) {
22     med_int mdim, nnoe, nfam, i, j;
23     char nommaa[MED_TAILLE_NOM+1];
24     char nom_universel[MED_TAILLE_LNOM+1];
25     med_float *coo;
26     med_int *fam;
27     char nomcoo[3*MED_TAILLE_PNOM+1];
28     char unicoo[3*MED_TAILLE_PNOM+1];
29     med_repere rep;
30     char str[MED_TAILLE_PNOM+1];
31
32     fprintf(stdout,"\n(****************************)\n");
33     fprintf(stdout,"(* INFORMATIONS GENERALES : *)\n");
34     fprintf(stdout,"(****************************)\n");
35
36     /* lecture du nom et de la dimension de la grille */
37     if (MEDmaaInfo(fid, numero, nommaa, &mdim) < 0) {
38         fprintf(stderr, ">> ERREUR : lecture du nom de la grille\n");
39         return(EXIT_FAILURE);
40     };
41     fprintf(stdout, "- Nom de la grille : <<%s>>\n", nommaa);
42     fprintf(stdout, "- Dimension de la grille : %d\n", mdim);
43
44     /* lecture du nom universel (presence optionnelle) */
45     if (MEDunvLire(fid, nommaa, nom_universel) > 0) {
46         fprintf(stdout, "- Nom universel de la grille : %s \n", nom_universel);
47     } else {
48         fprintf(stdout, "- Pas de nom universel \n");
49     };
50
51     /* nombre de familles */
52     nfam = MEDnFam(fid, nommaa, 0, (med_dim_famille)0);
53     if (nfam < 0) {
54         fprintf(stderr, ">> ERREUR : lecture du nombre de familles\n");
55         return(EXIT_FAILURE);
56     };
57     fprintf(stdout, "- Nombre de familles : %d \n", nfam);
58
59     fprintf(stdout, "\n- Lecture des indices : \n");
60     for (i=0; i<mdim; i++) {
61         fprintf(stdout, "-- Lecture de l'indice : %d\n", i);
62         nnoe = MEDnGrid(fid, nommaa, (med_grid)i);
63         fprintf(stdout, "-- nombre d'indice : %d\n", nnoe);
64         coo  = (med_float*)malloc(sizeof(med_float)*nnoe);
65
66         if (MEDgridLire(fid, nommaa, mdim, coo, i, mode_coo, &rep, nomcoo, unicoo) < 0) {
67             fprintf(stderr, ">> ERREUR : lecture des indices \n");
68             return(EXIT_FAILURE);
69         };
70
71         fprintf(stdout, "- Type de repere des coordonnees : %d \n", rep);
72
73         fprintf(stdout, "- Nom des coordonnees : \n");
74         for (j=0; j<mdim; j++) {
75             strncpy(str, nomcoo+j*MED_TAILLE_PNOM, MED_TAILLE_PNOM);
76             str[MED_TAILLE_PNOM] = '\0';
77             fprintf(stdout, " %s ", str);
78         };
79
80         fprintf(stdout, "\n- Unites des coordonnees : \n");
81         for (j=0; j<mdim; j++) {
82             strncpy(str, unicoo+j*MED_TAILLE_PNOM, MED_TAILLE_PNOM);
83             str[MED_TAILLE_PNOM] = '\0';
84             fprintf(stdout, " %s ", str);
85         };
86
87         fprintf(stdout, "\n-- Coordonnees des indices : \n");
88         for (j=0; j<nnoe; j++) {
89             fprintf(stdout, "   %f ", *(coo+j));
90         };
91
92         fprintf(stdout, "\n\n");
93         free(coo);
94     };
95
96     nfam = MEDnGrid(fid, nommaa, (med_grid)-2);
97     fprintf(stdout, "- Nombre de noeud pour les familles : %d\n", nfam);
98     if (nfam > 0) {
99         fam = (med_int*)malloc(sizeof(med_int)*nfam);
100         if (MEDfamGridLire(fid, nommaa, fam, nfam,MED_NOEUD) < 0) {
101             fprintf(stderr, ">> ERREUR : lecture des familles\n");
102             return(EXIT_FAILURE);
103         };
104
105         fprintf(stdout, "\n- Numeros des familles des noeuds :\n");
106         for (i=0; i<nfam; i++) {
107             fprintf(stdout, " %d ", *(fam+i));
108         };
109         fprintf(stdout, "\n");
110         free(fam);
111     };
112
113     return(0);
114 }
115
116 int grid_body_fitted(med_idt fid, int numero, med_mode_switch mode_coo) {
117     med_int mdim, nnoe, nfam, i;
118     char nommaa[MED_TAILLE_NOM+1];
119     char nom_universel[MED_TAILLE_LNOM+1];
120     char str[MED_TAILLE_PNOM+1];
121     char nomcoo[3*MED_TAILLE_PNOM+1];
122     char unicoo[3*MED_TAILLE_PNOM+1];
123     med_float *coo;
124     med_int *fam;
125     med_repere rep;
126
127     fprintf(stdout,"\n(****************************)\n");
128     fprintf(stdout,"(* INFORMATIONS GENERALES : *)\n");
129     fprintf(stdout,"(****************************)\n");
130
131     /* lecture du nom et de la dimension du maillage */
132     if (MEDmaaInfo(fid, numero, nommaa, &mdim) < 0) {
133         fprintf(stderr, ">> ERREUR : lecture du nom du maillage body fitted\n");
134         return(EXIT_FAILURE);
135     };
136     fprintf(stdout, "- Nom du maillage body fitted : <<%s>>\n", nommaa);
137     fprintf(stdout, "- Dimension du maillage body fitted : %d\n", mdim);
138
139     /* lecture du nom universel (presence optionnelle) */
140     if (MEDunvLire(fid, nommaa, nom_universel) > 0) {
141         fprintf(stdout, "- Nom universel du maillage body fitted : %s \n", nom_universel);
142     } else {
143         fprintf(stdout, "- Pas de nom universel \n");
144     };
145
146     /* Combien de noeuds ? */
147     /*    nnoe = MEDnGrid(fid, nommaa, -1);*/
148     nnoe = MEDnGrid(fid, nommaa, MED_GRID_NOEUD);
149     if (nnoe < 0) {
150         fprintf(stderr, ">> ERREUR : lecture du nombre de noeuds (via MEDnGrid) \n");
151         return(EXIT_FAILURE);
152     };
153     fprintf(stdout, "- Nombre de noeuds : %d \n", nnoe);
154
155     /* Combien de noeuds dans la dimension 1 ? */
156     i = MEDnGrid(fid, nommaa, (med_grid)0);
157     if (i < 0) {
158         fprintf(stderr, ">> ERREUR : lecture du nombre de noeuds (via MEDnGrid) dans la dimension 1 \n");
159         return(EXIT_FAILURE);
160     };
161     fprintf(stdout, "- Nombre de noeuds dans la dimension 1 : %d \n", i);
162
163     /* Combien de noeuds dans la dimension 2 ? */
164     i = MEDnGrid(fid, nommaa, (med_grid)1);
165     if (i < 0) {
166         fprintf(stderr, ">> ERREUR : lecture du nombre de noeuds (via MEDnGrid) dans la dimension 2 \n");
167         return(EXIT_FAILURE);
168     };
169     fprintf(stdout, "- Nombre de noeuds dans la dimension 2 : %d \n", i);
170
171     /* nombre de familles */
172     nfam = MEDnFam(fid, nommaa, 0,(med_dim_famille)0);
173     if (nfam < 0) {
174         fprintf(stderr, ">> ERREUR : lecture du nombre de familles \n");
175         return(EXIT_FAILURE);
176     };
177     fprintf(stdout, "- Nombre de familles : %d \n", nfam);
178
179     coo = (med_float*)malloc(sizeof(med_float)*nnoe*mdim);
180     fam = (med_int*)malloc(sizeof(med_int)*nnoe);
181
182     if (MEDbodyFittedLire(fid, nommaa, mdim, coo, mode_coo, &rep, nomcoo, unicoo, fam, nnoe) < 0) {
183         fprintf(stderr, ">> ERREUR : lecture des noeuds \n");
184         return(EXIT_FAILURE);
185     };
186
187     fprintf(stdout, "- Type de repere des coordonnees : %d \n", rep);
188
189     fprintf(stdout, "- Nom des coordonnees : \n");
190     for (i=0; i<mdim; i++) {
191         strncpy(str, nomcoo+i*MED_TAILLE_PNOM, MED_TAILLE_PNOM);
192         str[MED_TAILLE_PNOM] = '\0';
193         fprintf(stdout, " %s ", str);
194     };
195
196     fprintf(stdout, "\n- Unites des coordonnees : \n");
197     for (i=0; i<mdim; i++) {
198         strncpy(str, unicoo+i*MED_TAILLE_PNOM, MED_TAILLE_PNOM);
199         str[MED_TAILLE_PNOM] = '\0';
200         fprintf(stdout, " %s ", str);
201     };
202
203     fprintf(stdout, "\n- Coordonnees des noeuds : \n");
204     for (i=0; i<nnoe*mdim; i++) {
205         fprintf(stdout, " %f ", *(coo+i));
206     };
207
208     fprintf(stdout, "\n- Numeros des familles des noeuds : \n");
209     for (i=0; i<nnoe; i++) {
210         fprintf(stdout, " %d ", *(fam+i));
211     };
212     fprintf(stdout, "\n");
213
214     if (nnoe) {
215         free(coo);
216         free(fam);
217     };
218     return(0);
219 }
220
221 int grid(med_idt fid, int numero, med_grid_type theType, med_mode_switch mode_coo) {
222     switch (theType) {
223         case MED_CARTESIAN : {
224             fprintf(stdout, "- Type de la grille : MED_CARTESIAN\n");
225             return(grid_cartesian_or_polar(fid, numero, mode_coo));
226         };
227         case MED_POLAR : {
228             fprintf(stdout, "- Type de la grille : MED_POLAR\n");
229             return(grid_cartesian_or_polar(fid, numero, mode_coo));
230         };
231         case MED_BODY_FITTED : {
232             fprintf(stdout, "- Type de la grille : MED_BODY_FITTED\n");
233             return(grid_body_fitted(fid, numero, mode_coo));
234         };
235         default : {
236             fprintf(stderr, ">> ERREUR : type de maillage inconnu\n");
237             return(EXIT_FAILURE);
238         };
239     };
240 }
241
242 /******************************************************************************
243  * DUMP D'UN FICHIER MED  : NOEUDS,
244  * ELEMENTS, FAMILLES, EQUIVALENCES, CHAMPS DE RESULTATS
245  *****************************************************************************/
246
247 int main (int argc, char **argv)
248 {
249   med_err ret = 0;
250   med_idt fid;
251   int i,j,k,l,kp;
252   int numero;
253   char message[200];
254   /* nombre d'objets MED */
255   char nom_universel[MED_TAILLE_LNOM+1];
256   med_int long_fichier_en_tete; 
257   char *fichier_en_tete;
258   char version_hdf[10];
259   char version_med[10];
260   med_int nmaa,mdim,nnoe;
261   //med_int nmai[MED_NBR_GEOMETRIE_MAILLE],nfac[MED_NBR_GEOMETRIE_FACE];
262   //med_int nare[MED_NBR_GEOMETRIE_ARETE];
263   /* nom du maillage */
264   char nommaa[MED_TAILLE_NOM+1];
265   /* noeuds */
266   med_float *coo;
267   char nomcoo[3*MED_TAILLE_PNOM+1];
268   char unicoo[3*MED_TAILLE_PNOM+1];
269   char *nomnoe;
270   med_int *numnoe;
271   med_int *nufano; 
272   med_repere rep;
273   med_booleen inonoe,inunoe;
274   med_mode_switch mode_coo;
275   char str[MED_TAILLE_PNOM+1];
276   /* elements */
277   med_int nsup;
278   med_int edim;
279   med_int taille;
280   med_int *connectivite;
281   char *nomele;
282   med_int *numele;
283   med_int *nufael;
284   med_booleen inoele, inuele;
285   med_connectivite typ_con;
286   med_geometrie_element typgeo;
287   med_geometrie_element typmai[MED_NBR_GEOMETRIE_MAILLE] = {MED_POINT1,MED_SEG2, 
288                                                    MED_SEG3,MED_TRIA3,
289                                                    MED_TRIA6,MED_QUAD4,
290                                                    MED_QUAD8,MED_TETRA4,
291                                                    MED_TETRA10,MED_HEXA8,
292                                                    MED_HEXA20,MED_PENTA6,
293                                                    MED_PENTA15,MED_PYRA5,
294                                                    MED_PYRA13};
295   med_int desmai[MED_NBR_GEOMETRIE_MAILLE] = {0,2,3,3,3,4,4,4,4,6,6,5,5,5,5};
296   med_int nmailles[MED_NBR_GEOMETRIE_MAILLE];
297   char nommai[MED_NBR_GEOMETRIE_MAILLE] [MED_TAILLE_NOM+1] = {"MED_POINT1",
298                                                           "MED_SEG2", 
299                                                           "MED_SEG3",
300                                                           "MED_TRIA3",
301                                                           "MED_TRIA6",
302                                                           "MED_QUAD4",
303                                                           "MED_QUAD8",
304                                                           "MED_TETRA4",
305                                                           "MED_TETRA10",
306                                                           "MED_HEXA8",
307                                                           "MED_HEXA20",
308                                                           "MED_PENTA6",
309                                                           "MED_PENTA15",
310                                                           "MED_PYRA5",
311                                                           "MED_PYRA13"};
312   med_geometrie_element typfac[MED_NBR_GEOMETRIE_FACE] = {MED_TRIA3,MED_TRIA6,
313                                                  MED_QUAD4,MED_QUAD8};
314   med_int desfac[MED_NBR_GEOMETRIE_FACE] = {3,3,4,4};
315   med_int nfaces[MED_NBR_GEOMETRIE_FACE];
316   char nomfac[MED_NBR_GEOMETRIE_FACE][MED_TAILLE_NOM+1] = {"MED_TRIA3","MED_TRIA6",
317                                                        "MED_QUAD4","MED_QUAD8"};
318   med_geometrie_element typare[MED_NBR_GEOMETRIE_ARETE] = {MED_SEG2,MED_SEG3};
319   med_int desare[MED_NBR_GEOMETRIE_ARETE] = {2,3};
320   med_int naretes[MED_NBR_GEOMETRIE_ARETE];
321   char nomare[MED_NBR_GEOMETRIE_ARETE] [MED_TAILLE_NOM+1] = {"MED_SEG2","MED_SEG3"};
322   /* familles */
323   med_int nfam;
324   med_int natt,ngro;
325   char *attdes,*gro;
326   med_int *attval,*attide;
327   char nomfam[MED_TAILLE_NOM+1];
328   med_int numfam;
329   char str1[MED_TAILLE_DESC+1];
330   char str2[MED_TAILLE_LNOM+1];
331   /* equivalences */
332   med_int nequ,ncor;
333   med_int *cor;
334   char equ[MED_TAILLE_NOM+1];
335   char des[MED_TAILLE_DESC+1];
336   /* champs de resultats */
337   char *comp;
338   char *unit;
339   char nomcha[MED_TAILLE_NOM+1];
340   char maillage_champ[MED_TAILLE_NOM+1];
341   med_int ncomp;
342   med_float *valr;
343   med_int *vale;
344   med_type_champ typcha;
345   med_int ncha;
346   med_int nval;
347   int reponse;
348   int lecture_en_tete_seulement = 0;
349   med_int npdt;
350   med_int ngauss,numdt,numo;
351   med_float dt;
352   char dtunit[MED_TAILLE_PNOM+1];
353   char pflnom[MED_TAILLE_NOM+1];
354   med_int pflsize;
355   med_int *pflval;
356   med_int isGrid;
357   med_grid_type theType;
358
359   /****************************************************************************
360   *                  TEST DU NOMBRE D'ARGUMENTS                               *
361   *                  argument 1 = nom du fichier MED                          *
362   ****************************************************************************/
363   if (argc != 2 && argc != 5)
364     {
365       fprintf(stderr,">> ERREUR : nombre de parametres incorrects \n");
366       exit(EXIT_FAILURE);
367     }
368
369   /****************************************************************************
370   *                      OUVERTURE DU FICHIER EN LECTURE                      *
371   ****************************************************************************/
372   fid = MEDouvrir(argv[1],MED_LECT);
373   if (fid < 0)
374     {
375       fprintf(stderr,">> ERREUR : ouverture du fichier %s \n",argv[1]);
376       exit(EXIT_FAILURE);
377     }
378
379
380   /****************************************************************************
381   *                     QUESTIONS PRELIMINAIRES                               *
382   *    1. Mode d'affichage des coordonnees (entrelace ou non) ?               *
383   *    2. Connectivite des elements (nodale ou descendante)                   *
384   ****************************************************************************/
385   fprintf(stdout,"\n >>>>>> DUMP DU FICHIER %s >>>>>>\n",argv[1]);
386
387   /* en-tete du fichier (presence optionnelle) */
388   long_fichier_en_tete = MEDlFichDes(fid);
389   if (long_fichier_en_tete > 0)
390     {
391       fichier_en_tete = (char *) malloc(sizeof(char)*(long_fichier_en_tete+1));
392       ret = MEDfichEntete(fid,MED_FICH_DES,fichier_en_tete);
393       if (ret < 0)
394         {
395           fprintf(stderr,">> ERREUR : lecture de l'en-tete du fichier \n");
396           exit(EXIT_FAILURE);
397         }      
398       fprintf(stdout,"- En-tete du fichier : %s \n",fichier_en_tete);
399       free(fichier_en_tete);
400     }
401   /* versions hdf et med */
402   ret = MEDfichEntete(fid,MED_HDF_VERSION,version_hdf);
403   if (ret < 0)
404     {
405       fprintf(stderr,">> ERREUR : lecture du numero de version de HDF \n");
406       exit(EXIT_FAILURE);
407     }      
408   ret = MEDfichEntete(fid,MED_VERSION,version_med);
409   if (ret < 0)
410     {
411       fprintf(stderr,">> ERREUR : lecture du numero de version de MED \n");
412       exit(EXIT_FAILURE);
413     }     
414   fprintf(stdout,"- Version de HDF utilisee : %s \n",version_hdf);
415   fprintf(stdout,"- Version de MED utilisee : %s \n",version_med);
416
417   if (argc == 2)
418     {
419       fprintf(stdout,"(*****************)\n");
420       fprintf(stdout,"(* PARAMETRAGE : *)\n");
421       fprintf(stdout,"(*****************)\n");
422       fprintf(stdout,"- Mode d'affichage des coordonnées des noeuds ? \n");
423       fprintf(stdout,"  1. Mode entrelacé : taper 1 \n"); 
424       fprintf(stdout,"  2. Mode non entrelacé : taper 2 \n");
425       reponse = 0;
426       do
427         {
428           fprintf(stdout,"  Reponse : ");
429           scanf("%d",&reponse);
430         }
431       while (reponse != 1 && reponse != 2);
432       if (reponse == 1)
433         mode_coo = MED_FULL_INTERLACE;
434       else
435         mode_coo = MED_NO_INTERLACE;
436       
437       fprintf(stdout,"- Connectivité des éléments ? \n");
438       fprintf(stdout,"  1. Nodale : taper 1 \n"); 
439       fprintf(stdout,"  2. Descendante : taper 2 \n");
440       reponse = 0;
441       do
442         {
443           fprintf(stdout,"  Reponse : ");
444           scanf("%d",&reponse);
445         }
446       while (reponse != 1 && reponse != 2);
447       if (reponse == 1)
448         typ_con = MED_NOD;
449       else
450         typ_con = MED_DESC;
451     }
452   else
453       {
454         if (! strcmp(argv[3],"NODALE"))
455           typ_con = MED_NOD;
456         if (! strcmp(argv[3],"DESCENDANTE"))    
457           typ_con = MED_DESC;
458         
459         if (!strcmp(argv[4],"NO_INTERLACE"))
460           mode_coo = MED_NO_INTERLACE;
461         if (!strcmp(argv[4],"FULL_INTERLACE"))
462           mode_coo = MED_FULL_INTERLACE;
463         if (! strcmp(argv[4],"LECTURE_EN_TETE_SEULEMENT"))
464           lecture_en_tete_seulement = 1;
465
466       }
467
468   /****************************************************************************
469   *                      QUEL MAILLAGE LIRE                                   *
470   ****************************************************************************/
471   nmaa = MEDnMaa(fid);
472   if (nmaa < 0)
473     {
474       fprintf(stderr,">> ERREUR : lecture du nombre de maillages \n");
475       exit(EXIT_FAILURE);
476     }
477   
478   /* Quel maillage lire ? */
479   if (argc == 2)
480     {
481       fprintf(stdout,"- Il y a %d maillages dans ce fichier \n",nmaa);
482       fprintf(stdout,"  Lequel voulez-vous lire (1|2|3|...|n) ?\n");
483       do
484         {
485           fprintf(stdout,"  Reponse : ");
486           scanf("%d",&numero);
487         }
488       while (numero > nmaa || numero <= 0);
489     }
490   else
491     {
492       numero = atoi(argv[2]);
493       if (numero > nmaa || numero  <= 0)
494         {
495           fprintf(stderr,">> ERREUR : il y a %d maillages dans ce fichier  \n",
496                   nmaa);
497           exit(EXIT_FAILURE);
498         }
499     }
500
501 /*****************************************************************************
502  *       QUELLE SORTE DE MAILLAGE : GRILLE OU PAS                            *
503  *****************************************************************************/
504
505     fprintf(stdout,"\n(**************************************************)\n");
506     fprintf(stdout,"(* MAILLAGE STRUCTURE (GRILLE) OU NON STRUCTURE : *)\n");
507     fprintf(stdout,"(**************************************************)\n");
508
509     /* lecture de la sorte de maillage : structure ou pas */
510     ret = MEDgridInfo(fid, numero, &isGrid, &theType);
511     if (ret < 0) {
512         fprintf(stderr, ">> ERREUR : lecture de la sorte de maillage (structure ou pas)\n");
513         exit(EXIT_FAILURE);
514     };
515     fprintf(stdout, "- Sorte de maillage : %s\n", isGrid? "structure (grille)": "non structure");
516     if (isGrid) {
517         ret = grid(fid, numero, theType, mode_coo);
518         if (ret == 0) {
519             ret = MEDfermer(fid);
520             if (ret == 0) {
521                 fprintf(stdout, "\n >>>>>> FIN DU DUMP DU FICHIER %s >>>>>>\n", argv[1]);
522             } else {
523                 fprintf(stderr, ">> ERREUR : erreur a la fermeture du fichier %s\n", argv[1]);
524             };
525         };
526         if (ret == 0) {
527             return(0);
528         } else {
529             exit(EXIT_FAILURE);
530         };
531     };
532
533   /****************************************************************************
534   *                       NOMBRES D'OBJETS MED                                *
535   ****************************************************************************/
536   fprintf(stdout,"\n(****************************)\n");
537   fprintf(stdout,"(* INFORMATIONS GENERALES : *)\n");
538   fprintf(stdout,"(****************************)\n");
539
540   /* lecture du nom et de la dimension du maillage */
541   ret = MEDmaaInfo(fid,numero,nommaa,&mdim);
542   if (ret < 0)
543     {
544       fprintf(stderr,">> ERREUR : lecture du nom du maillage \n");
545       exit(EXIT_FAILURE);
546     }
547   fprintf(stdout,"- Nom du maillage : <<%s>>\n",nommaa);
548   fprintf(stdout,"- Dimension du maillage : %d\n",mdim);
549
550   /* lecture du nom universel (presence optionnelle) */
551  ret = MEDunvLire(fid,nommaa,nom_universel);
552  if (ret > 0)
553    fprintf(stdout,"- Nom universel du maillage : %s \n",nom_universel);
554  else
555    fprintf(stdout,"- Pas de nom universel \n");
556   
557       
558   /* Combien de noeuds ? */
559   nnoe = MEDnEntMaa(fid,nommaa,MED_COOR,MED_NOEUD,(med_geometrie_element)0,(med_connectivite)0);
560   if (nnoe < 0)
561     {
562       fprintf(stderr,">> ERREUR : lecture du nombre de noeuds (via MEDnEntMaa) \n");
563       exit(EXIT_FAILURE);
564     }
565   fprintf(stdout,"- Nombre de noeuds : %d \n",nnoe);
566
567   /* Combien de mailles, faces ou aretes ? */
568   for (i=0;i<MED_NBR_GEOMETRIE_MAILLE;i++)
569     {
570       nmailles[i] = MEDnEntMaa(fid,nommaa,MED_CONN,MED_MAILLE,typmai[i],
571                                typ_con);
572       if (nmailles[i] < 0)
573         {
574           fprintf(stderr,">> ERREUR : lecture du nombre de mailles \n");
575           exit(EXIT_FAILURE);
576         }
577       fprintf (stdout,"- Nombre de mailles de type %s : %d \n",nommai[i],nmailles[i]);
578     }
579
580   for (i=0;i<MED_NBR_GEOMETRIE_FACE;i++)
581     {
582       nfaces[i] = MEDnEntMaa(fid,nommaa,MED_CONN,MED_FACE,typfac[i],
583                              typ_con);
584       if (nfaces[i] < 0)
585         {
586           fprintf(stderr,">> ERREUR : lecture du nombre de faces \n");
587           exit(EXIT_FAILURE);
588         }
589       fprintf (stdout,"- Nombre de faces de type %s : %d \n",nomfac[i],nfaces[i]);
590     }    
591
592   for (i=0;i<MED_NBR_GEOMETRIE_ARETE;i++)
593     {
594       naretes[i] = MEDnEntMaa(fid,nommaa,MED_CONN,MED_ARETE,typare[i],
595                               typ_con); 
596       if (naretes[i] < 0)
597         {
598           fprintf(stderr,">> ERREUR : lecture du nombre d'aretes \n");
599           exit(EXIT_FAILURE);
600         }
601       fprintf (stdout,"- Nombre d'aretes de type %s : %d \n",nomare[i],naretes[i]);
602     }
603
604   /* nombre de familles */
605   nfam = MEDnFam(fid,nommaa,0,(med_dim_famille)0);
606   if (nfam < 0)
607     {
608       fprintf(stderr,">> ERREUR : lecture du nombre de familles \n");
609       exit(EXIT_FAILURE);
610     }   
611   fprintf(stdout,"- Nombre de familles : %d \n",nfam);
612
613   /* combien d'equivalences dans le fichier */
614   nequ = MEDnEquiv(fid,nommaa);
615   if (nequ < 0)
616     {
617       fprintf(stderr,">> ERREUR : lecture du nombre d'equivalences \n");
618       exit(EXIT_FAILURE);
619     }   
620     fprintf(stdout,"- Nombre d'equivalences : %d \n",nequ);
621
622   /* combien de champs dans le fichier */
623   ncha = MEDnChamp(fid,0);
624   if (ncha < 0)
625     {
626       fprintf(stderr,">> ERREUR : lecture du nombre de champs \n");
627       exit(EXIT_FAILURE);
628     }   
629   fprintf(stdout,"- Nombre de champs : %d \n",ncha);
630
631   /* Doit-on s'arreter ? */
632   if (lecture_en_tete_seulement)
633     {
634       ret = MEDfermer(fid);
635       if (ret == 0)
636         {
637           fprintf(stdout,"\n >>>>>> FIN DU DUMP DU FICHIER %s >>>>>>\n",argv[1]);
638           return 0;
639         }
640       else
641         {
642           fprintf(stderr,">> ERREUR : fermeture du fichier %s  \n",argv[1]);
643           exit(EXIT_FAILURE);
644         }
645     }
646
647   /****************************************************************************
648   *                       LECTURE DES NOEUDS                                  *
649   ****************************************************************************/
650   fprintf(stdout,"\n(************************)\n");
651   fprintf(stdout,"(* NOEUDS DU MAILLAGE : *)\n");
652   fprintf(stdout,"(************************)\n");
653
654   /* Allocations memoires */
655   /* table des coordonnees 
656      profil : (dimension * nombre de noeuds ) */
657   coo = (med_float*) malloc(sizeof(med_float)*nnoe*mdim);
658   /* table  des numeros, des numeros de familles des noeuds
659      profil : (nombre de noeuds) */
660   numnoe = (med_int*) malloc(sizeof(med_int)*nnoe);
661   nufano = (med_int*) malloc(sizeof(med_int)*nnoe);
662   /* table des noms des noeuds 
663      profil : (nnoe*MED_TAILLE_PNOM+1) */
664   nomnoe = (char*) malloc(MED_TAILLE_PNOM*nnoe+1);
665
666   /* lecture des noeuds : 
667      - coordonnees
668      - noms (optionnel dans un fichier MED) 
669      - numeros (optionnel dans un fichier MED) 
670      - numeros des familles */
671   ret = MEDnoeudsLire(fid,nommaa,mdim,coo,mode_coo,&rep,
672                       nomcoo,unicoo,nomnoe,&inonoe,numnoe,&inunoe,
673                       nufano,nnoe);
674   if (ret < 0)
675     strcpy(message,">> ERREUR : lecture des noeuds \n");
676
677   /* affichage des resultats */
678   if (ret == 0)
679     { 
680       fprintf(stdout,"- Type de repere des coordonnees : %d \n",rep);
681       fprintf(stdout,"- Nom des coordonnees : \n");
682       for (i=0;i<mdim;i++)
683         {
684           strncpy(str,nomcoo+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
685           str[MED_TAILLE_PNOM] = '\0';
686           fprintf(stdout," %s ",str);
687         }
688       fprintf(stdout,"\n- Unites des coordonnees : \n");
689       for (i=0;i<mdim;i++)
690         {
691           strncpy(str,unicoo+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
692           str[MED_TAILLE_PNOM] = '\0';
693           fprintf(stdout," %s ",str);
694         }     
695       fprintf(stdout,"\n- Coordonnees des noeuds : \n");
696       for (i=0;i<nnoe*mdim;i++)
697         fprintf(stdout," %f ",*(coo+i));
698       if (inonoe)
699         {
700           fprintf(stdout,"\n- Noms des noeuds : \n");
701           for (i=0;i<nnoe;i++)
702             {
703               strncpy(str,nomnoe+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
704               str[MED_TAILLE_PNOM] = '\0';
705               fprintf(stdout," %s ",str);
706             }
707         }
708       if (inunoe)
709         {
710           fprintf(stdout,"\n- Numeros des noeuds : \n");
711           for (i=0;i<nnoe;i++)
712               fprintf(stdout," %d ",*(numnoe+i));
713         }
714       fprintf(stdout,"\n- Numeros des familles des noeuds : \n");
715       for (i=0;i<nnoe;i++)
716         fprintf(stdout," %d ",*(nufano+i));
717       fprintf(stdout,"\n");
718     }
719
720   /* liberation memoire */
721   free(coo);
722   free(nomnoe);
723   free(numnoe);
724   free(nufano);
725
726   /****************************************************************************
727   *                       LECTURE DES ELEMENTS                                *
728   ****************************************************************************/
729   fprintf(stdout,"\n(**************************)\n");
730   fprintf(stdout,"(* ELEMENTS DU MAILLAGE : *)\n");
731   fprintf(stdout,"(**************************)");
732   /* Lecture des connectivites, noms, numeros des mailles */
733   if (ret == 0)
734     for (i=0;i<MED_NBR_GEOMETRIE_MAILLE;i++)
735       {
736         if (nmailles[i] > 0 && ret == 0)
737           {
738             /* dimension de la maille */
739             edim = typmai[i] / 100;
740             nsup = 0;
741             if (mdim  == 2 || mdim == 3)
742               if (edim == 1)
743                 nsup = 1;
744             if (mdim == 3)
745               if (edim == 2)
746                 nsup = 1;
747             switch(typ_con)
748               {
749               case MED_NOD :
750                 taille = nsup+typmai[i]%100;
751                 break;
752                 
753               case MED_DESC :
754                 taille = nsup+desmai[i];
755                 break;
756                 
757               default :
758                 ret = -1;
759               }
760             
761             /* allocation memoire */
762             connectivite = (med_int*)malloc(sizeof(med_int)*
763                                             taille*nmailles[i]);
764             nomele = (char*)malloc(sizeof(char)*MED_TAILLE_PNOM*
765                                    nmailles[i]+1);
766             numele = (med_int*)malloc(sizeof(med_int)*
767                                       nmailles[i]);
768             nufael = (med_int*)malloc(sizeof(med_int)*
769                                       nmailles[i]);
770             
771             /* lecture des données */
772             ret = MEDelementsLire(fid,nommaa,mdim,connectivite,mode_coo,
773                                   nomele,&inoele,numele,&inuele,nufael,
774                                   nmailles[i],MED_MAILLE,typmai[i],
775                                   typ_con);
776             if (ret < 0)
777               strcpy(message,">> ERREUR : lecture des mailles \n");
778             
779             /* affichage des resultats */
780             if (ret == 0)
781               {
782                 fprintf(stdout,"\n\n- Mailles de type %s : ", nommai[i]);
783                 fprintf(stdout,"\n  - Connectivité : \n");
784                 for (j=0;j<nmailles[i]*taille;j++)
785                   fprintf(stdout," %d ",*(connectivite+j));
786                 if (inoele)
787                   {
788                     fprintf(stdout,"\n  - Noms : \n");
789                     for (j=0;j<nmailles[i];j++)
790                       {
791                         fprintf(stdout," %d ",*(connectivite+j));
792                         strncpy(str,nomele+j*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
793                         str[MED_TAILLE_PNOM] = '\0';
794                         fprintf(stdout," %s ",str);
795                       }
796                   }
797                 if (inuele)
798                   {
799                     fprintf(stdout,"\n  - Numeros :\n");
800                     for (j=0;j<nmailles[i];j++)
801                       fprintf(stdout," %d ",*(numele+j));
802                   }
803                 fprintf(stdout,"\n  - Numéros de familles : \n");
804                 for (j=0;j<nmailles[i];j++)
805                   fprintf(stdout," %d ",*(nufael+j));
806               }
807                 
808             /* liberation memoire */
809             free(connectivite);
810             free(nomele);
811             free(numele);
812             free(nufael);
813           }
814       }
815
816   if (ret == 0)
817     for (i=0;i<MED_NBR_GEOMETRIE_FACE;i++)
818       {
819         if (nfaces[i] > 0 && ret == 0)
820           {
821             /* dimension de la face */
822             edim = typfac[i] / 100;
823             nsup = 0;
824             if (mdim  == 2 || mdim == 3)
825               if (edim == 1)
826                 nsup = 1;
827             if (mdim == 3)
828               if (edim == 2)
829                 nsup = 1;
830             switch(typ_con)
831               {
832               case MED_NOD :
833                 taille = nsup+typfac[i]%100;
834                 break;
835                 
836               case MED_DESC :
837                 taille = nsup+desfac[i];
838                 break;
839                 
840               default :
841                 ret = -1;
842               }
843             
844             /* allocation memoire */
845             connectivite = (med_int*)malloc(sizeof(med_int)*
846                                             taille*nfaces[i]);
847             nomele = (char*)malloc(sizeof(char)*MED_TAILLE_PNOM*
848                                    nfaces[i]+1);
849             numele = (med_int*)malloc(sizeof(med_int)*
850                                       nfaces[i]);
851             nufael = (med_int*)malloc(sizeof(med_int)*
852                                       nfaces[i]);
853             
854             /* lecture des données */
855             ret = MEDelementsLire(fid,nommaa,mdim,connectivite,mode_coo,
856                                   nomele,&inoele,numele,&inuele,nufael,
857                                   nfaces[i],MED_FACE,typfac[i],
858                                   typ_con);
859             if (ret < 0)
860               strcpy(message,">> ERREUR : lecture des faces \n");
861             
862             /* affichage des resultats */
863             if (ret == 0)
864               {
865                 fprintf(stdout,"\n- Faces de type %s : ", nomfac[i]);
866                 fprintf(stdout,"\n  - Connectivité : \n");
867                 for (j=0;j<nfaces[i]*taille;j++)
868                   fprintf(stdout," %d ",*(connectivite+j));
869                 if (inoele)
870                   {
871                     fprintf(stdout,"\n  - Noms : \n");
872                     for (j=0;j<nfaces[i];j++)
873                       {
874                         fprintf(stdout," %d ",*(connectivite+j));
875                         strncpy(str,nomele+j*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
876                         str[MED_TAILLE_PNOM] = '\0';
877                         fprintf(stdout," %s ",str);
878                       }
879                   }
880                 if (inuele)
881                   {
882                     fprintf(stdout,"\n  - Numeros :\n");
883                     for (j=0;j<nfaces[i];j++)
884                       fprintf(stdout," %d ",*(numele+j));
885                   }
886                 fprintf(stdout,"\n  - Numéros de familles : \n");
887                 for (j=0;j<nfaces[i];j++)
888                   fprintf(stdout," %d ",*(nufael+j));
889               }
890                 
891             /* liberation memoire */
892             free(connectivite);
893             free(nomele);
894             free(numele);
895             free(nufael);
896           }
897     }    
898
899   if (ret == 0)
900     for (i=0;i<MED_NBR_GEOMETRIE_ARETE;i++)
901       {
902         if (naretes[i] > 0 && ret == 0)
903           {
904             /* dimension de l'arete  */
905             edim = typare[i] / 100;
906             nsup = 0;
907             if (mdim  == 2 || mdim == 3)
908               if (edim == 1)
909                 nsup = 1;
910             if (mdim == 3)
911               if (edim == 2)
912                 nsup = 1;
913             switch(typ_con)
914               {
915               case MED_NOD :
916                 taille = nsup+typare[i]%100;
917                 break;
918                 
919               case MED_DESC :
920                 taille = nsup+desare[i];
921                 break;
922                 
923               default :
924                 ret = -1;
925               }
926             
927             /* allocation memoire */
928             connectivite = (med_int*)malloc(sizeof(med_int)*
929                                             taille*naretes[i]);
930             nomele = (char*)malloc(sizeof(char)*MED_TAILLE_PNOM*
931                                    naretes[i]+1);
932             numele = (med_int*)malloc(sizeof(med_int)*
933                                       naretes[i]);
934             nufael = (med_int*)malloc(sizeof(med_int)*
935                                       naretes[i]);
936             
937             /* lecture des données */
938             ret = MEDelementsLire(fid,nommaa,mdim,connectivite,mode_coo,
939                                   nomele,&inoele,numele,&inuele,nufael,
940                                   naretes[i],MED_ARETE,typare[i],
941                                   typ_con);
942             if (ret < 0)
943               strcpy(message,">> ERREUR : lecture des aretes \n");
944             
945             /* affichage des resultats */
946             if (ret == 0)
947               {
948                 fprintf(stdout,"\n- Aretes de type %s : ", nomare[i]);
949                 fprintf(stdout,"\n  - Connectivité : \n");
950                 for (j=0;j<naretes[i]*taille;j++)
951                   fprintf(stdout," %d ",*(connectivite+j));
952                 if (inoele)
953                   {
954                     fprintf(stdout,"\n  - Noms : \n");
955                     for (j=0;j<naretes[i];j++)
956                       {
957                         fprintf(stdout," %d ",*(connectivite+j));
958                         strncpy(str,nomele+j*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
959                         str[MED_TAILLE_PNOM] = '\0';
960                         fprintf(stdout," %s ",str);
961                       }
962                   }
963                 if (inuele)
964                   {
965                     fprintf(stdout,"\n  - Numeros :\n");
966                     for (j=0;j<naretes[i];j++)
967                       fprintf(stdout," %d ",*(numele+j));
968                   }
969                 fprintf(stdout,"\n  - Numéros de familles : \n");
970                 for (j=0;j<naretes[i];j++)
971                   fprintf(stdout," %d ",*(nufael+j));
972               }
973                 
974             /* liberation memoire */
975             free(connectivite);
976             free(nomele);
977             free(numele);
978             free(nufael);
979           }
980       }
981   
982   /****************************************************************************
983   *                       LECTURE DES FAMILLES                                *
984   ****************************************************************************/
985   printf("\n(*************************)\n");
986   printf("(* FAMILLES DU MAILLAGE : *)\n");
987   printf("(*************************)\n");
988   if (ret == 0)
989     for (i=0;i<nfam;i++)
990       {
991         
992         /* nombre de groupes */
993         ngro = MEDnFam(fid,nommaa,i+1,MED_GROUPE);
994         if (ngro < 0)  
995           {
996             ret = -1;
997             strcpy(message,
998                    ">> ERREUR : lecture du nombre de groupes d'une famille \n");
999           }
1000         
1001         /* nombre d'attributs */
1002         if (ret == 0)
1003           {
1004             natt = MEDnFam(fid,nommaa,i+1,MED_ATTR);
1005             if (natt < 0)
1006               {
1007                 ret = -1;
1008                 strcpy(message,
1009                    ">> ERREUR : lecture du nombre d'attributs d'une famille\n");
1010               }
1011           }
1012
1013         if (ret == 0)
1014           fprintf(stdout,"- Famille %d a %d attributs et %d groupes \n",i+1,natt,ngro); 
1015
1016         /* nom,numero,attributs,groupes */
1017         if (ret == 0)
1018           {
1019             attide = (med_int*) malloc(sizeof(med_int)*natt);
1020             attval = (med_int*) malloc(sizeof(med_int)*natt);       
1021             attdes = (char *) malloc(MED_TAILLE_DESC*natt+1);
1022             gro = (char*) malloc(MED_TAILLE_LNOM*ngro+1);
1023             ret = MEDfamInfo(fid,nommaa,i+1,nomfam,&numfam,attide,attval,
1024                              attdes,&natt,gro,&ngro);
1025             fprintf(stdout,"  - Famille de nom %s et de numero %d : \n",nomfam,numfam);
1026             fprintf(stdout,"  - Attributs : \n");
1027             for (j=0;j<natt;j++)
1028               {
1029                 strncpy(str1,attdes+j*MED_TAILLE_DESC,MED_TAILLE_DESC);
1030                 str1[MED_TAILLE_DESC] = '\0';
1031                 fprintf(stdout,"   ide = %d - val = %d - des = %s\n",*(attide+j),
1032                        *(attval+j),str1);
1033               }
1034             free(attide);
1035             free(attval);
1036             free(attdes);
1037             fprintf(stdout,"  - Groupes :\n");
1038             for (j=0;j<ngro;j++)
1039               {
1040                 strncpy(str2,gro+j*MED_TAILLE_LNOM,MED_TAILLE_LNOM);
1041                 str2[MED_TAILLE_LNOM] = '\0';
1042                 fprintf(stdout,"   gro = %s\n",str2);
1043               }
1044             free(gro);
1045           }
1046       }
1047
1048   /****************************************************************************
1049   *                       LECTURE DES EQUIVALENCES                            *
1050   ****************************************************************************/
1051   fprintf(stdout,"\n(******************************)\n");
1052   fprintf(stdout,"(* EQUIVALENCES DU MAILLAGE : *)\n");
1053   fprintf(stdout,"(******************************)\n");
1054
1055   /* lecture de toutes les equivalences associes a nommaa */
1056   if (ret == 0)
1057     for (i = 0;i<nequ;i++)
1058       {
1059         fprintf(stdout,"- Equivalence numero : %d ",i+1);
1060
1061         /* lecture des infos sur l'equivalence */
1062         ret = MEDequivInfo(fid,nommaa,i+1,equ,des);
1063         if (ret == 0)
1064           {
1065             fprintf(stdout,"\n  - Nom de l'equivalence: %s \n",equ);
1066             fprintf(stdout,"\n  - Description de l'equivalence : %s \n",des);
1067           }
1068         else
1069           strcpy(message,">> ERREUR : lecture informations sur equivalence\n");
1070
1071         /* lecture des correspondances sur les differents types d'entites */
1072         if (ret == 0)
1073           {
1074             /* les noeuds */
1075             if ((ncor = MEDnCorres(fid,nommaa,equ,MED_NOEUD,(med_geometrie_element)0)) < 0)
1076               {
1077                 ret = -1;
1078                 strcpy(message,">> ERREUR : lecture nombre de correspondances\n");
1079               }
1080             else
1081               fprintf(stdout,"\n  - Il y a %d correspondances sur les noeuds \n",ncor);
1082             if (ncor > 0)
1083               {
1084                 cor = (med_int*) malloc(sizeof(med_int)*ncor*2);
1085                 ret = MEDequivLire(fid,nommaa,equ,cor,ncor,MED_NOEUD,(med_geometrie_element)0);
1086                 if (ret == 0)
1087                   for (j=0;j<ncor;j++)
1088                     fprintf(stdout,"\n  - Correspondance %d : %d et %d \n",j+1,*(cor+2*j),
1089                            *(cor+2*j+1));
1090                 else
1091                    strcpy(message,">> ERREUR : lecture des correspondances\n");
1092                 free(cor);
1093               }
1094             
1095             /* sur les mailles : on ne prend pas en compte les mailles 3D */
1096             if (ret ==0)
1097               for (j=0;j<NBR_MAILLE_EQU;j++)
1098                 {
1099                   if ((ncor = MEDnCorres(fid,nommaa,equ,MED_MAILLE,typmai[j])) < 0)
1100                     {
1101                       ret = -1;
1102                        strcpy(message,
1103                               ">> ERREUR : lecture informations sur nombre de correspondances \n");
1104                     }
1105                   else
1106                     fprintf(stdout,"\n  - Il y a %d correspondances sur les mailles %s \n",ncor,
1107                            nommai[j]);
1108                   if (ncor > 0)
1109                     {
1110                       cor = (med_int*) malloc(sizeof(med_int)*ncor*2);
1111                       ret = MEDequivLire(fid,nommaa,equ,cor,ncor,MED_MAILLE,
1112                                          typmai[j]);
1113                       if (ret == 0)
1114                         for (k=0;k<ncor;k++)
1115                           fprintf(stdout,"\n  - Correspondance %d : %d et %d \n",k+1,*(cor+2*k),
1116                                  *(cor+2*k+1));
1117                       else
1118                          strcpy(message,">> ERREUR : correspondances\n");
1119                       free(cor);
1120                     }
1121                 }
1122
1123             /* sur les faces */
1124             if (ret == 0)
1125               for (j=0;j<MED_NBR_GEOMETRIE_FACE;j++)
1126                 {
1127                   if ((ncor = MEDnCorres(fid,nommaa,equ,MED_FACE,typfac[j])) < 0)
1128                     {
1129                       ret = -1;
1130                       strcpy(message,">> ERREUR : informations sur correspondances \n");
1131                     }
1132                   else
1133                     fprintf(stdout,"\n  - Il y a %d correspondances sur les faces %s\n",ncor,
1134                            nomfac[j]);
1135                   if (ncor > 0)
1136                     {
1137                       cor = (med_int*) malloc(sizeof(med_int)*ncor*2);
1138                       ret = MEDequivLire(fid,nommaa,equ,cor,ncor,MED_FACE,
1139                                          typfac[j]);
1140                       if (ret < 0)
1141                         strcpy(message,"ERREUR : lecture des equivalences \n");
1142                       else
1143                         for (k=0;k<ncor;k++)
1144                           fprintf(stdout,"\n  - Correspondance %d : %d et %d \n",k+1,*(cor+2*k),
1145                                  *(cor+2*k+1));
1146                       free(cor);
1147                     }
1148                 }
1149             
1150             /*  sur les aretes */
1151             for (j=0;j<MED_NBR_GEOMETRIE_ARETE;j++)
1152               {
1153                 if ((ncor = MEDnCorres(fid,nommaa,equ,MED_ARETE,typare[j])) < 0)
1154                   {
1155                     ret = -1;
1156                     strcpy(message,">> ERREUR : nombre de correspondances \n");
1157                   }
1158                 else
1159                   fprintf(stdout,"\n  - Il y a %d correspondances sur les aretes %s \n",
1160                          ncor,nomare[j]);
1161                 if (ncor > 0)
1162                   {
1163                     cor = (med_int*) malloc(sizeof(med_int)*ncor*2);
1164                     ret = MEDequivLire(fid,nommaa,equ,cor,ncor,MED_ARETE,
1165                                        typare[j]);
1166                     if (ret < 0)
1167                       strcpy(message,">> ERREUR : equivalences \n");
1168                     else
1169                       for (k=0;k<ncor;k++)
1170                         fprintf(stdout,"\n  Correspondance %d : %d et %d \n",k+1,*(cor+2*k),
1171                                *(cor+2*k+1));
1172                     free(cor);
1173                   }
1174               }
1175           }                         
1176       }
1177
1178   /****************************************************************************
1179   *                       LECTURE DES CHAMPS                                  *
1180   ****************************************************************************/
1181   fprintf(stdout,"\n(************************)\n");
1182   fprintf(stdout,"(* CHAMPS DU MAILLAGE : *)\n");
1183   fprintf(stdout,"(************************)\n");
1184
1185   if (ret == 0)
1186     for (i=0;i<ncha;i++)
1187       {
1188         fprintf(stdout,"- Champ numero : %d \n",i+1);
1189         
1190         /* combien de composantes */
1191         if ((ncomp = MEDnChamp(fid,i+1)) < 0)
1192           {
1193             ret = -1;
1194             strcpy(message,">> ERREUR : nombre de composants d'un champ\n");
1195           }
1196         
1197         /* allocation memoire de comp et unit*/
1198         if (ret == 0)
1199           {
1200             comp = (char*) malloc(ncomp*MED_TAILLE_PNOM+1);
1201             unit = (char*) malloc(ncomp*MED_TAILLE_PNOM+1);
1202           }
1203
1204         /* infos sur les champs */
1205         if (ret == 0)
1206           ret = MEDchampInfo(fid,i+1,nomcha,&typcha,comp,unit,ncomp);
1207         if (ret < 0)
1208           strcpy(message,">> ERREUR : information sur les champs \n");
1209
1210         if (ret == 0) {
1211           fprintf(stdout,"  - Nom du champ : %s de type %d\n",nomcha,typcha);
1212           fprintf(stdout,"  - Nom des composantes : %s\n",comp);
1213           fprintf(stdout,"  - Unites des composantes : %s \n",unit);
1214           free(comp);
1215           free(unit);   
1216         }
1217              
1218               
1219         if (ret == 0)  /* Valeurs sur les noeuds */
1220           {
1221             /* Combien de pas de temps ? */
1222             npdt = MEDnPasdetemps(fid,nomcha,MED_NOEUD,(med_geometrie_element)0);
1223             if (npdt < 0)
1224               ret = -1;
1225             if (ret == -1)
1226               strcpy(message,">> ERREUR : la lecture du nombe de pas de temps");
1227             else
1228               fprintf(stdout,"\n  - Il y a %d pas de temps sur les noeuds \n",npdt);
1229
1230             /* Lecture des valeurs pour tous les pas de temps */
1231             if (ret == 0)
1232               for (j=0;j<npdt;j++)
1233                 {
1234                   /* Informations sur les pas de temps */
1235                   if (ret == 0)
1236                     ret = MEDpasdetempsInfo(fid,nomcha,MED_NOEUD,(med_geometrie_element)0,
1237                                             j+1, maillage_champ, &ngauss, &numdt,  dtunit, &dt, &numo);
1238
1239                   if (ret == 0 && (! strcmp(maillage_champ,nommaa)))
1240                     fprintf(stdout,"\n  -> \tPas de Temps n° %4i (%f), N°d'ordre %4i, avec %i pts de gauss\n",
1241                             numdt,dt,numo,ngauss);
1242                   else
1243                     strcpy(message,">> ERREUR : information sur les pas de temps \n");
1244                   
1245                   /* Combien de valeurs a lire ? */
1246                   if (ret == 0 && (! strcmp(maillage_champ,nommaa)))
1247                     {
1248                       if ((nval = MEDnVal(fid,nomcha,MED_NOEUD,(med_geometrie_element)0,numdt,numo)) < 0)
1249                         {
1250                           ret = -1;
1251                           strcpy(message,">> ERREUR : nombre de valeurs d'un champ\n");
1252                         }
1253                       else
1254                         fprintf(stdout,"\n  - Il y a %d valeurs sur les noeuds \n",nval);
1255                     }
1256
1257                   if (ret == 0 && (! strcmp(maillage_champ,nommaa)))
1258                     {
1259                       if (typcha == MED_REEL64)
1260                         {
1261                           valr = (med_float*) malloc(sizeof(med_float)*ncomp*nval);
1262                           ret = MEDchampLire(fid,nommaa,nomcha,(unsigned char*)valr,mode_coo,MED_ALL,
1263                                              pflnom,MED_NOEUD,(med_geometrie_element)0,numdt,numo);
1264                                              
1265                           if (ret < 0)
1266                             strcpy(message,">> ERREUR : lecture des champs \n");
1267                           else
1268                             for (k=0;k<nval*ncomp;k++)
1269                               fprintf(stdout," %f ",*(valr+k));
1270                           free(valr);
1271                         }
1272                       else
1273                         {
1274                           vale = (med_int*) malloc(sizeof(med_int)*ncomp*nval);
1275                           ret = MEDchampLire(fid,nommaa,nomcha,(unsigned char*)vale,mode_coo,MED_ALL,
1276                                              pflnom,MED_NOEUD,(med_geometrie_element)0,numdt,numo);
1277                           if (ret < 0)
1278                             strcpy(message,">> ERREUR : lecture des champs \n");
1279                           else
1280                             for (k=0;k<nval*ncomp;k++)
1281                               fprintf(stdout," %d ",*(vale+k));
1282                           free(vale);
1283                         }
1284
1285                       /* Lecture d'un profil eventuel */
1286                       if (strcmp(pflnom,MED_NOPFL) == 0 )
1287                         fprintf(stdout,"\n \t- Pas de profil\n");
1288                       else 
1289                         {
1290                           if ( (pflsize = MEDnValProfil(fid,pflnom)) <0)
1291                             {
1292                               ret = -1;
1293                               strcpy(message,">> ERREUR : lecture de la taille du profil \n");
1294                             }
1295                           else 
1296                             {
1297                               fprintf(stdout,"\n \t- Profil : %s de taille %i\n",pflnom,pflsize);
1298                               pflval = (med_int*) malloc(sizeof(med_int)*pflsize);
1299                               
1300                               if ( (ret = MEDprofilLire(fid,pflval,pflnom)) <0)
1301                                 strcpy(message,">> ERREUR : lecture du profil \n");
1302                               else
1303                                 for (l=0;l<pflsize;l++)
1304                                   fprintf(stdout,"\t%i\n",*(pflval+l));
1305                               
1306                               free(pflval);
1307                             }
1308                         }
1309                     }                             
1310                 }
1311           }
1312
1313
1314         if (ret == 0)  /* Valeurs sur les mailles */
1315           {
1316             for (k=0;k<MED_NBR_GEOMETRIE_MAILLE;k++)
1317               {
1318                 typgeo = typmai[k];
1319
1320                 /* Combien de pas de temps ? */
1321                 npdt = MEDnPasdetemps(fid,nomcha,MED_MAILLE,typgeo);
1322                 if (npdt < 0)
1323                   ret = -1;
1324                 if (ret == -1)
1325                   strcpy(message,">> ERREUR : la lecture du nombe de pas de temps");
1326                 else
1327                   fprintf(stdout,"\n  - Il y a %d pas de temps sur les mailles de type %d \n",npdt,typgeo);
1328
1329                 /* Lecture des valeurs pour tous les pas de temps */
1330                 if (ret == 0)
1331                   for (j=0;j<npdt;j++)
1332                     {
1333                       /* Informations sur les pas de temps */
1334                       if (ret == 0)
1335                         ret = MEDpasdetempsInfo(fid,nomcha,MED_MAILLE,typgeo,
1336                                                 j+1, maillage_champ, &ngauss, &numdt,  dtunit, &dt, &numo);
1337
1338                       if (ret == 0 && (! strcmp(maillage_champ,nommaa)))
1339                         fprintf(stdout,"\n  -> \tPas de Temps n° %4i (%f), N°d'ordre %4i, avec %i pts de gauss\n",
1340                                 numdt,dt,numo,ngauss);
1341                       else
1342                         strcpy(message,">> ERREUR : information sur les pas de temps \n");
1343
1344                       /* Combien de valeurs a lire ? */
1345                       if (ret == 0 && (! strcmp(maillage_champ,nommaa)))
1346                         {
1347                           if ((nval = MEDnVal(fid,nomcha,MED_MAILLE,typgeo,numdt,numo)) < 0)
1348                             {
1349                               ret = -1;
1350                               strcpy(message,">> ERREUR : nombre de valeurs d'un champ\n");
1351                             }
1352                           else
1353                             fprintf(stdout,"\n  - Il y a %d valeurs sur les noeuds \n",nval);
1354                         }
1355
1356                       if (ret == 0 && (! strcmp(maillage_champ,nommaa)))
1357                         {
1358                           if (typcha == MED_REEL64)
1359                             {
1360                               valr = (med_float*) malloc(sizeof(med_float)*ncomp*nval);
1361                               ret = MEDchampLire(fid,nommaa,nomcha,(unsigned char*)valr,mode_coo,MED_ALL,
1362                                                  pflnom,MED_MAILLE,typgeo,numdt,numo);
1363                               if (ret < 0)
1364                                 strcpy(message,">> ERREUR : lecture des champs \n");
1365                               else
1366                                 for (kp=0;kp<nval*ncomp;kp++)
1367                                   fprintf(stdout," %f ",*(valr+kp));
1368                               free(valr);
1369                             }
1370                           else
1371                             {
1372                               vale = (med_int*) malloc(sizeof(med_int)*ncomp*nval);
1373                               ret = MEDchampLire(fid,nommaa,nomcha,(unsigned char*)vale,mode_coo,MED_ALL,
1374                                                  pflnom,MED_MAILLE,typgeo,numdt,numo);
1375                               if (ret < 0)
1376                                 strcpy(message,">> ERREUR : lecture des champs \n");
1377                               else
1378                                 for (kp=0;kp<nval*ncomp;kp++)
1379                                   fprintf(stdout," %d ",*(vale+kp));
1380                               free(vale);
1381                             }
1382                           
1383                           /* Lecture d'un profil eventuel */
1384                           if (strcmp(pflnom,MED_NOPFL) == 0 )
1385                             fprintf(stdout,"\n \t- Pas de profil\n");
1386                           else 
1387                             {
1388                               if ( (pflsize = MEDnValProfil(fid,pflnom)) <0)
1389                                 {
1390                                   ret = -1;
1391                                   strcpy(message,">> ERREUR : lecture de la taille du profil \n");
1392                                 }
1393                               else 
1394                                 {
1395                                   fprintf(stdout,"\n \t- Profil : %s de taille %i\n",pflnom,pflsize);
1396                                   pflval = (med_int*) malloc(sizeof(med_int)*pflsize);
1397                                   
1398                                   if ( (ret = MEDprofilLire(fid,pflval,pflnom)) <0)
1399                                     strcpy(message,">> ERREUR : lecture du profil \n");
1400                                   else
1401                                     for (l=0;l<pflsize;l++)
1402                                       fprintf(stdout,"\t%i\n",*(pflval+l));
1403                                   
1404                                   free(pflval);
1405                                 }
1406                             }
1407                         }                                 
1408                     }
1409               }
1410           }    
1411       
1412
1413         if (ret == 0)  /* Valeurs sur les faces */
1414           {
1415             for (k=0;k<MED_NBR_GEOMETRIE_FACE;k++)
1416               {
1417                 typgeo = typfac[k];
1418
1419                 /* Combien de pas de temps ? */
1420                 npdt = MEDnPasdetemps(fid,nomcha,MED_FACE,typgeo);
1421                 if (npdt < 0)
1422                   ret = -1;
1423                 if (ret == -1)
1424                   strcpy(message,">> ERREUR : la lecture du nombe de pas de temps");
1425                 else
1426                   fprintf(stdout,"\n  - Il y a %d pas de temps sur les faces de type %d \n",npdt,typgeo);
1427
1428                 /* Lecture des valeurs pour tous les pas de temps */
1429                 if (ret == 0)
1430                   for (j=0;j<npdt;j++)
1431                     {
1432                       /* Informations sur les pas de temps */
1433                       if (ret == 0)
1434                         ret = MEDpasdetempsInfo(fid,nomcha,MED_FACE,typgeo,
1435                                                 j+1, maillage_champ, &ngauss, &numdt,  dtunit, &dt, &numo);
1436
1437                       if (ret == 0 && (! strcmp(maillage_champ,nommaa)))
1438                         fprintf(stdout,"\n  -> \tPas de Temps n° %4i (%f), N°d'ordre %4i, avec %i pts de gauss\n",
1439                                 numdt,dt,numo,ngauss);
1440                       else
1441                         strcpy(message,">> ERREUR : information sur les pas de temps \n");
1442
1443                       /* Combien de valeurs a lire ? */
1444                       if (ret == 0 && (! strcmp(maillage_champ,nommaa)))
1445                         {
1446                           if ((nval = MEDnVal(fid,nomcha,MED_FACE,typgeo,numdt,numo)) < 0)
1447                             {
1448                               ret = -1;
1449                               strcpy(message,">> ERREUR : nombre de valeurs d'un champ\n");
1450                             }
1451                           else
1452                             fprintf(stdout,"\n  - Il y a %d valeurs sur les noeuds \n",nval);
1453                         }
1454
1455                       if (ret == 0 && (! strcmp(maillage_champ,nommaa)))
1456                         {
1457                           if (typcha == MED_REEL64)
1458                             {
1459                               valr = (med_float*) malloc(sizeof(med_float)*ncomp*nval);
1460                               ret = MEDchampLire(fid,nommaa,nomcha,(unsigned char*)valr,mode_coo,MED_ALL,
1461                                                  pflnom,MED_FACE,typgeo,numdt,numo);
1462                               if (ret < 0)
1463                                 strcpy(message,">> ERREUR : lecture des champs \n");
1464                               else
1465                                 for (kp=0;kp<nval*ncomp;kp++)
1466                                   fprintf(stdout," %f ",*(valr+kp));
1467                               free(valr);
1468                             }
1469                           else
1470                             {
1471                               vale = (med_int*) malloc(sizeof(med_int)*ncomp*nval);
1472                               ret = MEDchampLire(fid,nommaa,nomcha,(unsigned char*)vale,mode_coo,MED_ALL,
1473                                                  pflnom,MED_FACE,typgeo,numdt,numo);
1474                               if (ret < 0)
1475                                 strcpy(message,">> ERREUR : lecture des champs \n");
1476                               else
1477                                 for (kp=0;kp<nval*ncomp;kp++)
1478                                   fprintf(stdout," %d ",*(vale+kp));
1479                               free(vale);
1480                             }
1481                           
1482                           /* Lecture d'un profil eventuel */
1483                           if (strcmp(pflnom,MED_NOPFL) == 0 )
1484                             fprintf(stdout,"\n \t- Pas de profil\n");
1485                           else 
1486                             {
1487                               if ( (pflsize = MEDnValProfil(fid,pflnom)) <0)
1488                                 {
1489                                   ret = -1;
1490                                   strcpy(message,">> ERREUR : lecture de la taille du profil \n");
1491                                 }
1492                               else 
1493                                 {
1494                                   fprintf(stdout,"\n \t- Profil : %s de taille %i\n",pflnom,pflsize);
1495                                   pflval = (med_int*) malloc(sizeof(med_int)*pflsize);
1496                                   
1497                                   if ( (ret = MEDprofilLire(fid,pflval,pflnom)) <0)
1498                                     strcpy(message,">> ERREUR : lecture du profil \n");
1499                                   else
1500                                     for (l=0;l<pflsize;l++)
1501                                       fprintf(stdout,"\t%i\n",*(pflval+l));
1502                                   
1503                                   free(pflval);
1504                                 }
1505                             }
1506                         }                                 
1507                     }
1508               }
1509           }    
1510
1511
1512         if (ret == 0)  /* Valeurs sur les aretes */
1513           {
1514             for (k=0;k<MED_NBR_GEOMETRIE_ARETE;k++)
1515               {
1516                 typgeo = typare[k];
1517
1518                 /* Combien de pas de temps ? */
1519                 npdt = MEDnPasdetemps(fid,nomcha,MED_ARETE,typgeo);
1520                 if (npdt < 0)
1521                   ret = -1;
1522                 if (ret == -1)
1523                   strcpy(message,">> ERREUR : la lecture du nombe de pas de temps");
1524                 else
1525                   fprintf(stdout,"\n  - Il y a %d pas de temps sur les aretes de type %d \n",npdt,typgeo);
1526
1527                 /* Lecture des valeurs pour tous les pas de temps */
1528                 if (ret == 0)
1529                   for (j=0;j<npdt;j++)
1530                     {
1531                       /* Informations sur les pas de temps */
1532                       if (ret == 0)
1533                         ret = MEDpasdetempsInfo(fid,nomcha,MED_ARETE,typgeo,
1534                                                 j+1, maillage_champ, &ngauss, &numdt,  dtunit, &dt, &numo);
1535
1536                       if (ret == 0 && (! strcmp(maillage_champ,nommaa)))
1537                         fprintf(stdout,"\n  -> \tPas de Temps n° %4i (%f), N°d'ordre %4i, avec %i pts de gauss\n",
1538                                 numdt,dt,numo,ngauss);
1539                       else
1540                         strcpy(message,">> ERREUR : information sur les pas de temps \n");
1541
1542                       /* Combien de valeurs a lire ? */
1543                       if (ret == 0 && (! strcmp(maillage_champ,nommaa)))
1544                         {
1545                           if ((nval = MEDnVal(fid,nomcha,MED_ARETE,typgeo,numdt,numo)) < 0)
1546                             {
1547                               ret = -1;
1548                               strcpy(message,">> ERREUR : nombre de valeurs d'un champ\n");
1549                             }
1550                           else
1551                             fprintf(stdout,"\n  - Il y a %d valeurs sur les noeuds \n",nval);
1552                         }
1553
1554                       if (ret == 0 && (! strcmp(maillage_champ,nommaa)))
1555                         {
1556                           if (typcha == MED_REEL64)
1557                             {
1558                               valr = (med_float*) malloc(sizeof(med_float)*ncomp*nval);
1559                               ret = MEDchampLire(fid,nommaa,nomcha,(unsigned char*)valr,mode_coo,MED_ALL,
1560                                                  pflnom,MED_ARETE,typgeo,numdt,numo);
1561                               if (ret < 0)
1562                                 strcpy(message,">> ERREUR : lecture des champs \n");
1563                               else
1564                                 for (kp=0;kp<nval*ncomp;kp++)
1565                                   fprintf(stdout," %f ",*(valr+kp));
1566                               free(valr);
1567                             }
1568                           else
1569                             {
1570                               vale = (med_int*) malloc(sizeof(med_int)*ncomp*nval);
1571                               ret = MEDchampLire(fid,nommaa,nomcha,(unsigned char*)vale,mode_coo,MED_ALL,
1572                                                  pflnom,MED_ARETE,typgeo,numdt,numo);
1573                               if (ret < 0)
1574                                 strcpy(message,">> ERREUR : lecture des champs \n");
1575                               else
1576                                 for (kp=0;kp<nval*ncomp;kp++)
1577                                   fprintf(stdout," %d ",*(vale+kp));
1578                               free(vale);
1579                             }
1580                           
1581                           /* Lecture d'un profil eventuel */
1582                           if (strcmp(pflnom,MED_NOPFL) == 0 )
1583                             fprintf(stdout,"\n \t- Pas de profil\n");
1584                           else 
1585                             {
1586                               if ( (pflsize = MEDnValProfil(fid,pflnom)) <0)
1587                                 {
1588                                   ret = -1;
1589                                   strcpy(message,">> ERREUR : lecture de la taille du profil \n");
1590                                 }
1591                               else 
1592                                 {
1593                                   fprintf(stdout,"\n \t- Profil : %s de taille %i\n",pflnom,pflsize);
1594                                   pflval = (med_int*) malloc(sizeof(med_int)*pflsize);
1595                                   
1596                                   if ( (ret = MEDprofilLire(fid,pflval,pflnom)) <0)
1597                                     strcpy(message,">> ERREUR : lecture du profil \n");
1598                                   else
1599                                     for (l=0;l<pflsize;l++)
1600                                       fprintf(stdout,"\t%i\n",*(pflval+l));
1601                                   
1602                                   free(pflval);
1603                                 }
1604                             }
1605                         }                                 
1606                     }
1607               }
1608           }    
1609
1610       }
1611
1612   if (ret < 0)
1613     fprintf(stderr,"%s\n",message);
1614
1615   /****************************************************************************
1616   *                      FERMETURE DU FICHIER                                 *
1617   ****************************************************************************/
1618   ret = MEDfermer(fid);
1619   
1620   if (ret == 0)
1621     fprintf(stdout,"\n >>>>>> FIN DU DUMP DU FICHIER %s >>>>>>\n",argv[1]);
1622   else
1623    fprintf(stderr,">> ERREUR : erreur a la fermeture du fichier %s\n",argv[1]);
1624
1625   return 0;
1626 }