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