MED fichier: Fichier source de test13b.c

MED fichier

test13b.c
Aller à la documentation de ce fichier.
1 /* This file is part of MED.
2 *
3 * COPYRIGHT (C) 1999 - 2021 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
38 const med_geometry_type * const typmai = MED_GET_CELL_GEOMETRY_TYPE+1;
39 const med_geometry_type * const typfac = MED_GET_FACE_GEOMETRY_TYPE+1;
40 const med_geometry_type * const typare = MED_GET_EDGE_GEOMETRY_TYPE+1;
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
238 med_geometry_type *typmai = MED_GET_CELL_GEOMETRY_TYPE;
239 med_geometry_type *typfac = MED_GET_FACE_GEOMETRY_TYPE;
240 med_geometry_type *typare = MED_GET_EDGE_GEOMETRY_TYPE;
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_GET_EDGE_GEOMETRY_TYPENAME
const char * MED_GET_EDGE_GEOMETRY_TYPENAME[MED_N_EDGE_FIXED_GEO+2]
Definition: MEDiterators.c:148
MED_COMMENT_SIZE
#define MED_COMMENT_SIZE
Definition: med.h:79
MEDfileOpen
MEDC_EXPORT med_idt MEDfileOpen(const char *const filename, const med_access_mode accessmode)
Ouverture d'un fichier MED.
Definition: MEDfileOpen.c:42
med_geometry_type
int med_geometry_type
Definition: med.h:194
MED_SNAME_SIZE
#define MED_SNAME_SIZE
Definition: med.h:82
nomare
const char *const * nomare
Definition: test13b.c:43
MED_DESCENDING_FACE
Definition: med.h:143
med_idt
hid_t med_idt
Definition: med.h:331
MED_ACC_RDONLY
Definition: med.h:120
med_err
herr_t med_err
Definition: med.h:332
MED_N_NODE_FIXED_GEO
#define MED_N_NODE_FIXED_GEO
Definition: med.h:251
med_sorting_type
med_sorting_type
Definition: med.h:309
MED_GET_FACE_GEOMETRY_TYPE
med_geometry_type MED_GET_FACE_GEOMETRY_TYPE[MED_N_FACE_FIXED_GEO+2]
Definition: MEDiterators.c:114
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
MED_CELL
Definition: med.h:143
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
MESSAGE
#define MESSAGE(chaine)
Definition: med_utils.h:324
med_int
int med_int
Definition: med.h:342
MED_GET_CELL_GEOMETRY_TYPE
med_geometry_type MED_GET_CELL_GEOMETRY_TYPE[MED_N_CELL_FIXED_GEO+2]
Definition: MEDiterators.c:55
med.h
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:320
MED_NONE
#define MED_NONE
Definition: med.h:231
MED_NODE
Definition: med.h:143
MED_GET_CELL_GEOMETRY_TYPENAME
const char *const MED_GET_CELL_GEOMETRY_TYPENAME[MED_N_CELL_FIXED_GEO+2]
Definition: MEDiterators.c:84
MED_N_FACE_FIXED_GEO
#define MED_N_FACE_FIXED_GEO
Definition: med.h:243
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
structure
int structure
Definition: mdump2.c:111
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
MED_N_CELL_FIXED_GEO
#define MED_N_CELL_FIXED_GEO
Definition: med.h:239
med_mesh_type
med_mesh_type
Definition: med.h:131
SSCRUTE
#define SSCRUTE(chaine)
Definition: med_utils.h:323
lecture_equivalence_maillage
void lecture_equivalence_maillage(med_idt fid, const char *const nommaa, med_int nequ)
Definition: test13b.c:45
MED_NAME_SIZE
#define MED_NAME_SIZE
Definition: med.h:81
nomfac
const char *const * nomfac
Definition: test13b.c:42
MEDfileClose
MEDC_EXPORT med_err MEDfileClose(med_idt fid)
Fermeture d'un fichier MED.
Definition: MEDfileClose.c:30
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
EXIT_IF
#define EXIT_IF(expression, message, arg)
Definition: med_utils.h:343
MED_GET_FACE_GEOMETRY_TYPENAME
const char *const MED_GET_FACE_GEOMETRY_TYPENAME[MED_N_FACE_FIXED_GEO+2]
Definition: MEDiterators.c:127
med_axis_type
med_axis_type
Definition: med.h:258
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
main
int main(int argc, char **argv)
Definition: test13b.c:215
MED_NO_IT
#define MED_NO_IT
Definition: med.h:321
MED_GET_EDGE_GEOMETRY_TYPE
med_geometry_type MED_GET_EDGE_GEOMETRY_TYPE[MED_N_EDGE_FIXED_GEO+2]
Definition: MEDiterators.c:140
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_utils.h
typare
const med_geometry_type *const typare
Definition: test13b.c:39
nommai
const char *const * nommai
Definition: test13b.c:41
MED_DESCENDING_EDGE
Definition: med.h:143