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