MED fichier
test13b.c
Aller à la documentation de ce fichier.
1 /* This file is part of MED.
2  *
3  * COPYRIGHT (C) 1999 - 2023 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 : test13.c
20  *
21  * - Description : lecture des equivalences d'un maillage MED.
22  *
23  *****************************************************************************/
24 
25 #include <med.h>
26 #define MESGERR 1
27 #include <med_utils.h>
28 
29 
30 #ifdef DEF_LECT_ECR
31 #define MODE_ACCES MED_ACC_RDWR
32 #elif DEF_LECT_AJOUT
33 #define MODE_ACCES MED_ACC_RDEXT
34 #else
35 #define MODE_ACCES MED_ACC_CREAT
36 #endif
37 
41 
42 const char * const *nommai = MED_GET_CELL_GEOMETRY_TYPENAME+1;
43 const char * const *nomfac = MED_GET_FACE_GEOMETRY_TYPENAME+1;
44 const char * const *nomare = MED_GET_EDGE_GEOMETRY_TYPENAME+1;
45 
46 void lecture_equivalence_maillage(med_idt fid,const char * const nommaa,med_int nequ)
47 {
48  med_int i,j,k;
49  med_int ncor;
50  med_int *cor;
51  char equ[MED_NAME_SIZE+1];
52  char des[MED_COMMENT_SIZE+1];
53  med_err ret = 0;
54  med_int nstep=0,nocstpncor=0;
55  int _cstpit=0;
56  med_int _numdt,_numit;
57  int structure = 0;
58 
59 
60 
61  if ( (nequ != 0) ) {
62  fprintf(stdout,"\n(******************************)\n");
63  fprintf(stdout,"(* EQUIVALENCES DU MAILLAGE : *)\n");
64  fprintf(stdout,"(******************************)\n");
65  }
66 
67  /* lecture de toutes les equivalences associes a nommaa */
68  for (i = 0;i<nequ;i++) {
69 
70  /* lecture des infos sur l'equivalence */
71  ret = MEDequivalenceInfo(fid,nommaa,i+1,equ,des,&nstep,&nocstpncor);
72  EXIT_IF(ret < 0,"lors de la lecture des informations sur une equivalence",
73  NULL);
74 
75  fprintf(stdout,"- Equivalence numero : "IFORMAT" ",i+1);
76  fprintf(stdout,"\n - Nom de l'equivalence: %s \n",equ);
77  fprintf(stdout,"\n - Description de l'equivalence : %s \n",des);
78  if (nstep > 1)
79  fprintf(stdout,"\n - L'equivalence est définie sur "IFORMAT" étapes de calcul\n",nstep);
80 
81  for (_cstpit=1; _cstpit <= nstep; ++_cstpit) {
82 
83  ret = MEDequivalenceComputingStepInfo (fid, nommaa, equ, _cstpit,
84  & _numdt, &_numit,&nocstpncor);
85  EXIT_IF(ret < 0,
86  "lors de la lecture des valeurs de étape de calcul d'une equivalence",
87  NULL);
88 
89  if ( (_numdt != MED_NO_DT) || (_numit != MED_NO_IT) )
90  fprintf(stdout,"\n - Étape de calcul définie sur (numdt,numit) ("IFORMAT","IFORMAT") :\n",_numdt,_numit);
91 
92  /* lecture des correspondances sur les differents types d'entites */
93 
94  /* les noeuds */
95  ret = MEDequivalenceCorrespondenceSize(fid,nommaa,equ,_numdt,_numit,MED_NODE,MED_NONE,&ncor);
96  EXIT_IF(ret < 0,
97  "lors de la lecture du nombre de correspondances d'une equivalence",
98  NULL);
99  fprintf(stdout,"\n - Il y a "IFORMAT" correspondances sur les noeuds \n",ncor);
100 
101  if (ncor > 0) {
102 
103  /* allocation memoire */
104  cor = (med_int*) malloc(sizeof(med_int)*ncor*2);
105  EXIT_IF(cor == NULL,NULL,NULL);
106  ret= MEDequivalenceCorrespondenceRd(fid,nommaa,equ,_numdt,_numit,
107  MED_NODE,MED_NONE,cor);
108  EXIT_IF(ret < 0,"lors de la lecture du tableau des correspondances",
109  NULL);
110  if (!structure) {
111  for (j=0;j<ncor;j++)
112  fprintf(stdout,"\n - Correspondance "IFORMAT" : "IFORMAT" et "IFORMAT" \n",j+1,*(cor+2*j),
113  *(cor+2*j+1));
114  }
115  free(cor);
116  }
117 
118  /* sur les mailles : */
119  for (j=0;j<MED_N_CELL_FIXED_GEO;j++) {
120 
121  ret = MEDequivalenceCorrespondenceSize(fid,nommaa,equ,_numdt,_numit,MED_CELL,typmai[j],&ncor);
122  EXIT_IF(ret < 0,
123  "lors de la lecture du nombre de correspondances dans une equivalence",
124  NULL);
125  fprintf(stdout,"\n - Il y a "IFORMAT" correspondances sur les mailles %s \n",ncor,
126  nommai[j]);
127 
128  if (ncor > 0) {
129 
130  /* allocation memoire */
131  cor = (med_int*) malloc(sizeof(med_int)*ncor*2);
132  EXIT_IF(cor == NULL,NULL,NULL);
133  ret = MEDequivalenceCorrespondenceRd(fid,nommaa,equ,_numdt,_numit,
134  MED_CELL,typmai[j],cor);
135  EXIT_IF(ret < 0,"lors de la lecture du tableau des equivalences",
136  NULL);
137 
138  if (!structure) {
139  for (k=0;k<ncor;k++)
140  fprintf(stdout,"\n - Correspondance "IFORMAT" : "IFORMAT" et "IFORMAT" \n",k+1,
141  *(cor+2*k),*(cor+2*k+1));
142  }
143  free(cor);
144  }
145  }
146 
147 
148  /* sur les faces */
149  for (j=0;j<MED_N_FACE_FIXED_GEO;j++) {
150 
151  ret = MEDequivalenceCorrespondenceSize(fid,nommaa,equ,_numdt,_numit,
152  MED_DESCENDING_FACE,typfac[j],&ncor);
153 
154  EXIT_IF(ret < 0,
155  "lors de la lecture du nombre de correspondances dans une equivalence",
156  NULL);
157  fprintf(stdout,"\n - Il y a "IFORMAT" correspondances sur les faces %s\n",ncor,
158  nomfac[j]);
159 
160  if (ncor > 0) {
161 
162  /* allocation memoire */
163  cor = (med_int*) malloc(sizeof(med_int)*ncor*2);
164  EXIT_IF(cor == NULL,NULL,NULL);
165  ret = MEDequivalenceCorrespondenceRd(fid,nommaa,equ,_numdt,_numit,
166  MED_DESCENDING_FACE,typfac[j],cor);
167  EXIT_IF(ret < 0,"lors de la lecture du tableau des equivalences",
168  NULL);
169 
170  if (!structure) {
171  for (k=0;k<ncor;k++)
172  fprintf(stdout,"\n - Correspondance "IFORMAT" : "IFORMAT" et "IFORMAT" \n",k+1,*(cor+2*k),
173  *(cor+2*k+1));
174  }
175  free(cor);
176  }
177  }
178 
179 
180  /* sur les aretes */
181  for (j=0;j<MED_N_NODE_FIXED_GEO;j++) {
182 
183  ret = MEDequivalenceCorrespondenceSize(fid,nommaa,equ,_numdt,_numit,
184  MED_DESCENDING_EDGE,typare[j],&ncor);
185  EXIT_IF(ret < 0,"lors de la lecture du nombre de correspondances",
186  NULL);
187  fprintf(stdout,"\n - Il y a "IFORMAT" correspondances sur les aretes %s \n",
188  ncor,nomare[j]);
189 
190  if (ncor > 0) {
191 
192  /* allocation memoire */
193  cor = (med_int*) malloc(sizeof(med_int)*ncor*2);
194  EXIT_IF(cor == NULL,NULL,NULL);
195  ret =MEDequivalenceCorrespondenceRd(fid,nommaa,equ,_numdt,_numit,
196  MED_DESCENDING_EDGE,typare[j],cor);
197  EXIT_IF(ret < 0,"lors de la lecture du tableau des equivalences",
198  NULL);
199 
200  if (!structure) {
201  for (k=0;k<ncor;k++)
202  fprintf(stdout,"\n Correspondance "IFORMAT" : "IFORMAT" et "IFORMAT" \n",k+1,*(cor+2*k),
203  *(cor+2*k+1));
204  }
205 
206  free(cor);
207  }
208  }
209  }
210  }
211 
212  return;
213 }
214 
215 
216 int main (int argc, char **argv)
217 
218 
219 {
220  med_err ret = 0;
221  med_idt fid = 0;
222  char maa[MED_NAME_SIZE+1]="";
223  med_int mdim=0,sdim=0;
224  med_int nequ=0,ncor=0,nstep=0,nocstpncor=0;
225  med_int *cor;
226  char equ[MED_NAME_SIZE+1] ="";
227  char des[MED_COMMENT_SIZE+1]="";
228 
229  int i,j,k;
230  med_mesh_type type;
231  med_sorting_type sort;
232  char desc[MED_COMMENT_SIZE+1];
233  char dtunit[MED_SNAME_SIZE+1]="";
234  char nomcoo[3*MED_SNAME_SIZE+1];
235  char unicoo[3*MED_SNAME_SIZE+1];
236  med_axis_type rep;
237 
241 
242  if (argc != 2) {
243  MESSAGE("Il faut passer un fichier MED en paramètre");
244  return -1;
245  }
246 
247  /* Ouverture du fichier passe en argument en lecture seule */
248  if ((fid = MEDfileOpen(argv[1],MED_ACC_RDONLY)) < 0) {
249  MESSAGE("Erreur a l'ouverture du fichier : "); SSCRUTE(argv[1]);
250  return -1;
251  }
252 
253  if ((sdim=MEDmeshnAxis(fid, 1)) <0) {
254  MESSAGE("Erreur a la lecture de la dimension de l'espace du maillage :");
255  SSCRUTE(maa);
256  return -1;
257  }
258 
259  /* Lecture des infos concernant le premier maillage */
260  if ( MEDmeshInfo( fid, 1, maa, &sdim, &mdim, &type, desc, dtunit, &sort,
261  &nstep, &rep, nomcoo,unicoo) < 0 ) {
262  MESSAGE("Erreur a la lecture des informations sur le maillage : ");SSCRUTE(maa);
263  return -1;
264  } else {
265  printf("Maillage de nom : |%s| , de dimension : "IFORMAT" , et de type %d\n",maa,mdim,type);
266  printf("\t -Dimension de l'espace : "IFORMAT"\n",sdim);
267  printf("\t -Description du maillage : %s\n",desc);
268  printf("\t -Noms des axes : |%s|\n",nomcoo);
269  printf("\t -Unités des axes : |%s|\n",unicoo);
270  printf("\t -Type de repère : %d\n",rep);
271  printf("\t -Nombre d'étapes de calcul : "IFORMAT"\n",nstep);
272  printf("\t -Unité des dates : |%s|\n",dtunit);
273  }
274 
275  /* Lecture du nombre d'equivalence */
276  if ((nequ = MEDnEquivalence(fid,maa)) < 0)
277  {
278  MESSAGE("Erreur a la lecture du nombre d'equivalence");
279  return -1;
280  }
281  printf("Nombre d'equivalences : "IFORMAT" \n",nequ);
282 
283  /* Lecture de toutes les equivalences du maillage */
284  lecture_equivalence_maillage(fid,maa,nequ);
285 
286  /* Fermeture du fichier */
287  if (MEDfileClose(fid) < 0) {
288  MESSAGE("Erreur a la fermeture du fichier ");
289  return -1;
290  }
291 
292  return ret;
293 }
294 
295 
296 
297 
MED_ACC_RDONLY
Definition: med.h:122
MED_COMMENT_SIZE
#define MED_COMMENT_SIZE
Definition: med.h:81
med_geometry_type
int med_geometry_type
Definition: med.h:196
MED_SNAME_SIZE
#define MED_SNAME_SIZE
Definition: med.h:84
nomare
const char *const * nomare
Definition: test13b.c:43
med_idt
hid_t med_idt
Definition: med.h:333
med_err
herr_t med_err
Definition: med.h:334
MED_DESCENDING_EDGE
Definition: med.h:145
med_sorting_type
med_sorting_type
Definition: med.h:311
MEDmeshInfo
MEDC_EXPORT med_err MEDmeshInfo(const med_idt fid, const int meshit, char *const meshname, med_int *const spacedim, med_int *const meshdim, med_mesh_type *const meshtype, char *const description, char *const dtunit, med_sorting_type *const sortingtype, med_int *const nstep, med_axis_type *const axistype, char *const axisname, char *const axisunit)
Cette routine permet de lire les informations relatives à un maillage dans un fichier.
Definition: MEDmeshInfo.c:43
MED_N_NODE_FIXED_GEO
#define MED_N_NODE_FIXED_GEO
Definition: med.h:253
MEDequivalenceCorrespondenceSize
MEDC_EXPORT med_err MEDequivalenceCorrespondenceSize(const med_idt fid, const char *const meshname, const char *const equivname, const med_int numdt, const med_int numit, const med_entity_type entitype, const med_geometry_type geotype, med_int *const nentity)
Cette routine permet de lire le nombre de correspondances dans une équivalence pour une étape de calc...
Definition: MEDequivalenceCorrespondenceSize.c:41
typfac
const med_geometry_type *const typfac
Definition: test13b.c:38
MESSAGE
#define MESSAGE(chaine)
Definition: med_utils.h:324
MED_GET_FACE_GEOMETRY_TYPENAME
const char *const MED_GET_FACE_GEOMETRY_TYPENAME[MED_N_FACE_FIXED_GEO+2]
Definition: MEDiterators.c:127
med_int
int med_int
Definition: med.h:344
MED_GET_CELL_GEOMETRY_TYPE
med_geometry_type MED_GET_CELL_GEOMETRY_TYPE[MED_N_CELL_FIXED_GEO+2]
Definition: MEDiterators.c:55
MEDnEquivalence
MEDC_EXPORT med_int MEDnEquivalence(const med_idt fid, const char *const meshname)
Cette routine permet de lire le nombre d'équivalence dans un fichier.
Definition: MEDnEquivalence.c:36
MED_GET_CELL_GEOMETRY_TYPENAME
const char *const MED_GET_CELL_GEOMETRY_TYPENAME[MED_N_CELL_FIXED_GEO+2]
Definition: MEDiterators.c:84
typmai
const med_geometry_type *const typmai
Definition: test13b.c:37
IFORMAT
#define IFORMAT
Definition: med_utils.h:145
MED_NO_DT
#define MED_NO_DT
Definition: med.h:322
MED_NONE
#define MED_NONE
Definition: med.h:233
MEDequivalenceCorrespondenceRd
MEDC_EXPORT med_err MEDequivalenceCorrespondenceRd(const med_idt fid, const char *const meshname, const char *const equivname, const med_int numdt, const med_int numit, const med_entity_type entitype, const med_geometry_type geotype, med_int *const correspondence)
Cette routine permet de lire un tableau de correspondances entre les entités d'un maillage dans une é...
Definition: MEDequivalenceCorrespondenceRd.c:41
MEDfileClose
MEDC_EXPORT med_err MEDfileClose(med_idt fid)
Fermeture d'un fichier MED.
Definition: MEDfileClose.c:30
MED_N_FACE_FIXED_GEO
#define MED_N_FACE_FIXED_GEO
Definition: med.h:245
MED_N_CELL_FIXED_GEO
#define MED_N_CELL_FIXED_GEO
Definition: med.h:241
structure
int structure
Definition: mdump2.c:111
SSCRUTE
#define SSCRUTE(chaine)
Definition: med_utils.h:323
MEDequivalenceComputingStepInfo
MEDC_EXPORT med_err MEDequivalenceComputingStepInfo(const med_idt fid, const char *const meshname, const char *const equivname, const int csit, med_int *const numdt, med_int *const numit, med_int *const ncorrespondence)
Cette routine permet de lire les informations relatives à une équivalence pour une étape de calcul do...
Definition: MEDequivalenceComputingStepInfo.c:40
med_mesh_type
med_mesh_type
Definition: med.h:133
lecture_equivalence_maillage
void lecture_equivalence_maillage(med_idt fid, const char *const nommaa, med_int nequ)
Definition: test13b.c:45
MED_CELL
Definition: med.h:145
MED_NAME_SIZE
#define MED_NAME_SIZE
Definition: med.h:83
nomfac
const char *const * nomfac
Definition: test13b.c:42
MED_GET_EDGE_GEOMETRY_TYPE
med_geometry_type MED_GET_EDGE_GEOMETRY_TYPE[MED_N_EDGE_FIXED_GEO+2]
Definition: MEDiterators.c:140
med_utils.h
MED_NODE
Definition: med.h:145
EXIT_IF
#define EXIT_IF(expression, message, arg)
Definition: med_utils.h:343
med_axis_type
med_axis_type
Definition: med.h:260
MEDequivalenceInfo
MEDC_EXPORT med_err MEDequivalenceInfo(const med_idt fid, const char *const meshname, const int equivit, char *const equivname, char *const equivdescription, med_int *const nstep, med_int *const nocstpncorrespondence)
Cette routine permet lire les informations d'une équivalence portant sur les entités d'un maillage.
Definition: MEDequivalenceInfo.c:40
med.h
MED_NO_IT
#define MED_NO_IT
Definition: med.h:323
MED_GET_FACE_GEOMETRY_TYPE
med_geometry_type MED_GET_FACE_GEOMETRY_TYPE[MED_N_FACE_FIXED_GEO+2]
Definition: MEDiterators.c:114
main
int main(int argc, char **argv)
Definition: test13b.c:215
MED_GET_EDGE_GEOMETRY_TYPENAME
const char * MED_GET_EDGE_GEOMETRY_TYPENAME[MED_N_EDGE_FIXED_GEO+2]
Definition: MEDiterators.c:148
MEDmeshnAxis
MEDC_EXPORT med_int MEDmeshnAxis(const med_idt fid, const int meshit)
Cette routine permet de lire dans un maillage le nombre d'axes du repère des coordonnées des noeuds.
Definition: MEDmeshnAxis.c:35
MEDfileOpen
MEDC_EXPORT med_idt MEDfileOpen(const char *const filename, const med_access_mode accessmode)
Ouverture d'un fichier MED.
Definition: MEDfileOpen.c:42
nommai
const char *const * nommai
Definition: test13b.c:41
typare
const med_geometry_type *const typare
Definition: test13b.c:39
MED_DESCENDING_FACE
Definition: med.h:145