1 #include "MEDMEM_Meshing.hxx"
2 #include "MEDMEM_Group.hxx"
3 #include "MEDMEM_Field.hxx"
6 using namespace MEDMEM;
7 using namespace MED_EN;
9 int main (int argc, char ** argv) {
12 cerr << "Usage : " << argv[0]
13 << " filenameRoot" << endl;
14 cerr << " where filenameRoot is a root filename, the program will produce" << endl;
15 cerr << " 2 files filenameRoot.med and filenameRoot.vtk" << endl << endl;
19 // filename to save the generated MESH
20 string filenameRoot = argv[1] ;
22 string filenameMed = filenameRoot+".med";
23 string filenameVtk = filenameRoot+".vtk";
26 myMeshing.setName("meshing") ;
30 int SpaceDimension = 3 ;
31 int NumberOfNodes = 19 ;
32 double Coordinates[57] = {
54 myMeshing.setCoordinates(SpaceDimension,NumberOfNodes,Coordinates,"CARTESIAN",MED_FULL_INTERLACE);
56 string Names[3] = { "X","Y","Z" } ;
57 myMeshing.setCoordinatesNames(Names);
59 string Units[3] = { "cm","cm","cm" } ;
60 myMeshing.setCoordinatesUnits(Units) ;
62 // define conectivities
66 const int NumberOfTypes = 3 ;
67 medGeometryElement Types[NumberOfTypes] = {MED_TETRA4,MED_PYRA5,MED_HEXA8} ;
68 const int NumberOfElements[NumberOfTypes] = {12,2,2} ;
70 myMeshing.setNumberOfTypes(NumberOfTypes,MED_CELL);
71 myMeshing.setTypes(Types,MED_CELL);
72 myMeshing.setNumberOfElements(NumberOfElements,MED_CELL);
74 const int sizeTetra = 12*4 ;
75 int ConnectivityTetra[sizeTetra]=
91 myMeshing.setConnectivity(ConnectivityTetra,MED_CELL,MED_TETRA4);
93 int ConnectivityPyra[2*5]=
99 myMeshing.setConnectivity(ConnectivityPyra,MED_CELL,MED_PYRA5);
101 int ConnectivityHexa[2*8]=
103 11,12,13,14,7,8,9,10,
104 15,16,17,18,11,12,13,14
107 myMeshing.setConnectivity(ConnectivityHexa,MED_CELL,MED_HEXA8);
111 const int NumberOfFacesTypes = 2 ;
112 medGeometryElement FacesTypes[NumberOfFacesTypes] = {MED_TRIA3,MED_QUAD4} ;
113 const int NumberOfFacesElements[NumberOfFacesTypes] = {4,4} ;
115 myMeshing.setNumberOfTypes(NumberOfFacesTypes,MED_FACE);
116 myMeshing.setTypes(FacesTypes,MED_FACE);
117 myMeshing.setNumberOfElements(NumberOfFacesElements,MED_FACE);
119 const int sizeTria = 3*4 ;
120 int ConnectivityTria[sizeTria]=
128 myMeshing.setConnectivity(ConnectivityTria,MED_FACE,MED_TRIA3);
130 int ConnectivityQua[4*4]=
138 myMeshing.setConnectivity(ConnectivityQua,MED_FACE,MED_QUAD4);
142 // not yet implemented : if set, results are unpredictable.
149 myGroup.setName("SomeNodes");
150 myGroup.setMesh(&myMeshing);
151 myGroup.setEntity(MED_NODE);
152 myGroup.setNumberOfGeometricType(1);
153 medGeometryElement myTypes[1] = {MED_NONE};
154 myGroup.setGeometricType(myTypes);
155 const int myNumberOfElements[1] = {4} ;
156 myGroup.setNumberOfElements(myNumberOfElements);
157 const int index[1+1] = {1,5} ;
158 const int value[4]= { 1,4,5,7} ;
159 myGroup.setNumber(index,value);
161 myMeshing.addGroup(myGroup);
165 myGroup.setName("OtherNodes");
166 myGroup.setMesh(&myMeshing);
167 myGroup.setEntity(MED_NODE);
168 myGroup.setNumberOfGeometricType(1);
169 medGeometryElement myTypes[1] = {MED_NONE};
170 myGroup.setGeometricType(myTypes);
171 const int myNumberOfElements[1] = {3} ;
172 myGroup.setNumberOfElements(myNumberOfElements);
173 const int index[1+1] = {1,4} ;
174 const int value[3]= { 2,3,6} ;
175 myGroup.setNumber(index,value);
177 myMeshing.addGroup(myGroup);
183 myGroup.setName("SomeCells");
184 myGroup.setMesh(&myMeshing);
185 myGroup.setEntity(MED_CELL);
186 myGroup.setNumberOfGeometricType(3);
187 medGeometryElement myTypes[3] = {MED_TETRA4,MED_PYRA5,MED_HEXA8};
188 myGroup.setGeometricType(myTypes);
189 const int myNumberOfElements[3] = {4,1,2} ;
190 myGroup.setNumberOfElements(myNumberOfElements);
191 const int index[3+1] = {1,5,6,8} ;
192 const int value[4+1+2]=
198 myGroup.setNumber(index,value);
200 myMeshing.addGroup(myGroup);
204 myGroup.setName("OtherCells");
205 myGroup.setMesh(&myMeshing);
206 myGroup.setEntity(MED_CELL);
207 myGroup.setNumberOfGeometricType(2);
208 medGeometryElement myTypes[] = {MED_TETRA4,MED_PYRA5};
209 myGroup.setGeometricType(myTypes);
210 const int myNumberOfElements[] = {4,1} ;
211 myGroup.setNumberOfElements(myNumberOfElements);
212 const int index[2+1] = {1,5,6} ;
213 const int value[4+1]=
218 myGroup.setNumber(index,value);
220 myMeshing.addGroup(myGroup);
226 myGroup.setName("SomeFaces");
227 myGroup.setMesh(&myMeshing);
228 myGroup.setEntity(MED_FACE);
229 myGroup.setNumberOfGeometricType(2);
230 medGeometryElement myTypes[2] = {MED_TRIA3,MED_QUAD4};
231 myGroup.setGeometricType(myTypes);
232 const int myNumberOfElements[2] = {2,3} ;
233 myGroup.setNumberOfElements(myNumberOfElements);
234 const int index[2+1] = {1,3,6} ;
235 const int value[2+3]=
240 myGroup.setNumber(index,value);
242 myMeshing.addGroup(myGroup);
246 myGroup.setName("OtherFaces");
247 myGroup.setMesh(&myMeshing);
248 myGroup.setEntity(MED_FACE);
249 myGroup.setNumberOfGeometricType(1);
250 medGeometryElement myTypes[1] = {MED_TRIA3};
251 myGroup.setGeometricType(myTypes);
252 const int myNumberOfElements[1] = {2} ;
253 myGroup.setNumberOfElements(myNumberOfElements);
254 const int index[1+1] = {1,3} ;
259 myGroup.setNumber(index,value);
261 myMeshing.addGroup(myGroup);
264 // all rigtht, we save it !
266 int idMed = myMeshing.addDriver(MED_DRIVER,filenameMed,myMeshing.getName());
267 myMeshing.write(idMed) ;
269 int idVtk = myMeshing.addDriver(VTK_DRIVER,filenameVtk,myMeshing.getName());
270 myMeshing.write(idVtk) ;
272 // we build now 8 fields : 4 fields double (integer) :
273 // 2 fields on nodes (cells) :
276 SUPPORT * supportOnNodes = new SUPPORT(&myMeshing,"On_All_Nodes",MED_NODE);
277 int numberOfNodes = supportOnNodes->getNumberOfElements(MED_ALL_ELEMENTS);
279 SUPPORT * supportOnCells = new SUPPORT(&myMeshing,"On_All_Cells",MED_CELL);
280 int numberOfCells = supportOnCells->getNumberOfElements(MED_ALL_ELEMENTS);
282 FIELD<double> * fieldDoubleScalarOnNodes = new FIELD<double>(supportOnNodes,1);
283 fieldDoubleScalarOnNodes->setName("fieldScalarDoubleNode");
284 fieldDoubleScalarOnNodes->setIterationNumber(-1);
285 fieldDoubleScalarOnNodes->setOrderNumber(-1);
286 fieldDoubleScalarOnNodes->setTime(0.0);
288 fieldDoubleScalarOnNodes->setComponentName(1,"Vx");
289 fieldDoubleScalarOnNodes->setComponentDescription(1,"comp1");
290 fieldDoubleScalarOnNodes->setMEDComponentUnit(1,"unit1");
292 fieldDoubleScalarOnNodes->setValueType(MED_REEL64);
294 FIELD<double> * fieldDoubleVectorOnNodes = new FIELD<double>(supportOnNodes,SpaceDimension);
295 fieldDoubleVectorOnNodes->setName("fieldVectorDoubleNode");
296 fieldDoubleVectorOnNodes->setIterationNumber(-1);
297 fieldDoubleVectorOnNodes->setOrderNumber(-1);
298 fieldDoubleVectorOnNodes->setTime(0.0);
300 fieldDoubleVectorOnNodes->setComponentName(1,"Vx");
301 fieldDoubleVectorOnNodes->setComponentDescription(1,"comp1");
302 fieldDoubleVectorOnNodes->setMEDComponentUnit(1,"unit1");
303 fieldDoubleVectorOnNodes->setComponentName(2,"Vy");
304 fieldDoubleVectorOnNodes->setComponentDescription(2,"comp2");
305 fieldDoubleVectorOnNodes->setMEDComponentUnit(2,"unit2");
306 fieldDoubleVectorOnNodes->setComponentName(3,"Vz");
307 fieldDoubleVectorOnNodes->setComponentDescription(3,"comp3");
308 fieldDoubleVectorOnNodes->setMEDComponentUnit(3,"unit3");
310 fieldDoubleVectorOnNodes->setValueType(MED_REEL64);
312 FIELD<double> * fieldDoubleScalarOnCells = new FIELD<double>(supportOnCells,1);
313 fieldDoubleScalarOnCells->setName("fieldScalarDoubleCell");
314 fieldDoubleScalarOnCells->setIterationNumber(-1);
315 fieldDoubleScalarOnCells->setOrderNumber(-1);
316 fieldDoubleScalarOnCells->setTime(0.0);
318 fieldDoubleScalarOnCells->setComponentName(1,"Vx");
319 fieldDoubleScalarOnCells->setComponentDescription(1,"comp1");
320 fieldDoubleScalarOnCells->setMEDComponentUnit(1,"unit1");
322 fieldDoubleScalarOnCells->setValueType(MED_REEL64);
324 FIELD<double> * fieldDoubleVectorOnCells = new FIELD<double>(supportOnCells,SpaceDimension);
325 fieldDoubleVectorOnCells->setName("fieldVectorrDoubleCell");
326 fieldDoubleVectorOnCells->setIterationNumber(-1);
327 fieldDoubleVectorOnCells->setOrderNumber(-1);
328 fieldDoubleVectorOnCells->setTime(0.0);
330 fieldDoubleVectorOnCells->setComponentName(1,"Vx");
331 fieldDoubleVectorOnCells->setComponentDescription(1,"comp1");
332 fieldDoubleVectorOnCells->setMEDComponentUnit(1,"unit1");
333 fieldDoubleVectorOnCells->setComponentName(2,"Vy");
334 fieldDoubleVectorOnCells->setComponentDescription(2,"comp2");
335 fieldDoubleVectorOnCells->setMEDComponentUnit(2,"unit2");
336 fieldDoubleVectorOnCells->setComponentName(3,"Vz");
337 fieldDoubleVectorOnCells->setComponentDescription(3,"comp3");
338 fieldDoubleVectorOnCells->setMEDComponentUnit(3,"unit3");
340 fieldDoubleVectorOnCells->setValueType(MED_REEL64);
342 FIELD<int> * fieldIntScalarOnNodes = new FIELD<int>(supportOnNodes,1);
343 fieldIntScalarOnNodes->setName("fieldScalarIntNode");
344 fieldIntScalarOnNodes->setIterationNumber(-1);
345 fieldIntScalarOnNodes->setOrderNumber(-1);
346 fieldIntScalarOnNodes->setTime(0.0);
348 fieldIntScalarOnNodes->setComponentName(1,"Vx");
349 fieldIntScalarOnNodes->setComponentDescription(1,"comp1");
350 fieldIntScalarOnNodes->setMEDComponentUnit(1,"unit1");
352 fieldIntScalarOnNodes->setValueType(MED_INT32);
354 FIELD<int> * fieldIntVectorOnNodes = new FIELD<int>(supportOnNodes,SpaceDimension);
355 fieldIntVectorOnNodes->setName("fieldVectorIntNode");
356 fieldIntVectorOnNodes->setIterationNumber(-1);
357 fieldIntVectorOnNodes->setOrderNumber(-1);
358 fieldIntVectorOnNodes->setTime(0.0);
360 fieldIntVectorOnNodes->setComponentName(1,"Vx");
361 fieldIntVectorOnNodes->setComponentDescription(1,"comp1");
362 fieldIntVectorOnNodes->setMEDComponentUnit(1,"unit1");
363 fieldIntVectorOnNodes->setComponentName(2,"Vy");
364 fieldIntVectorOnNodes->setComponentDescription(2,"comp2");
365 fieldIntVectorOnNodes->setMEDComponentUnit(2,"unit2");
366 fieldIntVectorOnNodes->setComponentName(3,"Vz");
367 fieldIntVectorOnNodes->setComponentDescription(3,"comp3");
368 fieldIntVectorOnNodes->setMEDComponentUnit(3,"unit3");
370 fieldIntVectorOnNodes->setValueType(MED_INT32);
372 FIELD<int> * fieldIntScalarOnCells = new FIELD<int>(supportOnCells,1);
373 fieldIntScalarOnCells->setName("fieldScalarIntCell");
374 fieldIntScalarOnCells->setIterationNumber(-1);
375 fieldIntScalarOnCells->setOrderNumber(-1);
376 fieldIntScalarOnCells->setTime(0.0);
378 fieldIntScalarOnCells->setComponentName(1,"Vx");
379 fieldIntScalarOnCells->setComponentDescription(1,"comp1");
380 fieldIntScalarOnCells->setMEDComponentUnit(1,"unit1");
382 fieldIntScalarOnCells->setValueType(MED_INT32);
384 FIELD<int> * fieldIntVectorOnCells = new FIELD<int>(supportOnCells,SpaceDimension);
385 fieldIntVectorOnCells->setName("fieldVectorrIntCell");
386 fieldIntVectorOnCells->setIterationNumber(-1);
387 fieldIntVectorOnCells->setOrderNumber(-1);
388 fieldIntVectorOnCells->setTime(0.0);
390 fieldIntVectorOnCells->setComponentName(1,"Vx");
391 fieldIntVectorOnCells->setComponentDescription(1,"comp1");
392 fieldIntVectorOnCells->setMEDComponentUnit(1,"unit1");
393 fieldIntVectorOnCells->setComponentName(2,"Vy");
394 fieldIntVectorOnCells->setComponentDescription(2,"comp2");
395 fieldIntVectorOnCells->setMEDComponentUnit(2,"unit2");
396 fieldIntVectorOnCells->setComponentName(3,"Vz");
397 fieldIntVectorOnCells->setComponentDescription(3,"comp3");
398 fieldIntVectorOnCells->setMEDComponentUnit(3,"unit3");
400 fieldIntVectorOnCells->setValueType(MED_INT32);
402 for (int i = 0; i<numberOfNodes; i++)
404 double valueDbl1, valueDbl2, valueDbl3;
405 int valueInt1, valueInt2, valueInt3;
409 valueDbl1 = valueInt1*0.1;
410 valueDbl2 = valueInt2*0.1;
411 valueDbl3 = valueInt3*0.1;
412 fieldDoubleScalarOnNodes->setValueIJ(i+1,1,valueDbl1);
414 fieldIntScalarOnNodes->setValueIJ(i+1,1,valueInt1);
416 fieldDoubleVectorOnNodes->setValueIJ(i+1,1,valueDbl1);
417 fieldDoubleVectorOnNodes->setValueIJ(i+1,2,valueDbl2);
418 fieldDoubleVectorOnNodes->setValueIJ(i+1,3,valueDbl3);
420 fieldIntVectorOnNodes->setValueIJ(i+1,1,valueInt1);
421 fieldIntVectorOnNodes->setValueIJ(i+1,2,valueInt2);
422 fieldIntVectorOnNodes->setValueIJ(i+1,3,valueInt3);
425 for (int i = 0; i<numberOfCells; i++)
427 double valueDbl1, valueDbl2, valueDbl3;
428 int valueInt1, valueInt2, valueInt3;
432 valueDbl1 = valueInt1*0.1;
433 valueDbl2 = valueInt2*0.1;
434 valueDbl3 = valueInt3*0.1;
435 fieldDoubleScalarOnCells->setValueIJ(i+1,1,valueDbl1);
437 fieldIntScalarOnCells->setValueIJ(i+1,1,valueInt1);
439 fieldDoubleVectorOnCells->setValueIJ(i+1,1,valueDbl1);
440 fieldDoubleVectorOnCells->setValueIJ(i+1,2,valueDbl2);
441 fieldDoubleVectorOnCells->setValueIJ(i+1,3,valueDbl3);
443 fieldIntVectorOnCells->setValueIJ(i+1,1,valueInt1);
444 fieldIntVectorOnCells->setValueIJ(i+1,2,valueInt2);
445 fieldIntVectorOnCells->setValueIJ(i+1,3,valueInt3);
448 idMed = fieldDoubleScalarOnNodes->addDriver(MED_DRIVER,filenameMed,fieldDoubleScalarOnNodes->getName());
449 fieldDoubleScalarOnNodes->write(idMed) ;
451 idMed = fieldIntScalarOnNodes->addDriver(MED_DRIVER,filenameMed,fieldIntScalarOnNodes->getName());
452 fieldIntScalarOnNodes->write(idMed) ;
454 idMed = fieldDoubleVectorOnNodes->addDriver(MED_DRIVER,filenameMed,fieldDoubleVectorOnNodes->getName());
455 fieldDoubleVectorOnNodes->write(idMed) ;
457 idMed = fieldIntVectorOnNodes->addDriver(MED_DRIVER,filenameMed,fieldIntVectorOnNodes->getName());
458 fieldIntVectorOnNodes->write(idMed) ;
460 idMed = fieldDoubleScalarOnCells->addDriver(MED_DRIVER,filenameMed,fieldDoubleScalarOnCells->getName());
461 fieldDoubleScalarOnCells->write(idMed) ;
463 idMed = fieldIntScalarOnCells->addDriver(MED_DRIVER,filenameMed,fieldIntScalarOnCells->getName());
464 fieldIntScalarOnCells->write(idMed) ;
466 idMed = fieldDoubleVectorOnCells->addDriver(MED_DRIVER,filenameMed,fieldDoubleVectorOnCells->getName());
467 fieldDoubleVectorOnCells->write(idMed) ;
469 idMed = fieldIntVectorOnCells->addDriver(MED_DRIVER,filenameMed,fieldIntVectorOnCells->getName());
470 fieldIntVectorOnCells->write(idMed) ;
472 idVtk = fieldDoubleScalarOnNodes->addDriver(VTK_DRIVER,filenameVtk,fieldDoubleScalarOnNodes->getName());
473 fieldDoubleScalarOnNodes->writeAppend(idVtk) ;
475 idVtk = fieldIntScalarOnNodes->addDriver(VTK_DRIVER,filenameVtk,fieldIntScalarOnNodes->getName());
476 fieldIntScalarOnNodes->writeAppend(idVtk) ;
478 idVtk = fieldDoubleVectorOnNodes->addDriver(VTK_DRIVER,filenameVtk,fieldDoubleVectorOnNodes->getName());
479 fieldDoubleVectorOnNodes->writeAppend(idVtk) ;
481 idVtk = fieldIntVectorOnNodes->addDriver(VTK_DRIVER,filenameVtk,fieldIntVectorOnNodes->getName());
482 fieldIntVectorOnNodes->writeAppend(idVtk) ;
484 idVtk = fieldDoubleScalarOnCells->addDriver(VTK_DRIVER,filenameVtk,fieldDoubleScalarOnCells->getName());
485 fieldDoubleScalarOnCells->writeAppend(idVtk) ;
487 idVtk = fieldIntScalarOnCells->addDriver(VTK_DRIVER,filenameVtk,fieldIntScalarOnCells->getName());
488 fieldIntScalarOnCells->writeAppend(idVtk) ;
490 idVtk = fieldDoubleVectorOnCells->addDriver(VTK_DRIVER,filenameVtk,fieldDoubleVectorOnCells->getName());
491 fieldDoubleVectorOnCells->writeAppend(idVtk) ;
493 idVtk = fieldIntVectorOnCells->addDriver(VTK_DRIVER,filenameVtk,fieldIntVectorOnCells->getName());
494 fieldIntVectorOnCells->writeAppend(idVtk) ;
496 delete fieldDoubleScalarOnNodes;
497 delete fieldIntScalarOnNodes;
498 delete fieldDoubleVectorOnNodes;
499 delete fieldIntVectorOnNodes;
500 delete fieldDoubleScalarOnCells;
501 delete fieldIntScalarOnCells;
502 delete fieldDoubleVectorOnCells;
503 delete fieldIntVectorOnCells;
505 delete supportOnNodes;
506 delete supportOnCells;