Salome HOME
update from the MedMemory V1.0.1
[modules/med.git] / src / MEDMEM / create_mesh_c3h8q4.c
1 /*
2   creation d'une geometrie 3d : un cube [0,1]^3
3   maillĂ© uniformement en hexahedres reguliers;
4   avec en plus une partie des faces (une partie
5   des faces de la frontiere) du maillage.
6   ATTENTION : 3 noeuds dans chaque direction
7 */
8
9 #include <med.h>
10 #include <string.h>
11
12 int main (int argc, char **argv)
13 {
14   med_err ret;
15   med_idt fid;
16   char maa[MED_TAILLE_NOM+1] = "CUBE_EN_HEXA8_QUAD4";
17   med_int mdim = 3;
18   med_int nnoe = 27;
19   /*
20     les noeuds:
21   */
22   med_float coo[81] = {
23     0.0, 0.0, 0.0, 
24     0.5, 0.0, 0.0, 
25     1.0, 0.0, 0.0, 
26     0.0, 0.5, 0.0, 
27     0.5, 0.5, 0.0, 
28     1.0, 0.5, 0.0, 
29     0.0, 1.0, 0.0, 
30     0.5, 1.0, 0.0, 
31     1.0, 1.0, 0.0, 
32     0.0, 0.0, 0.5, 
33     0.5, 0.0, 0.5, 
34     1.0, 0.0, 0.5, 
35     0.0, 0.5, 0.5, 
36     0.5, 0.5, 0.5, 
37     1.0, 0.5, 0.5, 
38     0.0, 1.0, 0.5, 
39     0.5, 1.0, 0.5, 
40     1.0, 1.0, 0.5, 
41     0.0, 0.0, 1.0, 
42     0.5, 0.0, 1.0, 
43     1.0, 0.0, 1.0, 
44     0.0, 0.5, 1.0, 
45     0.5, 0.5, 1.0, 
46     1.0, 0.5, 1.0, 
47     0.0, 1.0, 1.0, 
48     0.5, 1.0, 1.0, 
49     1.0, 1.0, 1.0
50   };
51   char nomcoo[3*MED_TAILLE_PNOM+1] = "x       y       z       ";
52   char unicoo[3*MED_TAILLE_PNOM+1] = "cm      cm      cm      ";
53   /*  char nomnoe[19*MED_TAILLE_PNOM+1] = "nom1    nom2    nom3    nom4";*/
54   char *nomnoe ;
55   med_int numnoe[27] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27};
56   med_int nufano[27] = {1,1,1,1,1,1,1,1,1,3,3,3,3,0,3,3,3,3,2,2,2,2,2,2,2,2,2};
57   /*
58     les elements:
59   */
60   med_int nhexa8 = 8;
61   med_int hexa8[64] = {
62     4, 13, 14, 5, 1, 10, 11, 2,
63     5, 14, 15, 6, 2, 11, 12, 3,
64     7, 16, 17, 8, 4, 13, 14, 5,
65     8, 17, 18, 9, 5, 14, 15, 6,
66     13, 22, 23, 14, 10, 19, 20, 11,
67     14, 23, 24, 15, 11, 20, 21, 12,
68     16, 25, 26, 17, 13, 22, 23, 14,
69     17, 26, 27, 18, 14, 23, 24, 15
70   };
71   char nomhexa8[MED_TAILLE_PNOM*8+1] = "hexa1   hexa2   hexa3   hexa4   hexa5   hexa6   hexa7   hexa8   ";
72   med_int numhexa8[8] = {1,2,3,4,5,6,7,8};
73   med_int nufahexa8[8] = {-1,-1,-1,-1,-2,-2,-2,-2};
74
75   /*
76     Les Faces qui dans ce cas (2D) sont des arretes
77   */
78
79   med_int nquad4 = 8;
80   med_int quad4[32] = {
81     20, 21, 24, 23,
82     22, 23, 26, 25,
83     19, 20, 23, 22,
84     23, 24, 27, 26,
85     1 , 4, 5, 2,
86     5, 8, 9, 6, 
87     2, 5, 6, 3, 
88     7, 8, 5, 4
89   };
90
91   char nomquad4[MED_TAILLE_PNOM*8+1] = "quad1   quad2   quad3   quad4   quad5   quad6   quad7   quad8  ";
92   med_int numquad4[8] = {1,2,3,4,5,6,7,8};
93   med_int nufaquad4[8] = {-3,-3,-3,-3,-4, -4, -4 , -4};
94
95   char nomfam[MED_TAILLE_NOM+1];
96   med_int numfam;
97   char attdes[MED_TAILLE_DESC+1];
98   med_int natt;
99   med_int attide;
100   med_int attval;
101   med_int ngro;
102   char gro[MED_TAILLE_LNOM+1];
103   int i;
104   int nfame = 1; 
105   int nfamn = 1;
106   int nfamf = 1;
107
108   /*
109     Some fields : 2 on nodes : one int and one double , one on cells : double
110   */
111
112   char champ1[MED_TAILLE_NOM+1]="fieldnodeint" ;
113   char champ1_comp[MED_TAILLE_PNOM+1]="comp1   " ;
114   char champ1_unit[MED_TAILLE_PNOM+1]="M       " ;
115   med_int fieldnodeint[27] = {1,1,3,2,2,3,4,4,5,1,1,3,2,2,3,4,4,5,1,1,3,2,2,3,4,4,5};
116
117   char champ2[MED_TAILLE_NOM+1]="fieldnodedouble" ;
118   char champ2_comp[MED_TAILLE_PNOM+1]="comp1   " ;
119   char champ2_unit[MED_TAILLE_PNOM+1]="J       " ;
120   med_float fieldnodedouble1[27] = {1.,3.,4.,1.,3.,4.,3.,2.,5.,1.,3.,4.,1.,3.,4.,3.,2.,5.,1.,3.,4.,1.,3.,4.,3.,2.,5.};
121   med_float fieldnodedouble2[27] = {1.,2.,2.,3.,3.,3.,4.,4.,5.,1.,2.,2.,3.,3.,3.,4.,4.,5.,1.,2.,2.,3.,3.,3.,4.,4.,5.};
122
123   char champ3[MED_TAILLE_NOM+1]="fieldcelldouble" ;
124   char champ3_comp[MED_TAILLE_PNOM*3+1]="comp1   comp2   comp3   " ;
125   char champ3_unit[MED_TAILLE_PNOM*3+1]="M/S     m/s     m/s     " ;
126   med_float fieldcelldouble[8*3] = {0.,1.,1.,1.,1.,2.,2.,3.,0.,1.,1.,1.,1.,2.,2.,3.,0.,1.,1.,1.,1.,2.,2.,3.};
127
128   /***************************************************************************/
129   fid = MEDouvrir("cube_hexa8_quad4.med",MED_REMP);
130   if (fid < 0)
131     ret = -1;
132   else
133     ret = 0;
134   printf("%d\n",ret);
135
136   /***************************************************************************/
137   if (ret == 0)
138     ret = MEDmaaCr(fid,maa,mdim);
139   printf("%d\n",ret);
140   if (ret == 0)
141     ret = MEDunvCr(fid,maa);
142   printf("%d\n",ret);
143
144   /***************************************************************************/
145   if (ret == 0)
146     ret = MEDnoeudsEcr(fid,maa,mdim,coo,MED_FULL_INTERLACE,MED_CART,
147                        nomcoo,unicoo,nomnoe,MED_FAUX,numnoe,MED_VRAI,
148                        nufano,nnoe,MED_ECRI);
149   printf("%d\n",ret);
150
151   /* ecriture des mailles MED_HEXA8 :
152      - connectivite
153      - noms (optionnel) 
154      - numeros (optionnel)
155      - numeros des familles */
156   if (ret == 0) 
157     ret = MEDelementsEcr(fid,maa,mdim,hexa8,MED_FULL_INTERLACE,
158                          nomhexa8,MED_FAUX,numhexa8,MED_VRAI,nufahexa8,nhexa8,
159                          MED_MAILLE,MED_HEXA8,MED_NOD,MED_ECRI);
160   printf("%d \n",ret);
161
162   /* ecriture des mailles MED_QUAD4 :
163      - connectivite
164      - noms (optionnel) 
165      - numeros (optionnel)
166      - numeros des familles */
167   if (ret == 0) 
168     ret = MEDelementsEcr(fid,maa,mdim,quad4,MED_FULL_INTERLACE,
169                          nomquad4,MED_FAUX,numquad4,MED_VRAI,nufaquad4,nquad4,
170                          MED_FACE,MED_QUAD4,MED_NOD,MED_ECRI);
171   printf("%d \n",ret);
172
173   /***************************************************************************/
174   /* ecriture des familles */
175   /* Conventions :
176      - toujours creer une famille de numero 0 ne comportant aucun attribut
177        ni groupe (famille de reference pour les noeuds ou les elements
178        qui ne sont rattaches a aucun groupe ni attribut)
179      - les numeros de familles de noeuds sont > 0
180      - les numeros de familles des elements sont < 0
181      - rien d'imposer sur les noms de familles
182    */ 
183
184   /* la famille 0 */
185   if (ret == 0)
186     {
187       strcpy(nomfam,"FAMILLE_0");
188       numfam = 0;
189       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,0,
190                      gro,0);
191     }
192   printf("%d \n",ret);
193
194   /* on cree :
195       - 2 familles d'elements (-1,-2) et 
196       - 3 familles de noeuds (1,2,3) 
197       - 1 famille(s) d'elements de dimension (d-1)
198         en fait de face (-3)
199   */
200
201   if (ret == 0)
202     {
203       nfame = 2;
204       for (i=0;i<nfame;i++)
205         {
206           if (ret == 0)
207             {
208               strcpy(nomfam,"FAMILLE_ELEMENT_");
209               numfam = -(i+1);
210               sprintf(nomfam,"%s%d",nomfam,-numfam);
211               attide = 1;
212               attval = numfam*100;
213               natt = 1;
214               strcpy(attdes,"description attribut");
215               strcpy(gro,"groupe1");
216               ngro = 1;
217
218               /*printf("nomfam : %s - numfam : %d - attide : %d - attval : %d - ngro : %d \n",nomfam,numfam,attide,attval,ngro);*/
219
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       nfamn = 3;
230       for (i=0;i<nfamn;i++)
231         {
232           if(ret == 0)
233             {
234               strcpy(nomfam,"FAMILLE_NOEUD_");
235               numfam = i+1;
236               sprintf(nomfam,"%s%d",nomfam,numfam);
237               attide = 1;
238               attval = numfam*100;
239               natt = 1;
240               strcpy(attdes,"description attribut");
241               strcpy(gro,"groupe2");
242               ngro = 1;
243               ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
244                              natt,gro,ngro);
245               printf("MEDfamCr : %d\n",ret);
246             }
247         }
248     }
249
250   if (ret == 0)
251     {
252       nfamf = 2;
253       for (i=0;i<nfamf;i++)
254         {
255           if (ret == 0)
256             {
257               strcpy(nomfam,"FAMILLE_FACE_");
258               numfam = -(i+3);
259               sprintf(nomfam,"%s%d",nomfam,-numfam);
260               attide = 1;
261               attval = numfam*100;
262               natt = 1;
263               strcpy(attdes,"description attribut");
264               strcpy(gro,"groupe3");
265               ngro = 1;
266               /*printf("nomfam : %s - numfam : %d - attide : %d - attval : %d - ngro : %d \n",nomfam,numfam,attide,attval,ngro);*/
267               ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
268                              natt,gro,ngro);
269               printf("MEDfamCr : %d\n",ret);
270             }
271         }
272     }
273
274   /***************************************************************************/
275   /*
276     Les champs
277   */
278   if (ret == 0)
279     {
280       ret = MEDchampCr(fid,champ1,MED_INT32,champ1_comp,champ1_unit,1);
281       printf("MEDchampCr : %d \n",ret);
282       if (ret == 0) {
283         ret = MEDchampEcr(fid, maa, champ1, (unsigned char *)fieldnodeint,
284                           MED_FULL_INTERLACE, nnoe,
285                           MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_NOEUD, 
286                           0, MED_NOPDT,"        ", 0., MED_NONOR);
287         
288         printf("MEDchampEcr : %d \n",ret);
289       }
290     }
291   
292   if (ret == 0)
293     {
294       ret = MEDchampCr(fid,champ2,MED_REEL64,champ2_comp,champ2_unit,1);
295       printf("MEDchampCr : %d \n",ret);
296       if (ret == 0) {
297         ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble1,
298                           MED_FULL_INTERLACE, nnoe,
299                           MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_NOEUD, 
300                           0, 1,"S       ", 1.1 , MED_NONOR);
301         printf("MEDchampEcr1 : %d \n",ret);
302         ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble2,
303                           MED_FULL_INTERLACE, nnoe,
304                           MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_NOEUD, 
305                           0, 2,"S       ", 1.2 , MED_NONOR);
306         printf("MEDchampEcr2 : %d \n",ret);
307       }
308     }
309   
310   // on met champ2 sans pas de temps pour pouvoir le lire aussi par defaut !
311   if (ret == 0)
312     {
313       ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble1,
314                         MED_FULL_INTERLACE, nnoe,
315                         MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_NOEUD, 
316                         0, MED_NOPDT,"        ", 0. , MED_NONOR);
317       printf("MEDchampEcr : %d \n",ret); 
318     }
319
320   if (ret == 0)
321     {
322       ret = MEDchampCr(fid,champ3,MED_REEL64,champ3_comp,champ3_unit,3);
323       printf("MEDchampCr : %d \n",ret);
324       if (ret == 0) {
325         ret = MEDchampEcr(fid, maa, champ3, (unsigned char *)fieldcelldouble,
326                           MED_FULL_INTERLACE, nhexa8,
327                           MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_MAILLE, 
328                           MED_HEXA8, MED_NOPDT,"        ", 0., MED_NONOR);
329         printf("MEDchampEcr : %d \n",ret);
330       }
331     }
332
333   /***************************************************************************/
334
335   ret = MEDfermer(fid);
336   printf("%d\n",ret);
337   
338   return 0;
339 }
340