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
23 #include "MEDMEM_Meshing.hxx"
24 #include "MEDMEM_Group.hxx"
26 using namespace MEDMEM ;
27 using namespace MED_EN ;
31 int main (int argc, char ** argv) {
33 // filename to save the generated MESH
34 string filename = "meshing.med" ;
36 MESHING* myMeshing = new MESHING;
37 myMeshing->setName("meshing") ;
41 int SpaceDimension = 3 ;
42 int NumberOfNodes = 19 ;
43 double Coordinates[57] = {
65 myMeshing->setCoordinates(SpaceDimension,NumberOfNodes,Coordinates,"CARTESIAN",MED_FULL_INTERLACE);
67 string Names[3] = { "X","Y","Z" } ;
68 myMeshing->setCoordinatesNames(Names);
70 string Units[3] = { "cm","cm","cm" } ;
71 myMeshing->setCoordinatesUnits(Units) ;
73 // define conectivities
77 const int NumberOfTypes = 3 ;
78 medGeometryElement Types[NumberOfTypes] = {MED_TETRA4,MED_PYRA5,MED_HEXA8} ;
79 const int NumberOfElements[NumberOfTypes] = {12,2,2} ;
81 myMeshing->setNumberOfTypes(NumberOfTypes,MED_CELL);
82 myMeshing->setTypes(Types,MED_CELL);
83 myMeshing->setNumberOfElements(NumberOfElements,MED_CELL);
85 const int sizeTetra = 12*4 ;
86 int ConnectivityTetra[sizeTetra]=
102 myMeshing->setConnectivity(MED_CELL,MED_TETRA4,ConnectivityTetra);
104 int ConnectivityPyra[2*5]=
110 myMeshing->setConnectivity(MED_CELL,MED_PYRA5,ConnectivityPyra);
112 int ConnectivityHexa[2*8]=
114 11,12,13,14,7,8,9,10,
115 15,16,17,18,11,12,13,14
118 myMeshing->setConnectivity(MED_CELL,MED_HEXA8,ConnectivityHexa);
122 const int NumberOfFacesTypes = 2 ;
123 medGeometryElement FacesTypes[NumberOfFacesTypes] = {MED_TRIA3,MED_QUAD4} ;
124 const int NumberOfFacesElements[NumberOfFacesTypes] = {4,4} ;
126 myMeshing->setNumberOfTypes(NumberOfFacesTypes,MED_FACE);
127 myMeshing->setTypes(FacesTypes,MED_FACE);
128 myMeshing->setNumberOfElements(NumberOfFacesElements,MED_FACE);
130 const int sizeTria = 3*4 ;
131 int ConnectivityTria[sizeTria]=
139 myMeshing->setConnectivity(MED_FACE,MED_TRIA3,ConnectivityTria);
141 int ConnectivityQua[4*4]=
149 myMeshing->setConnectivity(MED_FACE,MED_QUAD4,ConnectivityQua);
153 // not yet implemented : if set, results are unpredictable.
159 GROUP* myGroup = new GROUP;
160 myGroup->setName("SomeNodes");
161 myGroup->setMesh(myMeshing);
162 myGroup->setEntity(MED_NODE);
163 myGroup->setNumberOfGeometricType(1);
164 medGeometryElement myTypes[1] = {MED_NONE};
165 myGroup->setGeometricType(myTypes);
166 const int myNumberOfElements[1] = {4} ;
167 myGroup->setNumberOfElements(myNumberOfElements);
168 const int index[1+1] = {1,5} ;
169 const int value[4]= { 1,4,5,7} ;
170 myGroup->setNumber(index,value);
172 myMeshing->addGroup(*myGroup);
173 myGroup->removeReference();
176 GROUP* myGroup = new GROUP;
177 myGroup->setName("OtherNodes");
178 myGroup->setMesh(myMeshing);
179 myGroup->setEntity(MED_NODE);
180 myGroup->setNumberOfGeometricType(1);
181 medGeometryElement myTypes[1] = {MED_NONE};
182 myGroup->setGeometricType(myTypes);
183 const int myNumberOfElements[1] = {3} ;
184 myGroup->setNumberOfElements(myNumberOfElements);
185 const int index[1+1] = {1,4} ;
186 const int value[3]= { 2,3,6} ;
187 myGroup->setNumber(index,value);
189 myMeshing->addGroup(*myGroup);
190 myGroup->removeReference();
195 GROUP* myGroup = new GROUP;
196 myGroup->setName("SomeCells");
197 myGroup->setMesh(myMeshing);
198 myGroup->setEntity(MED_CELL);
199 myGroup->setNumberOfGeometricType(3);
200 medGeometryElement myTypes[3] = {MED_TETRA4,MED_PYRA5,MED_HEXA8};
201 myGroup->setGeometricType(myTypes);
202 const int myNumberOfElements[3] = {4,1,2} ;
203 myGroup->setNumberOfElements(myNumberOfElements);
204 const int index[3+1] = {1,5,6,8} ;
205 const int value[4+1+2]=
211 myGroup->setNumber(index,value);
213 myMeshing->addGroup(*myGroup);
214 myGroup->removeReference();
217 GROUP* myGroup = new GROUP;
218 myGroup->setName("OtherCells");
219 myGroup->setMesh(myMeshing);
220 myGroup->setEntity(MED_CELL);
221 myGroup->setNumberOfGeometricType(2);
222 medGeometryElement myTypes[] = {MED_TETRA4,MED_PYRA5};
223 myGroup->setGeometricType(myTypes);
224 const int myNumberOfElements[] = {4,1} ;
225 myGroup->setNumberOfElements(myNumberOfElements);
226 const int index[3+1] = {1,5,6} ;
227 const int value[4+1]=
232 myGroup->setNumber(index,value);
234 myMeshing->addGroup(*myGroup);
235 myGroup->removeReference();
240 GROUP* myGroup = new GROUP;
241 myGroup->setName("SomeFaces");
242 myGroup->setMesh(myMeshing);
243 myGroup->setEntity(MED_FACE);
244 myGroup->setNumberOfGeometricType(2);
245 medGeometryElement myTypes[2] = {MED_TRIA3,MED_QUAD4};
246 myGroup->setGeometricType(myTypes);
247 const int myNumberOfElements[2] = {2,3} ;
248 myGroup->setNumberOfElements(myNumberOfElements);
249 const int index[2+1] = {1,3,6} ;
250 const int value[2+3]=
255 myGroup->setNumber(index,value);
257 myMeshing->addGroup(*myGroup);
258 myGroup->removeReference();
261 GROUP* myGroup = new GROUP;
262 myGroup->setName("OtherFaces");
263 myGroup->setMesh(myMeshing);
264 myGroup->setEntity(MED_FACE);
265 myGroup->setNumberOfGeometricType(1);
266 medGeometryElement myTypes[1] = {MED_TRIA3};
267 myGroup->setGeometricType(myTypes);
268 const int myNumberOfElements[1] = {2} ;
269 myGroup->setNumberOfElements(myNumberOfElements);
270 const int index[1+1] = {1,3} ;
275 myGroup->setNumber(index,value);
277 myMeshing->addGroup(*myGroup);
278 myGroup->removeReference();
281 // all rigtht, we save it !
283 int id = myMeshing->addDriver(MED_DRIVER,filename,myMeshing->getName());
284 myMeshing->write(id) ;
285 myMeshing->removeReference();