1 // Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 /*----------------------------------------------------------------------------
23 MED MEDMEM : MED files in memory
27 ----------------------------------------------------------------------------*/
29 /******************************************************************************
30 * - Nom du fichier : test19.c
32 * - Description : ecriture des objets MED relatifs aux grilles
35 *****************************************************************************/
40 /******************************************************************************
41 * - creation d'un fichier MED
42 * - ecriture des noeuds : coordonnees en mode MED_FULL_INTERLACE,
43 * noms,numeros,numeros de familles
44 * - ecriture des familles d'un maillage MED
45 * 2.0 via les routines de bas niveau
46 * - fermeture du fichier
47 *****************************************************************************/
49 int main (int argc, char **argv)
52 /* Ecriture d'un premier maillage non structure (test14 + test8)
53 ************************************************************** */
57 /* la dimension du maillage */
59 /* nom du maillage de longueur maxi MED_TAILLE_NOM */
60 char maa[MED_TAILLE_NOM+1] = "maa1";
61 /* description du maillage de longueur maxi MED_TAIIL_DESC */
62 char maadesc[MED_TAILLE_DESC+1] = "Example de maillage structure 2D";
63 /* le nombre de noeuds */
65 /* table des coordonnees
66 profil : (dimension * nombre de noeuds) */
67 med_float coo[8] = {0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0};
68 med_int nbr[2] = {2, 2};
69 /* tables des noms et des unites des coordonnees
70 profil : (dimension*MED_TAILLE_PNOM+1) */
71 char nomcoo[2*MED_TAILLE_PNOM+1] = "x y ";
72 char unicoo[2*MED_TAILLE_PNOM+1] = "cm cm ";
74 char nomcooi[MED_TAILLE_PNOM+1] = "x ";
75 char unicooi[MED_TAILLE_PNOM+1] = "cm ";
76 /* tables des noms, numeros, numeros de familles des noeuds
77 autant d'elements que de noeuds - les noms ont pout longueur
79 char nomnoe[4*MED_TAILLE_PNOM+1] = "nom1 nom2 nom3 nom4 ";
80 med_int numnoe[4] = {1,2,3,4};
81 med_int nufano[4] = {0,1,2,2};
82 char nomfam[MED_TAILLE_NOM+1];
84 char attdes[MED_TAILLE_DESC+1];
89 char gro[MED_TAILLE_LNOM+1];
93 med_int famNodeStd[4];
94 med_int famElmtStd[1];
95 med_int famFaceStd[4];
96 med_int famNodeCart[16];
97 med_int famElmtCart[9];
98 med_int famFaceCart[24];
106 char nomquad4[MED_TAILLE_PNOM*1+1] = "quad1 ";
107 med_int numquad4[1] = {1};
108 med_int nufaquad4[1] = {-1};
110 fid = MEDouvrir("test19.med",MED_LECTURE_ECRITURE);
115 printf("MEDouvrir : %d\n",ret);
117 /* creation du maillage maa de dimension 2 */
119 ret = MEDmaaCr(fid,maa,mdim,MED_NON_STRUCTURE,maadesc);
120 printf("MEDmaaCr : %d\n",ret);
122 /* ecriture des noeuds d'un maillage MED :
123 - des coo en mode MED_FULL_INTERLACE : (X1,Y1,X2,Y2,X3,Y3,...)
124 dans un repere cartesien
125 - des noms (optionnel dans un fichier MED)
126 - des numeros (optionnel dans un fichier MED)
127 - des numeros de familles des noeuds */
129 ret = MEDnoeudsEcr(fid,maa,mdim,coo,MED_FULL_INTERLACE,MED_CART,
130 nomcoo,unicoo,nomnoe,MED_VRAI,numnoe,MED_VRAI,
132 printf("MEDnoeudsEcr : %d\n",ret);
134 /* ecriture des mailles MED_QUAD4 :
137 - numeros (optionnel)
138 - numeros des familles */
140 ret = MEDelementsEcr(fid,maa,mdim,quad4,MED_FULL_INTERLACE,
141 nomquad4,MED_FAUX,numquad4,MED_VRAI,nufaquad4,nquad4,
142 MED_MAILLE,MED_QUAD4,MED_NOD);
143 printf("MEDelementsEcr : %d\n",ret);
145 /* ecriture des familles */
147 - toujours creer une famille de numero 0 ne comportant aucun attribut
148 ni groupe (famille de reference pour les noeuds ou les elements
149 qui ne sont rattaches a aucun groupe ni attribut)
150 - les numeros de familles de noeuds sont > 0
151 - les numeros de familles des elements sont < 0
152 - rien d'imposer sur les noms de familles
158 strcpy(nomfam,"FAMILLE_0");
160 ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,0,
163 printf("MEDfamCr : %d \n",ret);
165 /* on cree pour correspondre aux cas tests precedents, 3 familles
166 d'elements (-1,-2,-3) et deux familles de noeuds (1,2) */
170 for (i=0;i<nfame;i++)
174 strcpy(nomfam,"FAMILLE_ELEMENT_");
176 sprintf(nomfam,"%s%d",nomfam,-numfam);
180 strcpy(attdes,"description attribut");
181 strcpy(gro,"groupe1");
183 printf("%s - %d - %d - %d - %d \n",nomfam,numfam,attide,attval,
185 ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
187 printf("MEDfamCr (elements) : %d\n",ret);
195 for (i=0;i<nfamn;i++)
199 strcpy(nomfam,"FAMILLE_NOEUD_");
201 sprintf(nomfam,"%s%d",nomfam,numfam);
205 strcpy(attdes,"description attribut");
206 strcpy(gro,"groupe1");
208 printf("%s - %d - %d - %d - %d \n",nomfam,numfam,attide,attval,
210 ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
212 printf("MEDfamCr (nodes) : %d\n",ret);
218 /* fermeture du fichier */
219 ret = MEDfermer(fid);
220 printf("MEDfermer : %d\n",ret);
222 /* Ecriture d'un deuxieme maillage structure : grille standard
223 ************************************************************* */
225 fid = MEDouvrir("test19.med", MED_LECTURE_ECRITURE);
230 printf("MEDouvrir : %d\n",ret);
232 strcpy(maa, "Grille Standard");
233 strcpy(maadesc, "Example de maillage structure grille standard 2D");
234 /* creation du maillage grille standard maa de dimension 2 */
236 ret = MEDmaaCr(fid, maa, mdim, MED_STRUCTURE, maadesc);
237 printf("MEDmaaCr : %d\n",ret);
240 ret = MEDnatureGrilleEcr(fid, maa, MED_GRILLE_STANDARD);
241 printf("MEDnatureGrilleEcr : %d\n",ret);
243 /* ecriture des noeuds d'un maillage MED :
244 - des coo en mode MED_FULL_INTERLACE : (X1,Y1,X2,Y2,X3,Y3,...)
245 dans un repere cartesien
246 - des noms (optionnel dans un fichier MED)
247 - des numeros (optionnel dans un fichier MED)
248 - des numeros de familles des noeuds */
250 /* ret = MEDstructureCoordEcr(fid,maa,mdim,nbr); */
251 /* printf("MEDstructureCoordEcr : %d\n",ret); */
254 ret = MEDcoordEcr(fid,maa,mdim,coo,MED_FULL_INTERLACE,nnoe,MED_CART,
256 printf("MEDcoordEcr : %d\n",ret);
259 ret = MEDstructureCoordEcr(fid,maa,mdim,nbr);
260 printf("MEDstructureCoordEcr : %d\n",ret);
262 /* Ecriture des familles de la grille standard */
267 famNodeStd[ 0]=1; famNodeStd[ 1]=1;
268 famNodeStd[ 2]=2; famNodeStd[ 3]=2;
270 ret = MEDfamEcr(fid, maa, famNodeStd, 4, MED_NOEUD, 0);
272 printf("MEDfamEcr for Nodes : %d\n",ret);
279 ret = MEDfamEcr(fid, maa, famElmtStd, 1, MED_MAILLE, MED_QUAD4);
281 printf("MEDfamEcr for Elements : %d\n",ret);
283 /* les faces/edges */
286 for (i=0; i<4; i++) famFaceStd[i]=0;
288 ret = MEDfamEcr(fid, maa, famFaceStd, 4, MED_ARETE, MED_SEG2);
290 printf("MEDfamEcr for Elements : %d\n",ret);
295 strcpy(nomfam,"FAMILLE_0");
297 ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,0,
300 printf("MEDfamCr : %d\n",ret);
305 for (i=0;i<nfamn;i++)
309 strcpy(nomfam,"FAMILLE_NOEUD_");
311 sprintf(nomfam,"%s%d",nomfam,numfam);
315 strcpy(attdes,"description attribut");
316 strcpy(gro,"groupe1");
318 printf("%s - %d - %d - %d - %d \n",nomfam,numfam,attide,attval,
320 ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
322 printf("MEDfamCr (nodes) : %d\n",ret);
327 /* fermeture du fichier */
328 ret = MEDfermer(fid);
329 printf("MEDfermer : %d\n",ret);
331 /* Ecriture d'un troisieme maillage structure : grille cartesienne
332 *************************************************************** */
334 fid = MEDouvrir("test19.med", MED_LECTURE_ECRITURE);
339 printf("MEDouvrir : %d\n",ret);
341 strcpy(maa, "Grille Cartesienne");
342 strcpy(maadesc, "Example de maillage structure grille cartesienne 2D");
343 /* creation d'une grille cartesienne maa de dimension 2 */
345 ret = MEDmaaCr(fid, maa, mdim, MED_STRUCTURE, maadesc);
346 printf("MEDmaaCr : %d\n",ret);
349 ret = MEDnatureGrilleEcr(fid, maa, MED_GRILLE_CARTESIENNE);
350 printf("MEDnatureGrilleEcr : %d\n",ret);
352 /* Ecriture des indices de la grille cartesienne :
353 - des coo en mode MED_FULL_INTERLACE : (X1,Y1,X2,Y2,X3,Y3,...) */
354 for (i=0; i<mdim; i++) {
361 ret = MEDindicesCoordEcr(fid, maa, mdim, coo, nnoe, ip1,
365 printf("MEDindicesCoordEcr : %d\n",ret);
367 /* Ecriture des familles de la grille cartesienne */
372 famNodeCart[ 0]=3; famNodeCart[ 1]=3; famNodeCart[ 2]=2; famNodeCart[ 3]=1;
373 famNodeCart[ 4]=7; famNodeCart[ 5]=8; famNodeCart[ 6]=2; famNodeCart[ 7]=4;
374 famNodeCart[ 8]=2; famNodeCart[ 9]=9; famNodeCart[10]=0; famNodeCart[11]=2;
375 famNodeCart[12]=5; famNodeCart[13]=5; famNodeCart[14]=6; famNodeCart[15]=7;
377 ret = MEDfamEcr(fid, maa, famNodeCart, 16, MED_NOEUD, 0);
379 printf("MEDfamEcr for Nodes : %d\n",ret);
384 for(i=0; i<9; i++) famElmtCart[i]=0;
386 ret = MEDfamEcr(fid, maa, famElmtCart, 9, MED_MAILLE, MED_QUAD4);
388 printf("MEDfamEcr for Elements : %d\n",ret);
390 /* les faces/edges */
393 for(i=0; i<24; i++) famFaceCart[i]=0;
395 ret = MEDfamEcr(fid, maa, famFaceCart, 24, MED_ARETE, MED_SEG2);
397 printf("MEDfamEcr for Elements : %d\n",ret);
402 strcpy(nomfam,"FAMILLE_0");
404 ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,0,
407 printf("MEDfamCr : %d \n",ret);
412 for (i=0;i<nfamn;i++)
416 strcpy(nomfam,"FAMILLE_NOEUD_");
418 sprintf(nomfam,"%s%d",nomfam,numfam);
422 strcpy(attdes,"description attribut");
423 strcpy(gro,"groupe1");
425 printf("%s - %d - %d - %d - %d \n",nomfam,numfam,attide,attval,
427 ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
429 printf("MEDfamCr (nodes) : %d\n",ret);
434 /* fermeture du fichier */
435 ret = MEDfermer(fid);
436 printf("MEDfermer : %d\n",ret);
438 if ( getenv("srcdir") ) {
439 /* we are in 'make check' */
440 remove( "test19.med" );
441 printf("Remove generated file");