Salome HOME
Final version V2_0_1 which works with Med File V2.1 and the KERNEL
[modules/med.git] / src / MEDMEM / create_mesh_c2q4s2.c
1 /*
2   creation d'une geometrie 2d : un cube [0,1]^2
3   maillĂ© uniformement en quadrangle reguliers;
4   avec en plus une partie des aretes (une partie
5   des arretes 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] = "carre_en_quad4_seg2";
17   med_int mdim = 2;
18   med_int nnoe = 9;
19   /*
20     les noeuds:
21   */
22   med_float coo[18] = {
23     0.0, 0.0,
24     0.5, 0.0,
25     1.0, 0.0,
26     0.0, 0.5,
27     0.5, 0.5,
28     1.0, 0.5,
29     0.0, 1.0,
30     0.5, 1.0,
31     1.0, 1.0
32   };
33   char nomcoo[2*MED_TAILLE_PNOM+1] = "x       y       ";
34   char unicoo[2*MED_TAILLE_PNOM+1] = "cm      cm      ";
35   /*  char nomnoe[19*MED_TAILLE_PNOM+1] = "nom1    nom2    nom3    nom4";*/
36   char *nomnoe ;
37   med_int numnoe[9] = {1,2,3,4,5,6,7,8,9};
38   med_int nufano[9] = {0,0,0,0,0,0,0,0,0};
39   /*
40     les elements:
41   */
42   med_int nquad4 = 4;
43   med_int quad4[16] = {
44     4, 5, 2, 1,
45     5, 6, 3, 2,
46     7, 8, 5, 4,
47     8, 9, 6, 5
48   };
49   char nomquad4[MED_TAILLE_PNOM*4+1] = "quad1   quad2   quad3   quad4   ";
50   med_int numquad4[4] = {1,2,3,4};
51   med_int nufaquad4[4] = {-10,-10,0,0};
52
53   /*
54     Les Faces qui dans ce cas (2D) sont des arretes
55   */
56
57   med_int nseg2 = 6;
58   med_int seg2[18] = {
59     6, 3, 0,
60     8, 9, 0,
61     3, 2, 0,
62     9, 6, 0,
63     2, 5, 0,
64     5, 8, 0
65   };
66   char nomseg2[MED_TAILLE_PNOM*6+1] = "seg1    seg2    seg3    seg4    seg5    seg6    ";
67   med_int numseg2[6] = {1,2,3,4,5,6};
68   med_int nufaseg2[6] = {-1,-2,-1,-1,-2,-2};
69
70   char nomfam[MED_TAILLE_NOM+1];
71   med_int numfam;
72   char attdes[MED_TAILLE_DESC+1];
73   med_int natt;
74   med_int attide;
75   med_int attval;
76   med_int ngro;
77   char gro[MED_TAILLE_LNOM+1];
78   int i;
79   int nfame = 1; 
80   int nfamn = 1;
81
82   /*
83     Some fields : 2 on nodes : one int and one double , one on cells : double
84    */
85   char champ1[MED_TAILLE_NOM+1]="fieldnodeint" ;
86   char champ1_comp[MED_TAILLE_PNOM+1]="comp1   " ;
87   char champ1_unit[MED_TAILLE_PNOM+1]="M       " ;
88   med_int     fieldnodeint[9]    = {1,1,3,2,2,3,4,4,5};
89
90   char champ2[MED_TAILLE_NOM+1]="fieldnodedouble" ;
91   char champ2_comp[MED_TAILLE_PNOM+1]="comp1   " ;
92   char champ2_unit[MED_TAILLE_PNOM+1]="J       " ;
93   med_float   fieldnodedouble1[9] = {1.,3.,4.,1.,3.,4.,3.,2.,5.};
94   med_float   fieldnodedouble2[9] = {1.,2.,2.,3.,3.,3.,4.,4.,5.};
95
96   char champ3[MED_TAILLE_NOM+1]="fieldcelldouble" ;
97   char champ3_comp[MED_TAILLE_PNOM*2+1]="comp1   comp2   " ;
98   char champ3_unit[MED_TAILLE_PNOM*2+1]="M/S     m/s     " ;
99   med_float   fieldcelldouble[4*2] = {0.,1.,1.,1.,1.,2.,2.,3.};
100
101   /***************************************************************************/
102   fid = MEDouvrir("carre_en_quad4_seg2.med",MED_REMP);
103   if (fid < 0)
104     ret = -1;
105   else
106     ret = 0;
107   printf("%d\n",ret);
108
109   /***************************************************************************/
110   if (ret == 0)
111     ret = MEDmaaCr(fid,maa,mdim);
112   printf("%d\n",ret);
113   if (ret == 0)
114     ret = MEDunvCr(fid,maa);
115   printf("%d\n",ret);
116
117   /***************************************************************************/
118   if (ret == 0)
119     ret = MEDnoeudsEcr(fid,maa,mdim,coo,MED_FULL_INTERLACE,MED_CART,
120                        nomcoo,unicoo,nomnoe,MED_FAUX,numnoe,MED_VRAI,
121                        nufano,nnoe,MED_ECRI);
122   printf("%d\n",ret);
123
124   /* ecriture des mailles MED_QUAD4 :
125      - connectivite
126      - noms (optionnel) 
127      - numeros (optionnel)
128      - numeros des familles */
129   if (ret == 0) 
130     ret = MEDelementsEcr(fid,maa,mdim,quad4,MED_FULL_INTERLACE,
131                          nomquad4,MED_FAUX,numquad4,MED_VRAI,nufaquad4,nquad4,
132                          MED_MAILLE,MED_QUAD4,MED_NOD,MED_ECRI);
133   printf("%d \n",ret);
134
135   /* ecriture des mailles MED_SEG2 :
136      - connectivite
137      - noms (optionnel) 
138      - numeros (optionnel)
139      - numeros des familles */
140   if (ret == 0) 
141     ret = MEDelementsEcr(fid,maa,mdim,seg2,MED_FULL_INTERLACE,
142                          nomseg2,MED_FAUX,numseg2,MED_VRAI,nufaseg2,nseg2,
143                          MED_MAILLE,MED_SEG2,MED_NOD,MED_ECRI);
144   printf("%d \n",ret);
145
146   /***************************************************************************/
147   /* ecriture des familles */
148   /* Conventions :
149      - toujours creer une famille de numero 0 ne comportant aucun attribut
150        ni groupe (famille de reference pour les noeuds ou les elements
151        qui ne sont rattaches a aucun groupe ni attribut)
152      - les numeros de familles de noeuds sont > 0
153      - les numeros de familles des elements sont < 0
154      - rien d'imposer sur les noms de familles
155    */ 
156
157   /* la famille 0 */
158   if (ret == 0)
159     {
160       strcpy(nomfam,"FAMILLE_0");
161       numfam = 0;
162       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,0,
163                      gro,0);
164     }
165   printf("%d \n",ret);
166
167   /* on cree :
168       - 1 familles d'elements de dimension (d-1)
169         en fait de edge (-1)
170       - 1 familles d'elements de dimension (d-1)
171         en fait de edge (-2)
172       - 1 familles d'elements de dimension (d)
173         en fait de face (-10)
174   */
175
176   if (ret == 0)
177     {
178       numfam = -1;
179       strcpy(nomfam,"FAMILLE_EDGE_");
180       sprintf(nomfam,"%s%d",nomfam,-numfam);
181       attide = 1;
182       attval = numfam*100;
183       natt = 1;
184       strcpy(attdes,"description attribut");
185       strcpy(gro,"groupe1");
186       ngro = 1;
187
188       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
189                      natt,gro,ngro);
190       printf("MEDfamCr : %d\n",ret);
191     }
192   if (ret == 0)
193     {
194       numfam = -2;
195       strcpy(nomfam,"FAMILLE_EDGE_");
196       sprintf(nomfam,"%s%d",nomfam,-numfam);
197       attide = 1;
198       attval = numfam*100;
199       natt = 1;
200       strcpy(attdes,"description attribut");
201       strcpy(gro,"groupe1");
202       ngro = 1;
203
204       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
205                      natt,gro,ngro);
206       printf("MEDfamCr : %d\n",ret);
207     }
208   if (ret == 0)
209     {
210       numfam = -10;
211       strcpy(nomfam,"FAMILLE_CELL_");
212       sprintf(nomfam,"%s%d",nomfam,-numfam);
213       attide = 1;
214       attval = numfam*100;
215       natt = 1;
216       strcpy(attdes,"description attribut");
217       strcpy(gro,"groupe0");
218       ngro = 1;
219
220       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
221                      natt,gro,ngro);
222       printf("MEDfamCr : %d\n",ret);
223     }
224   /***************************************************************************/
225   /*
226     Les champs
227   */
228   if (ret == 0)
229     {
230       ret = MEDchampCr(fid,champ1,MED_INT32,champ1_comp,champ1_unit,1);
231       printf("MEDchampCr : %d \n",ret);
232       if (ret == 0) {
233         ret = MEDchampEcr(fid, maa, champ1, (unsigned char *)fieldnodeint,
234                           MED_NO_INTERLACE, nnoe,
235                           MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_NOEUD, 
236                           0, MED_NOPDT,"        ", 0., MED_NONOR);
237         
238         printf("MEDchampEcr : %d \n",ret);
239       }
240     }
241   
242   if (ret == 0)
243     {
244       ret = MEDchampCr(fid,champ2,MED_REEL64,champ2_comp,champ2_unit,1);
245       printf("MEDchampCr : %d \n",ret);
246       if (ret == 0) {
247         ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble1,
248                           MED_NO_INTERLACE, nnoe,
249                           MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_NOEUD, 
250                           0, 1,"S       ", 1.1 , MED_NONOR);
251         printf("MEDchampEcr1 : %d \n",ret);
252         ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble2,
253                           MED_NO_INTERLACE, nnoe,
254                           MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_NOEUD, 
255                           0, 2,"S       ", 1.2 , MED_NONOR);
256         printf("MEDchampEcr2 : %d \n",ret);
257       }
258     }
259   
260   /* on met champ2 sans pas de temps pour pouvoir le lire aussi par defaut !*/
261   if (ret == 0)
262     {
263       ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble1,
264                         MED_NO_INTERLACE, nnoe,
265                         MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_NOEUD, 
266                         0, MED_NOPDT,"        ", 0. , MED_NONOR);
267       printf("MEDchampEcr : %d \n",ret); 
268     }
269
270   if (ret == 0)
271     {
272       ret = MEDchampCr(fid,champ3,MED_REEL64,champ3_comp,champ3_unit,2);
273       printf("MEDchampCr : %d \n",ret);
274       if (ret == 0) {
275         ret = MEDchampEcr(fid, maa, champ3, (unsigned char *)fieldcelldouble,
276                           MED_NO_INTERLACE, nquad4,
277                           MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_MAILLE, 
278                           MED_QUAD4, MED_NOPDT,"        ", 0., MED_NONOR);
279         printf("MEDchampEcr : %d \n",ret);
280       }
281     }
282   
283   /***************************************************************************/
284
285   ret = MEDfermer(fid);
286   printf("%d\n",ret);
287   
288   return 0;
289 }
290