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