MED fichier: Fichier source de test20.c

MED fichier

test20.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 : test20.c
20 *
21 * - Description : montage/demontage de fichiers MED
22 *
23 *****************************************************************************/
24
25 #include <med.h>
26 #define MESGERR 1
27 #include <med_utils.h>
28
29 #ifdef DEF_LECT_ECR
30 #define MODE_ACCES MED_ACC_RDWR
31 #elif DEF_LECT_AJOUT
32 #define MODE_ACCES MED_ACC_RDEXT
33 #else
34 #define MODE_ACCES MED_ACC_CREAT
35 #endif
36
37 int main (int argc, char **argv)
38
39
40 {
41 med_idt fid,fid2,fid3,mid,mid2;
42 med_int ncha, ncomp, nmaa;
43 med_field_type type;
44 char comp[3*MED_SNAME_SIZE+1]="",unit[3*MED_SNAME_SIZE+1]="";
45 char nom [MED_NAME_SIZE+1] ="";
46 char _meshname [MED_NAME_SIZE+1] ="";
47 char _dtunit [MED_SNAME_SIZE+1]="";
48 med_int _ncstp=0;
49 med_bool _local;
50 int i;
51
52 /*
53 * Phase 1 : Test de montage de champs dans un fichier contenant des maillages
54 */
55
56 /* Ouverture du fichier test20-0.med en mode lecture et ajout */
57 if ((fid = MEDfileOpen("test20-0.med",MED_ACC_RDEXT)) < 0) {
58 MESSAGE("Erreur a l'ouverture du fichier test20-0.med");
59 return -1;
60 }
61 printf("On ouvre le fichier test20-0.med \n");
62
63 /* Lecture du nombre de champs */
64 if ((ncha = MEDnField(fid)) < 0) {
65 MESSAGE("Erreur a la lecture du nombre de champs");
66 return -1;
67 }
68 printf("Nombre de champs dans test20-0.med :"IFORMAT" \n",ncha);
69
70 /* On fait le montage dans test20-0.med de tous les champs de test10.med */
71 mid = MEDfileObjectsMount(fid,"test10.med",MED_FIELD);
72 if (mid < 0) {
73 MESSAGE("Echec du montage des champs de test10.med");
74 return -1;
75 }
76 printf("On monte les champs du fichier test10.med dans le fichier test20-0.med \n");
77
78 /* Combien de champs dans le fichier "test20-0.med" apres le montage */
79 if ((ncha = MEDnField(fid)) < 0) {
80 MESSAGE("Erreur a la lecture du nombre de champ");
81 return -1;
82 }
83 printf("Nombre de champs dans test20-0.med apres montage : "IFORMAT" \n",ncha);
84
85 /* On s'assure que les champs sont bien accessibles */
86 for (i=1;i<=ncha;i++) {
87
88 /* Combien de composantes dans le champ */
89 if ((ncomp = MEDfieldnComponent(fid,i)) < 0) {
90 MESSAGE("Erreur a lecture du nombre de composante du champ");
91 return -1;
92 }
93
94 /* Lecture des infos sur le champ */
95 if (MEDfieldInfo(fid,i,nom,_meshname,&_local,&type,comp,unit,_dtunit,&_ncstp) < 0) {
96 MESSAGE("Erreur a la lecture des informations sur le champ");
97 return -1;
98 }
99
100 printf("Nom du champ : |%s| de type %d\n",nom,type);
101 printf("Nom des composantes : |%s|\n",comp);
102 printf("Unites des composantes : |%s| \n",unit);
103 printf("Unites des dates : |%s| \n",_dtunit);
104 printf("Le maillage associé est |%s|\n",_meshname);
105
106 }
107
108 /* On demonte le fichier */
109 if (MEDfileObjectsUnmount(fid,mid,MED_FIELD) < 0) {
110 MESSAGE("Echec du demontage de test10.med");
111 return -1;
112 }
113 printf("On demonte le fichier test10.med dans test20-0.med\n");
114
115 /* Combien de champs dans le fichier "test20-0.med" apres le demontage */
116 if ((ncha = MEDnField(fid)) < 0) {
117 MESSAGE("Erreur a la lecture du nombre de champ");
118 return -1;
119 }
120 printf("Nombre de champs dans test20-0.med apres demontage: "IFORMAT" \n",ncha);
121
122 /* On ferme le fichier test20-0.med */
123 if (MEDfileClose(fid) < 0) {
124 MESSAGE("Erreur lors de la fermeture du fichier");
125 return -1;
126 }
127 printf("On ferme le fichier test20-0.med \n");
128
129
130 /*
131 * Phase 2 : Test de montage de champs et de maillages dans un fichier vierge
132 */
133
134
135 /* Creation du fichier test20.med */
136 if ((fid = MEDfileOpen("test20.med",MODE_ACCES)) < 0) {
137 MESSAGE("Erreur a la creation du fichier test20.med");
138 return -1;
139 }
140 printf("On cree le fichier test20.med \n");
141
142 /* Montage dans test20.med de tous les maillages de test20-0.med */
143 mid2 = MEDfileObjectsMount(fid,"test20-0.med",MED_MESH);
144 if (mid2 < 0) {
145 MESSAGE("Echec du montage de test20-0.med");
146 return -1;
147 }
148 printf("On monte les maillages du fichier test20-0.med dans le fichier test20.med \n");
149
150 /* Lecture du nombre de maillages */
151 nmaa = MEDnMesh(fid);
152 if (nmaa < 0) {
153 MESSAGE("Erreur lors de la lecture du nombre de maillage");
154 return -1;
155 }
156 printf("Nombre de maillages apres montage de test20-0.med : "IFORMAT"\n",nmaa);
157
158 /* Montage dans test20.med de tous les champs de test10.med */
159 mid = MEDfileObjectsMount(fid,"test10.med",MED_FIELD);
160 if (mid < 0) {
161 MESSAGE("Echec du montage de test10.med");
162 return -1;
163 }
164 printf("On monte les champs du fichier test10.med dans le fichier test20.med \n");
165
166 /* Combien de champs dans le fichier "test20.med" apres le montage */
167 if ((ncha = MEDnField(fid)) < 0) {
168 MESSAGE("Erreur lors de la lecture du nombre de champ");
169 return -1;
170 }
171 printf("Nombre de champs dans test20.med apres montage : "IFORMAT" \n",ncha);
172
173 /* Demontage du fichier test10.med */
174 if (MEDfileObjectsUnmount(fid,mid,MED_FIELD) < 0) {
175 MESSAGE("Echec du demontage de test10.med");
176 return -1;
177 }
178 printf("On demonte le fichier test10.med dans test20.med \n");
179
180 /* Demontage du fichier test20-0.med */
181 if (MEDfileObjectsUnmount(fid,mid2,MED_MESH) < 0) {
182 MESSAGE("Echec du demontage de test20-0.med");
183 return -1;
184 }
185 printf("On demonte le fichier test20-0.med du test20.med\n");
186
187 /* Fermeture du fichier test20.med */
188 if (MEDfileClose(fid) < 0) {
189 MESSAGE("Erreur de la fermeture du fichier");
190 return -1;
191 }
192 printf("On ferme le fichier test20.med \n");
193
194 /*
195 * Phase 3 : Test de montage de champs et de maillages dans un fichier vierge à
196 * partir de deux fichiers HDFs contenant une sous arborescence MED avec Champs et Maillages
197 */
198
199 /* Creation du fichier test20b.med */
200 if ((fid = MEDfileOpen("test20b.med",MODE_ACCES)) < 0) {
201 MESSAGE("Erreur a la creation du fichier test20.med");
202 return -1;
203 }
204 printf("On cree le fichier test20b.med \n");
205
206 /* Ouverture du fichier HDF test2-med.hdf */
207 if ((fid2 = MEDfileOpen("test2-med.hdf",MED_ACC_RDONLY)) < 0) {
208 MESSAGE("Erreur a l'ouverture du fichier test2-med.hdf");
209 return -1;
210 }
211 printf("On ouvre le fichier test2-med.hdf \n");
212
213 /* Montage dans test20b.med de tous les maillages de test20-0.med */
214 mid2 = MEDfileObjectsMountById(fid,fid2,"/byid2",MED_MESH);
215 if (mid2 < 0) {
216 MESSAGE("Echec du montage de test2-med.hdf");
217 return -1;
218 }
219 printf("On monte les maillages du fichier test2-med.hdf dans le fichier test20b.med \n");
220
221 /* Lecture du nombre de maillages */
222 nmaa = MEDnMesh(fid);
223 if (nmaa < 0) {
224 MESSAGE("Erreur lors de la lecture du nombre de maillage");
225 return -1;
226 }
227 printf("Nombre de maillages apres montage de test2-med.hdf : "IFORMAT"\n",nmaa);
228
229 /* Ouverture du fichier HDF test10-med.hdf */
230 if ((fid3 = MEDfileOpen("test10-med.hdf",MED_ACC_RDONLY)) < 0) {
231 MESSAGE("Erreur a l'ouverture du fichier test10-med.hdf");
232 return -1;
233 }
234 printf("On ouvre le fichier test10-med.hdf \n");
235
236 /* Montage dans test20b.med de tous les champs de test10-med.hdf */
237 mid = MEDfileObjectsMountById(fid,fid3,"/byid10/",MED_FIELD);
238 if (mid < 0) {
239 MESSAGE("Echec du montage de test10-med.hdf");
240 return -1;
241 }
242 printf("On monte les champs du fichier test10-med.hdf dans le fichier test20b.med \n");
243
244 /* Combien de champs dans le fichier "test20b.med" apres le montage */
245 if ((ncha = MEDnField(fid)) < 0) {
246 MESSAGE("Erreur lors de la lecture du nombre de champ");
247 return -1;
248 }
249 printf("Nombre de champs dans test20b.med apres montage : "IFORMAT" \n",ncha);
250
251 /* Demontage du fichier test10-med.hdf */
252 if (MEDfileObjectsUnmount(fid,mid,MED_FIELD) < 0) {
253 MESSAGE("Echec du demontage de test10-med.hdf");
254 return -1;
255 }
256 printf("On demonte et on ferme le fichier test10-med.hdf de test20b.med \n");
257
258 /* Demontage du fichier test2-med.hdf */
259 if (MEDfileObjectsUnmount(fid,mid2,MED_MESH) < 0) {
260 MESSAGE("Echec du demontage de test2-med.hdf");
261 return -1;
262 }
263 printf("On demonte et on ferme le fichier test2-med.hdf de test20b.med\n");
264
265 /* Fermeture du fichier test20b.med */
266 if (MEDfileClose(fid) < 0) {
267 MESSAGE("Erreur de la fermeture du fichier");
268 return -1;
269 }
270 printf("On ferme le fichier test20b.med \n");
271
272
273 return 0;
274 }
MEDfieldInfo
MEDC_EXPORT med_err MEDfieldInfo(const med_idt fid, const int ind, char *const fieldname, char *const meshname, med_bool *const localmesh, med_field_type *const fieldtype, char *const componentname, char *const componentunit, char *const dtunit, med_int *const ncstp)
Cette fonction permet de lire les informations concernant le champ d'indice ind .
Definition: MEDfieldInfo.c:42
MED_ACC_RDONLY
Definition: med.h:122
MED_SNAME_SIZE
#define MED_SNAME_SIZE
Definition: med.h:84
MEDnMesh
MEDC_EXPORT med_int MEDnMesh(const med_idt fid)
Cette routine permet de lire le nombre de maillages dans un fichier.
Definition: MEDnMesh.c:34
med_idt
hid_t med_idt
Definition: med.h:333
MEDfileObjectsMount
MEDC_EXPORT med_idt MEDfileObjectsMount(const med_idt fid, const char *const filename, const med_class medclass)
Cette routine permet de monter dans le fichier courant un type de données (exemples les maillages,...
Definition: MEDfileObjectsMount.c:40
MED_MESH
Definition: med.h:190
MESSAGE
#define MESSAGE(chaine)
Definition: med_utils.h:324
med_int
int med_int
Definition: med.h:344
MED_FIELD
Definition: med.h:190
med_field_type
med_field_type
Definition: med.h:167
MEDfileObjectsMountById
MEDC_EXPORT med_idt MEDfileObjectsMountById(const med_idt fid, const med_idt chfid, const char *const chpath, const med_class medclass)
Cette routine permet le montage d'une collection d'objets de type medclass dans le fichier associé à ...
Definition: MEDfileObjectsMountById.c:43
med_bool
med_bool
Definition: med.h:262
MEDfieldnComponent
MEDC_EXPORT med_int MEDfieldnComponent(const med_idt fid, const int ind)
Cette fonction lit le nombre de composantes d'un champ.
Definition: MEDfieldnComponent.c:34
IFORMAT
#define IFORMAT
Definition: med_utils.h:145
MED_ACC_RDEXT
Definition: med.h:124
MEDfileClose
MEDC_EXPORT med_err MEDfileClose(med_idt fid)
Fermeture d'un fichier MED.
Definition: MEDfileClose.c:30
main
int main(int argc, char **argv)
Definition: test20.c:36
MED_NAME_SIZE
#define MED_NAME_SIZE
Definition: med.h:83
med_utils.h
MEDfileObjectsUnmount
MEDC_EXPORT med_err MEDfileObjectsUnmount(const med_idt fid, const med_idt mid, const med_class medclass)
Une fois le démontage effectué, les données précédemment montées ne sont plus accessibles.
Definition: MEDfileObjectsUnmount.c:33
MODE_ACCES
#define MODE_ACCES
Definition: test20.c:33
med.h
MEDfileOpen
MEDC_EXPORT med_idt MEDfileOpen(const char *const filename, const med_access_mode accessmode)
Ouverture d'un fichier MED.
Definition: MEDfileOpen.c:42
MEDnField
MEDC_EXPORT med_int MEDnField(const med_idt fid)
Cette fonction permet de lire le nombre de champs dans un fichier.
Definition: MEDnField.c:35