Salome HOME
MEDMEM suppression
[modules/med.git] / src / MEDMEMBinTest / create_poly2D.c
1 // Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22
23 /*
24   creation d'une geometrie 2d : 
25   maillĂ© en 4 quadrangles reguliers
26             1 triangle et 1 polygone.
27
28 */
29
30 #include <med.h>
31 #include <string.h>
32
33 int main (int argc, char **argv)
34 {
35   med_err ret;
36   med_idt fid;
37   char maa[MED_NAME_SIZE+1] = "poly2D";
38   char maadesc[MED_COMMENT_SIZE+1] = "Example de maillage non structure 2D avec 1 polygone";
39   med_int mdim = 2;
40   med_int nnoe = 11;
41   /*
42     les noeuds:
43   */
44   med_float coo[22] = {
45     0.0, 0.0,
46     0.5, 0.0,
47     1.0, 0.0,
48     0.25, 0.5,
49     0.5, 0.5,
50     0.75, 0.5,
51     0.0, 1.0,
52     0.5, 1.0,
53     1.0, 1.0,
54     1.5, 0.0,
55     1.5, 1.0
56   };
57   char nomcoo[2*MED_SNAME_SIZE+1] = "x               y               ";
58   char unicoo[2*MED_SNAME_SIZE+1] = "cm              cm              ";
59   /*  char nomnoe[19*MED_TAILLE_PNOM+1] = "nom1    nom2    nom3    nom4";*/
60   //char *nomnoe ;
61 //  med_int numnoe[11] = {1,2,3,4,5,6,7,8,9,10,11};
62   med_int nufano[11] = {0,0,0,0,0,0,0,0,0,0,0};
63   /*
64     les elements:
65   */
66   med_int nquad4 = 4;
67   med_int quad4[16] = {
68     4, 5, 2, 1,
69     5, 6, 3, 2,
70     7, 8, 5, 4,
71     8, 9, 6, 5
72   };
73  // char nomquad4[MED_TAILLE_PNOM*4+1] = "quad1           quad2           quad3           quad4           ";
74  // med_int numquad4[4] = {1,2,3,4};
75   med_int nufaquad4[4] = {-1,-1,0,0};
76
77   med_int ntria3 = 1;
78   med_int tria3[3] = {
79     7, 4, 1
80   };
81  // char nomtria3[MED_TAILLE_PNOM+1] = "tria1           ";
82  // med_int numtria3[1] = {1};
83   med_int nufatria3[1] = {-2};
84
85   med_int npoly = 1;
86   med_int nindexpoly = 2;
87   med_int indexpoly [2] = {
88     1,6
89   };
90   med_int poly[5] = {
91     9,11,10,3,6
92   };
93   char nompoly[MED_TAILLE_PNOM+1] = "poly            ";
94 //  med_int numpoly[1] = {1};
95   med_int nufapoly[1] = {-3};
96
97   char nomfam[MED_NAME_SIZE+1];
98   med_int numfam;
99   //char attdesMED_TAILLE_DESC+1];
100   med_int natt;
101   med_int attide;
102   med_int attval;
103   med_int ngro;
104   char gro[MED_LNAME_SIZE+1];
105   char dtunitp3[MED_LNAME_SIZE+1]="";
106   int i;
107   int nfame = 2; 
108   int nfamn = 1;
109
110   /*
111     Some fields : 2 on nodes : one int and one double , one on cells : double
112    */
113   char champ1[MED_NAME_SIZE+1]="fieldnodeint" ;
114   char champ1_comp[MED_SNAME_SIZE+1]="comp1           " ;
115   char champ1_unit[MED_SNAME_SIZE+1]="M               " ;
116   med_int     fieldnodeint[9]    = {1,1,3,2,2,3,4,4,5};
117
118   char champ2[MED_NAME_SIZE+1]="fieldnodedouble" ;
119   char champ2_comp[MED_SNAME_SIZE+1]="comp1           " ;
120   char champ2_unit[MED_SNAME_SIZE+1]="J               " ;
121   med_float   fieldnodedouble1[9] = {1.,3.,4.,1.,3.,4.,3.,2.,5.};
122   med_float   fieldnodedouble2[9] = {1.,2.,2.,3.,3.,3.,4.,4.,5.};
123
124   char champ3[MED_NAME_SIZE+1]="fieldcelldouble" ;
125   char champ3_comp[MED_SNAME_SIZE*2+1]="comp1           comp2           " ;
126   char champ3_unit[MED_SNAME_SIZE*2+1]="M/S             m/s             " ;
127   med_float   fieldcelldouble[4*2] = {0.,1.,1.,1.,1.,2.,2.,3.};
128
129   /***************************************************************************/
130   fid = MEDfileOpen("poly2D.med",MED_ACC_RDWR);
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 = MEDmeshCr(fid,maa,mdim,mdim,MED_UNSTRUCTURED_MESH,maadesc,dtunitp3,
140                     MED_SORT_DTIT,MED_CARTESIAN,nomcoo,unicoo);
141   printf("MEDmaaCr : %d\n",ret);
142   if (ret == 0)
143     ret = MEDunvCr(fid,maa);
144   printf("MEDunvCr : %d\n",ret);
145
146   /***************************************************************************/
147   if (ret == 0)
148     ret = MEDmeshNodeCoordinateWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_NO_DT,MED_FULL_INTERLACE,nnoe,coo);
149   MEDmeshEntityFamilyNumberWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_NODE,0,nnoe,nufano);
150   printf("MEDnoeudsEcr : %d\n",ret);
151
152   /* ecriture des mailles MED_QUAD4 :
153      - connectivite
154      - noms (optionnel) 
155      - numeros (optionnel)
156      - numeros des familles */
157   if (ret == 0) 
158     ret = MEDmeshElementConnectivityWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_NO_DT,
159                                        MED_CELL,MED_QUAD4,MED_NODAL,MED_FULL_INTERLACE,
160                                        nquad4,quad4);
161   MEDmeshEntityFamilyNumberWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_CELL,MED_QUAD4,nquad4,nufaquad4);
162   printf("MEDelementsEcr for quad : %d \n",ret);
163
164   /* ecriture des mailles MED_TRIA3 :
165      - connectivite
166      - noms (optionnel) 
167      - numeros (optionnel)
168      - numeros des familles */
169   if (ret == 0) 
170     ret = MEDmeshElementConnectivityWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_NO_DT,
171                                        MED_CELL,MED_TRIA3,MED_NODAL,MED_FULL_INTERLACE,
172                                        ntria3,tria3);
173   MEDmeshEntityFamilyNumberWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_CELL,MED_TRIA3,ntria3,nufatria3);
174   printf("MEDelementsEcr for tria : %d \n",ret);
175
176   /* ecriture des mailles MED_POLYGONE:
177      - connectivite
178      - noms (optionnel) 
179      - numeros (optionnel)
180      - numeros des familles
181      Dans ce cas il n existe pas de routine globale (Warning !!)
182    */
183
184   if (ret == 0)
185     ret = MEDpolygoneConnEcr(fid,maa,indexpoly,nindexpoly,poly,
186                              MED_CELL,MED_NOD);
187   printf("MEDpolygoneConnEcr: %d \n",ret);
188
189   if (ret == 0)
190     MEDnomEcr(fid,maa,nompoly,npoly,MED_CELL,MED_POLYGONE);
191   printf("MEDnomEcr for poly : %d \n",ret);
192
193   if (ret == 0)
194     MEDnumEcr(fid,maa,numpoly,npoly,MED_CELL,MED_POLYGONE);
195   printf("MEDnumEcr for poly : %d \n",ret);
196
197   if (ret == 0)
198     MEDmeshEntityFamilyNumberWr(fid,maa,MED_NO_DT,MED_NO_IT, MED_CELL,MED_POLYGONE, npoly,nufapoly);
199   printf("MEDfamEcr for poly : %d \n",ret);
200
201
202   /***************************************************************************/
203   /* ecriture des familles */
204   /* Conventions :
205      - toujours creer une famille de numero 0 ne comportant aucun attribut
206        ni groupe (famille de reference pour les noeuds ou les elements
207        qui ne sont rattaches a aucun groupe ni attribut)
208      - les numeros de familles de noeuds sont > 0
209      - les numeros de familles des elements sont < 0
210      - rien d'imposer sur les noms de familles
211    */ 
212
213   /* la famille 0 */
214   if (ret == 0)
215     {
216       strcpy(nomfam,"FAMILLE_0");
217       numfam = 0;
218       ret = MEDfamilyCr(fid,maa,nomfam,numfam,0,gro);
219     }
220   printf("MEDfamCr : %d \n",ret);
221
222   /* on cree :
223       - 2 familles d'elements de dimension (d)
224         en fait de face (-10)
225   */
226   if (ret == 0)
227     {
228       numfam = -1;
229       strcpy(nomfam,"FAMILLE_CELL_");
230       sprintf(nomfam,"%s%d",nomfam,-numfam);
231       attide = 1;
232       attval = numfam*100;
233       natt = 1;
234       //strcpy(attdes,"description attribut");
235       strcpy(gro,"groupe0");
236       ngro = 1;
237
238       ret = MEDfamilyCr(fid,maa,nomfam,numfam,ngro,gro);
239       printf("MEDfamCr : %d\n",ret);
240
241       numfam = -2;
242       strcpy(nomfam,"FAMILLE_CELL_");
243       sprintf(nomfam,"%s%d",nomfam,-numfam);
244       attide = 1;
245       attval = numfam*100;
246       natt = 1;
247       //strcpy(attdes,"description attribut");
248       strcpy(gro,"groupe0");
249       ngro = 1;
250
251       ret = MEDfamilyCr(fid,maa,nomfam,numfam,ngro,gro);
252       printf("MEDfamCr : %d\n",ret);
253
254       numfam = -3;
255       strcpy(nomfam,"FAMILLE_CELL_");
256       sprintf(nomfam,"%s%d",nomfam,-numfam);
257       attide = 1;
258       attval = numfam*100;
259       natt = 1;
260       //strcpy(attdes,"description attribut");
261       strcpy(gro,"groupe0");
262       ngro = 1;
263
264       ret = MEDfamilyCr(fid,maa,nomfam,numfam,ngro,gro);
265       printf("MEDfamCr : %d\n",ret);
266     }
267
268   /***************************************************************************/
269   /*
270     Les champs
271   */
272   if (ret == 0)
273     {
274       ret = MEDfieldCr(fid,champ1,MED_INT32,1,champ1_comp,champ1_unit,dtunitp3,maa);
275       printf("MEDchampCr : %d \n",ret);
276       if (ret == 0) {
277         ret = MEDfieldValueWr(fid, champ1,MED_NO_DT,MED_NO_IT,0.,MED_NODE,0,MED_NO_INTERLACE,MED_ALL_CONSTITUENT,nnoe, (unsigned char *)fieldnodeint);
278         
279         printf("MEDchampEcr : %d \n",ret);
280       }
281     }
282   
283   if (ret == 0)
284     {
285       ret = MEDfieldCr(fid,champ2,MED_FLOAT64,1,champ2_comp,champ2_unit,dtunitp3,maa);
286       printf("MEDchampCr : %d \n",ret);
287       if (ret == 0) {
288         ret = MEDfieldValueWr(fid, champ2,1,MED_NO_IT,1.1 ,MED_NODE,0,MED_NO_INTERLACE,MED_ALL_CONSTITUENT,nnoe, (unsigned char *)fieldnodedouble1);
289         printf("MEDchampEcr1 : %d \n",ret);
290         ret = MEDfieldValueWr(fid, champ2,2,MED_NO_IT,1.2 ,MED_NODE,0,MED_NO_INTERLACE,MED_ALL_CONSTITUENT,nnoe, (unsigned char *)fieldnodedouble2);
291         printf("MEDchampEcr2 : %d \n",ret);
292       }
293     }
294   
295   // on met champ2 sans pas de temps pour pouvoir le lire aussi par defaut !
296   if (ret == 0)
297     {
298       ret = MEDfieldValueWr(fid, champ2,MED_NO_DT,MED_NO_IT,0. ,MED_NODE,0,MED_NO_INTERLACE,MED_ALL_CONSTITUENT,nnoe, (unsigned char *)fieldnodedouble1);
299       printf("MEDchampEcr : %d \n",ret); 
300     }
301
302   if (ret == 0)
303     {
304       ret = MEDfieldCr(fid,champ3,MED_FLOAT64,2,champ3_comp,champ3_unit,dtunitp3,maa);
305       printf("MEDchampCr : %d \n",ret);
306       if (ret == 0) {
307         ret = MEDfieldValueWr(fid, champ3,MED_NO_DT,MED_NO_IT,0.,MED_CELL,MED_QUAD4,MED_NO_INTERLACE,MED_ALL_CONSTITUENT,nquad4, (unsigned char *)fieldcelldouble);
308         printf("MEDchampEcr : %d \n",ret);
309       }
310     }
311
312   /***************************************************************************/
313
314   ret = MEDfermer(fid);
315   printf("MEDfermer : %d\n",ret);
316   
317   return 0;
318 }
319