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