Salome HOME
remove a reference to the $MED_ROOT_DIR in the Makefile.in wich is useless
[modules/med.git] / src / MEDMEM / create_poly3D.c
1 /*
2   creation d'une geometrie 3d : 
3   maillĂ© en :
4   - 2 polyedres
5     ayant pour faces 3 polygones
6                      9 quadrangles
7                      6 triangles
8   - 1 tetra4
9
10 */
11
12 #include <med.h>
13 #include <string.h>
14
15 int main (int argc, char **argv)
16 {
17   med_err ret;
18   med_idt fid;
19   char maa[MED_TAILLE_NOM+1] = "poly3D";
20   char maadesc[MED_TAILLE_DESC+1] = "Example de maillage non structure 3D avec 2 polyedres+1tetra4 comme mailles et 3 polygones comme faces";
21   med_int mdim = 3;
22   med_int nnoe = 19;
23   /*
24     les noeuds:
25   */
26   med_float coo[57] = {
27     2.0, 3.0, 2.0,
28     3.0, 2.0, 2.0,
29     4.0, 1.0, 2.0,
30     2.0, 0.0, 2.0,
31     0.0, 1.0, 2.0,
32     1.0, 2.0, 2.0,
33     2.0, 3.0, 1.0,
34     3.0, 2.0, 0.0,
35     4.0, 1.0, 0.0,
36     2.0, 0.0, 0.0,
37     0.0, 1.0, 0.0,
38     1.0, 2.0, 0.0,
39     5.0, 3.0, 2.0,
40     7.0, 2.0, 2.0,
41     6.0, 0.0, 2.0,
42     6.0, 3.0, 0.0,
43     7.0, 2.0, 0.0,
44     6.0, 0.0, -1.0,
45     5.0, 1.0, -3.0 
46   };
47   char nomcoo[3*MED_TAILLE_PNOM+1] = "x               y               z               ";
48   char unicoo[3*MED_TAILLE_PNOM+1] = "cm              cm              cm              ";
49   /*  char nomnoe[18*MED_TAILLE_PNOM+1] = "nom1    nom2    nom3    nom4";*/
50   char *nomnoe ;
51   med_int numnoe[19] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
52   med_int nufano[19] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
53   /*
54     les elements:
55   */
56   /* Faces QUAD4 */
57   med_int nquad4 = 8;
58   med_int quad4[32] = {
59     1, 7, 8, 2,
60     2, 8, 9, 3,
61     4, 3, 9, 10,
62     5, 4, 10, 11,
63     6, 5, 11, 12,
64     1, 6, 12, 7,
65     14, 13, 16, 17,
66     8, 9, 17, 16
67   };
68   char nomquad4[MED_TAILLE_PNOM*8+1] = "quad1           quad2           quad3           quad4           quad5           quad6           quad7           quad8           ";
69   med_int numquad4[9] = {2,3,4,5,6,7,12,17};
70   med_int nufaquad4[9] = {-1,-1,-1,-1,-1,-1,-1,-1};
71
72   /* Faces TRIA3 */
73   med_int ntria3 = 6;
74   med_int tria3[18] = {
75     7, 12, 8,
76     15, 14, 17,
77     15, 17, 18,
78     15, 18, 9,
79     3, 15, 9,
80     18, 17, 9
81   };
82   char nomtria3[MED_TAILLE_PNOM*6+1] = "tria1           tria2           tria3           tria4           tria5           tria6           ";
83   med_int numtria3[6] = {8,13,14,15,16,18};
84   med_int nufatria3[6] = {-2,-2,-2,-2,-2,-2};
85
86   /* Faces POLYGONE */
87   med_int npolygon = 3;
88   med_int nindexpolygon = 4;
89   med_int indexpolygon [4] = {
90     1, 7, 12, 17
91   };
92   med_int polygon[16] = {
93     1, 2, 3, 4, 5, 6,
94     10, 9, 8, 12, 11,
95     13, 14, 15, 3, 2
96   };
97   char nompolygon[MED_TAILLE_PNOM*3+1] = "polygon1        polygon2        polygon3        ";
98   med_int numpolygon[3] = {1,9,10};
99   med_int nufapolygon[3] = {-3,-3,-3};
100
101   /* Mailles POLYEDRE */
102   med_int npolyhedron = 2;
103   med_int npolyhedronfaces = 19;
104   med_int npolyhedronnodes = 74;
105   med_int polyhedronconnectivity[74] = {1,2,3,4,5,6,1,7,8,2,2,8,9,3,4,3,9,10,5,4,10,11,6,5,11,12,1,6,12,7,7,12,8,10,9,8,12,11,
106                                         13,14,15,3,2,13,2,8,16,14,13,16,17,15,14,17,15,17,18,15,18,9,3,15,9,2,3,9,8,8,9,17,16,9,18,17};
107   med_int polyhedronfacesindex[20] = {1,7,11,15,19,23,27,31,34,
108                                       39,44,48,52,55,58,61,64,68,72,75};
109   med_int polyhedronindex[3] = {1,10,20};
110   char nompolyhedron[MED_TAILLE_PNOM*2+1] = "polyhedron1     polyhedron2     ";
111   med_int numpolyhedron[2] = {2,3};
112   med_int nufapolyhedron[2] = {-4,-4};
113
114   /* Mailles TETRA4 */
115   med_int ntetra4 = 1;
116   med_int tetra4[4] = {
117     17, 9, 18, 19
118   };
119   char nomtetra4[MED_TAILLE_PNOM*1+1] = "tetra1          ";
120   med_int numtetra4[1] = {1};
121   med_int nufatetra4[1] = {-5};
122
123
124   char nomfam[MED_TAILLE_NOM+1];
125   med_int numfam;
126   char attdes[MED_TAILLE_DESC+1];
127   med_int natt;
128   med_int attide;
129   med_int attval;
130   med_int ngro;
131   char gro[MED_TAILLE_LNOM+1];
132   int i;
133   int nfame = 2;
134   int nfamn = 1;
135
136   /*
137     Some fields : 2 on nodes : one int and one double , one on cells : double
138    */
139   char champ1[MED_TAILLE_NOM+1]="fieldnodeint" ;
140   char champ1_comp[MED_TAILLE_PNOM+1]="comp1           " ;
141   char champ1_unit[MED_TAILLE_PNOM+1]="M               " ;
142   med_int     fieldnodeint[19]    = {1,1,3,2,2,3,4,4,5,6,6,7,8,8,9,9,9,10,5};
143
144   char champ2[MED_TAILLE_NOM+1]="fieldnodedouble" ;
145   char champ2_comp[MED_TAILLE_PNOM+1]="comp1           " ;
146   char champ2_unit[MED_TAILLE_PNOM+1]="J               " ;
147   med_float   fieldnodedouble1[19] = {1.,3.,4.,1.,3.,4.,3.,2.,5.,6.,4.,3.,1.,5.,6.,4.,3.,7.,3.};
148   med_float   fieldnodedouble2[19] = {1.,2.,2.,3.,3.,3.,4.,4.,5.,2.,8.,9.,6.,7.,1.,2.,5.,8.,4.};
149
150   char champ3[MED_TAILLE_NOM+1]="fieldfacedouble" ;
151   char champ3_comp[MED_TAILLE_PNOM*2+1]="comp1           comp2           " ;
152   char champ3_unit[MED_TAILLE_PNOM*2+1]="M/S             m/s             " ;
153   med_float   fieldfacedouble[6*2] = {0.,1.,1.,1.,1.,2.,2.,3.,3.,4.,4.,6.};
154
155   /***************************************************************************/
156   fid = MEDouvrir("poly3D.med",MED_LECTURE_ECRITURE);
157   if (fid < 0)
158     ret = -1;
159   else
160     ret = 0;
161   printf("MEDouvrir : %d\n",ret);
162
163   /***************************************************************************/
164   if (ret == 0)
165     ret = MEDmaaCr(fid,maa,mdim,MED_NON_STRUCTURE,maadesc);
166   printf("MEDmaaCr : %d\n",ret);
167   if (ret == 0)
168     ret = MEDunvCr(fid,maa);
169   printf("MEDunvCr : %d\n",ret);
170
171   /***************************************************************************/
172   if (ret == 0)
173     ret = MEDnoeudsEcr(fid,maa,mdim,coo,MED_FULL_INTERLACE,MED_CART,
174                        nomcoo,unicoo,nomnoe,MED_FAUX,numnoe,MED_VRAI,
175                        nufano,nnoe);
176   printf("MEDnoeudsEcr : %d\n",ret);
177
178   /* ecriture des faces MED_QUAD4 :
179      - connectivite
180      - noms (optionnel) 
181      - numeros (optionnel)
182      - numeros des familles */
183   if (ret == 0) 
184     ret = MEDelementsEcr(fid,maa,mdim,quad4,MED_FULL_INTERLACE,
185                          nomquad4,MED_FAUX,numquad4,MED_VRAI,nufaquad4,nquad4,
186                          MED_MAILLE,MED_QUAD4,MED_NOD);
187   printf("MEDelementsEcr for quad : %d \n",ret);
188
189   /* ecriture des faces MED_TRIA3 :
190      - connectivite
191      - noms (optionnel) 
192      - numeros (optionnel)
193      - numeros des familles */
194   if (ret == 0) 
195     ret = MEDelementsEcr(fid,maa,mdim,tria3,MED_FULL_INTERLACE,
196                          nomtria3,MED_FAUX,numtria3,MED_VRAI,nufatria3,ntria3,
197                          MED_MAILLE,MED_TRIA3,MED_NOD);
198   printf("MEDelementsEcr for tria : %d \n",ret);
199
200   /* ecriture des faces MED_POLYGONE :
201      - connectivite
202      - noms (optionnel) 
203      - numeros (optionnel)
204      - numeros des familles
205      Dans ce cas il n existe pas de routine globale (Warning !!) */
206   if (ret == 0)
207     ret = MEDpolygoneConnEcr(fid,maa,indexpolygon,nindexpolygon,polygon,
208                              MED_MAILLE,MED_NOD);
209   printf("MEDpolygoneConnEcr: %d \n",ret);
210
211   if (ret == 0)
212     MEDnomEcr(fid,maa,nompolygon,npolygon,MED_MAILLE,MED_POLYGONE);
213   printf("MEDnomEcr for polygon : %d \n",ret);
214
215   if (ret == 0)
216     MEDnumEcr(fid,maa,numpolygon,npolygon,MED_MAILLE,MED_POLYGONE);
217   printf("MEDnumEcr for polygon : %d \n",ret);
218
219   if (ret == 0)
220     MEDfamEcr(fid,maa,nufapolygon,npolygon,MED_MAILLE,MED_POLYGONE);
221   printf("MEDfamEcr for polygon : %d \n",ret);
222
223   /* ecriture des mailles MED_POLYEDRE :
224      - connectivite
225      - noms (optionnel) 
226      - numeros (optionnel)
227      - numeros des familles
228      Dans ce cas il n existe pas de routine globale (Warning !!) */
229   if (ret == 0)
230     ret = MEDpolyedreConnEcr(fid,maa,polyhedronindex,npolyhedron+1,polyhedronfacesindex,npolyhedronfaces+1,polyhedronconnectivity,MED_NOD);
231   printf("MEDpolyedreConnEcr: %d \n",ret);
232
233   if (ret == 0)
234     ret = MEDnomEcr(fid,maa,nompolyhedron,npolyhedron,MED_MAILLE,MED_POLYEDRE);
235   printf("MEDnomEcr for polyhedron : %d \n",ret);
236
237   if (ret == 0)
238     ret = MEDnumEcr(fid,maa,numpolyhedron,npolyhedron,MED_MAILLE,MED_POLYEDRE);
239   printf("MEDnumEcr for polyhedron : %d \n",ret);
240
241   if (ret == 0)
242     ret = MEDfamEcr(fid,maa,nufapolyhedron,npolyhedron,MED_MAILLE,MED_POLYEDRE);
243   printf("MEDfamEcr for polyhedron : %d \n",ret);
244
245   /* ecriture des mailles TETRA4 :
246      - connectivite
247      - noms (optionnel) 
248      - numeros (optionnel)
249      - numeros des familles */
250   if (ret == 0)
251     ret = MEDelementsEcr(fid,maa,mdim,tetra4,MED_FULL_INTERLACE,
252                          nomtetra4,MED_FAUX,numtetra4,MED_VRAI,nufatetra4,ntetra4,
253                          MED_MAILLE,MED_TETRA4,MED_NOD);
254   printf("MEDelementsEcr for tetra : %d \n",ret);
255
256   /***************************************************************************/
257   /* ecriture des familles */
258   /* Conventions :
259      - toujours creer une famille de numero 0 ne comportant aucun attribut
260        ni groupe (famille de reference pour les noeuds ou les elements
261        qui ne sont rattaches a aucun groupe ni attribut)
262      - les numeros de familles de noeuds sont > 0
263      - les numeros de familles des elements sont < 0
264      - rien d'imposer sur les noms de familles
265    */ 
266
267   /* la famille 0 */
268   if (ret == 0)
269     {
270       strcpy(nomfam,"FAMILLE_0");
271       numfam = 0;
272       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,0,
273                      gro,0);
274     }
275   printf("MEDfamCr : %d \n",ret);
276
277   /* on cree :
278       - 2 familles d'elements de dimension (d)
279         en fait de face (-10)
280   */
281   /*
282   if (ret == 0)
283     {
284       numfam = -1;
285       strcpy(nomfam,"FAMILLE_FACE_QUAD4");
286       sprintf(nomfam,"%s%d",nomfam,-numfam);
287       attide = 1;
288       attval = numfam*100;
289       natt = 1;
290       strcpy(attdes,"description attribut");
291       strcpy(gro,"groupe0");
292       ngro = 1;
293
294       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
295                      natt,gro,ngro);
296       printf("MEDfamCr : %d\n",ret);
297
298       numfam = -2;
299       strcpy(nomfam,"FAMILLE_FACE_TRIA3");
300       sprintf(nomfam,"%s%d",nomfam,-numfam);
301       attide = 1;
302       attval = numfam*100;
303       natt = 1;
304       strcpy(attdes,"description attribut");
305       strcpy(gro,"groupe0");
306       ngro = 1;
307
308       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
309                      natt,gro,ngro);
310       printf("MEDfamCr : %d\n",ret);
311
312       numfam = -3;
313       strcpy(nomfam,"FAMILLE_FACE_POLYGONS");
314       sprintf(nomfam,"%s%d",nomfam,-numfam);
315       attide = 1;
316       attval = numfam*100;
317       natt = 1;
318       strcpy(attdes,"description attribut");
319       strcpy(gro,"groupe0");
320       ngro = 1;
321
322       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
323                      natt,gro,ngro);
324       printf("MEDfamCr : %d\n",ret);
325
326       numfam = -4;
327       strcpy(nomfam,"FAMILLE_MAILLE_POLYHEDRON");
328       sprintf(nomfam,"%s%d",nomfam,-numfam);
329       attide = 1;
330       attval = numfam*100;
331       natt = 1;
332       strcpy(attdes,"description attribut");
333       strcpy(gro,"groupe0");
334       ngro = 1;
335
336       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
337                      natt,gro,ngro);
338       printf("MEDfamCr : %d\n",ret);
339
340       numfam = -5;
341       strcpy(nomfam,"FAMILLE_MAILLE_TETRA4");
342       sprintf(nomfam,"%s%d",nomfam,-numfam);
343       attide = 1;
344       attval = numfam*100;
345       natt = 1;
346       strcpy(attdes,"description attribut");
347       strcpy(gro,"groupe0");
348       ngro = 1;
349
350       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
351                      natt,gro,ngro);
352       printf("MEDfamCr : %d\n",ret);
353     }
354   */
355   /***************************************************************************/
356   /*
357     Les champs
358   */
359   if (ret == 0)
360     {
361       ret = MEDchampCr(fid,champ1,MED_INT32,champ1_comp,champ1_unit,1);
362       printf("MEDchampCr : %d \n",ret);
363       if (ret == 0) {
364         ret = MEDchampEcr(fid, maa, champ1, (unsigned char *)fieldnodeint,
365                           MED_NO_INTERLACE, nnoe, MED_NOGAUSS, MED_ALL,
366                           MED_NOPFL, MED_NO_PFLMOD, MED_NOEUD, 0,
367                           MED_NOPDT,"        ", 0., MED_NONOR);
368         
369         printf("MEDchampEcr : %d \n",ret);
370       }
371     }
372   
373   if (ret == 0)
374     {
375       ret = MEDchampCr(fid,champ2,MED_FLOAT64,champ2_comp,champ2_unit,1);
376       printf("MEDchampCr : %d \n",ret);
377       if (ret == 0) {
378         ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble1,
379                           MED_NO_INTERLACE, nnoe, MED_NOGAUSS, MED_ALL,
380                           MED_NOPFL, MED_NO_PFLMOD, MED_NOEUD, 0,
381                           1,"S       ", 1.1 , MED_NONOR);
382         printf("MEDchampEcr1 : %d \n",ret);
383         ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble2,
384                           MED_NO_INTERLACE, nnoe, MED_NOGAUSS, MED_ALL,
385                           MED_NOPFL, MED_NO_PFLMOD, MED_NOEUD, 0,
386                           2,"S       ", 1.2 , MED_NONOR);
387         printf("MEDchampEcr2 : %d \n",ret);
388       }
389     }
390   
391   // on met champ2 sans pas de temps pour pouvoir le lire aussi par defaut !
392   if (ret == 0)
393     {
394       ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble1,
395                         MED_NO_INTERLACE, nnoe, MED_NOGAUSS, MED_ALL,
396                         MED_NOPFL, MED_NO_PFLMOD, MED_NOEUD, 0,
397                         MED_NOPDT,"        ", 0. , MED_NONOR);
398       printf("MEDchampEcr : %d \n",ret); 
399     }
400
401   if (ret == 0)
402     {
403       ret = MEDchampCr(fid,champ3,MED_FLOAT64,champ3_comp,champ3_unit,2);
404       printf("MEDchampCr : %d \n",ret);
405       if (ret == 0) {
406         ret = MEDchampEcr(fid, maa, champ3, (unsigned char *)fieldfacedouble,
407                           MED_NO_INTERLACE, ntria3, MED_NOGAUSS, MED_ALL,
408                           MED_NOPFL, MED_NO_PFLMOD, MED_FACE, MED_TRIA3,
409                           MED_NOPDT,"        ", 0., MED_NONOR);
410         printf("MEDchampEcr : %d \n",ret);
411       }
412     }
413   /***************************************************************************/
414
415   ret = MEDfermer(fid);
416   printf("MEDfermer : %d\n",ret);
417   
418   return 0;
419 }
420