1 /*----------------------------------------------------------------------------
2 MED MEDMEM : MED files in memory
4 Copyright (C) 2003 CEA/DEN, EDF R&D
10 ----------------------------------------------------------------------------*/
12 /******************************************************************************
13 * - Nom du fichier : test19.c
15 * - Description : ecriture des objets MED relatifs aux grilles
18 *****************************************************************************/
23 /******************************************************************************
24 * - creation d'un fichier MED
25 * - ecriture des noeuds : coordonnees en mode MED_FULL_INTERLACE,
26 * noms,numeros,numeros de familles
27 * - ecriture des familles d'un maillage MED
28 * 2.0 via les routines de bas niveau
29 * - fermeture du fichier
30 *****************************************************************************/
32 int main (int argc, char **argv)
35 /* Ecriture d'un premier maillage non structure (test14 + test8)
36 ************************************************************** */
40 /* la dimension du maillage */
42 /* nom du maillage de longueur maxi MED_TAILLE_NOM */
43 char maa[MED_TAILLE_NOM+1] = "maa1";
44 /* description du maillage de longueur maxi MED_TAIIL_DESC */
45 char maadesc[MED_TAILLE_DESC+1] = "Example de maillage structure 2D";
46 /* le nombre de noeuds */
48 /* table des coordonnees
49 profil : (dimension * nombre de noeuds) */
50 med_float coo[8] = {0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0};
51 med_int nbr[2] = {2, 2};
52 /* tables des noms et des unites des coordonnees
53 profil : (dimension*MED_TAILLE_PNOM+1) */
54 char nomcoo[2*MED_TAILLE_PNOM+1] = "x y ";
55 char unicoo[2*MED_TAILLE_PNOM+1] = "cm cm ";
57 char nomcooi[MED_TAILLE_PNOM+1] = "x ";
58 char unicooi[MED_TAILLE_PNOM+1] = "cm ";
59 /* tables des noms, numeros, numeros de familles des noeuds
60 autant d'elements que de noeuds - les noms ont pout longueur
62 char nomnoe[4*MED_TAILLE_PNOM+1] = "nom1 nom2 nom3 nom4 ";
63 med_int numnoe[4] = {1,2,3,4};
64 med_int nufano[4] = {0,1,2,2};
65 char nomfam[MED_TAILLE_NOM+1];
67 char attdes[MED_TAILLE_DESC+1];
72 char gro[MED_TAILLE_LNOM+1];
76 med_int famNodeStd[4];
77 med_int famElmtStd[1];
78 med_int famFaceStd[4];
79 med_int famNodeCart[16];
80 med_int famElmtCart[9];
81 med_int famFaceCart[24];
89 char nomquad4[MED_TAILLE_PNOM*1+1] = "quad1 ";
90 med_int numquad4[1] = {1};
91 med_int nufaquad4[1] = {-1};
93 fid = MEDouvrir("test19.med",MED_LECTURE_ECRITURE);
98 printf("MEDouvrir : %d\n",ret);
100 /* creation du maillage maa de dimension 2 */
102 ret = MEDmaaCr(fid,maa,mdim,MED_NON_STRUCTURE,maadesc);
103 printf("MEDmaaCr : %d\n",ret);
105 /* ecriture des noeuds d'un maillage MED :
106 - des coo en mode MED_FULL_INTERLACE : (X1,Y1,X2,Y2,X3,Y3,...)
107 dans un repere cartesien
108 - des noms (optionnel dans un fichier MED)
109 - des numeros (optionnel dans un fichier MED)
110 - des numeros de familles des noeuds */
112 ret = MEDnoeudsEcr(fid,maa,mdim,coo,MED_FULL_INTERLACE,MED_CART,
113 nomcoo,unicoo,nomnoe,MED_VRAI,numnoe,MED_VRAI,
115 printf("MEDnoeudsEcr : %d\n",ret);
117 /* ecriture des mailles MED_QUAD4 :
120 - numeros (optionnel)
121 - numeros des familles */
123 ret = MEDelementsEcr(fid,maa,mdim,quad4,MED_FULL_INTERLACE,
124 nomquad4,MED_FAUX,numquad4,MED_VRAI,nufaquad4,nquad4,
125 MED_MAILLE,MED_QUAD4,MED_NOD);
126 printf("MEDelementsEcr : %d\n",ret);
128 /* ecriture des familles */
130 - toujours creer une famille de numero 0 ne comportant aucun attribut
131 ni groupe (famille de reference pour les noeuds ou les elements
132 qui ne sont rattaches a aucun groupe ni attribut)
133 - les numeros de familles de noeuds sont > 0
134 - les numeros de familles des elements sont < 0
135 - rien d'imposer sur les noms de familles
141 strcpy(nomfam,"FAMILLE_0");
143 ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,0,
146 printf("MEDfamCr : %d \n",ret);
148 /* on cree pour correspondre aux cas tests precedents, 3 familles
149 d'elements (-1,-2,-3) et deux familles de noeuds (1,2) */
153 for (i=0;i<nfame;i++)
157 strcpy(nomfam,"FAMILLE_ELEMENT_");
159 sprintf(nomfam,"%s%d",nomfam,-numfam);
163 strcpy(attdes,"description attribut");
164 strcpy(gro,"groupe1");
166 printf("%s - %d - %d - %d - %d \n",nomfam,numfam,attide,attval,
168 ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
170 printf("MEDfamCr (elements) : %d\n",ret);
178 for (i=0;i<nfamn;i++)
182 strcpy(nomfam,"FAMILLE_NOEUD_");
184 sprintf(nomfam,"%s%d",nomfam,numfam);
188 strcpy(attdes,"description attribut");
189 strcpy(gro,"groupe1");
191 printf("%s - %d - %d - %d - %d \n",nomfam,numfam,attide,attval,
193 ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
195 printf("MEDfamCr (nodes) : %d\n",ret);
201 /* fermeture du fichier */
202 ret = MEDfermer(fid);
203 printf("MEDfermer : %d\n",ret);
205 /* Ecriture d'un deuxieme maillage structure : grille standard
206 ************************************************************* */
208 fid = MEDouvrir("test19.med", MED_LECTURE_ECRITURE);
213 printf("MEDouvrir : %d\n",ret);
215 strcpy(maa, "Grille Standard");
216 strcpy(maadesc, "Example de maillage structure grille standard 2D");
217 /* creation du maillage grille standard maa de dimension 2 */
219 ret = MEDmaaCr(fid, maa, mdim, MED_STRUCTURE, maadesc);
220 printf("MEDmaaCr : %d\n",ret);
223 ret = MEDnatureGrilleEcr(fid, maa, MED_GRILLE_STANDARD);
224 printf("MEDnatureGrilleEcr : %d\n",ret);
226 /* ecriture des noeuds d'un maillage MED :
227 - des coo en mode MED_FULL_INTERLACE : (X1,Y1,X2,Y2,X3,Y3,...)
228 dans un repere cartesien
229 - des noms (optionnel dans un fichier MED)
230 - des numeros (optionnel dans un fichier MED)
231 - des numeros de familles des noeuds */
233 /* ret = MEDstructureCoordEcr(fid,maa,mdim,nbr); */
234 /* printf("MEDstructureCoordEcr : %d\n",ret); */
237 ret = MEDcoordEcr(fid,maa,mdim,coo,MED_FULL_INTERLACE,nnoe,MED_CART,
239 printf("MEDcoordEcr : %d\n",ret);
242 ret = MEDstructureCoordEcr(fid,maa,mdim,nbr);
243 printf("MEDstructureCoordEcr : %d\n",ret);
245 /* Ecriture des familles de la grille standard */
250 famNodeStd[ 0]=1; famNodeStd[ 1]=1;
251 famNodeStd[ 2]=2; famNodeStd[ 3]=2;
253 ret = MEDfamEcr(fid, maa, famNodeStd, 4, MED_NOEUD, 0);
255 printf("MEDfamEcr for Nodes : %d\n",ret);
262 ret = MEDfamEcr(fid, maa, famElmtStd, 1, MED_MAILLE, MED_QUAD4);
264 printf("MEDfamEcr for Elements : %d\n",ret);
266 /* les faces/edges */
269 for (i=0; i<4; i++) famFaceStd[i]=0;
271 ret = MEDfamEcr(fid, maa, famFaceStd, 4, MED_ARETE, MED_SEG2);
273 printf("MEDfamEcr for Elements : %d\n",ret);
278 strcpy(nomfam,"FAMILLE_0");
280 ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,0,
283 printf("MEDfamCr : %d\n",ret);
288 for (i=0;i<nfamn;i++)
292 strcpy(nomfam,"FAMILLE_NOEUD_");
294 sprintf(nomfam,"%s%d",nomfam,numfam);
298 strcpy(attdes,"description attribut");
299 strcpy(gro,"groupe1");
301 printf("%s - %d - %d - %d - %d \n",nomfam,numfam,attide,attval,
303 ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
305 printf("MEDfamCr (nodes) : %d\n",ret);
310 /* fermeture du fichier */
311 ret = MEDfermer(fid);
312 printf("MEDfermer : %d\n",ret);
314 /* Ecriture d'un troisieme maillage structure : grille cartesienne
315 *************************************************************** */
317 fid = MEDouvrir("test19.med", MED_LECTURE_ECRITURE);
322 printf("MEDouvrir : %d\n",ret);
324 strcpy(maa, "Grille Cartesienne");
325 strcpy(maadesc, "Example de maillage structure grille cartesienne 2D");
326 /* creation d'une grille cartesienne maa de dimension 2 */
328 ret = MEDmaaCr(fid, maa, mdim, MED_STRUCTURE, maadesc);
329 printf("MEDmaaCr : %d\n",ret);
332 ret = MEDnatureGrilleEcr(fid, maa, MED_GRILLE_CARTESIENNE);
333 printf("MEDnatureGrilleEcr : %d\n",ret);
335 /* Ecriture des indices de la grille cartesienne :
336 - des coo en mode MED_FULL_INTERLACE : (X1,Y1,X2,Y2,X3,Y3,...) */
337 for (i=0; i<mdim; i++) {
344 ret = MEDindicesCoordEcr(fid, maa, mdim, coo, nnoe, ip1,
348 printf("MEDindicesCoordEcr : %d\n",ret);
350 /* Ecriture des familles de la grille cartesienne */
355 famNodeCart[ 0]=3; famNodeCart[ 1]=3; famNodeCart[ 2]=2; famNodeCart[ 3]=1;
356 famNodeCart[ 4]=7; famNodeCart[ 5]=8; famNodeCart[ 6]=2; famNodeCart[ 7]=4;
357 famNodeCart[ 8]=2; famNodeCart[ 9]=9; famNodeCart[10]=0; famNodeCart[11]=2;
358 famNodeCart[12]=5; famNodeCart[13]=5; famNodeCart[14]=6; famNodeCart[15]=7;
360 ret = MEDfamEcr(fid, maa, famNodeCart, 16, MED_NOEUD, 0);
362 printf("MEDfamEcr for Nodes : %d\n",ret);
367 for(i=0; i<9; i++) famElmtCart[i]=0;
369 ret = MEDfamEcr(fid, maa, famElmtCart, 9, MED_MAILLE, MED_QUAD4);
371 printf("MEDfamEcr for Elements : %d\n",ret);
373 /* les faces/edges */
376 for(i=0; i<24; i++) famFaceCart[i]=0;
378 ret = MEDfamEcr(fid, maa, famFaceCart, 24, MED_ARETE, MED_SEG2);
380 printf("MEDfamEcr for Elements : %d\n",ret);
385 strcpy(nomfam,"FAMILLE_0");
387 ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,0,
390 printf("MEDfamCr : %d \n",ret);
395 for (i=0;i<nfamn;i++)
399 strcpy(nomfam,"FAMILLE_NOEUD_");
401 sprintf(nomfam,"%s%d",nomfam,numfam);
405 strcpy(attdes,"description attribut");
406 strcpy(gro,"groupe1");
408 printf("%s - %d - %d - %d - %d \n",nomfam,numfam,attide,attval,
410 ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
412 printf("MEDfamCr (nodes) : %d\n",ret);
417 /* fermeture du fichier */
418 ret = MEDfermer(fid);
419 printf("MEDfermer : %d\n",ret);