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