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