]> SALOME platform Git repositories - modules/med.git/blob - src/MEDMEM/create_poly2D.c
Salome HOME
update after merging trhe branches CEA_V3_0_x, OCC_V3_1_0_a1_x, and the main
[modules/med.git] / src / MEDMEM / create_poly2D.c
1 /*
2   creation d'une geometrie 2d : 
3   maillé en 4 quadrangles reguliers
4             1 triangle et 1 polygone.
5
6 */
7
8 #include <med.h>
9 #include <string.h>
10
11 int main (int argc, char **argv)
12 {
13   med_err ret;
14   med_idt fid;
15   char maa[MED_TAILLE_NOM+1] = "poly2D";
16   char maadesc[MED_TAILLE_DESC+1] = "Example de maillage non structure 2D avec 1 polygone";
17   med_int mdim = 2;
18   med_int nnoe = 11;
19   /*
20     les noeuds:
21   */
22   med_float coo[22] = {
23     0.0, 0.0,
24     0.5, 0.0,
25     1.0, 0.0,
26     0.25, 0.5,
27     0.5, 0.5,
28     0.75, 0.5,
29     0.0, 1.0,
30     0.5, 1.0,
31     1.0, 1.0,
32     1.5, 0.0,
33     1.5, 1.0
34   };
35   char nomcoo[2*MED_TAILLE_PNOM+1] = "x               y               ";
36   char unicoo[2*MED_TAILLE_PNOM+1] = "cm              cm              ";
37   /*  char nomnoe[19*MED_TAILLE_PNOM+1] = "nom1    nom2    nom3    nom4";*/
38   char *nomnoe ;
39   med_int numnoe[11] = {1,2,3,4,5,6,7,8,9,10,11};
40   med_int nufano[11] = {0,0,0,0,0,0,0,0,0,0,0};
41   /*
42     les elements:
43   */
44   med_int nquad4 = 4;
45   med_int quad4[16] = {
46     4, 5, 2, 1,
47     5, 6, 3, 2,
48     7, 8, 5, 4,
49     8, 9, 6, 5
50   };
51   char nomquad4[MED_TAILLE_PNOM*4+1] = "quad1           quad2           quad3           quad4           ";
52   med_int numquad4[4] = {1,2,3,4};
53   med_int nufaquad4[4] = {-1,-1,0,0};
54
55   med_int ntria3 = 1;
56   med_int tria3[3] = {
57     7, 4, 1
58   };
59   char nomtria3[MED_TAILLE_PNOM+1] = "tria1           ";
60   med_int numtria3[1] = {1};
61   med_int nufatria3[1] = {-2};
62
63   med_int npoly = 1;
64   med_int nindexpoly = 2;
65   med_int indexpoly [2] = {
66     1,6
67   };
68   med_int poly[5] = {
69     9,11,10,3,6
70   };
71   char nompoly[MED_TAILLE_PNOM+1] = "poly            ";
72   med_int numpoly[1] = {1};
73   med_int nufapoly[1] = {-3};
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 = 2; 
85   int nfamn = 1;
86
87   /*
88     Some fields : 2 on nodes : one int and one double , one on cells : double
89    */
90   char champ1[MED_TAILLE_NOM+1]="fieldnodeint" ;
91   char champ1_comp[MED_TAILLE_PNOM+1]="comp1           " ;
92   char champ1_unit[MED_TAILLE_PNOM+1]="M               " ;
93   med_int     fieldnodeint[9]    = {1,1,3,2,2,3,4,4,5};
94
95   char champ2[MED_TAILLE_NOM+1]="fieldnodedouble" ;
96   char champ2_comp[MED_TAILLE_PNOM+1]="comp1           " ;
97   char champ2_unit[MED_TAILLE_PNOM+1]="J               " ;
98   med_float   fieldnodedouble1[9] = {1.,3.,4.,1.,3.,4.,3.,2.,5.};
99   med_float   fieldnodedouble2[9] = {1.,2.,2.,3.,3.,3.,4.,4.,5.};
100
101   char champ3[MED_TAILLE_NOM+1]="fieldcelldouble" ;
102   char champ3_comp[MED_TAILLE_PNOM*2+1]="comp1           comp2           " ;
103   char champ3_unit[MED_TAILLE_PNOM*2+1]="M/S             m/s             " ;
104   med_float   fieldcelldouble[4*2] = {0.,1.,1.,1.,1.,2.,2.,3.};
105
106   /***************************************************************************/
107   fid = MEDouvrir("poly2D.med",MED_LECTURE_ECRITURE);
108   if (fid < 0)
109     ret = -1;
110   else
111     ret = 0;
112   printf("MEDouvrir : %d\n",ret);
113
114   /***************************************************************************/
115   if (ret == 0)
116     ret = MEDmaaCr(fid,maa,mdim,MED_NON_STRUCTURE,maadesc);
117   printf("MEDmaaCr : %d\n",ret);
118   if (ret == 0)
119     ret = MEDunvCr(fid,maa);
120   printf("MEDunvCr : %d\n",ret);
121
122   /***************************************************************************/
123   if (ret == 0)
124     ret = MEDnoeudsEcr(fid,maa,mdim,coo,MED_FULL_INTERLACE,MED_CART,
125                        nomcoo,unicoo,nomnoe,MED_FAUX,numnoe,MED_VRAI,
126                        nufano,nnoe);
127   printf("MEDnoeudsEcr : %d\n",ret);
128
129   /* ecriture des mailles MED_QUAD4 :
130      - connectivite
131      - noms (optionnel) 
132      - numeros (optionnel)
133      - numeros des familles */
134   if (ret == 0) 
135     ret = MEDelementsEcr(fid,maa,mdim,quad4,MED_FULL_INTERLACE,
136                          nomquad4,MED_FAUX,numquad4,MED_VRAI,nufaquad4,nquad4,
137                          MED_MAILLE,MED_QUAD4,MED_NOD);
138   printf("MEDelementsEcr for quad : %d \n",ret);
139
140   /* ecriture des mailles MED_TRIA3 :
141      - connectivite
142      - noms (optionnel) 
143      - numeros (optionnel)
144      - numeros des familles */
145   if (ret == 0) 
146     ret = MEDelementsEcr(fid,maa,mdim,tria3,MED_FULL_INTERLACE,
147                          nomtria3,MED_FAUX,numtria3,MED_VRAI,nufatria3,ntria3,
148                          MED_MAILLE,MED_TRIA3,MED_NOD);
149   printf("MEDelementsEcr for tria : %d \n",ret);
150
151   /* ecriture des mailles MED_POLYGONE:
152      - connectivite
153      - noms (optionnel) 
154      - numeros (optionnel)
155      - numeros des familles
156      Dans ce cas il n existe pas de routine globale (Warning !!)
157    */
158
159   if (ret == 0)
160     ret = MEDpolygoneConnEcr(fid,maa,indexpoly,nindexpoly,poly,
161                              MED_MAILLE,MED_NOD);
162   printf("MEDpolygoneConnEcr: %d \n",ret);
163
164   if (ret == 0)
165     MEDnomEcr(fid,maa,nompoly,npoly,MED_MAILLE,MED_POLYGONE);
166   printf("MEDnomEcr for poly : %d \n",ret);
167
168   if (ret == 0)
169     MEDnumEcr(fid,maa,numpoly,npoly,MED_MAILLE,MED_POLYGONE);
170   printf("MEDnumEcr for poly : %d \n",ret);
171
172   if (ret == 0)
173     MEDfamEcr(fid,maa,nufapoly,npoly,MED_MAILLE,MED_POLYGONE);
174   printf("MEDfamEcr for poly : %d \n",ret);
175
176
177   /***************************************************************************/
178   /* ecriture des familles */
179   /* Conventions :
180      - toujours creer une famille de numero 0 ne comportant aucun attribut
181        ni groupe (famille de reference pour les noeuds ou les elements
182        qui ne sont rattaches a aucun groupe ni attribut)
183      - les numeros de familles de noeuds sont > 0
184      - les numeros de familles des elements sont < 0
185      - rien d'imposer sur les noms de familles
186    */ 
187
188   /* la famille 0 */
189   if (ret == 0)
190     {
191       strcpy(nomfam,"FAMILLE_0");
192       numfam = 0;
193       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,0,
194                      gro,0);
195     }
196   printf("MEDfamCr : %d \n",ret);
197
198   /* on cree :
199       - 2 familles d'elements de dimension (d)
200         en fait de face (-10)
201   */
202   if (ret == 0)
203     {
204       numfam = -1;
205       strcpy(nomfam,"FAMILLE_CELL_");
206       sprintf(nomfam,"%s%d",nomfam,-numfam);
207       attide = 1;
208       attval = numfam*100;
209       natt = 1;
210       strcpy(attdes,"description attribut");
211       strcpy(gro,"groupe0");
212       ngro = 1;
213
214       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
215                      natt,gro,ngro);
216       printf("MEDfamCr : %d\n",ret);
217
218       numfam = -2;
219       strcpy(nomfam,"FAMILLE_CELL_");
220       sprintf(nomfam,"%s%d",nomfam,-numfam);
221       attide = 1;
222       attval = numfam*100;
223       natt = 1;
224       strcpy(attdes,"description attribut");
225       strcpy(gro,"groupe0");
226       ngro = 1;
227
228       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
229                      natt,gro,ngro);
230       printf("MEDfamCr : %d\n",ret);
231
232       numfam = -3;
233       strcpy(nomfam,"FAMILLE_CELL_");
234       sprintf(nomfam,"%s%d",nomfam,-numfam);
235       attide = 1;
236       attval = numfam*100;
237       natt = 1;
238       strcpy(attdes,"description attribut");
239       strcpy(gro,"groupe0");
240       ngro = 1;
241
242       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
243                      natt,gro,ngro);
244       printf("MEDfamCr : %d\n",ret);
245     }
246
247   /***************************************************************************/
248   /*
249     Les champs
250   */
251   if (ret == 0)
252     {
253       ret = MEDchampCr(fid,champ1,MED_INT32,champ1_comp,champ1_unit,1);
254       printf("MEDchampCr : %d \n",ret);
255       if (ret == 0) {
256         ret = MEDchampEcr(fid, maa, champ1, (unsigned char *)fieldnodeint,
257                           MED_NO_INTERLACE, nnoe, MED_NOGAUSS, MED_ALL,
258                           MED_NOPFL, MED_NO_PFLMOD, MED_NOEUD, 0,
259                           MED_NOPDT,"        ", 0., MED_NONOR);
260         
261         printf("MEDchampEcr : %d \n",ret);
262       }
263     }
264   
265   if (ret == 0)
266     {
267       ret = MEDchampCr(fid,champ2,MED_FLOAT64,champ2_comp,champ2_unit,1);
268       printf("MEDchampCr : %d \n",ret);
269       if (ret == 0) {
270         ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble1,
271                           MED_NO_INTERLACE, nnoe, MED_NOGAUSS, MED_ALL,
272                           MED_NOPFL, MED_NO_PFLMOD, MED_NOEUD, 0,
273                           1,"S       ", 1.1 , MED_NONOR);
274         printf("MEDchampEcr1 : %d \n",ret);
275         ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble2,
276                           MED_NO_INTERLACE, nnoe, MED_NOGAUSS, MED_ALL,
277                           MED_NOPFL, MED_NO_PFLMOD, MED_NOEUD, 0,
278                           2,"S       ", 1.2 , MED_NONOR);
279         printf("MEDchampEcr2 : %d \n",ret);
280       }
281     }
282   
283   // on met champ2 sans pas de temps pour pouvoir le lire aussi par defaut !
284   if (ret == 0)
285     {
286       ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble1,
287                         MED_NO_INTERLACE, nnoe, MED_NOGAUSS, MED_ALL,
288                         MED_NOPFL, MED_NO_PFLMOD, MED_NOEUD, 0,
289                         MED_NOPDT,"        ", 0. , MED_NONOR);
290       printf("MEDchampEcr : %d \n",ret); 
291     }
292
293   if (ret == 0)
294     {
295       ret = MEDchampCr(fid,champ3,MED_FLOAT64,champ3_comp,champ3_unit,2);
296       printf("MEDchampCr : %d \n",ret);
297       if (ret == 0) {
298         ret = MEDchampEcr(fid, maa, champ3, (unsigned char *)fieldcelldouble,
299                           MED_NO_INTERLACE, nquad4, MED_NOGAUSS, MED_ALL,
300                           MED_NOPFL, MED_NO_PFLMOD, MED_MAILLE, MED_QUAD4,
301                           MED_NOPDT,"        ", 0., MED_NONOR);
302         printf("MEDchampEcr : %d \n",ret);
303       }
304     }
305
306   /***************************************************************************/
307
308   ret = MEDfermer(fid);
309   printf("MEDfermer : %d\n",ret);
310   
311   return 0;
312 }
313