]> SALOME platform Git repositories - modules/med.git/blob - src/MEDMEM/create_grid.c
Salome HOME
update after merging trhe branches CEA_V3_0_x, OCC_V3_1_0_a1_x, and the main
[modules/med.git] / src / MEDMEM / create_grid.c
1 /*----------------------------------------------------------------------------
2   MED MEDMEM : MED files in memory
3
4   Copyright (C) 2003  CEA/DEN, EDF R&D
5
6
7
8   File   : create_grid.c
9   Module : MED
10 ----------------------------------------------------------------------------*/
11
12 /******************************************************************************
13  * - Nom du fichier : test19.c
14  *
15  * - Description : ecriture des objets MED relatifs aux grilles
16  *                 MED V2.0
17  *
18  *****************************************************************************/
19
20 #include <med.h>
21 #include <string.h>
22
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  *****************************************************************************/
31
32 int main (int argc, char **argv)
33 {
34
35   /* Ecriture d'un premier maillage non structure (test14 + test8)
36     ************************************************************** */
37
38   med_err ret;
39   med_idt fid;
40   /* la dimension du maillage */
41   med_int mdim = 2;
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 */
47   med_int nnoe = 4;
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              ";
56
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
61      MED_TAILLE_PNOM */
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];
66   med_int numfam;
67   char attdes[MED_TAILLE_DESC+1];
68   med_int natt;
69   med_int attide;
70   med_int attval;
71   med_int ngro;
72   char gro[MED_TAILLE_LNOM+1];
73   int i, ip1;
74   int nfame = 1; 
75   int nfamn = 2;
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];
82   /*
83     les elements:
84   */
85   med_int nquad4 = 1;
86   med_int quad4[4] = {
87     1, 2, 4, 3
88   };
89   char nomquad4[MED_TAILLE_PNOM*1+1] = "quad1           ";
90   med_int numquad4[1] = {1};
91   med_int nufaquad4[1] = {-1};
92
93   fid = MEDouvrir("test19.med",MED_LECTURE_ECRITURE);
94   if (fid < 0)
95     ret = -1;
96   else
97     ret = 0;
98   printf("MEDouvrir : %d\n",ret);
99
100   /* creation du maillage maa de dimension 2 */
101   if (ret == 0)
102     ret = MEDmaaCr(fid,maa,mdim,MED_NON_STRUCTURE,maadesc);
103   printf("MEDmaaCr : %d\n",ret);
104
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 */          
111   if (ret == 0)
112     ret = MEDnoeudsEcr(fid,maa,mdim,coo,MED_FULL_INTERLACE,MED_CART,
113                        nomcoo,unicoo,nomnoe,MED_VRAI,numnoe,MED_VRAI,
114                        nufano,nnoe);
115   printf("MEDnoeudsEcr : %d\n",ret);
116
117   /* ecriture des mailles MED_QUAD4 :
118      - connectivite
119      - noms (optionnel) 
120      - numeros (optionnel)
121      - numeros des familles */
122   if (ret == 0) 
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);
127
128   /* ecriture des familles */
129   /* Conventions :
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
136   */ 
137
138   /* la famille 0 */
139   if (ret == 0)
140     {
141       strcpy(nomfam,"FAMILLE_0");
142       numfam = 0;
143       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,0,
144                      gro,0);
145     }
146   printf("MEDfamCr : %d \n",ret);
147
148   /* on cree pour correspondre aux cas tests precedents, 3 familles
149      d'elements (-1,-2,-3) et deux familles de noeuds (1,2) */
150   if (ret == 0)
151     {
152       nfame = 1;
153       for (i=0;i<nfame;i++)
154         {
155           if (ret == 0)
156             {
157               strcpy(nomfam,"FAMILLE_ELEMENT_");
158               numfam = -(i+1);
159               sprintf(nomfam,"%s%d",nomfam,-numfam);
160               attide = 1;
161               attval = numfam*100;
162               natt = 1;
163               strcpy(attdes,"description attribut");
164               strcpy(gro,"groupe1");
165               ngro = 1;
166               printf("%s - %d - %d - %d - %d \n",nomfam,numfam,attide,attval,
167                      ngro);
168               ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
169                              natt,gro,ngro);
170               printf("MEDfamCr (elements) : %d\n",ret);
171             }
172         }
173     }
174   
175   if (ret == 0)
176     {
177       nfamn = 2;
178       for (i=0;i<nfamn;i++)
179         {
180           if(ret == 0)
181             {
182               strcpy(nomfam,"FAMILLE_NOEUD_");
183               numfam = i+1;
184               sprintf(nomfam,"%s%d",nomfam,numfam);
185               attide = 1;
186               attval = numfam*100;
187               natt = 1;
188               strcpy(attdes,"description attribut");
189               strcpy(gro,"groupe1");
190               ngro = 1;
191               printf("%s - %d - %d - %d - %d \n",nomfam,numfam,attide,attval,
192                      ngro);
193               ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
194                              natt,gro,ngro);
195               printf("MEDfamCr (nodes) : %d\n",ret);
196             }
197         }
198     }
199
200
201   /* fermeture du fichier */
202   ret = MEDfermer(fid);
203   printf("MEDfermer : %d\n",ret);
204
205   /* Ecriture d'un deuxieme maillage structure : grille standard
206     ************************************************************* */
207
208   fid = MEDouvrir("test19.med", MED_LECTURE_ECRITURE);
209   if (fid < 0)
210     ret = -1;
211   else
212     ret = 0;
213   printf("MEDouvrir : %d\n",ret);
214
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 */
218   if (ret == 0)
219     ret = MEDmaaCr(fid, maa, mdim, MED_STRUCTURE, maadesc);
220   printf("MEDmaaCr : %d\n",ret);
221
222   if (ret == 0)
223     ret = MEDnatureGrilleEcr(fid, maa, MED_GRILLE_STANDARD);
224   printf("MEDnatureGrilleEcr : %d\n",ret);
225
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 */          
232 /*   if (ret == 0) */
233 /*     ret = MEDstructureCoordEcr(fid,maa,mdim,nbr); */
234 /*   printf("MEDstructureCoordEcr : %d\n",ret); */
235
236   if (ret == 0)
237     ret = MEDcoordEcr(fid,maa,mdim,coo,MED_FULL_INTERLACE,nnoe,MED_CART,
238                       nomcoo,unicoo);
239   printf("MEDcoordEcr : %d\n",ret);
240
241   if (ret == 0)
242     ret = MEDstructureCoordEcr(fid,maa,mdim,nbr);
243   printf("MEDstructureCoordEcr : %d\n",ret);
244
245   /* Ecriture des familles de la grille standard */
246
247   /* les noeuds */
248
249   if (ret == 0) {
250     famNodeStd[ 0]=1; famNodeStd[ 1]=1;
251     famNodeStd[ 2]=2; famNodeStd[ 3]=2;
252
253     ret = MEDfamEcr(fid, maa, famNodeStd, 4, MED_NOEUD, 0);
254   };
255   printf("MEDfamEcr for Nodes : %d\n",ret);
256
257   /* les elements */
258
259   if (ret == 0) {
260     famElmtStd[ 0]=0;
261
262     ret = MEDfamEcr(fid, maa, famElmtStd, 1, MED_MAILLE, MED_QUAD4);
263   };
264   printf("MEDfamEcr for Elements : %d\n",ret);
265
266   /* les faces/edges */
267
268   if (ret == 0) {
269     for (i=0; i<4; i++) famFaceStd[i]=0;
270
271     ret = MEDfamEcr(fid, maa, famFaceStd, 4, MED_ARETE, MED_SEG2);
272   };
273   printf("MEDfamEcr for Elements : %d\n",ret);
274
275   /* la famille 0 */
276   if (ret == 0)
277     {
278       strcpy(nomfam,"FAMILLE_0");
279       numfam = 0;
280       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,0,
281                      gro,0);
282     }
283   printf("MEDfamCr : %d\n",ret);
284
285   if (ret == 0)
286     {
287       nfamn = 2;
288       for (i=0;i<nfamn;i++)
289         {
290           if(ret == 0)
291             {
292               strcpy(nomfam,"FAMILLE_NOEUD_");
293               numfam = i+1;
294               sprintf(nomfam,"%s%d",nomfam,numfam);
295               attide = 1;
296               attval = numfam*100;
297               natt = 1;
298               strcpy(attdes,"description attribut");
299               strcpy(gro,"groupe1");
300               ngro = 1;
301               printf("%s - %d - %d - %d - %d \n",nomfam,numfam,attide,attval,
302                      ngro);
303               ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
304                              natt,gro,ngro);
305               printf("MEDfamCr (nodes) : %d\n",ret);
306             }
307         }
308     }
309
310   /* fermeture du fichier */
311   ret = MEDfermer(fid);
312   printf("MEDfermer : %d\n",ret);
313
314   /* Ecriture d'un troisieme maillage structure : grille cartesienne
315     *************************************************************** */
316
317   fid = MEDouvrir("test19.med", MED_LECTURE_ECRITURE);
318   if (fid < 0)
319     ret = -1;
320   else
321     ret = 0;
322   printf("MEDouvrir : %d\n",ret);
323
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 */
327   if (ret == 0)
328     ret = MEDmaaCr(fid, maa, mdim, MED_STRUCTURE, maadesc);
329   printf("MEDmaaCr : %d\n",ret);
330
331   if (ret == 0)
332     ret = MEDnatureGrilleEcr(fid, maa, MED_GRILLE_CARTESIENNE);
333   printf("MEDnatureGrilleEcr : %d\n",ret);
334
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++) {
338     ip1 = i + 1;
339     coo[0] = 1.1+i;
340     coo[1] = 1.2+i;
341     coo[2] = 1.3+i;
342     coo[3] = 1.4+i;
343     if (ret == 0) {
344       ret = MEDindicesCoordEcr(fid, maa, mdim, coo, nnoe, ip1,
345                                nomcooi, unicooi);
346     };
347   };
348   printf("MEDindicesCoordEcr : %d\n",ret);
349
350   /* Ecriture des familles de la grille cartesienne */
351
352   /* les noeuds */
353
354   if (ret == 0) {
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;
359
360     ret = MEDfamEcr(fid, maa, famNodeCart, 16, MED_NOEUD, 0);
361   };
362   printf("MEDfamEcr for Nodes : %d\n",ret);
363
364   /* les elements */
365
366   if (ret == 0) {
367     for(i=0; i<9; i++) famElmtCart[i]=0;
368
369     ret = MEDfamEcr(fid, maa, famElmtCart, 9, MED_MAILLE, MED_QUAD4);
370   };
371   printf("MEDfamEcr for Elements : %d\n",ret);
372
373   /* les faces/edges */
374
375   if (ret == 0) {
376     for(i=0; i<24; i++) famFaceCart[i]=0;
377
378     ret = MEDfamEcr(fid, maa, famFaceCart, 24, MED_ARETE, MED_SEG2);
379   };
380   printf("MEDfamEcr for Elements : %d\n",ret);
381
382   /* la famille 0 */
383   if (ret == 0)
384     {
385       strcpy(nomfam,"FAMILLE_0");
386       numfam = 0;
387       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,0,
388                      gro,0);
389     }
390   printf("MEDfamCr : %d \n",ret);
391
392   if (ret == 0)
393     {
394       nfamn = 9;
395       for (i=0;i<nfamn;i++)
396         {
397           if(ret == 0)
398             {
399               strcpy(nomfam,"FAMILLE_NOEUD_");
400               numfam = i+1;
401               sprintf(nomfam,"%s%d",nomfam,numfam);
402               attide = 1;
403               attval = numfam*100;
404               natt = 1;
405               strcpy(attdes,"description attribut");
406               strcpy(gro,"groupe1");
407               ngro = 1;
408               printf("%s - %d - %d - %d - %d \n",nomfam,numfam,attide,attval,
409                      ngro);
410               ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
411                              natt,gro,ngro);
412               printf("MEDfamCr (nodes) : %d\n",ret);
413             }
414         }
415     }
416
417   /* fermeture du fichier */
418   ret = MEDfermer(fid);
419   printf("MEDfermer : %d\n",ret);
420
421   return 0;
422 }