1 #include "MEDMEM_Meshing.hxx"
2 #include "MEDMEM_Group.hxx"
3 #include "MEDMEM_Field.hxx"
6 #include "LocalTraceCollector.hxx"
7 #endif /* ifdef _DEBUG_*/
10 using namespace MEDMEM;
11 using namespace MED_EN;
13 int main (int argc, char ** argv) {
16 cerr << "Usage : " << argv[0]
17 << " filenameRoot" << endl;
18 cerr << " where filenameRoot is a root filename, the program will produce" << endl;
19 cerr << " 2 files filenameRoot.med and filenameRoot.vtk" << endl << endl;
24 LocalTraceCollector::instance();
25 #endif /* ifdef _DEBUG_*/
27 // filename to save the generated MESH
28 string filenameRoot = argv[1] ;
30 string filenameMed = filenameRoot+".med";
31 string filenameVtk = filenameRoot+".vtk";
34 myMeshing.setName("meshing") ;
38 int SpaceDimension = 3 ;
39 int NumberOfNodes = 19 ;
40 double Coordinates[57] = {
62 myMeshing.setCoordinates(SpaceDimension,NumberOfNodes,Coordinates,"CARTESIAN",MED_FULL_INTERLACE);
64 string Names[3] = { "X","Y","Z" } ;
65 myMeshing.setCoordinatesNames(Names);
67 string Units[3] = { "cm","cm","cm" } ;
68 myMeshing.setCoordinatesUnits(Units) ;
70 // define conectivities
74 const int NumberOfTypes = 3 ;
75 medGeometryElement Types[NumberOfTypes] = {MED_TETRA4,MED_PYRA5,MED_HEXA8} ;
76 const int NumberOfElements[NumberOfTypes] = {12,2,2} ;
78 myMeshing.setNumberOfTypes(NumberOfTypes,MED_CELL);
79 myMeshing.setTypes(Types,MED_CELL);
80 myMeshing.setNumberOfElements(NumberOfElements,MED_CELL);
82 const int sizeTetra = 12*4 ;
83 int ConnectivityTetra[sizeTetra]=
99 myMeshing.setConnectivity(ConnectivityTetra,MED_CELL,MED_TETRA4);
101 int ConnectivityPyra[2*5]=
107 myMeshing.setConnectivity(ConnectivityPyra,MED_CELL,MED_PYRA5);
109 int ConnectivityHexa[2*8]=
111 11,12,13,14,7,8,9,10,
112 15,16,17,18,11,12,13,14
115 myMeshing.setConnectivity(ConnectivityHexa,MED_CELL,MED_HEXA8);
119 const int NumberOfFacesTypes = 2 ;
120 medGeometryElement FacesTypes[NumberOfFacesTypes] = {MED_TRIA3,MED_QUAD4} ;
121 const int NumberOfFacesElements[NumberOfFacesTypes] = {4,4} ;
123 myMeshing.setNumberOfTypes(NumberOfFacesTypes,MED_FACE);
124 myMeshing.setTypes(FacesTypes,MED_FACE);
125 myMeshing.setNumberOfElements(NumberOfFacesElements,MED_FACE);
127 const int sizeTria = 3*4 ;
128 int ConnectivityTria[sizeTria]=
136 myMeshing.setConnectivity(ConnectivityTria,MED_FACE,MED_TRIA3);
138 int ConnectivityQua[4*4]=
146 myMeshing.setConnectivity(ConnectivityQua,MED_FACE,MED_QUAD4);
150 // not yet implemented : if set, results are unpredictable.
157 myGroup.setName("SomeNodes");
158 myGroup.setMesh(&myMeshing);
159 myGroup.setEntity(MED_NODE);
160 myGroup.setNumberOfGeometricType(1);
161 medGeometryElement myTypes[1] = {MED_NONE};
162 myGroup.setGeometricType(myTypes);
163 const int myNumberOfElements[1] = {4} ;
164 myGroup.setNumberOfElements(myNumberOfElements);
165 const int index[1+1] = {1,5} ;
166 const int value[4]= { 1,4,5,7} ;
167 myGroup.setNumber(index,value);
169 myMeshing.addGroup(myGroup);
173 myGroup.setName("OtherNodes");
174 myGroup.setMesh(&myMeshing);
175 myGroup.setEntity(MED_NODE);
176 myGroup.setNumberOfGeometricType(1);
177 medGeometryElement myTypes[1] = {MED_NONE};
178 myGroup.setGeometricType(myTypes);
179 const int myNumberOfElements[1] = {3} ;
180 myGroup.setNumberOfElements(myNumberOfElements);
181 const int index[1+1] = {1,4} ;
182 const int value[3]= { 2,3,6} ;
183 myGroup.setNumber(index,value);
185 myMeshing.addGroup(myGroup);
191 myGroup.setName("SomeCells");
192 myGroup.setMesh(&myMeshing);
193 myGroup.setEntity(MED_CELL);
194 myGroup.setNumberOfGeometricType(3);
195 medGeometryElement myTypes[3] = {MED_TETRA4,MED_PYRA5,MED_HEXA8};
196 myGroup.setGeometricType(myTypes);
197 const int myNumberOfElements[3] = {4,1,2} ;
198 myGroup.setNumberOfElements(myNumberOfElements);
199 const int index[3+1] = {1,5,6,8} ;
200 const int value[4+1+2]=
206 myGroup.setNumber(index,value);
208 myMeshing.addGroup(myGroup);
212 myGroup.setName("OtherCells");
213 myGroup.setMesh(&myMeshing);
214 myGroup.setEntity(MED_CELL);
215 myGroup.setNumberOfGeometricType(2);
216 medGeometryElement myTypes[] = {MED_TETRA4,MED_PYRA5};
217 myGroup.setGeometricType(myTypes);
218 const int myNumberOfElements[] = {4,1} ;
219 myGroup.setNumberOfElements(myNumberOfElements);
220 const int index[2+1] = {1,5,6} ;
221 const int value[4+1]=
226 myGroup.setNumber(index,value);
228 myMeshing.addGroup(myGroup);
234 myGroup.setName("SomeFaces");
235 myGroup.setMesh(&myMeshing);
236 myGroup.setEntity(MED_FACE);
237 myGroup.setNumberOfGeometricType(2);
238 medGeometryElement myTypes[2] = {MED_TRIA3,MED_QUAD4};
239 myGroup.setGeometricType(myTypes);
240 const int myNumberOfElements[2] = {2,3} ;
241 myGroup.setNumberOfElements(myNumberOfElements);
242 const int index[2+1] = {1,3,6} ;
243 const int value[2+3]=
248 myGroup.setNumber(index,value);
250 myMeshing.addGroup(myGroup);
254 myGroup.setName("OtherFaces");
255 myGroup.setMesh(&myMeshing);
256 myGroup.setEntity(MED_FACE);
257 myGroup.setNumberOfGeometricType(1);
258 medGeometryElement myTypes[1] = {MED_TRIA3};
259 myGroup.setGeometricType(myTypes);
260 const int myNumberOfElements[1] = {2} ;
261 myGroup.setNumberOfElements(myNumberOfElements);
262 const int index[1+1] = {1,3} ;
267 myGroup.setNumber(index,value);
269 myMeshing.addGroup(myGroup);
272 // all rigtht, we save it !
274 int idMed = myMeshing.addDriver(MED_DRIVER,filenameMed,myMeshing.getName());
275 myMeshing.write(idMed) ;
277 int idVtk = myMeshing.addDriver(VTK_DRIVER,filenameVtk,myMeshing.getName());
278 myMeshing.write(idVtk) ;
280 // we build now 8 fields : 4 fields double (integer) :
281 // 2 fields on nodes (cells) :
284 SUPPORT * supportOnNodes = new SUPPORT(&myMeshing,"On_All_Nodes",MED_NODE);
285 int numberOfNodes = supportOnNodes->getNumberOfElements(MED_ALL_ELEMENTS);
287 SUPPORT * supportOnCells = new SUPPORT(&myMeshing,"On_All_Cells",MED_CELL);
288 int numberOfCells = supportOnCells->getNumberOfElements(MED_ALL_ELEMENTS);
290 FIELD<double> * fieldDoubleScalarOnNodes = new FIELD<double>(supportOnNodes,1);
291 fieldDoubleScalarOnNodes->setName("fieldScalarDoubleNode");
292 fieldDoubleScalarOnNodes->setIterationNumber(-1);
293 fieldDoubleScalarOnNodes->setOrderNumber(-1);
294 fieldDoubleScalarOnNodes->setTime(0.0);
296 fieldDoubleScalarOnNodes->setComponentName(1,"Vx");
297 fieldDoubleScalarOnNodes->setComponentDescription(1,"comp1");
298 fieldDoubleScalarOnNodes->setMEDComponentUnit(1,"unit1");
300 fieldDoubleScalarOnNodes->setValueType(MED_REEL64);
302 FIELD<double> * fieldDoubleVectorOnNodes = new FIELD<double>(supportOnNodes,SpaceDimension);
303 fieldDoubleVectorOnNodes->setName("fieldVectorDoubleNode");
304 fieldDoubleVectorOnNodes->setIterationNumber(-1);
305 fieldDoubleVectorOnNodes->setOrderNumber(-1);
306 fieldDoubleVectorOnNodes->setTime(0.0);
308 fieldDoubleVectorOnNodes->setComponentName(1,"Vx");
309 fieldDoubleVectorOnNodes->setComponentDescription(1,"comp1");
310 fieldDoubleVectorOnNodes->setMEDComponentUnit(1,"unit1");
311 fieldDoubleVectorOnNodes->setComponentName(2,"Vy");
312 fieldDoubleVectorOnNodes->setComponentDescription(2,"comp2");
313 fieldDoubleVectorOnNodes->setMEDComponentUnit(2,"unit2");
314 fieldDoubleVectorOnNodes->setComponentName(3,"Vz");
315 fieldDoubleVectorOnNodes->setComponentDescription(3,"comp3");
316 fieldDoubleVectorOnNodes->setMEDComponentUnit(3,"unit3");
318 fieldDoubleVectorOnNodes->setValueType(MED_REEL64);
320 FIELD<double> * fieldDoubleScalarOnCells = new FIELD<double>(supportOnCells,1);
321 fieldDoubleScalarOnCells->setName("fieldScalarDoubleCell");
322 fieldDoubleScalarOnCells->setIterationNumber(-1);
323 fieldDoubleScalarOnCells->setOrderNumber(-1);
324 fieldDoubleScalarOnCells->setTime(0.0);
326 fieldDoubleScalarOnCells->setComponentName(1,"Vx");
327 fieldDoubleScalarOnCells->setComponentDescription(1,"comp1");
328 fieldDoubleScalarOnCells->setMEDComponentUnit(1,"unit1");
330 fieldDoubleScalarOnCells->setValueType(MED_REEL64);
332 FIELD<double> * fieldDoubleVectorOnCells = new FIELD<double>(supportOnCells,SpaceDimension);
333 fieldDoubleVectorOnCells->setName("fieldVectorrDoubleCell");
334 fieldDoubleVectorOnCells->setIterationNumber(-1);
335 fieldDoubleVectorOnCells->setOrderNumber(-1);
336 fieldDoubleVectorOnCells->setTime(0.0);
338 fieldDoubleVectorOnCells->setComponentName(1,"Vx");
339 fieldDoubleVectorOnCells->setComponentDescription(1,"comp1");
340 fieldDoubleVectorOnCells->setMEDComponentUnit(1,"unit1");
341 fieldDoubleVectorOnCells->setComponentName(2,"Vy");
342 fieldDoubleVectorOnCells->setComponentDescription(2,"comp2");
343 fieldDoubleVectorOnCells->setMEDComponentUnit(2,"unit2");
344 fieldDoubleVectorOnCells->setComponentName(3,"Vz");
345 fieldDoubleVectorOnCells->setComponentDescription(3,"comp3");
346 fieldDoubleVectorOnCells->setMEDComponentUnit(3,"unit3");
348 fieldDoubleVectorOnCells->setValueType(MED_REEL64);
350 FIELD<int> * fieldIntScalarOnNodes = new FIELD<int>(supportOnNodes,1);
351 fieldIntScalarOnNodes->setName("fieldScalarIntNode");
352 fieldIntScalarOnNodes->setIterationNumber(-1);
353 fieldIntScalarOnNodes->setOrderNumber(-1);
354 fieldIntScalarOnNodes->setTime(0.0);
356 fieldIntScalarOnNodes->setComponentName(1,"Vx");
357 fieldIntScalarOnNodes->setComponentDescription(1,"comp1");
358 fieldIntScalarOnNodes->setMEDComponentUnit(1,"unit1");
360 fieldIntScalarOnNodes->setValueType(MED_INT32);
362 FIELD<int> * fieldIntVectorOnNodes = new FIELD<int>(supportOnNodes,SpaceDimension);
363 fieldIntVectorOnNodes->setName("fieldVectorIntNode");
364 fieldIntVectorOnNodes->setIterationNumber(-1);
365 fieldIntVectorOnNodes->setOrderNumber(-1);
366 fieldIntVectorOnNodes->setTime(0.0);
368 fieldIntVectorOnNodes->setComponentName(1,"Vx");
369 fieldIntVectorOnNodes->setComponentDescription(1,"comp1");
370 fieldIntVectorOnNodes->setMEDComponentUnit(1,"unit1");
371 fieldIntVectorOnNodes->setComponentName(2,"Vy");
372 fieldIntVectorOnNodes->setComponentDescription(2,"comp2");
373 fieldIntVectorOnNodes->setMEDComponentUnit(2,"unit2");
374 fieldIntVectorOnNodes->setComponentName(3,"Vz");
375 fieldIntVectorOnNodes->setComponentDescription(3,"comp3");
376 fieldIntVectorOnNodes->setMEDComponentUnit(3,"unit3");
378 fieldIntVectorOnNodes->setValueType(MED_INT32);
380 FIELD<int> * fieldIntScalarOnCells = new FIELD<int>(supportOnCells,1);
381 fieldIntScalarOnCells->setName("fieldScalarIntCell");
382 fieldIntScalarOnCells->setIterationNumber(-1);
383 fieldIntScalarOnCells->setOrderNumber(-1);
384 fieldIntScalarOnCells->setTime(0.0);
386 fieldIntScalarOnCells->setComponentName(1,"Vx");
387 fieldIntScalarOnCells->setComponentDescription(1,"comp1");
388 fieldIntScalarOnCells->setMEDComponentUnit(1,"unit1");
390 fieldIntScalarOnCells->setValueType(MED_INT32);
392 FIELD<int> * fieldIntVectorOnCells = new FIELD<int>(supportOnCells,SpaceDimension);
393 fieldIntVectorOnCells->setName("fieldVectorrIntCell");
394 fieldIntVectorOnCells->setIterationNumber(-1);
395 fieldIntVectorOnCells->setOrderNumber(-1);
396 fieldIntVectorOnCells->setTime(0.0);
398 fieldIntVectorOnCells->setComponentName(1,"Vx");
399 fieldIntVectorOnCells->setComponentDescription(1,"comp1");
400 fieldIntVectorOnCells->setMEDComponentUnit(1,"unit1");
401 fieldIntVectorOnCells->setComponentName(2,"Vy");
402 fieldIntVectorOnCells->setComponentDescription(2,"comp2");
403 fieldIntVectorOnCells->setMEDComponentUnit(2,"unit2");
404 fieldIntVectorOnCells->setComponentName(3,"Vz");
405 fieldIntVectorOnCells->setComponentDescription(3,"comp3");
406 fieldIntVectorOnCells->setMEDComponentUnit(3,"unit3");
408 fieldIntVectorOnCells->setValueType(MED_INT32);
410 for (int i = 0; i<numberOfNodes; i++)
412 double valueDbl1, valueDbl2, valueDbl3;
413 int valueInt1, valueInt2, valueInt3;
417 valueDbl1 = valueInt1*0.1;
418 valueDbl2 = valueInt2*0.1;
419 valueDbl3 = valueInt3*0.1;
420 fieldDoubleScalarOnNodes->setValueIJ(i+1,1,valueDbl1);
422 fieldIntScalarOnNodes->setValueIJ(i+1,1,valueInt1);
424 fieldDoubleVectorOnNodes->setValueIJ(i+1,1,valueDbl1);
425 fieldDoubleVectorOnNodes->setValueIJ(i+1,2,valueDbl2);
426 fieldDoubleVectorOnNodes->setValueIJ(i+1,3,valueDbl3);
428 fieldIntVectorOnNodes->setValueIJ(i+1,1,valueInt1);
429 fieldIntVectorOnNodes->setValueIJ(i+1,2,valueInt2);
430 fieldIntVectorOnNodes->setValueIJ(i+1,3,valueInt3);
433 for (int i = 0; i<numberOfCells; i++)
435 double valueDbl1, valueDbl2, valueDbl3;
436 int valueInt1, valueInt2, valueInt3;
440 valueDbl1 = valueInt1*0.1;
441 valueDbl2 = valueInt2*0.1;
442 valueDbl3 = valueInt3*0.1;
443 fieldDoubleScalarOnCells->setValueIJ(i+1,1,valueDbl1);
445 fieldIntScalarOnCells->setValueIJ(i+1,1,valueInt1);
447 fieldDoubleVectorOnCells->setValueIJ(i+1,1,valueDbl1);
448 fieldDoubleVectorOnCells->setValueIJ(i+1,2,valueDbl2);
449 fieldDoubleVectorOnCells->setValueIJ(i+1,3,valueDbl3);
451 fieldIntVectorOnCells->setValueIJ(i+1,1,valueInt1);
452 fieldIntVectorOnCells->setValueIJ(i+1,2,valueInt2);
453 fieldIntVectorOnCells->setValueIJ(i+1,3,valueInt3);
456 idMed = fieldDoubleScalarOnNodes->addDriver(MED_DRIVER,filenameMed,fieldDoubleScalarOnNodes->getName());
457 fieldDoubleScalarOnNodes->write(idMed) ;
459 idMed = fieldIntScalarOnNodes->addDriver(MED_DRIVER,filenameMed,fieldIntScalarOnNodes->getName());
460 fieldIntScalarOnNodes->write(idMed) ;
462 idMed = fieldDoubleVectorOnNodes->addDriver(MED_DRIVER,filenameMed,fieldDoubleVectorOnNodes->getName());
463 fieldDoubleVectorOnNodes->write(idMed) ;
465 idMed = fieldIntVectorOnNodes->addDriver(MED_DRIVER,filenameMed,fieldIntVectorOnNodes->getName());
466 fieldIntVectorOnNodes->write(idMed) ;
468 idMed = fieldDoubleScalarOnCells->addDriver(MED_DRIVER,filenameMed,fieldDoubleScalarOnCells->getName());
469 fieldDoubleScalarOnCells->write(idMed) ;
471 idMed = fieldIntScalarOnCells->addDriver(MED_DRIVER,filenameMed,fieldIntScalarOnCells->getName());
472 fieldIntScalarOnCells->write(idMed) ;
474 idMed = fieldDoubleVectorOnCells->addDriver(MED_DRIVER,filenameMed,fieldDoubleVectorOnCells->getName());
475 fieldDoubleVectorOnCells->write(idMed) ;
477 idMed = fieldIntVectorOnCells->addDriver(MED_DRIVER,filenameMed,fieldIntVectorOnCells->getName());
478 fieldIntVectorOnCells->write(idMed) ;
480 idVtk = fieldDoubleScalarOnNodes->addDriver(VTK_DRIVER,filenameVtk,fieldDoubleScalarOnNodes->getName());
481 fieldDoubleScalarOnNodes->writeAppend(idVtk) ;
483 idVtk = fieldIntScalarOnNodes->addDriver(VTK_DRIVER,filenameVtk,fieldIntScalarOnNodes->getName());
484 fieldIntScalarOnNodes->writeAppend(idVtk) ;
486 idVtk = fieldDoubleVectorOnNodes->addDriver(VTK_DRIVER,filenameVtk,fieldDoubleVectorOnNodes->getName());
487 fieldDoubleVectorOnNodes->writeAppend(idVtk) ;
489 idVtk = fieldIntVectorOnNodes->addDriver(VTK_DRIVER,filenameVtk,fieldIntVectorOnNodes->getName());
490 fieldIntVectorOnNodes->writeAppend(idVtk) ;
492 idVtk = fieldDoubleScalarOnCells->addDriver(VTK_DRIVER,filenameVtk,fieldDoubleScalarOnCells->getName());
493 fieldDoubleScalarOnCells->writeAppend(idVtk) ;
495 idVtk = fieldIntScalarOnCells->addDriver(VTK_DRIVER,filenameVtk,fieldIntScalarOnCells->getName());
496 fieldIntScalarOnCells->writeAppend(idVtk) ;
498 idVtk = fieldDoubleVectorOnCells->addDriver(VTK_DRIVER,filenameVtk,fieldDoubleVectorOnCells->getName());
499 fieldDoubleVectorOnCells->writeAppend(idVtk) ;
501 idVtk = fieldIntVectorOnCells->addDriver(VTK_DRIVER,filenameVtk,fieldIntVectorOnCells->getName());
502 fieldIntVectorOnCells->writeAppend(idVtk) ;
504 delete fieldDoubleScalarOnNodes;
505 delete fieldIntScalarOnNodes;
506 delete fieldDoubleVectorOnNodes;
507 delete fieldIntVectorOnNodes;
508 delete fieldDoubleScalarOnCells;
509 delete fieldIntScalarOnCells;
510 delete fieldDoubleVectorOnCells;
511 delete fieldIntVectorOnCells;
513 delete supportOnNodes;
514 delete supportOnCells;