]> SALOME platform Git repositories - modules/med.git/blob - src/MEDMEM/create_grid.c
Salome HOME
DCQ : Merge with Ecole Ete a6.
[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   /* le nombre de noeuds */
45   med_int nnoe = 4;
46   /* table des coordonnees  
47      profil : (dimension * nombre de noeuds) */
48   med_float coo[8] = {0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0};
49   med_int nbr[2] = {2, 2};
50   /* tables des noms et des unites des coordonnees 
51      profil : (dimension*MED_TAILLE_PNOM+1) */
52   char nomcoo[2*MED_TAILLE_PNOM+1] = "x       y       ";
53   char unicoo[2*MED_TAILLE_PNOM+1] = "cm      cm      ";
54   /* tables des noms, numeros, numeros de familles des noeuds
55      autant d'elements que de noeuds - les noms ont pout longueur
56      MED_TAILLE_PNOM */
57   char nomnoe[4*MED_TAILLE_PNOM+1] = "nom1    nom2    nom3    nom4    ";
58   med_int numnoe[4] = {1,2,3,4};
59   med_int nufano[4] = {0,1,2,2};
60   char nomfam[MED_TAILLE_NOM+1];
61   med_int numfam;
62   char attdes[MED_TAILLE_DESC+1];
63   med_int natt;
64   med_int attide;
65   med_int attval;
66   med_int ngro;
67   char gro[MED_TAILLE_LNOM+1];
68   int i;
69   int nfame = 1; 
70   int nfamn = 2;
71   med_int fam[16];
72   /*
73     les elements:
74   */
75   med_int nquad4 = 1;
76   med_int quad4[4] = {
77     1, 2, 4, 3
78   };
79   char nomquad4[MED_TAILLE_PNOM*1+1] = "quad1   ";
80   med_int numquad4[1] = {1};
81   med_int nufaquad4[1] = {-1};
82
83   fid = MEDouvrir("test19.med",MED_REMP);
84   if (fid < 0)
85     ret = -1;
86   else
87     ret = 0;
88   printf("%d\n",ret);
89
90   /* creation du maillage maa de dimension 2 */
91   if (ret == 0)
92     ret = MEDmaaCr(fid,maa,mdim);
93   printf("%d\n",ret);
94
95   /* ecriture des noeuds d'un maillage MED : 
96      - des coo en mode MED_FULL_INTERLACE : (X1,Y1,X2,Y2,X3,Y3,...) 
97        dans un repere cartesien 
98      - des noms (optionnel dans un fichier MED) 
99      - des numeros (optionnel dans un fichier MED) 
100      - des numeros de familles des noeuds */          
101   if (ret == 0)
102     ret = MEDnoeudsEcr(fid,maa,mdim,coo,MED_FULL_INTERLACE,MED_CART,
103                        nomcoo,unicoo,nomnoe,MED_VRAI,numnoe,MED_VRAI,
104                        nufano,nnoe,MED_ECRI);
105   printf("%d\n",ret);
106
107   /* ecriture des mailles MED_QUAD4 :
108      - connectivite
109      - noms (optionnel) 
110      - numeros (optionnel)
111      - numeros des familles */
112   if (ret == 0) 
113     ret = MEDelementsEcr(fid,maa,mdim,quad4,MED_FULL_INTERLACE,
114                          nomquad4,MED_FAUX,numquad4,MED_VRAI,nufaquad4,nquad4,
115                          MED_MAILLE,MED_QUAD4,MED_NOD,MED_ECRI);
116   printf("%d \n",ret);
117
118   /* ecriture des familles */
119   /* Conventions :
120      - toujours creer une famille de numero 0 ne comportant aucun attribut
121        ni groupe (famille de reference pour les noeuds ou les elements
122        qui ne sont rattaches a aucun groupe ni attribut)
123      - les numeros de familles de noeuds sont > 0
124      - les numeros de familles des elements sont < 0
125      - rien d'imposer sur les noms de familles
126    */ 
127
128   /* la famille 0 */
129   if (ret == 0)
130     {
131       strcpy(nomfam,"FAMILLE_0");
132       numfam = 0;
133       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,0,
134                      gro,0);
135     }
136   printf("%d \n",ret);
137
138   /* on cree pour correspondre aux cas tests precedents, 3 familles
139      d'elements (-1,-2,-3) et deux familles de noeuds (1,2) */
140   if (ret == 0)
141     {
142       nfame = 1;
143       for (i=0;i<nfame;i++)
144         {
145           if (ret == 0)
146             {
147               strcpy(nomfam,"FAMILLE_ELEMENT_");
148               numfam = -(i+1);
149               sprintf(nomfam,"%s%d",nomfam,-numfam);
150               attide = 1;
151               attval = numfam*100;
152               natt = 1;
153               strcpy(attdes,"description attribut");
154               strcpy(gro,"groupe1");
155               ngro = 1;
156               printf("%s - %d - %d - %d - %d \n",nomfam,numfam,attide,attval,
157                      ngro);
158               ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
159                              natt,gro,ngro);
160               printf("MEDfamCr (elements) : %d\n",ret);
161             }
162         }
163     }
164   
165     if (ret == 0)
166     {
167       nfamn = 2;
168       for (i=0;i<nfamn;i++)
169         {
170           if(ret == 0)
171             {
172               strcpy(nomfam,"FAMILLE_NOEUD_");
173               numfam = i+1;
174               sprintf(nomfam,"%s%d",nomfam,numfam);
175               attide = 1;
176               attval = numfam*100;
177               natt = 1;
178               strcpy(attdes,"description attribut");
179               strcpy(gro,"groupe1");
180               ngro = 1;
181               printf("%s - %d - %d - %d - %d \n",nomfam,numfam,attide,attval,
182                      ngro);
183               ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
184                              natt,gro,ngro);
185               printf("MEDfamCr (nodes) : %d\n",ret);
186             }
187         }
188     }
189
190
191   /* fermeture du fichier */
192   ret = MEDfermer(fid);
193   printf("%d\n",ret);
194
195 /* Ecriture d'un deuxieme maillage structure : body fitted
196    ******************************************************* */
197
198   fid = MEDouvrir("test19.med",MED_ECRI);
199   if (fid < 0)
200     ret = -1;
201   else
202     ret = 0;
203   printf("%d\n",ret);
204
205   strcpy(maa, "bodyfitted");
206   /* creation du maillage body fitted maa de dimension 2 */
207   if (ret == 0)
208     ret = MEDgridCr(fid, maa, mdim, MED_BODY_FITTED);
209   printf("%d\n",ret);
210
211   /* ecriture des noeuds d'un maillage MED : 
212      - des coo en mode MED_FULL_INTERLACE : (X1,Y1,X2,Y2,X3,Y3,...) 
213        dans un repere cartesien 
214      - des noms (optionnel dans un fichier MED) 
215      - des numeros (optionnel dans un fichier MED) 
216      - des numeros de familles des noeuds */          
217   if (ret == 0)
218     ret = MEDbodyFittedEcr(fid,maa,mdim,coo,nbr,MED_FULL_INTERLACE,MED_CART,
219                        nomcoo,unicoo,nufano,nnoe,MED_ECRI);
220   printf("%d\n",ret);
221
222   /* la famille 0 */
223   if (ret == 0)
224     {
225       strcpy(nomfam,"FAMILLE_0");
226       numfam = 0;
227       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,0,
228                      gro,0);
229     }
230   printf("%d \n",ret);
231
232
233
234     if (ret == 0)
235     {
236       nfamn = 2;
237       for (i=0;i<nfamn;i++)
238         {
239           if(ret == 0)
240             {
241               strcpy(nomfam,"FAMILLE_NOEUD_");
242               numfam = i+1;
243               sprintf(nomfam,"%s%d",nomfam,numfam);
244               attide = 1;
245               attval = numfam*100;
246               natt = 1;
247               strcpy(attdes,"description attribut");
248               strcpy(gro,"groupe1");
249               ngro = 1;
250               printf("%s - %d - %d - %d - %d \n",nomfam,numfam,attide,attval,
251                      ngro);
252               ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
253                              natt,gro,ngro);
254               printf("MEDfamCr (nodes) : %d\n",ret);
255             }
256         }
257     }
258
259
260
261
262   /* fermeture du fichier */
263   ret = MEDfermer(fid);
264   printf("%d\n",ret);
265
266 /* Ecriture d'un troisieme maillage structure : grille cartesienne
267    *************************************************************** */
268
269   fid = MEDouvrir("test19.med", MED_ECRI);
270   if (fid < 0)
271     ret = -1;
272   else
273     ret = 0;
274   printf("%d\n",ret);
275
276   strcpy(maa, "CartGrid");
277   /* creation d'une grille cartesienne maa de dimension 2 */
278   if (ret == 0)
279     ret = MEDgridCr(fid, maa, mdim, MED_CARTESIAN);
280   printf("%d\n",ret);
281
282     /* Ecriture des indices de la grille cartesienne :
283        - des coo en mode MED_FULL_INTERLACE : (X1,Y1,X2,Y2,X3,Y3,...) */
284     for (i=0; i<mdim; i++) {
285         coo[0] = 1.1+i;
286         coo[1] = 1.2+i;
287         coo[2] = 1.3+i;
288         coo[3] = 1.4+i;
289         if (ret == 0) {
290             ret = MEDgridEcr(fid, maa, mdim, coo, nnoe, i, MED_FULL_INTERLACE, MED_CART, nomcoo, unicoo, MED_ECRI);
291         };
292     };
293     printf("%d\n",ret);
294
295     /* Ecriture des familles de la grille cartesienne */
296     if (ret == 0) {
297         fam[ 0]=3; fam[ 1]=3; fam[ 2]=2; fam[ 3]=1;
298         fam[ 4]=7; fam[ 5]=8; fam[ 6]=2; fam[ 7]=4;
299         fam[ 8]=2; fam[ 9]=9; fam[10]=0; fam[11]=2;
300         fam[12]=5; fam[13]=5; fam[14]=6; fam[15]=7;
301         ret = MEDfamGridEcr(fid, maa, fam, 16, MED_ECRI,MED_NOEUD);
302     };
303
304
305   /* la famille 0 */
306   if (ret == 0)
307     {
308       strcpy(nomfam,"FAMILLE_0");
309       numfam = 0;
310       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,0,
311                      gro,0);
312     }
313   printf("%d \n",ret);
314
315
316     if (ret == 0)
317     {
318       nfamn = 9;
319       for (i=0;i<nfamn;i++)
320         {
321           if(ret == 0)
322             {
323               strcpy(nomfam,"FAMILLE_NOEUD_");
324               numfam = i+1;
325               sprintf(nomfam,"%s%d",nomfam,numfam);
326               attide = 1;
327               attval = numfam*100;
328               natt = 1;
329               strcpy(attdes,"description attribut");
330               strcpy(gro,"groupe1");
331               ngro = 1;
332               printf("%s - %d - %d - %d - %d \n",nomfam,numfam,attide,attval,
333                      ngro);
334               ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
335                              natt,gro,ngro);
336               printf("MEDfamCr (nodes) : %d\n",ret);
337             }
338         }
339     }
340
341
342   /* fermeture du fichier */
343   ret = MEDfermer(fid);
344   printf("%d\n",ret);
345
346   return 0;
347 }