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