1 /*************************************************************************
2 * COPYRIGHT (C) 1999 - 2007 EDF R&D, CEA/DEN
3 * THIS LIBRARY IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
4 * IT UNDER THE TERMS OF THE GNU LESSER GENERAL PUBLIC LICENSE
5 * AS PUBLISHED BY THE FREE SOFTWARE FOUNDATION;
6 * EITHER VERSION 2.1 OF THE LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION.
7 *
8 * THIS LIBRARY IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
9 * WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
10 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
11 * LESSER GENERAL PUBLIC LICENSE FOR MORE DETAILS.
12 *
13 * YOU SHOULD HAVE RECEIVED A COPY OF THE GNU LESSER GENERAL PUBLIC LICENSE
14 * ALONG WITH THIS LIBRARY; IF NOT, WRITE TO THE FREE SOFTWARE FOUNDATION,
15 * INC., 59 TEMPLE PLACE, SUITE 330, BOSTON, MA 02111-1307 USA
16 *
17 *************************************************************************/
18 #define _a 0.446948490915965
19 #define _b 0.091576213509771
20 #define _p1 0.11169079483905
21 #define _p2 0.0549758718227661
22
23 /******************************************************************************
24 * - Nom du fichier : test10.c
25 *
26 * - Description : ecriture de champs de resultats MED
27 *
28 *****************************************************************************/
29
30 #include <med.h>
31 #define MESGERR
32 #include <med_utils.h>
33
34 #ifdef DEF_LECT_ECR
35 #define MODE_ACCES MED_LECTURE_ECRITURE
36 #elif DEF_LECT_AJOUT
37 #define MODE_ACCES MED_LECTURE_AJOUT
38 #else
39 #define MODE_ACCES MED_CREATION
40 #endif
41
42 #ifndef USER_INTERLACE
43 #define USER_INTERLACE MED_FULL_INTERLACE
44 #endif
45
46 #define USER_MODE MED_COMPACT
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_TAILLE_NOM+1]= "maa1";
60 char maa2[MED_TAILLE_NOM+1]= "maa2";
61 char * lien_maa2 = "./testfoo.med";
62 char maa3[MED_TAILLE_NOM+1]= "maa3";
63
64
65 /* Caractéristiques du champ n° 1 sur TRIA6 */
66 char nomcha1[MED_TAILLE_NOM+1] = "champ reel";
67 char comp1[2*MED_TAILLE_PNOM+1] = "comp1 comp2 ";
68 /*12345678901234561234567890123456*/
69 char unit1[2*MED_TAILLE_PNOM+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_TAILLE_NOM+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_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*/
84 /* Caractéristiques du model n° 2 de localisation des points de gauss pour le champ n°1*/
85 med_int ngauss1_2 = 3;
86 char gauss1_2[MED_TAILLE_NOM+1] = "Model n2";
87 med_float gscoo1_2[6] = { -2.0/3,1.0/3, -2.0/3,-2.0/3, 1.0/3,-2.0/3 };
88 med_float wg1_2[3] = { 2.0/3, 2.0/3, 2.0/3 };
89 med_int nval1_2= 2*3; /*2 valeurs et 3 points de gauss par valeur */
90 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*/
91 med_float valr1_2p[2*3*2] = { 12.0,13.0, 20.0,21.0, 22.0,23.0}; /* 2 composantes*/
92 /* Caractéristiques du model n° 3 sans points de gauss pour le champ n°1*/
93 med_int nval1_3= 6; /*6 valeurs et pas de points de gauss */
94 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*/
95 med_float valr1_3p[2*2*2] = { 2.0,3.0, 10.0,11.0 }; /* 2 composantes profil1 */
96
97 /* Caractéristiques du champ n° 2 */
98 char nomcha2[MED_TAILLE_NOM+1] = "champ entier";
99 char comp2[3*MED_TAILLE_PNOM+1] = "comp1 comp2 comp3 ";
100 /*123456789012345612345678901234561234567890123456*/
101 char unit2[3*MED_TAILLE_PNOM+1] = "unit1 unit2 unit3 ";
102 med_int ncomp2 = 3;
103 med_int nval2 = 5; /*5 valeurs */
104 med_int valr2[5*3 ] = {0,1,2, 10,11,12, 20,21,22, 30,31,32, 40,41,42}; /* 3 composantes*/
105 med_int valr2p[3*3 ] = {0,1,2, 20,21,22, 40,41,42}; /* 3 composantes*/
106
107 /* Profils utilisés */
108 char nomprofil1[MED_TAILLE_NOM+1] = "PROFIL(champ(1))";
109 char nomprofil2[MED_TAILLE_NOM+1] = "PROFIL(champ2)";
110 med_int profil1[2] = { 2, 3 };
111 med_int profil2[3] = { 1, 3, 5 };
112
113
114 /* Caractéristiques du champ n° 3 */
115 char nomcha3[MED_TAILLE_NOM+1] = "champ entier 3";
116 char comp3[3*MED_TAILLE_PNOM+1] = "comp1 comp2 ";
117 /*123456789012345612345678901234561234567890123456*/
118 char unit3[3*MED_TAILLE_PNOM+1] = "unit1 unit2 ";
119 med_int ncomp3 = 2;
120 med_int nval3 = 5*4; /*5 valeurs et 4 noeuds par element*/
121 med_int valr3[5*4*2] = {0,1, 10,11, 20,21, 30,31,
122 40,41, 50,51, 60,61, 70,71,
123 80,81, 90,91, 100,101, 110,111,
124 120,121, 130,131, 140,141, 150,151,
125 160,161, 170,171, 180,181, 190,191}; /* 2 composantes*/
126 med_int valr3p[3*4*2] = {0,1, 10,11, 20,21, 30,31,
127 80,81, 90,91, 100,101, 110,111,
128 160,161, 170,171, 180,181, 190,191}; /* 2 composantes*/
129
130
131
132
133
134
135 /* ouverture du fichier */
136 if ((fid = MEDouvrir("test10.med",MODE_ACCES)) < 0){
137 MESSAGE("Erreur à l'ouverture du fichier : ");
138 return -1;
139 }
140
141 /* creation de maa1 de dimension 3*/
142 if ( MEDmaaCr(fid,maa1,3,MED_NON_STRUCTURE,"Maillage vide") < 0) {
143 MESSAGE("Erreur à la création du maillage : ");SSCRUTE(maa1);
144 ret = -1;
145 };
146
147 /* creation de maa3 de dimension 3*/
148 if ( MEDmaaCr(fid,maa3,3,MED_NON_STRUCTURE,"Maillage vide") < 0) {
149 MESSAGE("Erreur à la création du maillage : ");SSCRUTE(maa3);
150 ret = -1;
151 };
152
153 /* creation du champ réel n°1 */
154 if ( MEDchampCr(fid,nomcha1,MED_FLOAT64,comp1,unit1,ncomp1) < 0) {
155 MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha1);
156 ret = -1;
157 };
158
159 /* creation du champ entier n°2 */
160 if ( MEDchampCr(fid,nomcha2,MED_INT32,comp2,unit2,ncomp2) < 0) {
161 MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha2);
162 ret = -1;
163 };
164
165 /* creation du lien au fichier distant contenant maa2 */
166 if (MEDlienEcr(fid,lien_maa2,maa2) < 0) {
167 MESSAGE("Erreur à la création du lien : ");SSCRUTE(lien_maa2);
168 ret = -1;
169 };
170
171 /* creation de la localisation des points de Gauss modèle n°1 */
172 if (MEDgaussEcr(fid, MED_TRIA6, refcoo1, USER_INTERLACE,
173 ngauss1_1, gscoo1_1, wg1_1, gauss1_1) < 0) {
174 MESSAGE("Erreur à la création du modèle n°1 : ");SSCRUTE(gauss1_1);
175 ret = -1;
176 };
177
178 /* creation de la localisation des points de Gauss modèle n°2 */
179 if (MEDgaussEcr(fid, MED_TRIA6, refcoo1, USER_INTERLACE,
180 ngauss1_2, gscoo1_2, wg1_2, gauss1_2) < 0) {
181 MESSAGE("Erreur à la création du modèle n°1 : ");SSCRUTE(gauss1_2);
182 ret = -1;
183 };
184
185 /* ecriture du champ n°1*/
186 /* enregistre uniquement les composantes n°2 de valr1_1, et n'utilise ni pas de temps ni n° d'ordre*/
187 if ( MEDchampEcr(fid,maa1,nomcha1,(unsigned char*)valr1_1,USER_INTERLACE,nval1_1,gauss1_1,
188 2,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,MED_NOPDT,"",0.0,MED_NONOR ) < 0) {
189 MESSAGE("Erreur à l'écriture du champ : ");
190 SSCRUTE(nomcha1);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
191 SSCRUTE(maa1);
192 ret = -1;
193 };
194
195
196 /* enregistre uniquement les composantes n°1 de valr1_1, et n'utilise ni pas de temps ni n° d'ordre */
197 if ( MEDchampEcr(fid,maa1,nomcha1,(unsigned char*)valr1_1,USER_INTERLACE,nval1_1,gauss1_1,
198 1,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,MED_NOPDT,"",0.0,MED_NONOR) < 0) {
199 MESSAGE("Erreur à l'écriture du champ : ");
200 SSCRUTE(nomcha1);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
201 SSCRUTE(maa1);
202 ret = -1;
203 };
204
205
206 /* enregistre uniquement les composantes n°1 de valr1_2, au pas de temps n°1(5.5), n'utilise pas de n°d'ordre*/
207 /* ce champ repose sur le maillage maa2 qui est distant */
208 if ( MEDchampEcr(fid,maa2,nomcha1,(unsigned char*)valr1_2,USER_INTERLACE,nval1_2,gauss1_2,
209 1,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,1,"ms",5.5,MED_NONOR) < 0) {
210 MESSAGE("Erreur à l'écriture du champ : ");
211 SSCRUTE(nomcha1);ISCRUTE(1);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
212 SSCRUTE(maa2);
213 ret = -1;
214 };
215
216 /* enregistre uniquement les composantes n°2 de valr1_2, au pas de temps n°1(5.5), n'utilise pas de n°d'ordre*/
217 /* ce champ repose sur le maillage maa1 qui est local */
218 if ( MEDchampEcr(fid,maa1,nomcha1,(unsigned char*)valr1_1,USER_INTERLACE,nval1_1,gauss1_1,
219 2,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,1,"ms",5.5,MED_NONOR) < 0) {
220 MESSAGE("Erreur à l'écriture du champ : ");
221 SSCRUTE(nomcha1);ISCRUTE(1);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
222 SSCRUTE(maa1);
223 ret = -1;
224 };
225
226 /* enregistre uniquement les composantes n°1 de valr1_1, au pas de temps n°1(5.5), et n°d'itération n°2*/
227 /* ce champ repose sur le maillage maa3 qui est local */
228 if ( MEDchampEcr(fid,maa3,nomcha1,(unsigned char*)valr1_2,USER_INTERLACE,nval1_2,gauss1_2,
229 1,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,1,"ms",5.5,2) < 0) {
230 MESSAGE("Erreur à l'écriture du champ : ");
231 SSCRUTE(nomcha1);ISCRUTE(1);ISCRUTE(2);SSCRUTE(MED_NOPFL);
232 SSCRUTE(maa3);
233 ret = -1;
234 };
235
236 /* Creation d'un profil (selection du deuxieme élément de valr1_1) */
237 /* On n'utilise que la première valeur (2) du profil */
238 if ( MEDprofilEcr(fid,profil1,1,nomprofil1) < 0) {
239 MESSAGE("Erreur à l'écriture du profil : ");
240 SSCRUTE(profil1);
241 ret = -1;
242 };
243
244
245 /* enregistre toutes les composantes du deuxième élément de valr1_1 (premier élément en stockage compact de valr1p),
246 au pas de temps n°2(5.6), et n°d'itération n°2*/
247 if ( MEDchampEcr(fid,maa1, nomcha1,(unsigned char*)valr1_3p,USER_INTERLACE,nval1_3,MED_NOGAUSS,
248 MED_ALL,nomprofil1,USER_MODE,MED_MAILLE,MED_TRIA6,2,"ms",5.6,2) < 0) {
249 MESSAGE("Erreur à l'écriture du champ : ");
250 SSCRUTE(nomcha1);ISCRUTE(2);ISCRUTE(2);SSCRUTE(nomprofil1);
251 SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
252 ret = -1;
253 };
254
255 /* enregistre toutes les composantes du deuxième élément de valr1_1 (premier élément en stockage compact de valr1p),
256 au pas de temps n°2(5.6), et n°d'itération n°2 */
257 if ( MEDchampEcr(fid,maa2, nomcha1,(unsigned char*)valr1_2p,USER_INTERLACE,nval1_2,gauss1_2,
258 MED_ALL,nomprofil1,USER_MODE,MED_MAILLE,MED_TRIA6,2,"ms",5.6,2) < 0) {
259 MESSAGE("Erreur à l'écriture du champ : ");
260 SSCRUTE(nomcha1);ISCRUTE(2);ISCRUTE(2);SSCRUTE(nomprofil1);
261 SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
262 ret = -1;
263 };
264
265
266 /* enregistre la composante n°2 du deuxième élément de valr1, au pas de temps n°2(5.7), et n°d'itération n°2*/
267 if ( MEDchampEcr(fid,maa1,nomcha1,(unsigned char*)valr1_3p,USER_INTERLACE,nval1_3,MED_NOGAUSS,
268 2,nomprofil1,USER_MODE,MED_MAILLE,MED_TRIA6,3,"ms",5.7,2) < 0) {
269 MESSAGE("Erreur à l'écriture du champ : ");
270 SSCRUTE(nomcha1);ISCRUTE(2);ISCRUTE(2);SSCRUTE(nomprofil1);
271 SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
272 ret = -1;
273 };
274
275
276
277 /* Ecriture du champ n° 2 */
278 /* TESTER EGALEMENT EN MODE FULL_INTERLACE EN MODIFIANT LA SIGNATURE DE LA ROUTINE */
279
280 /* enregistre la composante n°1 des éléments de valr2, et n'utilise ni pas de temps ni n° d'ordre */
281 if (MEDchampEcr(fid,maa1,nomcha2,(unsigned char*)valr2,USER_INTERLACE,nval2,MED_NOGAUSS,
282 1,MED_NOPFL,MED_NO_PFLMOD,MED_ARETE,MED_SEG2,MED_NOPDT,"",0.0,MED_NONOR) < 0) {
283 MESSAGE("Erreur à l'écriture du champ : ");
284 SSCRUTE(nomcha2);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
285 SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
286 ret = -1;
287 };
288
289
290 /* enregistre la composante n°2 des éléments de valr2, et n'utilise ni pas de temps ni n° d'ordre */
291 /* pour des raisons de complétude des tests on change le type d'élément (aucun sens phys.))*/
292 if (MEDchampEcr(fid,maa1,nomcha2,(unsigned char*)valr2,USER_INTERLACE,nval2,MED_NOGAUSS,
293 2,MED_NOPFL,MED_NO_PFLMOD,MED_NOEUD,0,MED_NOPDT,"",0.0,MED_NONOR) < 0) {
294 MESSAGE("Erreur à l'écriture du champ : ");
295 SSCRUTE(nomcha2);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
296 SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
297 ret = -1;
298 };
299
300 /* enregistre la composante n°3 des éléments de valr2, et n'utilise ni pas de temps ni n° d'ordre */
301 /* pour des raisons de complétude des tests on change le type d'élément (aucun sens phys.))*/
302 if ( MEDchampEcr(fid,maa1,nomcha2,(unsigned char*)valr2,USER_INTERLACE,nval2,MED_NOGAUSS,
303 3,MED_NOPFL,MED_NO_PFLMOD,MED_FACE,MED_TRIA6,MED_NOPDT,"",0.0,MED_NONOR) < 0 ) {
304 MESSAGE("Erreur à l'écriture du champ : ");
305 SSCRUTE(nomcha2);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
306 SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
307 ret = -1;
308 };
309
310 /* Creation d'un profil (selection des éléments 1,3,5 de valr2) */
311 /* On utilise les trois valeurs du profil */
312 if ( MEDprofilEcr(fid,profil2,3,nomprofil2) < 0) {
313 MESSAGE("Erreur à l'écriture du profil : ");
314 SSCRUTE(nomprofil2);
315 ret = -1;
316 };
317
318 /* enregistre la composante n°3 des éléments du profil2 de valr2, et n'utilise ni pas de temps ni n° d'ordre */
319 if ( MEDchampEcr(fid,maa1,nomcha2,(unsigned char*)valr2p,USER_INTERLACE,nval2,MED_NOGAUSS,
320 3,nomprofil2,USER_MODE,MED_MAILLE,MED_TRIA6,MED_NOPDT,"",0.0,MED_NONOR) < 0 ) {
321 MESSAGE("Erreur à l'écriture du champ : ");
322 SSCRUTE(nomcha2);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
323 SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
324 ret = -1;
325 };
326
327 /* creation du champ entier n°3 */
328 if ( MEDchampCr(fid,nomcha3,MED_INT32,comp3,unit3,ncomp3) < 0) {
329 MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha3);
330 ret = -1;
331 };
332
333 /* Ecriture du champ n° 3 */
334
335 /* enregistre la composante n°1 des éléments de valr3, et n'utilise ni pas de temps ni n° d'ordre */
336 if (MEDchampEcr(fid,maa1,nomcha3,(unsigned char*)valr3,USER_INTERLACE,nval3,MED_NOGAUSS,
337 1,MED_NOPFL,MED_NO_PFLMOD,MED_NOEUD_MAILLE,MED_QUAD4,MED_NOPDT,"",0.0,MED_NONOR) < 0) {
338 MESSAGE("Erreur à l'écriture du champ : ");
339 SSCRUTE(nomcha3);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
340 SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
341 ret = -1;
342 };
343
344 /* enregistre les composantes des éléments de valr3, et n'utilise ni pas de temps ni n° d'ordre */
345 if (MEDchampEcr(fid,maa2,nomcha3,(unsigned char*)valr3,USER_INTERLACE,nval3,MED_NOGAUSS,
346 MED_ALL,MED_NOPFL,MED_NO_PFLMOD,MED_NOEUD_MAILLE,MED_QUAD4,MED_NOPDT,"",0.0,MED_NONOR) < 0) {
347 MESSAGE("Erreur à l'écriture du champ : ");
348 SSCRUTE(nomcha3);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
349 SSCRUTE(maa2);SSCRUTE(MED_NOLIEN);
350 ret = -1;
351 };
352
353 /* enregistre les composantes des éléments de valr3, et n'utilise ni pas de temps ni n° d'ordre */
354 if (MEDchampEcr(fid,maa3,nomcha3,(unsigned char*)valr3p,USER_INTERLACE,nval3,MED_NOGAUSS,
355 MED_ALL,nomprofil2,USER_MODE,MED_NOEUD_MAILLE,MED_QUAD4,MED_NOPDT,"",0.0,MED_NONOR) < 0) {
356 MESSAGE("Erreur à l'écriture du champ : ");
357 SSCRUTE(nomcha3);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(nomprofil2);
358 SSCRUTE(maa3);SSCRUTE(MED_NOLIEN);
359 ret = -1;
360 };
361
362
363 /* fermeture du fichier */
364 if ( MEDfermer(fid) < 0 ) ret=-1;
365
366 return ret;
367 }
368
369
370
371