Salome HOME
Merge from V6_main_20120808 08Aug12
[modules/med.git] / src / MEDMEMBinTest / create_mesh_c2q4s2.c
1 // Copyright (C) 2007-2012  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 : un cube [0,1]^2
25   maillĂ© uniformement en quadrangle reguliers;
26   avec en plus une partie des aretes (une partie
27   des arretes de la frontiere) du maillage.
28   ATTENTION : 3 noeuds dans chaque direction
29 */
30
31 #include <med.h>
32 #include <string.h>
33 #include <stdlib.h>
34
35 int main (int argc, char **argv)
36 {
37   med_err ret;
38   med_idt fid;
39   char maa[MED_NAME_SIZE+1] = "carre_en_quad4_seg2";
40   char maadesc[MED_COMMENT_SIZE+1] = "Example de maillage non structure 2D";
41   med_int mdim = 2;
42   med_int nnoe = 9;
43   /*
44     les noeuds:
45   */
46   med_float coo[18] = {
47     0.0, 0.0,
48     0.5, 0.0,
49     1.0, 0.0,
50     0.0, 0.5,
51     0.5, 0.5,
52     1.0, 0.5,
53     0.0, 1.0,
54     0.5, 1.0,
55     1.0, 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 ;
60 //  med_int numnoe[9] = {1,2,3,4,5,6,7,8,9};
61   med_int nufano[9] = {0,0,0,0,0,0,0,0,0};
62   /*
63     les elements:
64   */
65   med_int nquad4 = 4;
66   med_int quad4[16] = {
67     4, 5, 2, 1,
68     5, 6, 3, 2,
69     7, 8, 5, 4,
70     8, 9, 6, 5
71   };
72  // char nomquad4[MED_TAILLE_PNOM*4+1] = "quad1           quad2           quad3           quad4           ";
73  // med_int numquad4[4] = {1,2,3,4};
74   med_int nufaquad4[4] = {-10,-10,0,0};
75
76   /*
77     Les Faces qui dans ce cas (2D) sont des arretes
78   */
79
80   med_int nseg2 = 6;
81   med_int seg2[18] = {
82     6, 3, 0,
83     8, 9, 0,
84     3, 2, 0,
85     9, 6, 0,
86     2, 5, 0,
87     5, 8, 0
88   };
89  // char nomseg2[MED_TAILLE_PNOM*6+1] = "seg1            seg2            seg3            seg4            seg5            seg6            ";
90  // med_int numseg2[6] = {1,2,3,4,5,6};
91   med_int nufaseg2[6] = {-1,-2,-1,-1,-2,-2};
92
93   char nomfam[MED_NAME_SIZE+1];
94   med_int numfam;
95   //char attdesMED_TAILLE_DESC+1];
96   med_int natt;
97   med_int attide;
98   med_int attval;
99   med_int ngro;
100   char gro[MED_LNAME_SIZE+1];
101   char dtunitp3[MED_LNAME_SIZE+1]="";
102
103   /*
104     Some fields : 2 on nodes : one int and one double , one on cells : double
105    */
106   char champ1[MED_NAME_SIZE+1]="fieldnodeint" ;
107   char champ1_comp[MED_SNAME_SIZE+1]="comp1           " ;
108   char champ1_unit[MED_SNAME_SIZE+1]="M               " ;
109   med_int     fieldnodeint[9]    = {1,1,3,2,2,3,4,4,5};
110
111   char champ2[MED_NAME_SIZE+1]="fieldnodedouble" ;
112   char champ2_comp[MED_SNAME_SIZE+1]="comp1           " ;
113   char champ2_unit[MED_SNAME_SIZE+1]="J               " ;
114   med_float   fieldnodedouble1[9] = {1.,3.,4.,1.,3.,4.,3.,2.,5.};
115   med_float   fieldnodedouble2[9] = {1.,2.,2.,3.,3.,3.,4.,4.,5.};
116
117   char champ3[MED_NAME_SIZE+1]="fieldcelldouble" ;
118   char champ3_comp[MED_SNAME_SIZE*2+1]="comp1           comp2           " ;
119   char champ3_unit[MED_SNAME_SIZE*2+1]="M/S             m/s             " ;
120   med_float   fieldcelldouble[4*2] = {0.,1.,1.,1.,1.,2.,2.,3.};
121
122   /***************************************************************************/
123   fid = MEDfileOpen("carre_en_quad4_seg2.med",MED_ACC_RDWR);
124   if (fid < 0)
125     ret = -1;
126   else
127     ret = 0;
128   printf("MEDouvrir : %d\n",ret);
129
130   /***************************************************************************/
131   if (ret == 0)
132     ret = MEDmeshCr(fid,maa,mdim,mdim,MED_UNSTRUCTURED_MESH,maadesc,dtunitp3,
133                     MED_SORT_DTIT,MED_CARTESIAN,nomcoo,unicoo);
134   printf("MEDmaaCr : %d\n",ret);
135   if (ret == 0)
136     ret = MEDunvCr(fid,maa);
137   printf("MEDunvCr : %d\n",ret);
138
139   /***************************************************************************/
140   if (ret == 0)
141     ret = MEDmeshNodeCoordinateWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_NO_DT,MED_FULL_INTERLACE,nnoe,coo);
142   MEDmeshEntityFamilyNumberWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_NODE,0,nnoe,nufano);
143   printf("MEDnoeudsEcr : %d\n",ret);
144
145   /* ecriture des mailles MED_QUAD4 :
146      - connectivite
147      - noms (optionnel) 
148      - numeros (optionnel)
149      - numeros des familles */
150   if (ret == 0) 
151     ret = MEDmeshElementConnectivityWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_NO_DT,
152                                        MED_CELL,MED_QUAD4,MED_NODAL,MED_FULL_INTERLACE,
153                                        nquad4,quad4);
154   MEDmeshEntityFamilyNumberWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_CELL,MED_QUAD4,nquad4,nufaquad4);
155   printf("MEDelementsEcr : %d \n",ret);
156
157   /* ecriture des mailles MED_SEG2 :
158      - connectivite
159      - noms (optionnel) 
160      - numeros (optionnel)
161      - numeros des familles */
162   if (ret == 0) 
163     ret = MEDmeshElementConnectivityWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_NO_DT,
164                                        MED_CELL,MED_SEG2,MED_NODAL,MED_FULL_INTERLACE,
165                                        nseg2,seg2);
166   MEDmeshEntityFamilyNumberWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_CELL,MED_SEG2,nseg2,nufaseg2);
167   printf("%d \n",ret);
168
169   /***************************************************************************/
170   /* ecriture des familles */
171   /* Conventions :
172      - toujours creer une famille de numero 0 ne comportant aucun attribut
173        ni groupe (famille de reference pour les noeuds ou les elements
174        qui ne sont rattaches a aucun groupe ni attribut)
175      - les numeros de familles de noeuds sont > 0
176      - les numeros de familles des elements sont < 0
177      - rien d'imposer sur les noms de familles
178    */ 
179
180   /* la famille 0 */
181   if (ret == 0)
182     {
183       strcpy(nomfam,"FAMILLE_0");
184       numfam = 0;
185       ret = MEDfamilyCr(fid,maa,nomfam,numfam,0,gro);
186     }
187   printf("%d \n",ret);
188
189   /* on cree :
190       - 1 familles d'elements de dimension (d-1)
191         en fait de edge (-1)
192       - 1 familles d'elements de dimension (d-1)
193         en fait de edge (-2)
194       - 1 familles d'elements de dimension (d)
195         en fait de face (-10)
196   */
197
198   if (ret == 0)
199     {
200       numfam = -1;
201       strcpy(nomfam,"FAMILLE_EDGE_");
202       sprintf(nomfam,"%s%d",nomfam,-numfam);
203       attide = 1;
204       attval = numfam*100;
205       natt = 1;
206       //strcpy(attdes,"description attribut");
207       strcpy(gro,"groupe1");
208       ngro = 1;
209
210       ret = MEDfamilyCr(fid,maa,nomfam,numfam,ngro,gro);
211       printf("MEDfamCr : %d\n",ret);
212     }
213   if (ret == 0)
214     {
215       numfam = -2;
216       strcpy(nomfam,"FAMILLE_EDGE_");
217       sprintf(nomfam,"%s%d",nomfam,-numfam);
218       attide = 1;
219       attval = numfam*100;
220       natt = 1;
221       //strcpy(attdes,"description attribut");
222       strcpy(gro,"groupe1");
223       ngro = 1;
224
225       ret = MEDfamilyCr(fid,maa,nomfam,numfam,ngro,gro);
226       printf("MEDfamCr : %d\n",ret);
227     }
228   if (ret == 0)
229     {
230       numfam = -10;
231       strcpy(nomfam,"FAMILLE_CELL_");
232       sprintf(nomfam,"%s%d",nomfam,-numfam);
233       attide = 1;
234       attval = numfam*100;
235       natt = 1;
236       //strcpy(attdes,"description attribut");
237       strcpy(gro,"groupe0");
238       ngro = 1;
239
240       ret = MEDfamilyCr(fid,maa,nomfam,numfam,ngro,gro);
241       printf("MEDfamCr : %d\n",ret);
242     }
243   /***************************************************************************/
244   /*
245     Les champs
246   */
247   if (ret == 0)
248     {
249       ret = MEDfieldCr(fid,champ1,MED_INT32,1,champ1_comp,champ1_unit,dtunitp3,maa);
250       printf("MEDchampCr : %d \n",ret);
251       if (ret == 0) {
252         ret = MEDfieldValueWr(fid, champ1,MED_NO_DT,MED_NO_IT,0.,MED_NODE,0,MED_NO_INTERLACE,MED_ALL_CONSTITUENT,nnoe, (unsigned char *)fieldnodeint);
253         
254         printf("MEDchampEcr : %d \n",ret);
255       }
256     }
257   
258   if (ret == 0)
259     {
260       ret = MEDfieldCr(fid,champ2,MED_FLOAT64,1,champ2_comp,champ2_unit,dtunitp3,maa);
261       printf("MEDchampCr : %d \n",ret);
262       if (ret == 0) {
263         ret = MEDfieldValueWr(fid, champ2,1,MED_NO_IT,1.1 ,MED_NODE,0,MED_NO_INTERLACE,MED_ALL_CONSTITUENT,nnoe, (unsigned char *)fieldnodedouble1);
264         printf("MEDchampEcr1 : %d \n",ret);
265         ret = MEDfieldValueWr(fid, champ2,2,MED_NO_IT,1.2 ,MED_NODE,0,MED_NO_INTERLACE,MED_ALL_CONSTITUENT,nnoe, (unsigned char *)fieldnodedouble2);
266         printf("MEDchampEcr2 : %d \n",ret);
267       }
268     }
269   
270   /* on met champ2 sans pas de temps pour pouvoir le lire aussi par defaut !*/
271   if (ret == 0)
272     {
273       ret = MEDfieldValueWr(fid, champ2,MED_NO_DT,MED_NO_IT,0. ,MED_NODE,0,MED_NO_INTERLACE,MED_ALL_CONSTITUENT,nnoe, (unsigned char *)fieldnodedouble1);
274       printf("MEDchampEcr : %d \n",ret); 
275     }
276
277   if (ret == 0)
278     {
279       ret = MEDfieldCr(fid,champ3,MED_FLOAT64,2,champ3_comp,champ3_unit,dtunitp3,maa);
280       printf("MEDchampCr : %d \n",ret);
281       if (ret == 0) {
282         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);
283         printf("MEDchampEcr : %d \n",ret);
284       }
285     }
286   
287   /***************************************************************************/
288
289   ret = MEDfermer(fid);
290   printf("%d\n",ret);
291   
292   if ( getenv("srcdir") ) 
293     /* we are in 'make check' */
294     remove( "carre_en_quad4_seg2.med" );
295
296   return 0;
297 }