MED fichier: Fichier source de test10_mem.c

MED fichier

4.1.1/test10_mem.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 #define _a 0.446948490915965
18 #define _b 0.091576213509771
19 #define _p1 0.11169079483905
20 #define _p2 0.0549758718227661
21
22 /******************************************************************************
23 * - Nom du fichier : test10_mem.c
24 *
25 * - Description : ecriture de champs de resultats MED en mémoire
26 *
27 *****************************************************************************/
28
29
30 #include <med.h>
31 #define MESGERR 1
32 #include "med_utils.h"
33 #include <string.h>
34
35 #ifdef DEF_LECT_ECR
36 #define MODE_ACCES MED_ACC_RDWR
37 #elif DEF_LECT_AJOUT
38 #define MODE_ACCES MED_ACC_RDEXT
39 #else
40 #define MODE_ACCES MED_ACC_CREAT
41 #endif
42
43 #ifndef USER_INTERLACE
44 #define USER_INTERLACE MED_FULL_INTERLACE
45 #endif
46
47 #define USER_MODE MED_COMPACT_STMODE
48
49 #ifdef DEF_MED_FLOAT32
50 #define FTYPECHA MED_FLOAT32
51 #define ftypecha med_float32
52 #define filename_ "test10_f32"
53 #else
54 #define FTYPECHA MED_DOUBLE
55 #define ftypecha med_double
56 #define filename_ "test10"
57 #endif
58
59 #ifdef DEF_MED_INT32
60 #define ITYPECHA MED_INT32
61 #define itypecha med_int32
62 #define filename__ filename_ "_i32"
63 #elif DEF_MED_INT64
64 #define ITYPECHA MED_INT64
65 #define itypecha med_int64
66 #define filename__ filename_ "_i64"
67 #else
68 #define ITYPECHA MED_INT
69 #define itypecha med_int
70 #define filename__ filename_
71 #endif
72
73
74 #define filename filename__ ".med"
75
76 int main (int argc, char **argv)
77
78
79 {
80 med_err ret=0;
81 med_idt fid;
82
83
84
85 /* Maillage support aux champs*/
86 /* Ces maillages sont vides*/
87 char maa1[MED_NAME_SIZE+1]= "maa1";
88 char maa2[MED_NAME_SIZE+1]= "maa2";
89 char * lien_maa2 = "./testfoo.med";
90 char maa3[MED_NAME_SIZE+1]= "maa3";
91
92
93 /* Caractéristiques du champ n° 1 sur TRIA6 */
94 char nomcha1[MED_NAME_SIZE+1] = "champ reel";
95 char comp1[2*MED_SNAME_SIZE+1] = "comp1 comp2 ";
96 /*12345678901234561234567890123456*/
97 char unit1[2*MED_SNAME_SIZE+1] = "unit1 unit2 ";
98 med_int ncomp1 = 2;
99 /* Caractéristiques du model n° 1 de localisation des points de gauss pour le champ n°1*/
100 med_int ngauss1_1 = 6;
101 char gauss1_1[MED_NAME_SIZE+1] = "Model n1";
102 med_float refcoo1[12] = { -1.0,1.0, -1.0,-1.0, 1.0,-1.0, -1.0,0.0, 0.0,-1.0, 0.0,0.0 };
103
104 /* Constantes */
105
106 med_float gscoo1_1[12] = { 2*_b-1, 1-4*_b, 2*_b-1, 2*_b-1, 1-4*_b,
107 2*_b-1, 1-4*_a, 2*_a-1, 2*_a-1, 1-4*_a, 2*_a-1, 2*_a-1 };
108 med_float wg1_1[6] = { 4*_p2, 4*_p2, 4*_p2, 4*_p1, 4*_p1, 4*_p1 };
109
110 med_int nval1_1= 1*6; /*1 valeurs et 6 points de gauss par valeur */
111 med_int _nent1_1= 1; /*1 valeurs et 6 points de gauss par valeur */
112 ftypecha valr1_1[1*6*2] = {0.0,1.0, 2.0,3.0, 10.0,11.0, 12.0,13.0, 20.0,21.0, 22.0,23.0}; /* 2 composantes*/
113 /* Caractéristiques du model n° 2 de localisation des points de gauss pour le champ n°1*/
114 med_int ngauss1_2 = 3;
115 char gauss1_2[MED_NAME_SIZE+1] = "Model n2";
116 med_float gscoo1_2[6] = { -2.0/3,1.0/3, -2.0/3,-2.0/3, 1.0/3,-2.0/3 };
117 med_float wg1_2[3] = { 2.0/3, 2.0/3, 2.0/3 };
118 med_int nval1_2= 2*3; /*2 valeurs et 3 points de gauss par valeur */
119 med_int _nent1_2= 2; /*2 valeurs et 3 points de gauss par valeur */
120 ftypecha valr1_2[2*3*2] = {0.0,1.0, 2.0,3.0, 10.0,11.0, 12.0,13.0, 20.0,21.0, 22.0,23.0}; /* 2 composantes*/
121 ftypecha valr1_2p[2*3*2] = { 12.0,13.0, 20.0,21.0, 22.0,23.0}; /* 2 composantes*/
122 /* Caractéristiques du model n° 3 sans points de gauss pour le champ n°1*/
123 med_int nval1_3= 6; /*6 valeurs et pas de points de gauss */
124 med_int _nent1_3= 6; /*6 valeurs et pas de points de gauss */
125 ftypecha valr1_3[2*3*2] = {0.0,1.0, 2.0,3.0, 10.0,11.0, 12.0,13.0, 20.0,21.0, 22.0,23.0}; /* 2 composantes*/
126 ftypecha valr1_3p[2*2*2] = { 2.0,3.0, 10.0,11.0 }; /* 2 composantes profil1 */
127
128 /* Caractéristiques du champ n° 2 */
129 char nomcha2[MED_NAME_SIZE+1] = "champ entier";
130 char comp2[3*MED_SNAME_SIZE+1] = "comp1 comp2 comp3 ";
131 /*123456789012345612345678901234561234567890123456*/
132 char unit2[3*MED_SNAME_SIZE+1] = "unit1 unit2 unit3 ";
133 med_int ncomp2 = 3;
134 med_int nval2 = 5; /*5 valeurs */
135 itypecha valr2[5*3 ] = {0,1,2, 10,11,12, 20,21,22, 30,31,32, 40,41,42}; /* 3 composantes*/
136 /* u32b : 4294967296 s32b : 2147483647 -2147483647 */
137 itypecha valr2_[5*3 ] = {2147483647, -2147483648, 4294967296, 10,11,12, 20,21,22, 30,31,32, 40,41,42};
138 itypecha valr2p[3*3 ] = {0,1,2, 20,21,22, 40,41,42}; /* 3 composantes*/
139
140 /* Profils utilisés */
141 char nomprofil1[MED_NAME_SIZE+1] = "PROFIL(champ(1))";
142 char nomprofil1b[MED_NAME_SIZE+1] = "PROFIL(champ(1b))";
143 char nomprofil2[MED_NAME_SIZE+1] = "PROFIL(champ2)";
144 med_int profil1[2] = { 2, 3 };
145 med_int profil2[3] = { 1, 3, 5 };
146
147
148 /* Caractéristiques du champ n° 3 */
149 char nomcha3[MED_NAME_SIZE+1] = "champ entier 3";
150 char comp3[3*MED_SNAME_SIZE+1] = "comp1 comp2 ";
151 /*123456789012345612345678901234561234567890123456*/
152 char unit3[3*MED_SNAME_SIZE+1] = "unit1 unit2 ";
153 char dtunit[MED_SNAME_SIZE+1] = "s";
154 med_int ncomp3 = 2;
155 med_int nval3 = 5*4; /*5 valeurs et 4 noeuds par element*/
156 med_int _nent3 = 5; /*5 valeurs et 4 noeuds par element*/
157 itypecha valr3[5*4*2] = {0,1, 10,11, 20,21, 30,31,
158 40,41, 50,51, 60,61, 70,71,
159 80,81, 90,91, 100,101, 110,111,
160 120,121, 130,131, 140,141, 150,151,
161 160,161, 170,171, 180,181, 190,191}; /* 2 composantes*/
162 itypecha valr3p[3*4*2] = {0,1, 10,11, 20,21, 30,31,
163 80,81, 90,91, 100,101, 110,111,
164 160,161, 170,171, 180,181, 190,191}; /* 2 composantes*/
165
166
167 char nomcoo[3*MED_SNAME_SIZE+1] = "x y z ";
168 char unicoo[3*MED_SNAME_SIZE+1] = "cm cm cm ";
169
170 char _maa[MED_NAME_SIZE+1]="";
171 char _desc[MED_COMMENT_SIZE+1]="";
172 char _dtunit[MED_SNAME_SIZE+1]="";
173 char _nomcoo[3*MED_SNAME_SIZE+1]="";
174 char _unicoo[3*MED_SNAME_SIZE+1]="";
175 med_int _nstep=0;
176 med_axis_type _rep;
177 med_mesh_type _type;
178 med_sorting_type _sort;
179 char __dtunit [MED_SNAME_SIZE+1]="";
180 med_int _mdim=0,_sdim=0;
181
182 med_int ncha=0;
183 med_access_mode _accessmode;
184
185 /* Il n'est pas necessaire de pré-allouer la mémoire.
186 med-fichier s'occupe d'allouer la mémoire au fil de l'utilisation de l'API.*/
187 /* Attention la structure doit être initialisée à MED_MEMFILE_INIT avant toute première utilisation.*/
188 med_memfile memfile[1] = MED_MEMFILE_INIT;
189
190 /* On décide de pré-allouer suffisement de mémoire : 10MB */
191 /* med-fichier utilisera l'espace réservé sans réallocation.*/
192 /* memfile[0].app_image_size = 10*1024*1024; */
193 /* memfile[0].app_image_ptr = calloc(memfile[0].app_image_size,sizeof(char)); */
194
195 /* On décide de pré-allouer insuffisement de mémoire : 1KB */
196 /* med-fichier utilisera l'espace réservé puis effectuera une réallocation.*/
197 /* memfile[0].app_image_size = 1024; */
198 /* memfile[0].app_image_ptr = calloc(memfile[0].app_image_size,sizeof(char)); */
199
200 AFF_MEMFILE;
201
202 /* Ouverture du fichier */
203 /* mode RDWR uniquement si le fichier test10.med a préalablement été généré par test10
204 ou par le sync de test10_mem (en CREATE).
205 Si test10.med n'existe pas et demande le mode RDWR
206 -> erreur car nous n'avons pas initialisé une image mémoire valide !
207 */
208 _accessmode = MED_ACC_RDWR;
209 if ((fid = MEDmemFileOpen("test10_mem.med",memfile,MED_TRUE,_accessmode) ) < 0){
210 MESSAGE("Erreur à l'ouverture du fichier : ");
211 return -1;
212 }
213 /* Ouverture du fichier */
214 /* Si l'on ne veut pas créer de fichier sur disque, sync=MED_FALSE */
215 /* if ((fid = MEDmemFileOpen("test10.med",memfile,MED_FALSE,MED_ACC_CREAT) ) < 0){ */
216 /* MESSAGE("Erreur à l'ouverture du fichier : "); */
217 /* return -1; */
218 /* } */
219
220 AFF_MEMFILE;
221
222 /* combien de champs dans le fichier (pour tester le fichier mémoire)*/
223 if ((ncha = MEDnField(fid)) < 0) {
224 MESSAGE("Impossible de lire le nombre de champs : ");ISCRUTE(ncha);
225 }
226 printf("Nombre de champs : "IFORMAT" \n",ncha);
227 if (ncha == 3 ) { /*Un quatrième champ est crée seulement si un fichier test10.med existait et mode RDWR + sync */
228 /* creation du champ réel n° 1 */
229 if ( MEDfieldCr(fid,"Ajout Complémentaire",MED_FLOAT64,ncomp1,comp1,unit1,dtunit,maa1 ) < 0) {
230 MESSAGE("Erreur à la création du champ : ");SSCRUTE("Ajout Complémentaire");
231 ret = -1;
232 };
233 }
234 /* creation de maa1 de dimension 3*/
235 if (MEDmeshCr( fid, maa1, 3, 3, MED_UNSTRUCTURED_MESH,
236 "Maillage vide","s", MED_SORT_DTIT,
237 MED_CARTESIAN, nomcoo, unicoo) < 0) {
238 MESSAGE("Erreur a la creation du maillage : "); SSCRUTE(maa1);
239 ret = -1;
240 }
241
242
243 /* creation de maa3 de dimension 3*/
244 if (MEDmeshCr( fid, maa3, 3, 3, MED_UNSTRUCTURED_MESH,
245 "Maillage vide","s", MED_SORT_DTIT,
246 MED_CARTESIAN, nomcoo, unicoo) < 0) {
247 MESSAGE("Erreur a la creation du maillage : "); SSCRUTE(maa3);
248 ret = -1;
249 }
250
251
252 /* creation du champ réel n°1 */
253 if ( MEDfieldCr(fid,nomcha1,FTYPECHA,ncomp1,comp1,unit1,dtunit,maa1 ) < 0) {
254 MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha1);
255 ret = -1;
256 };
257
258 /* creation du champ entier n°2 */
259 if ( MEDfieldCr(fid,nomcha2,ITYPECHA,ncomp2,comp2,unit2,dtunit,maa2 ) < 0) {
260 MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha2);
261 ret = -1;
262 };
263
264 /* creation du lien au fichier distant contenant maa2 */
265 if (MEDlinkWr(fid,maa2,lien_maa2) < 0) {
266 MESSAGE("Erreur à la création du lien : ");SSCRUTE(lien_maa2);
267 ret = -1;
268 };
269
270 /* creation de la localisation des points de Gauss modèle n° 1 */
271 if (MEDlocalizationWr(fid, gauss1_1, MED_TRIA6, MED_TRIA6/100, refcoo1, USER_INTERLACE,
272 ngauss1_1, gscoo1_1, wg1_1,
273 MED_NO_INTERPOLATION, MED_NO_MESH_SUPPORT ) < 0) {
274 MESSAGE("Erreur à la création du modèle n° 1 : ");SSCRUTE(gauss1_1);
275 ret = -1;
276 };
277
278 /* creation de la localisation des points de Gauss modèle n° 2 */
279 if (MEDlocalizationWr(fid, gauss1_2, MED_TRIA6, MED_TRIA6/100, refcoo1, USER_INTERLACE,
280 ngauss1_2, gscoo1_2, wg1_2,
281 MED_NO_INTERPOLATION, MED_NO_MESH_SUPPORT) < 0) {
282 MESSAGE("Erreur à la création du modèle n° 1 : ");SSCRUTE(gauss1_2);
283 ret = -1;
284 };
285
286 /* ecriture du champ n° 1*/
287 /* enregistre uniquement les composantes n° 2 de valr1_1, et n'utilise ni pas de temps ni n° d'ordre*/
288
289 if ( MEDfieldValueWithProfileWr(fid, nomcha1,MED_NO_DT,MED_NO_IT,0.0,MED_CELL,MED_TRIA6,USER_MODE,MED_ALLENTITIES_PROFILE,
290 gauss1_1,USER_INTERLACE, 2, _nent1_1, (unsigned char*)valr1_1 ) < 0) {
291 MESSAGE("Erreur à l'écriture du champ : ");
292 SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_DT);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
293 SSCRUTE(maa1);
294 ret = -1;
295 };
296
297
298
299 /* enregistre uniquement les composantes n° 1 de valr1_1, et n'utilise ni pas de temps ni n° d'ordre */
300
301 if ( MEDfieldValueWithProfileWr(fid, nomcha1,MED_NO_DT,MED_NO_IT,0.0,MED_CELL,MED_TRIA6,USER_MODE,MED_ALLENTITIES_PROFILE,
302 gauss1_1,USER_INTERLACE, 1, _nent1_1, (unsigned char*)valr1_1 ) < 0) {
303 MESSAGE("Erreur à l'écriture du champ : ");
304 SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_DT);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
305 SSCRUTE(maa1);
306 ret = -1;
307 };
308
309 /* enregistre uniquement les composantes n° 1 de valr1_2, au pas de temps n° 1(5.5), n'utilise pas de n° d'ordre*/
310 /* ce champ repose sur le maillage maa2 qui est distant */
311
312 if ( MEDfieldValueWithProfileWr(fid, nomcha1,1,MED_NO_IT,5.5,MED_CELL,MED_TRIA6,USER_MODE,MED_ALLENTITIES_PROFILE,
313 gauss1_2,USER_INTERLACE, 1, _nent1_2, (unsigned char*)valr1_2 ) < 0) {
314 MESSAGE("Erreur à l'écriture du champ : ");
315 SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
316 SSCRUTE(maa1);
317 ret = -1;
318 };
319
320 /*Ce test utilise un deuxième maillage pour un même champ, ceci n'existe plus en 3.0*/
321 /* enregistre uniquement les composantes n°2 de valr1_2, au pas de temps n°1(5.5), n'utilise pas de n°d'ordre*/
322 /* ce champ repose sur le maillage maa1 qui est local */
323
324 /*Ce test utilise un deuxième maillage pour un même champ, ceci n'existe plus en 3.0*/
325 if ( MEDfieldValueWithProfileWr(fid, nomcha1,1,1,5.5,MED_CELL,MED_TRIA6,USER_MODE,MED_ALLENTITIES_PROFILE,
326 gauss1_1,USER_INTERLACE, 2, _nent1_1, (unsigned char*)valr1_1 ) < 0) {
327 MESSAGE("Erreur à l'écriture du champ : ");
328 SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_DT);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
329 SSCRUTE(maa1);
330 ret = -1;
331 };
332
333
334 /* enregistre uniquement les composantes n° 1 de valr1_1, au pas de temps n° 1(5.5), et n° d'itération n° 2*/
335 /* ce champ repose sur le maillage maa3 qui est local */
336
337 if ( MEDfieldValueWithProfileWr(fid, nomcha1,1,2,5.5,MED_CELL,MED_TRIA6,USER_MODE,MED_ALLENTITIES_PROFILE,
338 gauss1_2,USER_INTERLACE, 1, _nent1_2, (unsigned char*)valr1_2 ) < 0) {
339 MESSAGE("Erreur à l'écriture du champ : ");
340 SSCRUTE(nomcha1);SSCRUTE(MED_NO_PROFILE);
341 SSCRUTE(maa1);
342 ret = -1;
343 };
344
345 /* Creation d'un profil (selection du deuxieme élément de valr1_1) */
346 /* On n'utilise que la première valeur (2) du profil */
347 if ( MEDprofileWr(fid,nomprofil1,1,profil1) < 0) {
348 MESSAGE("Erreur à l'écriture du profil : ");
349 SSCRUTE(nomprofil1);
350 ret = -1;
351 };
352
353
354 if ( MEDprofileWr(fid,nomprofil1b,1,profil1) < 0) {
355 MESSAGE("Erreur à l'écriture du profil : ");
356 SSCRUTE(nomprofil1b);
357 ret = -1;
358 };
359
360
361
362
363 /* enregistre toutes les composantes du deuxième élément de valr1_1 (premier élément en stockage compact de valr1p),
364 au pas de temps n° 2(5.6), et n° d'itération n° 2*/
365 if ( MEDfieldValueWithProfileWr(fid, nomcha1,2,2,5.6,MED_CELL,MED_TRIA6,USER_MODE,nomprofil1,
366 MED_NO_LOCALIZATION,USER_INTERLACE, MED_ALL_CONSTITUENT, nval1_3, (unsigned char*)valr1_3p ) < 0) {
367 MESSAGE("Erreur à l'écriture du champ : ");
368 SSCRUTE(nomcha1);SSCRUTE(MED_NO_PROFILE);
369 SSCRUTE(maa1);
370 ret = -1;
371 };
372
373 /* enregistre toutes les composantes du deuxième élément de valr1_1 (premier élément en stockage compact de valr1p),
374 au pas de temps n° 2(5.6), et n° d'itération n° 2 */
375
376 if ( MEDfieldValueWithProfileWr(fid, nomcha1,2,2,5.6,MED_CELL,MED_TRIA6,USER_MODE,nomprofil1b,
377 gauss1_2,USER_INTERLACE, MED_ALL_CONSTITUENT, _nent1_2, (unsigned char*)valr1_2p ) < 0) {
378 MESSAGE("Erreur à l'écriture du champ : ");
379 SSCRUTE(nomcha1);SSCRUTE(MED_NO_PROFILE);
380 SSCRUTE(maa1);
381 ret = -1;
382 };
383
384
385 if ( MEDfieldValueWithProfileWr(fid, nomcha1,3,2,5.7,MED_CELL,MED_TRIA6,USER_MODE,nomprofil1,
386 MED_NO_LOCALIZATION,USER_INTERLACE, 2, _nent1_3, (unsigned char*)valr1_3p ) < 0) {
387 MESSAGE("Erreur à l'écriture du champ : ");
388 SSCRUTE(nomcha1);SSCRUTE(MED_NO_PROFILE);
389 SSCRUTE(maa1);
390 ret = -1;
391 };
392
393
394 /* Ecriture du champ n° 2 */
395
396
397 if ( MEDfieldValueWr(fid, nomcha2,MED_NO_DT,MED_NO_IT,0,
398 MED_DESCENDING_EDGE,MED_SEG2,
399 USER_INTERLACE, 1, nval2, (unsigned char*)valr2 ) < 0) {
400 MESSAGE("Erreur à l'écriture du champ : ");
401 SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_DT);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
402 SSCRUTE(maa1);
403 ret = -1;
404 };
405
406
407 if ( MEDfieldValueWr(fid, nomcha2,MED_NO_DT,MED_NO_IT,0,MED_NODE,MED_NONE,
408 USER_INTERLACE, 2, nval2, (unsigned char*)valr2 ) < 0) {
409 MESSAGE("Erreur à l'écriture du champ : ");
410 SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_DT);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
411 SSCRUTE(maa1);
412 ret = -1;
413 };
414
415
416 if ( MEDfieldValueWr(fid, nomcha2,MED_NO_DT,MED_NO_IT,0,MED_DESCENDING_FACE,MED_TRIA6,
417 USER_INTERLACE, 3, nval2, (unsigned char*)valr2 ) < 0) {
418 MESSAGE("Erreur à l'écriture du champ : ");
419 SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_DT);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
420 SSCRUTE(maa1);
421 ret = -1;
422 };
423
424 /* Creation d'un profil (selection des éléments 1,3,5 de valr2) */
425 /* On utilise les trois valeurs du profil */
426 if ( MEDprofileWr(fid,nomprofil2,3,profil2) < 0) {
427 MESSAGE("Erreur à l'écriture du profil : ");
428 SSCRUTE(nomprofil2);
429 ret = -1;
430 };
431
432
433 if ( MEDfieldValueWithProfileWr(fid, nomcha2,MED_NO_DT,MED_NO_IT,0,MED_CELL,MED_TRIA6,USER_MODE,nomprofil2,
434 MED_NO_LOCALIZATION,USER_INTERLACE, 3, nval2, (unsigned char*)valr2p ) < 0) {
435 MESSAGE("Erreur à l'écriture du champ : ");
436 SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_DT);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
437 SSCRUTE(maa1);
438 ret = -1;
439 };
440
441 /* creation du champ entier n°3 */
442 if ( MEDfieldCr(fid,nomcha3,ITYPECHA,ncomp3,comp3,unit3,dtunit,maa1) < 0) {
443 MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha3);
444 ret = -1;
445 };
446
447 /* Ecriture du champ n° 3 */
448
449 if ( MEDfieldValueWr(fid, nomcha3,MED_NO_DT,MED_NO_IT,0,MED_CELL,MED_QUAD4,
450 USER_INTERLACE, 1, nval3, (unsigned char*)valr3 ) < 0) {
451 MESSAGE("Erreur à l'écriture du champ : ");
452 SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_DT);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
453 SSCRUTE(maa1);
454 ret = -1;
455 };
456
457 if ( MEDfieldValueWr(fid, nomcha3,MED_NO_DT,MED_NO_IT,0,MED_NODE_ELEMENT,MED_QUAD4,
458 USER_INTERLACE, MED_ALL_CONSTITUENT, _nent3, (unsigned char*)valr3 ) < 0) {
459 MESSAGE("Erreur à l'écriture du champ : ");
460 SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_DT);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
461 SSCRUTE(maa1);
462 ret = -1;
463 };
464
465 if ( MEDfieldValueWithProfileWr(fid, nomcha3,MED_NO_DT,MED_NO_IT,0,MED_NODE_ELEMENT,MED_QUAD4,USER_MODE,nomprofil2,
466 MED_NO_LOCALIZATION,USER_INTERLACE, MED_ALL_CONSTITUENT, _nent3, (unsigned char*)valr3p ) < 0) {
467 MESSAGE("Erreur à l'écriture du champ : ");
468 SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_DT);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
469 SSCRUTE(maa1);
470 ret = -1;
471 };
472
473 AFF_MEMFILE;
474
475 /* fermeture du fichier */
476 if ( MEDfileClose(fid) < 0 ) {
477 ret=-1;
478 MESSAGE("Erreur à la fermeture du fichier ");
479 }
480 AFF_MEMFILE;
481
482 /* H5Fflush(fid, H5F_SCOPE_GLOBAL ); */
483 _accessmode = MED_ACC_RDWR;
484 /* Utilisation du fichier mémoire et synchronisation avec un nouveau fichier.*/
485 /*ATTENTION : Il faut au moins une écriture/création dans le fichier pour que le sync se fasse en mode RW*/
486 if ((fid = MEDmemFileOpen("test10_mem_ext.med",memfile,MED_TRUE,_accessmode) ) < 0){
487 MESSAGE("Erreur à l'ouverture du fichier : ");
488 return -1;
489 }
490
491 AFF_MEMFILE;
492
493 /* combien de champs dans le fichier (pour tester le fichier mémoire)*/
494 if ((ncha = MEDnField(fid)) < 0) {
495 MESSAGE("Impossible de lire le nombre de champs : ");ISCRUTE(ncha);
496 }
497 printf("Nombre de champs : "IFORMAT" \n",ncha);
498
499 /*Il faut une écriture pour que le sync se fasse en mode RW*/
500 if ( (ncha == 3) || (_accessmode == MED_ACC_RDWR) )
501 /* creation du champ complémentaire n° 2 */
502 if ( MEDfieldCr(fid,"Ajout Complémentaire 2",FTYPECHA,ncomp1,comp1,unit1,dtunit,maa1 ) < 0) {
503 MESSAGE("Erreur à la création du champ : Complémentaire 2");
504 ret = -1;
505 };
506
507 AFF_MEMFILE;
508
509 /* Lecture des infos concernant le premier maillage */
510 if ( MEDmeshInfo( fid, 1, _maa, &_sdim, &_mdim, &_type, _desc, __dtunit, &_sort,
511 &_nstep, &_rep, _nomcoo,_unicoo) < 0 ) {
512 MESSAGE("Erreur a la lecture des informations sur le maillage : ");SSCRUTE(_maa);
513 return -1;
514 } else {
515 printf("Maillage de nom : |%s| , de dimension : "IFORMAT" , et de type %d\n",_maa,_mdim,_type);
516 printf("\t -Dimension de l'espace : "IFORMAT"\n",_sdim);
517 printf("\t -Description du maillage : %s\n",_desc);
518 printf("\t -Noms des axes : |%s|\n",_nomcoo);
519 printf("\t -Unités des axes : |%s|\n",_unicoo);
520 printf("\t -Type de repère : %d\n",_rep);
521 printf("\t -Nombre d'étapes de calcul : "IFORMAT"\n",_nstep);
522 printf("\t -Unité des dates : |%s|\n",__dtunit);
523 }
524
525 /* combien de champs dans le fichier (pour tester le fichier mémoire)*/
526 if ((ncha = MEDnField(fid)) < 0) {
527 MESSAGE("Impossible de lire le nombre de champs : ");ISCRUTE(ncha);
528 }
529 printf("Nombre de champs : "IFORMAT" \n",ncha);
530
531 if ( MEDfileClose(fid) < 0 ) {
532 ret=-1;
533 MESSAGE("Erreur à la fermeture du fichier ");
534 }
535
536 AFF_MEMFILE;
537
538 free(memfile[0].app_image_ptr);
539 memfile->app_image_size =0;
540 return ret;
541 }
542
543
544
545
MED_COMMENT_SIZE
#define MED_COMMENT_SIZE
Definition: med.h:81
itypecha
#define itypecha
Definition: 4.1.1/test10_mem.c:68
MED_UNSTRUCTURED_MESH
Definition: med.h:133
med_memfile
Structure d'acceuil du buffer d'un fichier MED en mémoire.
Definition: med.h:395
_p2
#define _p2
Definition: 4.1.1/test10_mem.c:20
MED_SNAME_SIZE
#define MED_SNAME_SIZE
Definition: med.h:84
MED_TRUE
Definition: med.h:262
ISCRUTE_int
#define ISCRUTE_int(entier)
Definition: med_utils.h:314
med_idt
hid_t med_idt
Definition: med.h:333
FTYPECHA
#define FTYPECHA
Definition: 4.1.1/test10_mem.c:53
MED_SEG2
#define MED_SEG2
Definition: med.h:202
USER_INTERLACE
#define USER_INTERLACE
Definition: 4.1.1/test10_mem.c:43
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_ACC_RDWR
Definition: med.h:123
MEDfieldValueWr
MEDC_EXPORT med_err MEDfieldValueWr(const med_idt fid, const char *const fieldname, const med_int numdt, const med_int numit, const med_float dt, const med_entity_type entitype, const med_geometry_type geotype, const med_switch_mode switchmode, const med_int componentselect, const med_int nentity, const unsigned char *const value)
Cette fonction permet d'écrire les valeurs d'un champ définies sur des entités d'un maillage pour une...
Definition: MEDfieldValueWr.c:44
MED_NO_LOCALIZATION
#define MED_NO_LOCALIZATION
Definition: med.h:277
MED_ALLENTITIES_PROFILE
#define MED_ALLENTITIES_PROFILE
Definition: med.h:293
MESSAGE
#define MESSAGE(chaine)
Definition: med_utils.h:324
med_int
int med_int
Definition: med.h:344
MED_NO_MESH_SUPPORT
#define MED_NO_MESH_SUPPORT
Definition: med.h:275
MED_SORT_DTIT
Definition: med.h:311
ITYPECHA
#define ITYPECHA
Definition: 4.1.1/test10_mem.c:67
ISCRUTE
#define ISCRUTE(entier)
Definition: med_utils.h:313
MEDlocalizationWr
MEDC_EXPORT med_err MEDlocalizationWr(const med_idt fid, const char *const localizationname, const med_geometry_type geotype, const med_int spacedimension, const med_float *const elementcoordinate, const med_switch_mode switchmode, const med_int nipoint, const med_float *const ipointcoordinate, const med_float *const weight, const char *const geointerpname, const char *const ipointstructmeshname)
Cette routine permet l'écriture d'une localisation localizationname de points d'intégration dans/auto...
Definition: MEDlocalizationWr.c:49
MEDfieldValueWithProfileWr
MEDC_EXPORT med_err MEDfieldValueWithProfileWr(const med_idt fid, const char *const fieldname, const med_int numdt, const med_int numit, const med_float dt, const med_entity_type entitype, const med_geometry_type geotype, const med_storage_mode storagemode, const char *const profilename, const char *const localizationname, const med_switch_mode switchmode, const med_int componentselect, const med_int nentity, const unsigned char *const value)
Cette fonction permet d'écrire les valeurs d'un champ définies sur des entités d'un maillage pour une...
Definition: MEDfieldValueWithProfileWr.c:48
_p1
#define _p1
Definition: 4.1.1/test10_mem.c:19
med_float
double med_float
Definition: med.h:338
_b
#define _b
Definition: 4.1.1/test10_mem.c:18
IFORMAT
#define IFORMAT
Definition: med_utils.h:145
MED_NO_DT
#define MED_NO_DT
Definition: med.h:322
med_access_mode
med_access_mode
Definition: med.h:122
MED_NONE
#define MED_NONE
Definition: med.h:233
MEDfileClose
MEDC_EXPORT med_err MEDfileClose(med_idt fid)
Fermeture d'un fichier MED.
Definition: MEDfileClose.c:30
MED_MEMFILE_INIT
#define MED_MEMFILE_INIT
Definition: med.h:409
med_memfile::app_image_size
size_t app_image_size
Definition: med.h:397
SSCRUTE
#define SSCRUTE(chaine)
Definition: med_utils.h:323
med_mesh_type
med_mesh_type
Definition: med.h:133
MED_FLOAT64
Definition: med.h:168
MEDmeshCr
MEDC_EXPORT med_err MEDmeshCr(const med_idt fid, const char *const meshname, const med_int spacedim, const med_int meshdim, const med_mesh_type meshtype, const char *const description, const char *const dtunit, const med_sorting_type sortingtype, const med_axis_type axistype, const char *const axisname, const char *const axisunit)
Cette routine permet de créer un maillage dans un fichier.
Definition: MEDmeshCr.c:45
MED_CELL
Definition: med.h:145
MED_NAME_SIZE
#define MED_NAME_SIZE
Definition: med.h:83
MED_NODE_ELEMENT
Definition: med.h:146
MEDmemFileOpen
MEDC_EXPORT med_idt MEDmemFileOpen(const char *const filename, med_memfile *const memfile, const med_bool filesync, const med_access_mode accessmode)
Ouverture d'un fichier MED pour une utilisation en mémoire.
Definition: MEDmemFileOpen.c:43
ftypecha
#define ftypecha
Definition: 4.1.1/test10_mem.c:54
MED_ALL_CONSTITUENT
#define MED_ALL_CONSTITUENT
Definition: med.h:301
MED_CARTESIAN
Definition: med.h:260
med_utils.h
MED_NODE
Definition: med.h:145
MED_NO_PROFILE
#define MED_NO_PROFILE
Definition: med.h:283
AFF_MEMFILE
#define AFF_MEMFILE
Definition: med.h:412
MEDfieldCr
MEDC_EXPORT med_err MEDfieldCr(const med_idt fid, const char *const fieldname, const med_field_type fieldtype, const med_int ncomponent, const char *const componentname, const char *const componentunit, const char *const dtunit, const char *const meshname)
Cette fonction crée un champ dans un fichier.
Definition: MEDfieldCr.c:44
med_axis_type
med_axis_type
Definition: med.h:260
med.h
MED_NO_IT
#define MED_NO_IT
Definition: med.h:323
MEDprofileWr
MEDC_EXPORT med_err MEDprofileWr(const med_idt fid, const char *const profilename, const med_int profilesize, const med_int *const profilearray)
Cette routine permet d'écrire un profil dans un fichier MED.
Definition: MEDprofileWr.c:40
_a
#define _a
Definition: 4.1.1/test10_mem.c:17
MED_NO_INTERPOLATION
#define MED_NO_INTERPOLATION
Definition: med.h:279
main
int main(int argc, char **argv)
Definition: 4.1.1/test10_mem.c:75
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
MED_QUAD4
#define MED_QUAD4
Definition: med.h:206
MED_TRIA6
#define MED_TRIA6
Definition: med.h:207
MEDlinkWr
MEDC_EXPORT med_err MEDlinkWr(const med_idt fid, const char *const meshname, const char *const link)
Cette routine permet d'écrire un lien dans un fichier MED.
Definition: MEDlinkWr.c:36
MED_DESCENDING_FACE
Definition: med.h:145
USER_MODE
#define USER_MODE
Definition: 4.1.1/test10_mem.c:46