1 // Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
24 creation d'une geometrie 2d : un cube [0,1]^2
25 maillé uniformement en quadrangle reguliers;
26 avec en plus une partie des aretes (une partie
27 des arretes de la frontiere) du maillage.
28 ATTENTION : 3 noeuds dans chaque direction
35 int main (int argc, char **argv)
39 char maa[MED_NAME_SIZE+1] = "carre_en_quad4_seg2_wrong";
40 char maadesc[MED_COMMENT_SIZE+1] = "Example de maillage non structure 2D";
57 char nomcoo[2*MED_SNAME_SIZE+1] = "x y ";
58 char unicoo[2*MED_SNAME_SIZE+1] = "cm cm ";
59 /* char nomnoe[19*MED_TAILLE_PNOM+1] = "nom1 nom2 nom3 nom4";*/
61 // med_int numnoe[9] = {1,2,3,4,5,6,7,8,9};
62 med_int nufano[9] = {0,0,0,0,0,0,0,0,0};
73 // char nomquad4[MED_TAILLE_PNOM*4+1] = "quad1 quad2 quad3 quad4 ";
74 // med_int numquad4[4] = {1,2,3,4};
75 med_int nufaquad4[4] = {-10,-10,0,0};
78 Les Faces qui dans ce cas (2D) sont des arretes
80 a face is wrongly oriented, it is just to test the applidation
94 // char nomseg2[MED_TAILLE_PNOM*6+1] = "seg1 seg2 seg3 seg4 seg5 seg6 ";
95 // med_int numseg2[6] = {1,2,3,4,5,6};
96 med_int nufaseg2[6] = {-1,-2,-1,-1,-2,-2};
98 char nomfam[MED_NAME_SIZE+1];
100 //char attdesMED_TAILLE_DESC+1];
105 char gro[MED_LNAME_SIZE+1];
106 char dtunitp3[MED_LNAME_SIZE+1]="";
109 Some fields : 2 on nodes : one int and one double , one on cells : double
111 char champ1[MED_NAME_SIZE+1]="fieldnodeint" ;
112 char champ1_comp[MED_SNAME_SIZE+1]="comp1 " ;
113 char champ1_unit[MED_SNAME_SIZE+1]="M " ;
114 med_int fieldnodeint[9] = {1,1,3,2,2,3,4,4,5};
116 char champ2[MED_NAME_SIZE+1]="fieldnodedouble" ;
117 char champ2_comp[MED_SNAME_SIZE+1]="comp1 " ;
118 char champ2_unit[MED_SNAME_SIZE+1]="J " ;
119 med_float fieldnodedouble1[9] = {1.,3.,4.,1.,3.,4.,3.,2.,5.};
120 med_float fieldnodedouble2[9] = {1.,2.,2.,3.,3.,3.,4.,4.,5.};
122 char champ3[MED_NAME_SIZE+1]="fieldcelldouble" ;
123 char champ3_comp[MED_SNAME_SIZE*2+1]="comp1 comp2 " ;
124 char champ3_unit[MED_SNAME_SIZE*2+1]="M/S m/s " ;
125 med_float fieldcelldouble[4*2] = {0.,1.,1.,1.,1.,2.,2.,3.};
127 /***************************************************************************/
128 fid = MEDfileOpen("carre_en_quad4_seg2_wrong.med",MED_ACC_RDWR);
133 printf("MEDouvrir : %d\n",ret);
135 /***************************************************************************/
137 ret = MEDmeshCr(fid,maa,mdim,mdim,MED_UNSTRUCTURED_MESH,maadesc,dtunitp3,
138 MED_SORT_DTIT,MED_CARTESIAN,nomcoo,unicoo);
139 printf("MEDmaaCr : %d\n",ret);
141 ret = MEDunvCr(fid,maa);
142 printf("MEDunvCr : %d\n",ret);
144 /***************************************************************************/
146 ret = MEDmeshNodeCoordinateWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_NO_DT,MED_FULL_INTERLACE,nnoe,coo);
147 MEDmeshEntityFamilyNumberWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_NODE,0,nnoe,nufano);
148 printf("MEDnoeudsEcr : %d\n",ret);
150 /* ecriture des mailles MED_QUAD4 :
153 - numeros (optionnel)
154 - numeros des familles */
156 ret = MEDmeshElementConnectivityWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_NO_DT,
157 MED_CELL,MED_QUAD4,MED_NODAL,MED_FULL_INTERLACE,
159 MEDmeshEntityFamilyNumberWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_CELL,MED_QUAD4,nquad4,nufaquad4);
160 printf("MEDelementsEcr : %d \n",ret);
162 /* ecriture des mailles MED_SEG2 :
165 - numeros (optionnel)
166 - numeros des familles */
168 ret = MEDmeshElementConnectivityWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_NO_DT,
169 MED_CELL,MED_SEG2,MED_NODAL,MED_FULL_INTERLACE,
171 MEDmeshEntityFamilyNumberWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_CELL,MED_SEG2,nseg2,nufaseg2);
172 printf("MEDelementsEcr : %d \n",ret);
174 /***************************************************************************/
175 /* ecriture des familles */
177 - toujours creer une famille de numero 0 ne comportant aucun attribut
178 ni groupe (famille de reference pour les noeuds ou les elements
179 qui ne sont rattaches a aucun groupe ni attribut)
180 - les numeros de familles de noeuds sont > 0
181 - les numeros de familles des elements sont < 0
182 - rien d'imposer sur les noms de familles
188 strcpy(nomfam,"FAMILLE_0");
190 ret = MEDfamilyCr(fid,maa,nomfam,numfam,0,gro);
195 - 1 familles d'elements de dimension (d-1)
197 - 1 familles d'elements de dimension (d-1)
199 - 1 familles d'elements de dimension (d)
200 en fait de face (-10)
206 strcpy(nomfam,"FAMILLE_EDGE_");
207 sprintf(nomfam,"%s%d",nomfam,-numfam);
211 //strcpy(attdes,"description attribut");
212 strcpy(gro,"groupe1");
215 ret = MEDfamilyCr(fid,maa,nomfam,numfam,ngro,gro);
216 printf("MEDfamCr : %d\n",ret);
221 strcpy(nomfam,"FAMILLE_EDGE_");
222 sprintf(nomfam,"%s%d",nomfam,-numfam);
226 //strcpy(attdes,"description attribut");
227 strcpy(gro,"groupe1");
230 ret = MEDfamilyCr(fid,maa,nomfam,numfam,ngro,gro);
231 printf("MEDfamCr : %d\n",ret);
236 strcpy(nomfam,"FAMILLE_CELL_");
237 sprintf(nomfam,"%s%d",nomfam,-numfam);
241 //strcpy(attdes,"description attribut");
242 strcpy(gro,"groupe0");
245 ret = MEDfamilyCr(fid,maa,nomfam,numfam,ngro,gro);
246 printf("MEDfamCr : %d\n",ret);
248 /***************************************************************************/
254 ret = MEDfieldCr(fid,champ1,MED_INT32,1,champ1_comp,champ1_unit,dtunitp3,maa);
255 printf("MEDchampCr : %d \n",ret);
257 ret = MEDfieldValueWr(fid, champ1,MED_NO_DT,MED_NO_IT,0.,MED_NODE,0,MED_NO_INTERLACE,MED_ALL_CONSTITUENT,nnoe, (unsigned char *)fieldnodeint);
259 printf("MEDchampEcr : %d \n",ret);
265 ret = MEDfieldCr(fid,champ2,MED_FLOAT64,1,champ2_comp,champ2_unit,dtunitp3,maa);
266 printf("MEDchampCr : %d \n",ret);
268 ret = MEDfieldValueWr(fid, champ2,1,MED_NO_IT,1.1 ,MED_NODE,0,MED_NO_INTERLACE,MED_ALL_CONSTITUENT,nnoe, (unsigned char *)fieldnodedouble1);
269 printf("MEDchampEcr1 : %d \n",ret);
270 ret = MEDfieldValueWr(fid, champ2,2,MED_NO_IT,1.2 ,MED_NODE,0,MED_NO_INTERLACE,MED_ALL_CONSTITUENT,nnoe, (unsigned char *)fieldnodedouble2);
271 printf("MEDchampEcr2 : %d \n",ret);
275 /* on met champ2 sans pas de temps pour pouvoir le lire aussi par defaut !*/
278 ret = MEDfieldValueWr(fid, champ2,MED_NO_DT,MED_NO_IT,0. ,MED_NODE,0,MED_NO_INTERLACE,MED_ALL_CONSTITUENT,nnoe, (unsigned char *)fieldnodedouble1);
279 printf("MEDchampEcr : %d \n",ret);
284 ret = MEDfieldCr(fid,champ3,MED_FLOAT64,2,champ3_comp,champ3_unit,dtunitp3,maa);
285 printf("MEDchampCr : %d \n",ret);
287 ret = MEDfieldValueWr(fid, champ3,MED_NO_DT,MED_NO_IT,0.,MED_CELL,MED_QUAD4,MED_NO_INTERLACE,MED_ALL_CONSTITUENT,nquad4, (unsigned char *)fieldcelldouble);
288 printf("MEDchampEcr : %d \n",ret);
292 /***************************************************************************/
294 ret = MEDfermer(fid);
297 if ( getenv("srcdir") )
298 /* we are in 'make check' */
299 remove( "carre_en_quad4_seg2_wrong.med" );