MED fichier
3.0.8/test10.c
Aller à la documentation de ce fichier.
1/* This file is part of MED.
2 *
3 * COPYRIGHT (C) 1999 - 2020 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.c
24 *
25 * - Description : ecriture de champs de resultats MED
26 *
27 *****************************************************************************/
28
29#include <med.h>
30#define MESGERR 1
31#include "med_utils.h"
32#include <string.h>
33
34/* Pour tester MEDfileVersionOpen */
35#define MODE_ACCES MED_ACC_CREAT
36
37/* #ifdef DEF_LECT_ECR */
38/* #define MODE_ACCES MED_ACC_RDWR */
39/* #elif DEF_LECT_AJOUT */
40/* #define MODE_ACCES MED_ACC_RDEXT */
41/* #else */
42/* #define MODE_ACCES MED_ACC_CREAT */
43/* #endif */
44
45#ifndef USER_INTERLACE
46#define USER_INTERLACE MED_FULL_INTERLACE
47#endif
48
49#define USER_MODE MED_COMPACT_STMODE
50
51int main (int argc, char **argv)
52
53
54{
55 med_err ret=0;
56 med_idt fid;
57
58
59
60 /* Maillage support aux champs*/
61 /* Ces maillages sont vides*/
62 char maa1[MED_NAME_SIZE+1]= "maa1";
63 char maa2[MED_NAME_SIZE+1]= "maa2";
64 char * lien_maa2 = "./testfoo.med";
65 char maa3[MED_NAME_SIZE+1]= "maa3";
66
67
68 /* Caractéristiques du champ n° 1 sur TRIA6 */
69 char nomcha1[MED_NAME_SIZE+1] = "champ reel";
70 char comp1[2*MED_SNAME_SIZE+1] = "comp1 comp2 ";
71 /*12345678901234561234567890123456*/
72 char unit1[2*MED_SNAME_SIZE+1] = "unit1 unit2 ";
73 med_int ncomp1 = 2;
74 /* Caractéristiques du model n° 1 de localisation des points de gauss pour le champ n°1*/
75 med_int ngauss1_1 = 6;
76 char gauss1_1[MED_NAME_SIZE+1] = "Model n1";
77 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 };
78
79 /* Constantes */
80
81 med_float gscoo1_1[12] = { 2*_b-1, 1-4*_b, 2*_b-1, 2*_b-1, 1-4*_b,
82 2*_b-1, 1-4*_a, 2*_a-1, 2*_a-1, 1-4*_a, 2*_a-1, 2*_a-1 };
83 med_float wg1_1[6] = { 4*_p2, 4*_p2, 4*_p2, 4*_p1, 4*_p1, 4*_p1 };
84
85 med_int nval1_1= 1*6; /*1 valeurs et 6 points de gauss par valeur */
86 med_int _nent1_1= 1; /*1 valeurs et 6 points de gauss par valeur */
87 med_float 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*/
88 /* Caractéristiques du model n° 2 de localisation des points de gauss pour le champ n°1*/
89 med_int ngauss1_2 = 3;
90 char gauss1_2[MED_NAME_SIZE+1] = "Model n2";
91 med_float gscoo1_2[6] = { -2.0/3,1.0/3, -2.0/3,-2.0/3, 1.0/3,-2.0/3 };
92 med_float wg1_2[3] = { 2.0/3, 2.0/3, 2.0/3 };
93 med_int nval1_2= 2*3; /*2 valeurs et 3 points de gauss par valeur */
94 med_int _nent1_2= 2; /*2 valeurs et 3 points de gauss par valeur */
95 med_float 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*/
96 med_float valr1_2p[2*3*2] = { 12.0,13.0, 20.0,21.0, 22.0,23.0}; /* 2 composantes*/
97 /* Caractéristiques du model n° 3 sans points de gauss pour le champ n°1*/
98 med_int nval1_3= 6; /*6 valeurs et pas de points de gauss */
99 med_int _nent1_3= 6; /*6 valeurs et pas de points de gauss */
100 med_float 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*/
101 med_float valr1_3p[2*2*2] = { 2.0,3.0, 10.0,11.0 }; /* 2 composantes profil1 */
102
103 /* Caractéristiques du champ n° 2 */
104 char nomcha2[MED_NAME_SIZE+1] = "champ entier";
105 char comp2[3*MED_SNAME_SIZE+1] = "comp1 comp2 comp3 ";
106 /*123456789012345612345678901234561234567890123456*/
107 char unit2[3*MED_SNAME_SIZE+1] = "unit1 unit2 unit3 ";
108 med_int ncomp2 = 3;
109 med_int nval2 = 5; /*5 valeurs */
110 med_int valr2[5*3 ] = {0,1,2, 10,11,12, 20,21,22, 30,31,32, 40,41,42}; /* 3 composantes*/
111 med_int valr2p[3*3 ] = {0,1,2, 20,21,22, 40,41,42}; /* 3 composantes*/
112
113 /* Profils utilisés */
114 char nomprofil1[MED_NAME_SIZE+1] = "PROFIL(champ(1))";
115 char nomprofil1b[MED_NAME_SIZE+1] = "PROFIL(champ(1b))";
116 char nomprofil2[MED_NAME_SIZE+1] = "PROFIL(champ2)";
117 med_int profil1[2] = { 2, 3 };
118 med_int profil2[3] = { 1, 3, 5 };
119
120
121 /* Caractéristiques du champ n° 3 */
122 char nomcha3[MED_NAME_SIZE+1] = "champ entier 3";
123 char comp3[3*MED_SNAME_SIZE+1] = "comp1 comp2 ";
124 /*123456789012345612345678901234561234567890123456*/
125 char unit3[3*MED_SNAME_SIZE+1] = "unit1 unit2 ";
126 char dtunit[MED_SNAME_SIZE+1] = "s";
127 med_int ncomp3 = 2;
128 med_int nval3 = 5*4; /*5 valeurs et 4 noeuds par element*/
129 med_int _nent3 = 5; /*5 valeurs et 4 noeuds par element*/
130 med_int valr3[5*4*2] = {0,1, 10,11, 20,21, 30,31,
131 40,41, 50,51, 60,61, 70,71,
132 80,81, 90,91, 100,101, 110,111,
133 120,121, 130,131, 140,141, 150,151,
134 160,161, 170,171, 180,181, 190,191}; /* 2 composantes*/
135 med_int valr3p[3*4*2] = {0,1, 10,11, 20,21, 30,31,
136 80,81, 90,91, 100,101, 110,111,
137 160,161, 170,171, 180,181, 190,191}; /* 2 composantes*/
138
139
140 char nomcoo[3*MED_SNAME_SIZE+1] = "x y z ";
141 char unicoo[3*MED_SNAME_SIZE+1] = "cm cm cm ";
142
143
144
145
146 /* ouverture du fichier */
147 if ((fid = MEDfileVersionOpen("test10.med",MODE_ACCES,3,0,8)) < 0){
148 MESSAGE("Erreur à l'ouverture du fichier : ");
149 return -1;
150 }
151
152 /* creation de maa1 de dimension 3*/
153 if (MEDmeshCr( fid, maa1, 3, 3, MED_UNSTRUCTURED_MESH,
154 "Maillage vide","s", MED_SORT_DTIT,
155 MED_CARTESIAN, nomcoo, unicoo) < 0) {
156 MESSAGE("Erreur a la creation du maillage : "); SSCRUTE(maa1);
157 ret = -1;
158 }
159
160
161 /* creation de maa3 de dimension 3*/
162 if (MEDmeshCr( fid, maa3, 3, 3, MED_UNSTRUCTURED_MESH,
163 "Maillage vide","s", MED_SORT_DTIT,
164 MED_CARTESIAN, nomcoo, unicoo) < 0) {
165 MESSAGE("Erreur a la creation du maillage : "); SSCRUTE(maa3);
166 ret = -1;
167 }
168
169
170 /* creation du champ réel n°1 */
171 if ( MEDfieldCr(fid,nomcha1,MED_FLOAT64,ncomp1,comp1,unit1,dtunit,maa1 ) < 0) {
172 MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha1);
173 ret = -1;
174 };
175
176 /* creation du champ entier n°2 */
177 if ( MEDfieldCr(fid,nomcha2,MED_INT32,ncomp2,comp2,unit2,dtunit,maa2 ) < 0) {
178 MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha2);
179 ret = -1;
180 };
181
182 /* creation du lien au fichier distant contenant maa2 */
183 if (MEDlinkWr(fid,maa2,lien_maa2) < 0) {
184 MESSAGE("Erreur à la création du lien : ");SSCRUTE(lien_maa2);
185 ret = -1;
186 };
187
188 /* creation de la localisation des points de Gauss modèle n°1 */
189 if (MEDlocalizationWr(fid, gauss1_1, MED_TRIA6, MED_TRIA6/100, refcoo1, USER_INTERLACE,
190 ngauss1_1, gscoo1_1, wg1_1,
192 MESSAGE("Erreur à la création du modèle n°1 : ");SSCRUTE(gauss1_1);
193 ret = -1;
194 };
195
196 /* creation de la localisation des points de Gauss modèle n°2 */
197 if (MEDlocalizationWr(fid, gauss1_2, MED_TRIA6, MED_TRIA6/100, refcoo1, USER_INTERLACE,
198 ngauss1_2, gscoo1_2, wg1_2,
200 MESSAGE("Erreur à la création du modèle n°1 : ");SSCRUTE(gauss1_2);
201 ret = -1;
202 };
203
204 /* ecriture du champ n°1*/
205 /* enregistre uniquement les composantes n°2 de valr1_1, et n'utilise ni pas de temps ni n° d'ordre*/
206
208 gauss1_1,USER_INTERLACE, 2, _nent1_1, (unsigned char*)valr1_1 ) < 0) {
209 MESSAGE("Erreur à l'écriture du champ : ");
211 SSCRUTE(maa1);
212 ret = -1;
213 };
214
215
216
217 /* enregistre uniquement les composantes n°1 de valr1_1, et n'utilise ni pas de temps ni n° d'ordre */
218
220 gauss1_1,USER_INTERLACE, 1, _nent1_1, (unsigned char*)valr1_1 ) < 0) {
221 MESSAGE("Erreur à l'écriture du champ : ");
223 SSCRUTE(maa1);
224 ret = -1;
225 };
226
227 /* enregistre uniquement les composantes n°1 de valr1_2, au pas de temps n°1(5.5), n'utilise pas de n°d'ordre*/
228 /* ce champ repose sur le maillage maa2 qui est distant */
229
231 gauss1_2,USER_INTERLACE, 1, _nent1_2, (unsigned char*)valr1_2 ) < 0) {
232 MESSAGE("Erreur à l'écriture du champ : ");
234 SSCRUTE(maa1);
235 ret = -1;
236 };
237
238/*Ce test utilise un deuxième maillage pour un même champ, ceci n'existe plus en 3.0*/
239 /* enregistre uniquement les composantes n°2 de valr1_2, au pas de temps n°1(5.5), n'utilise pas de n°d'ordre*/
240 /* ce champ repose sur le maillage maa1 qui est local */
241
242 /*Ce test utilise un deuxième maillage pour un même champ, ceci n'existe plus en 3.0*/
244 gauss1_1,USER_INTERLACE, 2, _nent1_1, (unsigned char*)valr1_1 ) < 0) {
245 MESSAGE("Erreur à l'écriture du champ : ");
247 SSCRUTE(maa1);
248 ret = -1;
249 };
250
251
252 /* enregistre uniquement les composantes n°1 de valr1_1, au pas de temps n°1(5.5), et n°d'itération n°2*/
253 /* ce champ repose sur le maillage maa3 qui est local */
254
256 gauss1_2,USER_INTERLACE, 1, _nent1_2, (unsigned char*)valr1_2 ) < 0) {
257 MESSAGE("Erreur à l'écriture du champ : ");
259 SSCRUTE(maa1);
260 ret = -1;
261 };
262
263 /* Creation d'un profil (selection du deuxieme élément de valr1_1) */
264 /* On n'utilise que la première valeur (2) du profil */
265 if ( MEDprofileWr(fid,nomprofil1,1,profil1) < 0) {
266 MESSAGE("Erreur à l'écriture du profil : ");
267 SSCRUTE(nomprofil1);
268 ret = -1;
269 };
270
271
272 if ( MEDprofileWr(fid,nomprofil1b,1,profil1) < 0) {
273 MESSAGE("Erreur à l'écriture du profil : ");
274 SSCRUTE(nomprofil1b);
275 ret = -1;
276 };
277
278
279
280
281 /* enregistre toutes les composantes du deuxième élément de valr1_1 (premier élément en stockage compact de valr1p),
282 au pas de temps n°2(5.6), et n°d'itération n°2*/
283 if ( MEDfieldValueWithProfileWr(fid, nomcha1,2,2,5.6,MED_CELL,MED_TRIA6,USER_MODE,nomprofil1,
284 MED_NO_LOCALIZATION,USER_INTERLACE, MED_ALL_CONSTITUENT, nval1_3, (unsigned char*)valr1_3p ) < 0) {
285 MESSAGE("Erreur à l'écriture du champ : ");
287 SSCRUTE(maa1);
288 ret = -1;
289 };
290
291
292 /* enregistre toutes les composantes du deuxième élément de valr1_1 (premier élément en stockage compact de valr1p),
293 au pas de temps n°2(5.6), et n°d'itération n°2 */
294
295 if ( MEDfieldValueWithProfileWr(fid, nomcha1,2,2,5.6,MED_CELL,MED_TRIA6,USER_MODE,nomprofil1b,
296 gauss1_2,USER_INTERLACE, MED_ALL_CONSTITUENT, _nent1_2, (unsigned char*)valr1_2p ) < 0) {
297 MESSAGE("Erreur à l'écriture du champ : ");
299 SSCRUTE(maa1);
300 ret = -1;
301 };
302
303
304 if ( MEDfieldValueWithProfileWr(fid, nomcha1,3,2,5.7,MED_CELL,MED_TRIA6,USER_MODE,nomprofil1,
305 MED_NO_LOCALIZATION,USER_INTERLACE, 2, _nent1_3, (unsigned char*)valr1_3p ) < 0) {
306 MESSAGE("Erreur à l'écriture du champ : ");
308 SSCRUTE(maa1);
309 ret = -1;
310 };
311
312
313 /* Ecriture du champ n° 2 */
314
315
316 if ( MEDfieldValueWr(fid, nomcha2,MED_NO_DT,MED_NO_IT,0,
318 USER_INTERLACE, 1, nval2, (unsigned char*)valr2 ) < 0) {
319 MESSAGE("Erreur à l'écriture du champ : ");
321 SSCRUTE(maa1);
322 ret = -1;
323 };
324
325
327 USER_INTERLACE, 2, nval2, (unsigned char*)valr2 ) < 0) {
328 MESSAGE("Erreur à l'écriture du champ : ");
330 SSCRUTE(maa1);
331 ret = -1;
332 };
333
334
336 USER_INTERLACE, 3, nval2, (unsigned char*)valr2 ) < 0) {
337 MESSAGE("Erreur à l'écriture du champ : ");
339 SSCRUTE(maa1);
340 ret = -1;
341 };
342
343 /* Creation d'un profil (selection des éléments 1,3,5 de valr2) */
344 /* On utilise les trois valeurs du profil */
345 if ( MEDprofileWr(fid,nomprofil2,3,profil2) < 0) {
346 MESSAGE("Erreur à l'écriture du profil : ");
347 SSCRUTE(nomprofil2);
348 ret = -1;
349 };
350
351
353 MED_NO_LOCALIZATION,USER_INTERLACE, 3, nval2, (unsigned char*)valr2p ) < 0) {
354 MESSAGE("Erreur à l'écriture du champ : ");
356 SSCRUTE(maa1);
357 ret = -1;
358 };
359
360 /* creation du champ entier n°3 */
361 if ( MEDfieldCr(fid,nomcha3,MED_INT32,ncomp3,comp3,unit3,dtunit,maa1) < 0) {
362 MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha3);
363 ret = -1;
364 };
365
366 /* Ecriture du champ n° 3 */
367
369 USER_INTERLACE, 1, nval3, (unsigned char*)valr3 ) < 0) {
370 MESSAGE("Erreur à l'écriture du champ : ");
372 SSCRUTE(maa1);
373 ret = -1;
374 };
375
377 USER_INTERLACE, MED_ALL_CONSTITUENT, _nent3, (unsigned char*)valr3 ) < 0) {
378 MESSAGE("Erreur à l'écriture du champ : ");
380 SSCRUTE(maa1);
381 ret = -1;
382 };
383
385 MED_NO_LOCALIZATION,USER_INTERLACE, MED_ALL_CONSTITUENT, _nent3, (unsigned char*)valr3p ) < 0) {
386 MESSAGE("Erreur à l'écriture du champ : ");
388 SSCRUTE(maa1);
389 ret = -1;
390 };
391
392
393 /* fermeture du fichier */
394 if ( MEDfileClose(fid) < 0 ) ret=-1;
395
396 return ret;
397}
398
399
400
401
#define MODE_ACCES
Definition: 3.0.8/test10.c:35
int main(int argc, char **argv)
Definition: 3.0.8/test10.c:51
#define _b
Definition: 3.0.8/test10.c:18
#define _p2
Definition: 3.0.8/test10.c:20
#define USER_MODE
Definition: 3.0.8/test10.c:49
#define _p1
Definition: 3.0.8/test10.c:19
#define _a
Definition: 3.0.8/test10.c:17
#define USER_INTERLACE
Definition: 3.0.8/test10.c:46
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
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...
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...
MEDC_EXPORT med_err MEDfileClose(med_idt fid)
Fermeture d'un fichier MED.
Definition: MEDfileClose.c:30
MEDC_EXPORT med_idt MEDfileVersionOpen(const char *const filename, const med_access_mode accessmode, const med_int major, const med_int minor, const med_int release)
Ouverture d'un fichier MED en indiquant la version du modèle à utiliser en cas de création d'un nouve...
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...
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
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
#define MED_NAME_SIZE
Definition: med.h:81
#define MED_SNAME_SIZE
Definition: med.h:82
#define MED_QUAD4
Definition: med.h:204
#define MED_SEG2
Definition: med.h:200
#define MED_NO_LOCALIZATION
Definition: med.h:273
#define MED_ALLENTITIES_PROFILE
Definition: med.h:286
#define MED_NO_INTERPOLATION
Definition: med.h:275
@ MED_INT32
Definition: med.h:168
@ MED_FLOAT64
Definition: med.h:166
@ MED_CARTESIAN
Definition: med.h:258
@ MED_SORT_DTIT
Definition: med.h:300
#define MED_ALL_CONSTITUENT
Definition: med.h:293
@ MED_UNSTRUCTURED_MESH
Definition: med.h:131
#define MED_TRIA6
Definition: med.h:205
int med_int
Definition: med.h:333
#define MED_NO_DT
Definition: med.h:311
#define MED_NO_IT
Definition: med.h:312
#define MED_NONE
Definition: med.h:231
#define MED_NO_PROFILE
Definition: med.h:279
@ MED_NODE
Definition: med.h:143
@ MED_CELL
Definition: med.h:143
@ MED_NODE_ELEMENT
Definition: med.h:144
@ MED_DESCENDING_FACE
Definition: med.h:143
@ MED_DESCENDING_EDGE
Definition: med.h:143
double med_float
Definition: med.h:327
herr_t med_err
Definition: med.h:323
#define MED_NO_MESH_SUPPORT
Definition: med.h:271
hid_t med_idt
Definition: med.h:322
#define SSCRUTE(chaine)
Definition: med_utils.h:323
#define MESSAGE(chaine)
Definition: med_utils.h:324
#define ISCRUTE_int(entier)
Definition: med_utils.h:314