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