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