1 /*************************************************************************
2 * COPYRIGHT (C) 1999 - 2003 EDF R&D
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
19
20 /******************************************************************************
21 * - Nom du fichier : test10.c
22 *
23 * - Description : ecriture de champs de resultats MED
24 *
25 *****************************************************************************/
26
27 #include <med.h>
28 #include <med_utils.h>
29 #include <stdio.h>
30 #include <string.h>
31 #include <stdlib.h>
32 #define USER_INTERLACE MED_FULL_INTERLACE
33 #define USER_MODE MED_COMPACT
34 int main (int argc, char **argv)
35 {
36 med_err ret=0;
37 med_idt fid;
38
39 /* Constantes */
40 med_float a=0.446948490915965;
41 med_float b=0.091576213509771;
42 med_float p1=0.11169079483905;
43 med_float p2=0.0549758718227661;
44
45 /* Maillage support aux champs*/
46 /* Ces maillages sont vides*/
47 char maa1[MED_TAILLE_NOM+1]= "maa1";
48 char maa2[MED_TAILLE_NOM+1]= "maa2";
49 char * lien_maa2 = "./testfoo.med";
50 char maa3[MED_TAILLE_NOM+1]= "maa3";
51
52
53 /* Caractéristiques du champ n° 1 sur TRIA6 */
54 char nomcha1[MED_TAILLE_NOM+1] = "champ reel";
55 char comp1[2*MED_TAILLE_PNOM+1] = "comp1 comp2 ";
56 /*12345678901234561234567890123456*/
57 char unit1[2*MED_TAILLE_PNOM+1] = "unit1 unit2 ";
58 med_int ncomp1 = 2;
59 /* Caractéristiques du model n° 1 de localisation des points de gauss pour le champ n°1*/
60 med_int ngauss1_1 = 6;
61 char gauss1_1[MED_TAILLE_NOM+1] = "Model n1";
62 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 };
63 med_float gscoo1_1[12] = { 2*b-1, 1-4*b, 2*b-1, 2*b-1, 1-4*b, 2*b-1, 1-4*a, 2*a-1, 2*a-1, 1-4*a, 2*a-1, 2*a-1 };
64 med_float wg1_1[6] = { 4*p2, 4*p2, 4*p2, 4*p1, 4*p1, 4*p1 };
65 med_int nval1_1= 1*6; /*1 valeurs et 6 points de gauss par valeur */
66 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*/
67 /* Caractéristiques du model n° 2 de localisation des points de gauss pour le champ n°1*/
68 med_int ngauss1_2 = 3;
69 char gauss1_2[MED_TAILLE_NOM+1] = "Model n2";
70 med_float gscoo1_2[6] = { -2.0/3,1.0/3, -2.0/3,-2.0/3, 1.0/3,-2.0/3 };
71 med_float wg1_2[3] = { 2.0/3, 2.0/3, 2.0/3 };
72 med_int nval1_2= 2*3; /*2 valeurs et 3 points de gauss par valeur */
73 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*/
74 med_float valr1_2p[2*3*2] = { 12.0,13.0, 20.0,21.0, 22.0,23.0}; /* 2 composantes*/
75 /* Caractéristiques du model n° 3 sans points de gauss pour le champ n°1*/
76 med_int nval1_3= 6; /*6 valeurs et pas de points de gauss */
77 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*/
78 med_float valr1_3p[2*2*2] = { 2.0,3.0, 10.0,11.0 }; /* 2 composantes profil1 */
79
80 /* Caractéristiques du champ n° 2 */
81 char nomcha2[MED_TAILLE_NOM+1] = "champ entier";
82 char comp2[3*MED_TAILLE_PNOM+1] = "comp1 comp2 comp3 ";
83 /*123456789012345612345678901234561234567890123456*/
84 char unit2[3*MED_TAILLE_PNOM+1] = "unit1 unit2 unit3 ";
85 med_int ncomp2 = 3;
86 med_int nval2 = 5; /*5 valeurs */
87 med_int valr2[5*3 ] = {0,1,2, 10,11,12, 20,21,22, 30,31,32, 40,41,42}; /* 3 composantes*/
88 med_int valr2p[3*3 ] = {0,1,2, 20,21,22, 40,41,42}; /* 3 composantes*/
89
90 /* Profils utilisés */
91 char nomprofil1[MED_TAILLE_NOM+1] = "PROFIL(champ(1))";
92 med_int profil1[2] = { 2, 3 };
93 med_int profil2[3] = { 1, 3, 5 };
94
95 /* ouverture du fichier */
96 if ((fid = MEDouvrir("test10.med",MED_CREATION)) < 0){
97 MESSAGE("Erreur à l'ouverture du fichier : ");
98 return -1;
99 }
100
101 /* creation de maa1 de dimension 3*/
102 if ( MEDmaaCr(fid,maa1,3,MED_NON_STRUCTURE,"Maillage vide") < 0) {
103 MESSAGE("Erreur à la création du maillage : ");SSCRUTE(maa1);
104 ret = -1;
105 };
106
107 /* creation de maa3 de dimension 3*/
108 if ( MEDmaaCr(fid,maa3,3,MED_NON_STRUCTURE,"Maillage vide") < 0) {
109 MESSAGE("Erreur à la création du maillage : ");SSCRUTE(maa3);
110 ret = -1;
111 };
112
113 /* creation du champ réel n°1 */
114 if ( MEDchampCr(fid,nomcha1,MED_FLOAT64,comp1,unit1,ncomp1) < 0) {
115 MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha1);
116 ret = -1;
117 };
118
119 /* creation du champ entier n°2 */
120 if ( MEDchampCr(fid,nomcha2,MED_INT32,comp2,unit2,ncomp2) < 0) {
121 MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha2);
122 ret = -1;
123 };
124
125 /* creation du lien au fichier distant contenant maa2 */
126 if (MEDlienEcr(fid,lien_maa2,maa2) < 0) {
127 MESSAGE("Erreur à la création du lien : ");SSCRUTE(lien_maa2);
128 ret = -1;
129 };
130
131 /* creation de la localisation des points de Gauss modèle n°1 */
132 if (MEDgaussEcr(fid, MED_TRIA6, refcoo1, USER_INTERLACE,
133 ngauss1_1, gscoo1_1, wg1_1, gauss1_1) < 0) {
134 MESSAGE("Erreur à la création du modèle n°1 : ");SSCRUTE(gauss1_1);
135 ret = -1;
136 };
137
138 /* creation de la localisation des points de Gauss modèle n°2 */
139 if (MEDgaussEcr(fid, MED_TRIA6, refcoo1, USER_INTERLACE,
140 ngauss1_2, gscoo1_2, wg1_2, gauss1_2) < 0) {
141 MESSAGE("Erreur à la création du modèle n°1 : ");SSCRUTE(gauss1_2);
142 ret = -1;
143 };
144
145 /* ecriture du champ n°1*/
146 /* enregistre uniquement les composantes n°2 de valr1_1, et n'utilise ni pas de temps ni n° d'ordre*/
147 if ( MEDchampEcr(fid,maa1,nomcha1,(unsigned char*)valr1_1,USER_INTERLACE,nval1_1,gauss1_1,
148 2,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,MED_NOPDT,"",0.0,MED_NONOR ) < 0) {
149 MESSAGE("Erreur à l'écriture du champ : ");
150 SSCRUTE(nomcha1);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
151 SSCRUTE(maa1);
152 ret = -1;
153 };
154
155
156 /* enregistre uniquement les composantes n°1 de valr1_1, et n'utilise ni pas de temps ni n° d'ordre */
157 if ( MEDchampEcr(fid,maa1,nomcha1,(unsigned char*)valr1_1,USER_INTERLACE,nval1_1,gauss1_1,
158 1,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,MED_NOPDT,"",0.0,MED_NONOR) < 0) {
159 MESSAGE("Erreur à l'écriture du champ : ");
160 SSCRUTE(nomcha1);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
161 SSCRUTE(maa1);
162 ret = -1;
163 };
164
165
166 /* enregistre uniquement les composantes n°1 de valr1_2, au pas de temps n°1(5.5), n'utilise pas de n°d'ordre*/
167 /* ce champ repose sur le maillage maa2 qui est distant */
168 if ( MEDchampEcr(fid,maa2,nomcha1,(unsigned char*)valr1_2,USER_INTERLACE,nval1_2,gauss1_2,
169 1,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,1,"ms",5.5,MED_NONOR) < 0) {
170 MESSAGE("Erreur à l'écriture du champ : ");
171 SSCRUTE(nomcha1);ISCRUTE(1);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
172 SSCRUTE(maa2);
173 ret = -1;
174 };
175
176 /* enregistre uniquement les composantes n°2 de valr1_2, au pas de temps n°1(5.5), n'utilise pas de n°d'ordre*/
177 /* ce champ repose sur le maillage maa1 qui est local */
178 if ( MEDchampEcr(fid,maa1,nomcha1,(unsigned char*)valr1_1,USER_INTERLACE,nval1_1,gauss1_1,
179 2,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,1,"ms",5.5,MED_NONOR) < 0) {
180 MESSAGE("Erreur à l'écriture du champ : ");
181 SSCRUTE(nomcha1);ISCRUTE(1);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
182 SSCRUTE(maa1);
183 ret = -1;
184 };
185
186 /* enregistre uniquement les composantes n°1 de valr1_1, au pas de temps n°1(5.5), et n°d'itération n°2*/
187 /* ce champ repose sur le maillage maa3 qui est local */
188 if ( MEDchampEcr(fid,maa3,nomcha1,(unsigned char*)valr1_2,USER_INTERLACE,nval1_2,gauss1_2,
189 1,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,1,"ms",5.5,2) < 0) {
190 MESSAGE("Erreur à l'écriture du champ : ");
191 SSCRUTE(nomcha1);ISCRUTE(1);ISCRUTE(2);SSCRUTE(MED_NOPFL);
192 SSCRUTE(maa3);
193 ret = -1;
194 };
195
196 /* Creation d'un profil (selection du deuxieme élément de valr1_1) */
197 /* On n'utilise que la première valeur (2) du profil */
198 if ( MEDprofilEcr(fid,profil1,1,nomprofil1) < 0) {
199 MESSAGE("Erreur à l'écriture du profil : ");
200 SSCRUTE(profil1);
201 ret = -1;
202 };
203
204
205 /* enregistre toutes les composantes du deuxième élément de valr1_1 (premier élément en stockage compact de valr1p),
206 au pas de temps n°2(5.6), et n°d'itération n°2*/
207 if ( MEDchampEcr(fid,maa1, nomcha1,(unsigned char*)valr1_3p,USER_INTERLACE,nval1_3,MED_NOGAUSS,
208 MED_ALL,nomprofil1,USER_MODE,MED_MAILLE,MED_TRIA6,2,"ms",5.6,2) < 0) {
209 MESSAGE("Erreur à l'écriture du champ : ");
210 SSCRUTE(nomcha1);ISCRUTE(2);ISCRUTE(2);SSCRUTE(nomprofil1);
211 SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
212 ret = -1;
213 };
214
215 /* enregistre toutes les composantes du deuxième élément de valr1_1 (premier élément en stockage compact de valr1p),
216 au pas de temps n°2(5.6), et n°d'itération n°2 */
217 if ( MEDchampEcr(fid,maa2, nomcha1,(unsigned char*)valr1_2p,USER_INTERLACE,nval1_2,gauss1_2,
218 MED_ALL,nomprofil1,USER_MODE,MED_MAILLE,MED_TRIA6,2,"ms",5.6,2) < 0) {
219 MESSAGE("Erreur à l'écriture du champ : ");
220 SSCRUTE(nomcha1);ISCRUTE(2);ISCRUTE(2);SSCRUTE(nomprofil1);
221 SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
222 ret = -1;
223 };
224
225
226 /* 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*/
227 if ( MEDchampEcr(fid,maa1,nomcha1,(unsigned char*)valr1_3p,USER_INTERLACE,nval1_3,MED_NOGAUSS,
228 2,nomprofil1,USER_MODE,MED_MAILLE,MED_TRIA6,3,"ms",5.7,2) < 0) {
229 MESSAGE("Erreur à l'écriture du champ : ");
230 SSCRUTE(nomcha1);ISCRUTE(2);ISCRUTE(2);SSCRUTE(nomprofil1);
231 SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
232 ret = -1;
233 };
234
235
236
237 /* Ecriture du champ n° 2 */
238 /* TESTER EGALEMENT EN MODE FULL_INTERLACE EN MODIFIANT LA SIGNATURE DE LA ROUTINE */
239
240 /* enregistre la composante n°1 des éléments de valr2, et n'utilise ni pas de temps ni n° d'ordre */
241 if (MEDchampEcr(fid,maa1,nomcha2,(unsigned char*)valr2,USER_INTERLACE,nval2,MED_NOGAUSS,
242 1,MED_NOPFL,MED_NO_PFLMOD,MED_ARETE,MED_SEG2,MED_NOPDT,"",0.0,MED_NONOR) < 0) {
243 MESSAGE("Erreur à l'écriture du champ : ");
244 SSCRUTE(nomcha2);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
245 SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
246 ret = -1;
247 };
248
249
250 /* enregistre la composante n°2 des éléments de valr2, et n'utilise ni pas de temps ni n° d'ordre */
251 /* pour des raisons de complétude des tests on change le type d'élément (aucun sens phys.))*/
252 if (MEDchampEcr(fid,maa1,nomcha2,(unsigned char*)valr2,USER_INTERLACE,nval2,MED_NOGAUSS,
253 2,MED_NOPFL,MED_NO_PFLMOD,MED_NOEUD,0,MED_NOPDT,"",0.0,MED_NONOR) < 0) {
254 MESSAGE("Erreur à l'écriture du champ : ");
255 SSCRUTE(nomcha2);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
256 SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
257 ret = -1;
258 };
259
260 /* enregistre la composante n°3 des éléments de valr2, et n'utilise ni pas de temps ni n° d'ordre */
261 /* pour des raisons de complétude des tests on change le type d'élément (aucun sens phys.))*/
262 if ( MEDchampEcr(fid,maa1,nomcha2,(unsigned char*)valr2,USER_INTERLACE,nval2,MED_NOGAUSS,
263 3,MED_NOPFL,MED_NO_PFLMOD,MED_FACE,MED_TRIA6,MED_NOPDT,"",0.0,MED_NONOR) < 0 ) {
264 MESSAGE("Erreur à l'écriture du champ : ");
265 SSCRUTE(nomcha2);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
266 SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
267 ret = -1;
268 };
269
270 /* Creation d'un profil (selection des éléments 1,3,5 de valr2) */
271 /* On utilise les trois valeurs du profil */
272 if ( MEDprofilEcr(fid,profil2,3,"PROFIL(champ2)") < 0) {
273 MESSAGE("Erreur à l'écriture du profil : ");
274 SSCRUTE(profil1);
275 ret = -1;
276 };
277
278 /* enregistre la composante n°3 des éléments du profil2 de valr2, et n'utilise ni pas de temps ni n° d'ordre */
279 if ( MEDchampEcr(fid,maa1,nomcha2,(unsigned char*)valr2p,USER_INTERLACE,nval2,MED_NOGAUSS,
280 3,"PROFIL(champ2)",USER_MODE,MED_MAILLE,MED_TRIA6,MED_NOPDT,"",0.0,MED_NONOR) < 0 ) {
281 MESSAGE("Erreur à l'écriture du champ : ");
282 SSCRUTE(nomcha2);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
283 SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
284 ret = -1;
285 };
286
287
288 /* fermeture du fichier */
289 if ( MEDfermer(fid) < 0 ) ret=-1;
290
291 return ret;
292 }
293
294
295
296