Salome HOME
update from the MedMemory V1.0.1
[modules/med.git] / src / MEDMEM / create_mesh_c2q4.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";
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] = {-1,-1,0,0};
52
53   char nomfam[MED_TAILLE_NOM+1];
54   med_int numfam;
55   char attdes[MED_TAILLE_DESC+1];
56   med_int natt;
57   med_int attide;
58   med_int attval;
59   med_int ngro;
60   char gro[MED_TAILLE_LNOM+1];
61   int i;
62   int nfame = 1; 
63   int nfamn = 1;
64
65   /*
66     Some fields : 2 on nodes : one int and one double , one on cells : double
67    */
68   char champ1[MED_TAILLE_NOM+1]="fieldnodeint" ;
69   char champ1_comp[MED_TAILLE_PNOM+1]="comp1   " ;
70   char champ1_unit[MED_TAILLE_PNOM+1]="M       " ;
71   med_int     fieldnodeint[9]    = {1,1,3,2,2,3,4,4,5};
72
73   char champ2[MED_TAILLE_NOM+1]="fieldnodedouble" ;
74   char champ2_comp[MED_TAILLE_PNOM+1]="comp1   " ;
75   char champ2_unit[MED_TAILLE_PNOM+1]="J       " ;
76   med_float   fieldnodedouble1[9] = {1.,3.,4.,1.,3.,4.,3.,2.,5.};
77   med_float   fieldnodedouble2[9] = {1.,2.,2.,3.,3.,3.,4.,4.,5.};
78
79   char champ3[MED_TAILLE_NOM+1]="fieldcelldouble" ;
80   char champ3_comp[MED_TAILLE_PNOM*2+1]="comp1   comp2   " ;
81   char champ3_unit[MED_TAILLE_PNOM*2+1]="M/S     m/s     " ;
82   med_float   fieldcelldouble[4*2] = {0.,1.,1.,1.,1.,2.,2.,3.};
83
84   /***************************************************************************/
85   fid = MEDouvrir("carre_en_quad4.med",MED_REMP);
86   if (fid < 0)
87     ret = -1;
88   else
89     ret = 0;
90   printf("%d\n",ret);
91
92   /***************************************************************************/
93   if (ret == 0)
94     ret = MEDmaaCr(fid,maa,mdim);
95   printf("%d\n",ret);
96   if (ret == 0)
97     ret = MEDunvCr(fid,maa);
98   printf("%d\n",ret);
99
100   /***************************************************************************/
101   if (ret == 0)
102     ret = MEDnoeudsEcr(fid,maa,mdim,coo,MED_FULL_INTERLACE,MED_CART,
103                        nomcoo,unicoo,nomnoe,MED_FAUX,numnoe,MED_VRAI,
104                        nufano,nnoe,MED_ECRI);
105   printf("%d\n",ret);
106
107   /* ecriture des mailles MED_QUAD4 :
108      - connectivite
109      - noms (optionnel) 
110      - numeros (optionnel)
111      - numeros des familles */
112   if (ret == 0) 
113     ret = MEDelementsEcr(fid,maa,mdim,quad4,MED_FULL_INTERLACE,
114                          nomquad4,MED_FAUX,numquad4,MED_VRAI,nufaquad4,nquad4,
115                          MED_MAILLE,MED_QUAD4,MED_NOD,MED_ECRI);
116   printf("%d \n",ret);
117
118   /***************************************************************************/
119   /* ecriture des familles */
120   /* Conventions :
121      - toujours creer une famille de numero 0 ne comportant aucun attribut
122        ni groupe (famille de reference pour les noeuds ou les elements
123        qui ne sont rattaches a aucun groupe ni attribut)
124      - les numeros de familles de noeuds sont > 0
125      - les numeros de familles des elements sont < 0
126      - rien d'imposer sur les noms de familles
127    */ 
128
129   /* la famille 0 */
130   if (ret == 0)
131     {
132       strcpy(nomfam,"FAMILLE_0");
133       numfam = 0;
134       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,0,
135                      gro,0);
136     }
137   printf("%d \n",ret);
138
139   /* on cree :
140       - 1 familles d'elements de dimension (d)
141         en fait de face (-10)
142   */
143
144   if (ret == 0)
145     {
146       numfam = -1;
147       strcpy(nomfam,"FAMILLE_CELL_");
148       sprintf(nomfam,"%s%d",nomfam,-numfam);
149       attide = 1;
150       attval = numfam*100;
151       natt = 1;
152       strcpy(attdes,"description attribut");
153       strcpy(gro,"groupe0");
154       ngro = 1;
155
156       ret = MEDfamCr(fid,maa,nomfam,numfam,&attide,&attval,attdes,
157                      natt,gro,ngro);
158       printf("MEDfamCr : %d\n",ret);
159     }
160   /***************************************************************************/
161   /*
162     Les champs
163   */
164   if (ret == 0)
165     {
166       ret = MEDchampCr(fid,champ1,MED_INT32,champ1_comp,champ1_unit,1);
167       printf("MEDchampCr : %d \n",ret);
168       if (ret == 0) {
169         ret = MEDchampEcr(fid, maa, champ1, (unsigned char *)fieldnodeint,
170                           MED_NO_INTERLACE, nnoe,
171                           MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_NOEUD, 
172                           0, MED_NOPDT,"        ", 0., MED_NONOR);
173         
174         printf("MEDchampEcr : %d \n",ret);
175       }
176     }
177   
178   if (ret == 0)
179     {
180       ret = MEDchampCr(fid,champ2,MED_REEL64,champ2_comp,champ2_unit,1);
181       printf("MEDchampCr : %d \n",ret);
182       if (ret == 0) {
183         ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble1,
184                           MED_NO_INTERLACE, nnoe,
185                           MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_NOEUD, 
186                           0, 1,"S       ", 1.1 , MED_NONOR);
187         printf("MEDchampEcr1 : %d \n",ret);
188         ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble2,
189                           MED_NO_INTERLACE, nnoe,
190                           MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_NOEUD, 
191                           0, 2,"S       ", 1.2 , MED_NONOR);
192         printf("MEDchampEcr2 : %d \n",ret);
193       }
194     }
195   
196   // on met champ2 sans pas de temps pour pouvoir le lire aussi par defaut !
197   if (ret == 0)
198     {
199       ret = MEDchampEcr(fid, maa, champ2, (unsigned char *)fieldnodedouble1,
200                         MED_NO_INTERLACE, nnoe,
201                         MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_NOEUD, 
202                         0, MED_NOPDT,"        ", 0. , MED_NONOR);
203       printf("MEDchampEcr : %d \n",ret); 
204     }
205
206   if (ret == 0)
207     {
208       ret = MEDchampCr(fid,champ3,MED_REEL64,champ3_comp,champ3_unit,2);
209       printf("MEDchampCr : %d \n",ret);
210       if (ret == 0) {
211         ret = MEDchampEcr(fid, maa, champ3, (unsigned char *)fieldcelldouble,
212                           MED_NO_INTERLACE, nquad4,
213                           MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_MAILLE, 
214                           MED_QUAD4, MED_NOPDT,"        ", 0., MED_NONOR);
215         printf("MEDchampEcr : %d \n",ret);
216       }
217     }
218   
219   /***************************************************************************/
220
221   ret = MEDfermer(fid);
222   printf("%d\n",ret);
223   
224   return 0;
225 }
226