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