Salome HOME
Final version of the V2_2_0 in the main trunk of the CVS tree.
[modules/med.git] / src / MEDMEM / create_mesh.c
1 #include <med.h>
2 #include <string.h>
3
4 int main (int argc, char **argv)
5 {
6   med_err ret;
7   med_idt fid;
8   char maa[MED_TAILLE_NOM+1] = "maa1";
9   char maadesc[MED_TAILLE_DESC+1] = "Example de maillage non structure 3D";
10   med_int mdim = 3;
11   med_int nnoe = 19;
12   med_float coo[57] = {
13     0.0, 0.0, 0.0, 
14     0.0, 0.0, 1.0, 
15     2.0, 0.0, 1.0, 
16     0.0, 2.0, 1.0, 
17     -2.0, 0.0, 1.0, 
18     0.0, -2.0, 1.0, 
19     1.0, 1.0, 2.0, 
20     -1.0, 1.0, 2.0, 
21     -1.0, -1.0, 2.0, 
22     1.0, -1.0, 2.0, 
23     1.0, 1.0, 3.0, 
24     -1.0, 1.0, 3.0, 
25     -1.0, -1.0, 3.0, 
26     1.0, -1.0, 3.0, 
27     1.0, 1.0, 4.0, 
28     -1.0, 1.0, 4.0, 
29     -1.0, -1.0, 4.0, 
30     1.0, -1.0, 4.0,
31     0.0, 0.0, 5.0
32   };
33   char nomcoo[3*MED_TAILLE_PNOM+1] = "x               y               z               ";
34   char unicoo[3*MED_TAILLE_PNOM+1] = "cm              cm              cm              ";
35   /*  char nomnoe[19*MED_TAILLE_PNOM+1] = "nom1    nom2    nom3    nom4";*/
36   char *nomnoe ;
37   med_int numnoe[19] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
38   med_int nufano[19] = {1,1,3,3,0,0,2,0,4,0,4,2,4,2,4,2,4,1,3};
39   
40   med_int ntet4 = 12;
41   med_int tet4[12*4] = {
42     1,2,3,6,
43     1,2,4,3,
44     1,2,5,4,
45     1,2,6,5,
46     2,7,4,3,
47     2,8,5,4,
48     2,9,6,5,
49     2,10,3,6,
50     2,7,3,10,
51     2,8,4,7,
52     2,9,5,8,
53     2,10,6,9
54   };
55   char * nomtet4 ; 
56   med_int numtet4[12] = {1,2,3,4,5,6,7,8,9,10,11,12};
57   med_int nufatet4[12] = {-1,-1,-1,-1,0,0,0,0,0,0,-2,-3}; 
58
59   med_int npyra5 = 2;
60   med_int pyra5[5*2] = {
61     7,8,9,10,2,
62     15,18,17,16,19
63   };
64   char nompyra5[MED_TAILLE_PNOM*2+1] = "pyra1           pyra2           ";
65   med_int numpyra5[2] = {13,16};
66   med_int nufapyra5[2] = {0,-3};
67
68   med_int nhexa8 = 2;
69   med_int hexa8[8*2] = {
70     11,12,13,14,7,8,9,10,
71     15,16,17,18,11,12,13,14
72   };
73   char nomhexa8[MED_TAILLE_PNOM*2+1] = "hexa1           hexa2           ";
74   med_int numhexa8[2] = {14,15};
75   med_int nufahexa8[2] = {0,0};
76
77   char nomfam[MED_TAILLE_NOM+1];
78   med_int numfam;
79   char attdes[MED_TAILLE_DESC+1];
80   med_int natt;
81   med_int attide;
82   med_int attval;
83   med_int ngro;
84   char gro[MED_TAILLE_LNOM+1];
85   char gro2[MED_TAILLE_LNOM*2+1];
86   char gro3[MED_TAILLE_LNOM*3+1];
87   int i;
88   int nfame = 3; 
89   int nfamn = 2;
90
91
92   /*
93     Some fields : 2 on nodes : one int and one double , one on cells : double
94    */
95   char champ1[MED_TAILLE_NOM+1]="fieldnodeint" ;
96   char champ1_comp[MED_TAILLE_PNOM+1]="comp1           " ;
97   char champ1_unit[MED_TAILLE_PNOM+1]="M               " ;
98   med_int     fieldnodeint[19]    = {1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7};
99
100   char champ2[MED_TAILLE_NOM+1]="fieldnodedouble" ;
101   char champ2_comp[MED_TAILLE_PNOM+1]="comp1           " ;
102   char champ2_unit[MED_TAILLE_PNOM+1]="J               " ;
103   med_float   fieldnodedouble1[19] = {1.,1.,1.,2.,2.,2.,3.,3.,3.,4.,4.,4.,5.,5.,5.,6.,6.,6.,7.};
104   med_float   fieldnodedouble2[19] = {1.,2.,2.,2.,3.,3.,3.,4.,4.,4.,5.,5.,5.,6.,6.,6.,7.,7.,7.};
105
106   char champ3[MED_TAILLE_NOM+1]="fieldcelldoublevector" ;
107   char champ3_comp[MED_TAILLE_PNOM*3+1]="comp1           comp2           comp3           " ;
108   char champ3_unit[MED_TAILLE_PNOM*3+1]="m/s             m/s             m/s             " ;
109   med_float   fieldcelldouble1[12*3] = {1.,1.,1.,2.,2.,2.,3.,3.,3.,4.,4.,4.,0.,0.,0.,1.,1.,1.,0.,0.,0.,1.,1.,1.,1.,1.,1.,0.,0.,0.,1.,1.,1.,0.,0.,0.};
110   med_float   fieldcelldouble2[2*3]  = {5.,5.,0.,1.,0.,1.};
111   med_float   fieldcelldouble3[2*3]  = {6.,6.,1.,0.,1.,0.};
112
113   char champ4[MED_TAILLE_NOM+1]="fieldcelldoublescalar" ;
114   char champ4_comp[MED_TAILLE_PNOM+1]="comp1           " ;
115   char champ4_unit[MED_TAILLE_PNOM+1]="m/s             " ;
116   med_float   fieldcelldouble4[12] = {1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.};
117   med_float   fieldcelldouble5[2]  = {2.,2.};
118   med_float   fieldcelldouble6[2]  = {3.,3.};
119
120   /***************************************************************************/
121   fid = MEDouvrir("pointe.med",MED_LECTURE_ECRITURE);
122   if (fid < 0)
123     ret = -1;
124   else
125     ret = 0;
126   printf("MEDouvrir : %d\n",ret);
127
128   /***************************************************************************/
129   if (ret == 0)
130     ret = MEDmaaCr(fid,maa,mdim,MED_NON_STRUCTURE,maadesc);
131   printf("MEDmaaCr : %d\n",ret);
132   if (ret == 0)
133     ret = MEDunvCr(fid,maa);
134   printf("MEDunvCr : %d\n",ret);
135
136   /***************************************************************************/
137   if (ret == 0)
138     ret = MEDnoeudsEcr(fid,maa,mdim,coo,MED_FULL_INTERLACE,MED_CART,
139                        nomcoo,unicoo,nomnoe,MED_FAUX,numnoe,MED_VRAI,
140                        nufano,nnoe);
141   printf("MEDnoeudsEcr : %d\n",ret);
142
143
144   /***************************************************************************/
145   /* ecriture des mailles MED_TETRA4 :
146      - connectivite
147      - noms (optionnel) 
148      - numeros (optionnel)
149      - numeros des familles */
150   if (ret == 0) 
151     ret = MEDelementsEcr(fid,maa,mdim,tet4,MED_FULL_INTERLACE,
152                          nomtet4,MED_FAUX,numtet4,MED_VRAI,nufatet4,ntet4,
153                          MED_MAILLE,MED_TETRA4,MED_NOD);
154   printf("MEDelementsEcr : %d \n",ret);
155
156   /* ecriture des mailles MED_PYRA5 :
157      - connectivite
158      - noms (optionnel) 
159      - numeros (optionnel)
160      - numeros des familles */
161   if (ret == 0) 
162     ret = MEDelementsEcr(fid,maa,mdim,pyra5,MED_FULL_INTERLACE,
163                          nompyra5,MED_VRAI,numpyra5,MED_VRAI,nufapyra5,npyra5,
164                          MED_MAILLE,MED_PYRA5,MED_NOD);
165   printf("MEDelementsEcr : %d \n",ret);
166
167   /* ecriture des mailles MED_HEXA8 :
168      - connectivite
169      - noms (optionnel) 
170      - numeros (optionnel)
171      - numeros des familles */
172   if (ret == 0) 
173     ret = MEDelementsEcr(fid,maa,mdim,hexa8,MED_FULL_INTERLACE,
174                          nomhexa8,MED_FAUX,numhexa8,MED_VRAI,nufahexa8,nhexa8,
175                          MED_MAILLE,MED_HEXA8,MED_NOD);
176   printf("MEDelementsEcr : %d \n",ret);
177
178   /***************************************************************************/
179   /* ecriture des familles */
180   /* Conventions :
181      - toujours creer une famille de numero 0 ne comportant aucun attribut
182        ni groupe (famille de reference pour les noeuds ou les elements
183        qui ne sont rattaches a aucun groupe ni attribut)
184      - les numeros de familles de noeuds sont > 0
185      - les numeros de familles des elements sont < 0
186      - rien d'imposer sur les noms de familles
187    */ 
188
189   /* la famille 0 */
190   if (ret == 0)
191     {
192       strcpy(nomfam,"FAMILLE_0");
193       numfam = 0;
194       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,0,
195                      gro,0);
196     }
197   printf("MEDfamCr : %d \n",ret);
198
199   /* on cree :
200       - 3 familles d'elements (-1,-2,-3) et 
201       - 2 familles de noeuds (1,2) 
202   */
203   if (ret == 0)
204     {
205       nfame = 3;
206       for (i=0;i<nfame;i++)
207         {
208           if (ret == 0)
209             {
210               strcpy(nomfam,"FAMILLE_ELEMENT_");
211               numfam = -(i+1);
212               sprintf(nomfam,"%s%d",nomfam,-numfam);
213               attide = 1;
214               attval = numfam*100;
215               natt = 1;
216               strcpy(attdes,"description attribut");
217               strcpy(gro,"groupe1");
218               ngro = 1;
219               /*printf("nomfam : %s - numfam : %d - attide : %d - attval : %d - ngro : %d \n",nomfam,numfam,attide,attval,ngro);*/
220               ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
221                              natt,gro,ngro);
222               printf("MEDfamCr : %d\n",ret);
223             }
224         }
225     }
226   
227   if (ret == 0)
228     {
229       strcpy(nomfam,"FAMILLE_NOEUD_1");
230       numfam = 1;
231       attide = 1;
232       attval = numfam*100;
233       natt = 1;
234       strcpy(attdes,"description attribut");
235       strcpy(gro2,"groupe2");
236       strcpy(gro2+MED_TAILLE_LNOM,"groupe3");
237       ngro = 2;
238       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
239                      natt,gro2,ngro);
240       printf("MEDfamCr : %d\n",ret);
241     }
242   if (ret == 0)
243     {
244       strcpy(nomfam,"FAMILLE_NOEUD_2");
245       numfam = 2;
246       attide = 1;
247       attval = numfam*100;
248       natt = 1;
249       strcpy(attdes,"description attribut");
250       strcpy(gro2,"groupe3");
251       strcpy(gro2+MED_TAILLE_LNOM,"groupe4");
252       ngro = 2;
253       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
254                      natt,gro2,ngro);
255       printf("MEDfamCr : %d\n",ret);
256     }
257   if (ret == 0)
258     {
259       strcpy(nomfam,"FAMILLE_NOEUD_3");
260       numfam = 3;
261       attide = 1;
262       attval = numfam*100;
263       natt = 1;
264       strcpy(attdes,"description attribut");
265       strcpy(gro2,"groupe2");
266       strcpy(gro2+MED_TAILLE_LNOM,"groupe4");
267       ngro = 2;
268       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
269                      natt,gro2,ngro);
270       printf("MEDfamCr : %d\n",ret);
271     }
272   if (ret == 0)
273     {
274       strcpy(nomfam,"FAMILLE_NOEUD_4");
275       numfam = 4;
276       attide = 1;
277       attval = numfam*100;
278       natt = 1;
279       strcpy(attdes,"description attribut");
280       strcpy(gro,"groupe5");
281       ngro = 1;
282       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
283                      natt,gro,ngro);
284       printf("MEDfamCr : %d\n",ret);
285     }
286
287   /***************************************************************************/
288   /*
289     Les champs
290   */
291   if (ret == 0)
292     {
293       ret = MEDchampCr(fid,champ1,MED_INT32,champ1_comp,champ1_unit,1);
294       printf("MEDchampCr : %d \n",ret);
295       if (ret == 0) {
296         ret = MEDchampEcr(fid, maa, champ1, (unsigned char *)fieldnodeint,
297                           MED_NO_INTERLACE, nnoe, MED_NOGAUSS, MED_ALL,
298                           MED_NOPFL, MED_NO_PFLMOD, MED_NOEUD, 0,
299                           MED_NOPDT,"        ", 0., MED_NONOR);
300         
301         printf("MEDchampEcr : %d \n",ret);
302       }
303     }
304   
305   if (ret == 0)
306     {
307       ret = MEDchampCr(fid,champ2,MED_FLOAT64,champ2_comp,champ2_unit,1);
308       printf("MEDchampCr : %d \n",ret);
309       if (ret == 0) {
310         ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble1,
311                           MED_NO_INTERLACE, nnoe, MED_NOGAUSS, MED_ALL,
312                           MED_NOPFL, MED_NO_PFLMOD, MED_NOEUD, 0,
313                           1,"S       ", 1.1 , MED_NONOR);
314         printf("MEDchampEcr1 : %d \n",ret);
315         ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble2,
316                           MED_NO_INTERLACE, nnoe, MED_NOGAUSS, MED_ALL,
317                           MED_NOPFL, MED_NO_PFLMOD, MED_NOEUD, 0,
318                           2,"S       ", 1.2 , MED_NONOR);
319         printf("MEDchampEcr2 : %d \n",ret);
320       }
321     }
322   
323   /* on met champ2 sans pas de temps pour pouvoir le lire aussi par defaut !*/
324   if (ret == 0)
325     {
326 /*        ret = MEDchampCr(fid,champ2,MED_REEL64,champ2_comp,champ2_unit,1); */
327 /*        printf("MEDchampCr : %d \n",ret); */
328       if (ret == 0) {
329         ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble1,
330                           MED_NO_INTERLACE, nnoe, MED_NOGAUSS, MED_ALL,
331                           MED_NOPFL, MED_NO_PFLMOD, MED_NOEUD, 0,
332                           MED_NOPDT,"        ", 0. , MED_NONOR);
333         printf("MEDchampEcr : %d \n",ret);
334       }
335     }
336
337   if (ret == 0)
338     {
339       ret = MEDchampCr(fid,champ3,MED_FLOAT64,champ3_comp,champ3_unit,3);
340       printf("MEDchampCr : %d \n",ret);
341       if (ret == 0) {
342         ret = MEDchampEcr(fid, maa, champ3, (unsigned char *)fieldcelldouble1,
343                           MED_NO_INTERLACE, ntet4, MED_NOGAUSS, MED_ALL,
344                           MED_NOPFL, MED_NO_PFLMOD, MED_MAILLE, MED_TETRA4,
345                           MED_NOPDT,"        ", 0., MED_NONOR);
346         printf("MEDchampEcr : %d \n",ret);
347         ret = MEDchampEcr(fid, maa, champ3, (unsigned char *)fieldcelldouble3,
348                           MED_NO_INTERLACE, nhexa8, MED_NOGAUSS, MED_ALL,
349                           MED_NOPFL, MED_NO_PFLMOD, MED_MAILLE, MED_HEXA8,
350                           MED_NOPDT,"        ", 0., MED_NONOR);
351         printf("MEDchampEcr : %d \n",ret);
352         ret = MEDchampEcr(fid, maa, champ3, (unsigned char *)fieldcelldouble2,
353                           MED_NO_INTERLACE, npyra5, MED_NOGAUSS, MED_ALL,
354                           MED_NOPFL, MED_NO_PFLMOD, MED_MAILLE, MED_PYRA5,
355                           MED_NOPDT,"        ", 0., MED_NONOR);
356         printf("MEDchampEcr : %d \n",ret);
357       }
358     }
359   
360   if (ret == 0)
361     {
362       ret = MEDchampCr(fid,champ4,MED_FLOAT64,champ4_comp,champ4_unit,1);
363       printf("MEDchampCr : %d \n",ret);
364       if (ret == 0) {
365         ret = MEDchampEcr(fid, maa, champ4, (unsigned char *)fieldcelldouble4,
366                           MED_NO_INTERLACE, ntet4, MED_NOGAUSS, MED_ALL,
367                           MED_NOPFL, MED_NO_PFLMOD, MED_MAILLE, MED_TETRA4,
368                           MED_NOPDT,"        ", 0., MED_NONOR);
369         printf("MEDchampEcr : %d \n",ret);
370         ret = MEDchampEcr(fid, maa, champ4, (unsigned char *)fieldcelldouble6,
371                           MED_NO_INTERLACE, nhexa8, MED_NOGAUSS, MED_ALL,
372                           MED_NOPFL, MED_NO_PFLMOD, MED_MAILLE, MED_HEXA8,
373                           MED_NOPDT,"        ", 0., MED_NONOR);
374         printf("MEDchampEcr : %d \n",ret);
375         ret = MEDchampEcr(fid, maa, champ4, (unsigned char *)fieldcelldouble5,
376                           MED_NO_INTERLACE, npyra5, MED_NOGAUSS, MED_ALL,
377                           MED_NOPFL, MED_NO_PFLMOD, MED_MAILLE, MED_PYRA5,
378                           MED_NOPDT,"        ", 0., MED_NONOR);
379         printf("MEDchampEcr : %d \n",ret);
380       }
381     }
382   
383   /***************************************************************************/
384   ret = MEDfermer(fid);
385   printf("MEDfermer : %d\n",ret);
386   
387   return 0;
388 }
389