Salome HOME
1153597da38d69153e9de0ca838165ea25124f11
[modules/med.git] / src / MEDMEM / create_mesh_c3h8.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";
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   char nomfam[MED_TAILLE_NOM+1];
76   med_int numfam;
77   char attdes[MED_TAILLE_DESC+1];
78   med_int natt;
79   med_int attide;
80   med_int attval;
81   med_int ngro;
82   char gro[MED_TAILLE_LNOM+1];
83   int i;
84   int nfame = 1; 
85   int nfamn = 1;
86   int nfamf = 1;
87
88   /*
89     Some fields : 2 on nodes : one int and one double , one on cells : double
90   */
91
92   char champ1[MED_TAILLE_NOM+1]="fieldnodeint" ;
93   char champ1_comp[MED_TAILLE_PNOM+1]="comp1   " ;
94   char champ1_unit[MED_TAILLE_PNOM+1]="M       " ;
95   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};
96
97   char champ2[MED_TAILLE_NOM+1]="fieldnodedouble" ;
98   char champ2_comp[MED_TAILLE_PNOM+1]="comp1   " ;
99   char champ2_unit[MED_TAILLE_PNOM+1]="J       " ;
100   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.};
101   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.};
102
103   char champ3[MED_TAILLE_NOM+1]="fieldcelldouble" ;
104   char champ3_comp[MED_TAILLE_PNOM*3+1]="comp1   comp2   comp3   " ;
105   char champ3_unit[MED_TAILLE_PNOM*3+1]="M/S     m/s     m/s     " ;
106   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.};
107
108   /***************************************************************************/
109   fid = MEDouvrir("cube_hexa8.med",MED_REMP);
110   if (fid < 0)
111     ret = -1;
112   else
113     ret = 0;
114   printf("%d\n",ret);
115
116   /***************************************************************************/
117   if (ret == 0)
118     ret = MEDmaaCr(fid,maa,mdim);
119   printf("%d\n",ret);
120   if (ret == 0)
121     ret = MEDunvCr(fid,maa);
122   printf("%d\n",ret);
123
124   /***************************************************************************/
125   if (ret == 0)
126     ret = MEDnoeudsEcr(fid,maa,mdim,coo,MED_FULL_INTERLACE,MED_CART,
127                        nomcoo,unicoo,nomnoe,MED_FAUX,numnoe,MED_VRAI,
128                        nufano,nnoe,MED_ECRI);
129   printf("%d\n",ret);
130
131   /* ecriture des mailles MED_HEXA8 :
132      - connectivite
133      - noms (optionnel) 
134      - numeros (optionnel)
135      - numeros des familles */
136   if (ret == 0) 
137     ret = MEDelementsEcr(fid,maa,mdim,hexa8,MED_FULL_INTERLACE,
138                          nomhexa8,MED_FAUX,numhexa8,MED_VRAI,nufahexa8,nhexa8,
139                          MED_MAILLE,MED_HEXA8,MED_NOD,MED_ECRI);
140   printf("%d \n",ret);
141
142   /***************************************************************************/
143   /* ecriture des familles */
144   /* Conventions :
145      - toujours creer une famille de numero 0 ne comportant aucun attribut
146        ni groupe (famille de reference pour les noeuds ou les elements
147        qui ne sont rattaches a aucun groupe ni attribut)
148      - les numeros de familles de noeuds sont > 0
149      - les numeros de familles des elements sont < 0
150      - rien d'imposer sur les noms de familles
151    */ 
152
153   /* la famille 0 */
154   if (ret == 0)
155     {
156       strcpy(nomfam,"FAMILLE_0");
157       numfam = 0;
158       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,0,
159                      gro,0);
160     }
161   printf("%d \n",ret);
162
163   /* on cree :
164       - 2 familles d'elements (-1,-2) et 
165       - 3 familles de noeuds (1,2,3) 
166   */
167
168   if (ret == 0)
169     {
170       nfame = 2;
171       for (i=0;i<nfame;i++)
172         {
173           if (ret == 0)
174             {
175               strcpy(nomfam,"FAMILLE_ELEMENT_");
176               numfam = -(i+1);
177               sprintf(nomfam,"%s%d",nomfam,-numfam);
178               attide = 1;
179               attval = numfam*100;
180               natt = 1;
181               strcpy(attdes,"description attribut");
182               strcpy(gro,"groupe1");
183               ngro = 1;
184
185               /*printf("nomfam : %s - numfam : %d - attide : %d - attval : %d - ngro : %d \n",nomfam,numfam,attide,attval,ngro);*/
186
187               ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
188                              natt,gro,ngro);
189               printf("MEDfamCr : %d\n",ret);
190             }
191         }
192     }
193   
194   if (ret == 0)
195     {
196       nfamn = 3;
197       for (i=0;i<nfamn;i++)
198         {
199           if(ret == 0)
200             {
201               strcpy(nomfam,"FAMILLE_NOEUD_");
202               numfam = i+1;
203               sprintf(nomfam,"%s%d",nomfam,numfam);
204               attide = 1;
205               attval = numfam*100;
206               natt = 1;
207               strcpy(attdes,"description attribut");
208               strcpy(gro,"groupe2");
209               ngro = 1;
210               ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
211                              natt,gro,ngro);
212               printf("MEDfamCr : %d\n",ret);
213             }
214         }
215     }
216
217   /***************************************************************************/
218   /*
219     Les champs
220   */
221   if (ret == 0)
222     {
223       ret = MEDchampCr(fid,champ1,MED_INT32,champ1_comp,champ1_unit,1);
224       printf("MEDchampCr : %d \n",ret);
225       if (ret == 0) {
226         ret = MEDchampEcr(fid, maa, champ1, (unsigned char *)fieldnodeint,
227                           MED_FULL_INTERLACE, nnoe,
228                           MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_NOEUD, 
229                           0, MED_NOPDT,"        ", 0., MED_NONOR);
230         
231         printf("MEDchampEcr : %d \n",ret);
232       }
233     }
234   
235   if (ret == 0)
236     {
237       ret = MEDchampCr(fid,champ2,MED_REEL64,champ2_comp,champ2_unit,1);
238       printf("MEDchampCr : %d \n",ret);
239       if (ret == 0) {
240         ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble1,
241                           MED_FULL_INTERLACE, nnoe,
242                           MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_NOEUD, 
243                           0, 1,"S       ", 1.1 , MED_NONOR);
244         printf("MEDchampEcr1 : %d \n",ret);
245         ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble2,
246                           MED_FULL_INTERLACE, nnoe,
247                           MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_NOEUD, 
248                           0, 2,"S       ", 1.2 , MED_NONOR);
249         printf("MEDchampEcr2 : %d \n",ret);
250       }
251     }
252   
253   // on met champ2 sans pas de temps pour pouvoir le lire aussi par defaut !
254   if (ret == 0)
255     {
256       ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble1,
257                         MED_FULL_INTERLACE, nnoe,
258                         MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_NOEUD, 
259                         0, MED_NOPDT,"        ", 0. , MED_NONOR);
260       printf("MEDchampEcr : %d \n",ret); 
261     }
262
263   if (ret == 0)
264     {
265       ret = MEDchampCr(fid,champ3,MED_REEL64,champ3_comp,champ3_unit,3);
266       printf("MEDchampCr : %d \n",ret);
267       if (ret == 0) {
268         ret = MEDchampEcr(fid, maa, champ3, (unsigned char *)fieldcelldouble,
269                           MED_FULL_INTERLACE, nhexa8,
270                           MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_MAILLE, 
271                           MED_HEXA8, MED_NOPDT,"        ", 0., MED_NONOR);
272         printf("MEDchampEcr : %d \n",ret);
273       }
274     }
275
276   /***************************************************************************/
277
278   ret = MEDfermer(fid);
279   printf("%d\n",ret);
280   
281   return 0;
282 }
283