1 #include "MEDMEM_Meshing.hxx"
2 #include "MEDMEM_Group.hxx"
3 #include "MEDMEM_Field.hxx"
7 int main (int argc, char ** argv) {
10 cerr << "Usage : " << argv[0]
11 << " filenameRoot" << endl;
12 cerr << " where filenameRoot is a root filename, the program will produce" << endl;
13 cerr << " 2 files filenameRoot.med and filenameRoot.vtk" << endl << endl;
17 // filename to save the generated MESH
18 string filenameRoot = argv[1] ;
20 string filenameMed = filenameRoot+".med";
21 string filenameVtk = filenameRoot+".vtk";
24 myMeshing.setName("meshing") ;
28 int SpaceDimension = 3 ;
29 int NumberOfNodes = 19 ;
30 double Coordinates[57] = {
52 myMeshing.setCoordinates(SpaceDimension,NumberOfNodes,Coordinates,"CARTESIAN",MED_FULL_INTERLACE);
54 string Names[3] = { "X","Y","Z" } ;
55 myMeshing.setCoordinatesNames(Names);
57 string Units[3] = { "cm","cm","cm" } ;
58 myMeshing.setCoordinatesUnits(Units) ;
60 // define conectivities
64 const int NumberOfTypes = 3 ;
65 medGeometryElement Types[NumberOfTypes] = {MED_TETRA4,MED_PYRA5,MED_HEXA8} ;
66 const int NumberOfElements[NumberOfTypes] = {12,2,2} ;
68 myMeshing.setNumberOfTypes(NumberOfTypes,MED_CELL);
69 myMeshing.setTypes(Types,MED_CELL);
70 myMeshing.setNumberOfElements(NumberOfElements,MED_CELL);
72 const int sizeTetra = 12*4 ;
73 int ConnectivityTetra[sizeTetra]=
89 myMeshing.setConnectivity(ConnectivityTetra,MED_CELL,MED_TETRA4);
91 int ConnectivityPyra[2*5]=
97 myMeshing.setConnectivity(ConnectivityPyra,MED_CELL,MED_PYRA5);
99 int ConnectivityHexa[2*8]=
101 11,12,13,14,7,8,9,10,
102 15,16,17,18,11,12,13,14
105 myMeshing.setConnectivity(ConnectivityHexa,MED_CELL,MED_HEXA8);
109 const int NumberOfFacesTypes = 2 ;
110 medGeometryElement FacesTypes[NumberOfFacesTypes] = {MED_TRIA3,MED_QUAD4} ;
111 const int NumberOfFacesElements[NumberOfFacesTypes] = {4,4} ;
113 myMeshing.setNumberOfTypes(NumberOfFacesTypes,MED_FACE);
114 myMeshing.setTypes(FacesTypes,MED_FACE);
115 myMeshing.setNumberOfElements(NumberOfFacesElements,MED_FACE);
117 const int sizeTria = 3*4 ;
118 int ConnectivityTria[sizeTria]=
126 myMeshing.setConnectivity(ConnectivityTria,MED_FACE,MED_TRIA3);
128 int ConnectivityQua[4*4]=
136 myMeshing.setConnectivity(ConnectivityQua,MED_FACE,MED_QUAD4);
140 // not yet implemented : if set, results are unpredictable.
147 myGroup.setName("SomeNodes");
148 myGroup.setMesh(&myMeshing);
149 myGroup.setEntity(MED_NODE);
150 myGroup.setNumberOfGeometricType(1);
151 medGeometryElement myTypes[1] = {MED_NONE};
152 myGroup.setGeometricType(myTypes);
153 const int myNumberOfElements[1] = {4} ;
154 myGroup.setNumberOfElements(myNumberOfElements);
155 const int index[1+1] = {1,5} ;
156 const int value[4]= { 1,4,5,7} ;
157 myGroup.setNumber(index,value);
159 myMeshing.addGroup(myGroup);
163 myGroup.setName("OtherNodes");
164 myGroup.setMesh(&myMeshing);
165 myGroup.setEntity(MED_NODE);
166 myGroup.setNumberOfGeometricType(1);
167 medGeometryElement myTypes[1] = {MED_NONE};
168 myGroup.setGeometricType(myTypes);
169 const int myNumberOfElements[1] = {3} ;
170 myGroup.setNumberOfElements(myNumberOfElements);
171 const int index[1+1] = {1,4} ;
172 const int value[3]= { 2,3,6} ;
173 myGroup.setNumber(index,value);
175 myMeshing.addGroup(myGroup);
181 myGroup.setName("SomeCells");
182 myGroup.setMesh(&myMeshing);
183 myGroup.setEntity(MED_CELL);
184 myGroup.setNumberOfGeometricType(3);
185 medGeometryElement myTypes[3] = {MED_TETRA4,MED_PYRA5,MED_HEXA8};
186 myGroup.setGeometricType(myTypes);
187 const int myNumberOfElements[3] = {4,1,2} ;
188 myGroup.setNumberOfElements(myNumberOfElements);
189 const int index[3+1] = {1,5,6,8} ;
190 const int value[4+1+2]=
196 myGroup.setNumber(index,value);
198 myMeshing.addGroup(myGroup);
202 myGroup.setName("OtherCells");
203 myGroup.setMesh(&myMeshing);
204 myGroup.setEntity(MED_CELL);
205 myGroup.setNumberOfGeometricType(2);
206 medGeometryElement myTypes[] = {MED_TETRA4,MED_PYRA5};
207 myGroup.setGeometricType(myTypes);
208 const int myNumberOfElements[] = {4,1} ;
209 myGroup.setNumberOfElements(myNumberOfElements);
210 const int index[2+1] = {1,5,6} ;
211 const int value[4+1]=
216 myGroup.setNumber(index,value);
218 myMeshing.addGroup(myGroup);
224 myGroup.setName("SomeFaces");
225 myGroup.setMesh(&myMeshing);
226 myGroup.setEntity(MED_FACE);
227 myGroup.setNumberOfGeometricType(2);
228 medGeometryElement myTypes[2] = {MED_TRIA3,MED_QUAD4};
229 myGroup.setGeometricType(myTypes);
230 const int myNumberOfElements[2] = {2,3} ;
231 myGroup.setNumberOfElements(myNumberOfElements);
232 const int index[2+1] = {1,3,6} ;
233 const int value[2+3]=
238 myGroup.setNumber(index,value);
240 myMeshing.addGroup(myGroup);
244 myGroup.setName("OtherFaces");
245 myGroup.setMesh(&myMeshing);
246 myGroup.setEntity(MED_FACE);
247 myGroup.setNumberOfGeometricType(1);
248 medGeometryElement myTypes[1] = {MED_TRIA3};
249 myGroup.setGeometricType(myTypes);
250 const int myNumberOfElements[1] = {2} ;
251 myGroup.setNumberOfElements(myNumberOfElements);
252 const int index[1+1] = {1,3} ;
257 myGroup.setNumber(index,value);
259 myMeshing.addGroup(myGroup);
262 // all rigtht, we save it !
264 int idMed = myMeshing.addDriver(MED_DRIVER,filenameMed,myMeshing.getName());
265 myMeshing.write(idMed) ;
267 int idVtk = myMeshing.addDriver(VTK_DRIVER,filenameVtk,myMeshing.getName());
268 myMeshing.write(idVtk) ;
270 // we build now 8 fields : 4 fields double (integer) :
271 // 2 fields on nodes (cells) :
274 SUPPORT * supportOnNodes = new SUPPORT(&myMeshing,"On_All_Nodes",MED_NODE);
275 int numberOfNodes = supportOnNodes->getNumberOfElements(MED_ALL_ELEMENTS);
277 SUPPORT * supportOnCells = new SUPPORT(&myMeshing,"On_All_Cells",MED_CELL);
278 int numberOfCells = supportOnCells->getNumberOfElements(MED_ALL_ELEMENTS);
280 FIELD<double> * fieldDoubleScalarOnNodes = new FIELD<double>(supportOnNodes,1);
281 fieldDoubleScalarOnNodes->setName("fieldScalarDoubleNode");
282 fieldDoubleScalarOnNodes->setIterationNumber(-1);
283 fieldDoubleScalarOnNodes->setOrderNumber(-1);
284 fieldDoubleScalarOnNodes->setTime(0.0);
286 fieldDoubleScalarOnNodes->setComponentName(1,"Vx");
287 fieldDoubleScalarOnNodes->setComponentDescription(1,"comp1");
288 fieldDoubleScalarOnNodes->setMEDComponentUnit(1,"unit1");
290 fieldDoubleScalarOnNodes->setValueType(MED_REEL64);
292 FIELD<double> * fieldDoubleVectorOnNodes = new FIELD<double>(supportOnNodes,SpaceDimension);
293 fieldDoubleVectorOnNodes->setName("fieldVectorDoubleNode");
294 fieldDoubleVectorOnNodes->setIterationNumber(-1);
295 fieldDoubleVectorOnNodes->setOrderNumber(-1);
296 fieldDoubleVectorOnNodes->setTime(0.0);
298 fieldDoubleVectorOnNodes->setComponentName(1,"Vx");
299 fieldDoubleVectorOnNodes->setComponentDescription(1,"comp1");
300 fieldDoubleVectorOnNodes->setMEDComponentUnit(1,"unit1");
301 fieldDoubleVectorOnNodes->setComponentName(2,"Vy");
302 fieldDoubleVectorOnNodes->setComponentDescription(2,"comp2");
303 fieldDoubleVectorOnNodes->setMEDComponentUnit(2,"unit2");
304 fieldDoubleVectorOnNodes->setComponentName(3,"Vz");
305 fieldDoubleVectorOnNodes->setComponentDescription(3,"comp3");
306 fieldDoubleVectorOnNodes->setMEDComponentUnit(3,"unit3");
308 fieldDoubleVectorOnNodes->setValueType(MED_REEL64);
310 FIELD<double> * fieldDoubleScalarOnCells = new FIELD<double>(supportOnCells,1);
311 fieldDoubleScalarOnCells->setName("fieldScalarDoubleCell");
312 fieldDoubleScalarOnCells->setIterationNumber(-1);
313 fieldDoubleScalarOnCells->setOrderNumber(-1);
314 fieldDoubleScalarOnCells->setTime(0.0);
316 fieldDoubleScalarOnCells->setComponentName(1,"Vx");
317 fieldDoubleScalarOnCells->setComponentDescription(1,"comp1");
318 fieldDoubleScalarOnCells->setMEDComponentUnit(1,"unit1");
320 fieldDoubleScalarOnCells->setValueType(MED_REEL64);
322 FIELD<double> * fieldDoubleVectorOnCells = new FIELD<double>(supportOnCells,SpaceDimension);
323 fieldDoubleVectorOnCells->setName("fieldVectorrDoubleCell");
324 fieldDoubleVectorOnCells->setIterationNumber(-1);
325 fieldDoubleVectorOnCells->setOrderNumber(-1);
326 fieldDoubleVectorOnCells->setTime(0.0);
328 fieldDoubleVectorOnCells->setComponentName(1,"Vx");
329 fieldDoubleVectorOnCells->setComponentDescription(1,"comp1");
330 fieldDoubleVectorOnCells->setMEDComponentUnit(1,"unit1");
331 fieldDoubleVectorOnCells->setComponentName(2,"Vy");
332 fieldDoubleVectorOnCells->setComponentDescription(2,"comp2");
333 fieldDoubleVectorOnCells->setMEDComponentUnit(2,"unit2");
334 fieldDoubleVectorOnCells->setComponentName(3,"Vz");
335 fieldDoubleVectorOnCells->setComponentDescription(3,"comp3");
336 fieldDoubleVectorOnCells->setMEDComponentUnit(3,"unit3");
338 fieldDoubleVectorOnCells->setValueType(MED_REEL64);
340 FIELD<int> * fieldIntScalarOnNodes = new FIELD<int>(supportOnNodes,1);
341 fieldIntScalarOnNodes->setName("fieldScalarIntNode");
342 fieldIntScalarOnNodes->setIterationNumber(-1);
343 fieldIntScalarOnNodes->setOrderNumber(-1);
344 fieldIntScalarOnNodes->setTime(0.0);
346 fieldIntScalarOnNodes->setComponentName(1,"Vx");
347 fieldIntScalarOnNodes->setComponentDescription(1,"comp1");
348 fieldIntScalarOnNodes->setMEDComponentUnit(1,"unit1");
350 fieldIntScalarOnNodes->setValueType(MED_INT32);
352 FIELD<int> * fieldIntVectorOnNodes = new FIELD<int>(supportOnNodes,SpaceDimension);
353 fieldIntVectorOnNodes->setName("fieldVectorIntNode");
354 fieldIntVectorOnNodes->setIterationNumber(-1);
355 fieldIntVectorOnNodes->setOrderNumber(-1);
356 fieldIntVectorOnNodes->setTime(0.0);
358 fieldIntVectorOnNodes->setComponentName(1,"Vx");
359 fieldIntVectorOnNodes->setComponentDescription(1,"comp1");
360 fieldIntVectorOnNodes->setMEDComponentUnit(1,"unit1");
361 fieldIntVectorOnNodes->setComponentName(2,"Vy");
362 fieldIntVectorOnNodes->setComponentDescription(2,"comp2");
363 fieldIntVectorOnNodes->setMEDComponentUnit(2,"unit2");
364 fieldIntVectorOnNodes->setComponentName(3,"Vz");
365 fieldIntVectorOnNodes->setComponentDescription(3,"comp3");
366 fieldIntVectorOnNodes->setMEDComponentUnit(3,"unit3");
368 fieldIntVectorOnNodes->setValueType(MED_INT32);
370 FIELD<int> * fieldIntScalarOnCells = new FIELD<int>(supportOnCells,1);
371 fieldIntScalarOnCells->setName("fieldScalarIntCell");
372 fieldIntScalarOnCells->setIterationNumber(-1);
373 fieldIntScalarOnCells->setOrderNumber(-1);
374 fieldIntScalarOnCells->setTime(0.0);
376 fieldIntScalarOnCells->setComponentName(1,"Vx");
377 fieldIntScalarOnCells->setComponentDescription(1,"comp1");
378 fieldIntScalarOnCells->setMEDComponentUnit(1,"unit1");
380 fieldIntScalarOnCells->setValueType(MED_INT32);
382 FIELD<int> * fieldIntVectorOnCells = new FIELD<int>(supportOnCells,SpaceDimension);
383 fieldIntVectorOnCells->setName("fieldVectorrIntCell");
384 fieldIntVectorOnCells->setIterationNumber(-1);
385 fieldIntVectorOnCells->setOrderNumber(-1);
386 fieldIntVectorOnCells->setTime(0.0);
388 fieldIntVectorOnCells->setComponentName(1,"Vx");
389 fieldIntVectorOnCells->setComponentDescription(1,"comp1");
390 fieldIntVectorOnCells->setMEDComponentUnit(1,"unit1");
391 fieldIntVectorOnCells->setComponentName(2,"Vy");
392 fieldIntVectorOnCells->setComponentDescription(2,"comp2");
393 fieldIntVectorOnCells->setMEDComponentUnit(2,"unit2");
394 fieldIntVectorOnCells->setComponentName(3,"Vz");
395 fieldIntVectorOnCells->setComponentDescription(3,"comp3");
396 fieldIntVectorOnCells->setMEDComponentUnit(3,"unit3");
398 fieldIntVectorOnCells->setValueType(MED_INT32);
400 for (int i = 0; i<numberOfNodes; i++)
402 double valueDbl1, valueDbl2, valueDbl3;
403 int valueInt1, valueInt2, valueInt3;
407 valueDbl1 = valueInt1*0.1;
408 valueDbl2 = valueInt2*0.1;
409 valueDbl3 = valueInt3*0.1;
410 fieldDoubleScalarOnNodes->setValueIJ(i+1,1,valueDbl1);
412 fieldIntScalarOnNodes->setValueIJ(i+1,1,valueInt1);
414 fieldDoubleVectorOnNodes->setValueIJ(i+1,1,valueDbl1);
415 fieldDoubleVectorOnNodes->setValueIJ(i+1,2,valueDbl2);
416 fieldDoubleVectorOnNodes->setValueIJ(i+1,3,valueDbl3);
418 fieldIntVectorOnNodes->setValueIJ(i+1,1,valueInt1);
419 fieldIntVectorOnNodes->setValueIJ(i+1,2,valueInt2);
420 fieldIntVectorOnNodes->setValueIJ(i+1,3,valueInt3);
423 for (int i = 0; i<numberOfCells; i++)
425 double valueDbl1, valueDbl2, valueDbl3;
426 int valueInt1, valueInt2, valueInt3;
430 valueDbl1 = valueInt1*0.1;
431 valueDbl2 = valueInt2*0.1;
432 valueDbl3 = valueInt3*0.1;
433 fieldDoubleScalarOnCells->setValueIJ(i+1,1,valueDbl1);
435 fieldIntScalarOnCells->setValueIJ(i+1,1,valueInt1);
437 fieldDoubleVectorOnCells->setValueIJ(i+1,1,valueDbl1);
438 fieldDoubleVectorOnCells->setValueIJ(i+1,2,valueDbl2);
439 fieldDoubleVectorOnCells->setValueIJ(i+1,3,valueDbl3);
441 fieldIntVectorOnCells->setValueIJ(i+1,1,valueInt1);
442 fieldIntVectorOnCells->setValueIJ(i+1,2,valueInt2);
443 fieldIntVectorOnCells->setValueIJ(i+1,3,valueInt3);
446 idMed = fieldDoubleScalarOnNodes->addDriver(MED_DRIVER,filenameMed,fieldDoubleScalarOnNodes->getName());
447 fieldDoubleScalarOnNodes->write(idMed) ;
449 idMed = fieldIntScalarOnNodes->addDriver(MED_DRIVER,filenameMed,fieldIntScalarOnNodes->getName());
450 fieldIntScalarOnNodes->write(idMed) ;
452 idMed = fieldDoubleVectorOnNodes->addDriver(MED_DRIVER,filenameMed,fieldDoubleVectorOnNodes->getName());
453 fieldDoubleVectorOnNodes->write(idMed) ;
455 idMed = fieldIntVectorOnNodes->addDriver(MED_DRIVER,filenameMed,fieldIntVectorOnNodes->getName());
456 fieldIntVectorOnNodes->write(idMed) ;
458 idMed = fieldDoubleScalarOnCells->addDriver(MED_DRIVER,filenameMed,fieldDoubleScalarOnCells->getName());
459 fieldDoubleScalarOnCells->write(idMed) ;
461 idMed = fieldIntScalarOnCells->addDriver(MED_DRIVER,filenameMed,fieldIntScalarOnCells->getName());
462 fieldIntScalarOnCells->write(idMed) ;
464 idMed = fieldDoubleVectorOnCells->addDriver(MED_DRIVER,filenameMed,fieldDoubleVectorOnCells->getName());
465 fieldDoubleVectorOnCells->write(idMed) ;
467 idMed = fieldIntVectorOnCells->addDriver(MED_DRIVER,filenameMed,fieldIntVectorOnCells->getName());
468 fieldIntVectorOnCells->write(idMed) ;
470 idVtk = fieldDoubleScalarOnNodes->addDriver(VTK_DRIVER,filenameVtk,fieldDoubleScalarOnNodes->getName());
471 fieldDoubleScalarOnNodes->writeAppend(idVtk) ;
473 idVtk = fieldIntScalarOnNodes->addDriver(VTK_DRIVER,filenameVtk,fieldIntScalarOnNodes->getName());
474 fieldIntScalarOnNodes->writeAppend(idVtk) ;
476 idVtk = fieldDoubleVectorOnNodes->addDriver(VTK_DRIVER,filenameVtk,fieldDoubleVectorOnNodes->getName());
477 fieldDoubleVectorOnNodes->writeAppend(idVtk) ;
479 idVtk = fieldIntVectorOnNodes->addDriver(VTK_DRIVER,filenameVtk,fieldIntVectorOnNodes->getName());
480 fieldIntVectorOnNodes->writeAppend(idVtk) ;
482 idVtk = fieldDoubleScalarOnCells->addDriver(VTK_DRIVER,filenameVtk,fieldDoubleScalarOnCells->getName());
483 fieldDoubleScalarOnCells->writeAppend(idVtk) ;
485 idVtk = fieldIntScalarOnCells->addDriver(VTK_DRIVER,filenameVtk,fieldIntScalarOnCells->getName());
486 fieldIntScalarOnCells->writeAppend(idVtk) ;
488 idVtk = fieldDoubleVectorOnCells->addDriver(VTK_DRIVER,filenameVtk,fieldDoubleVectorOnCells->getName());
489 fieldDoubleVectorOnCells->writeAppend(idVtk) ;
491 idVtk = fieldIntVectorOnCells->addDriver(VTK_DRIVER,filenameVtk,fieldIntVectorOnCells->getName());
492 fieldIntVectorOnCells->writeAppend(idVtk) ;
494 delete fieldDoubleScalarOnNodes;
495 delete fieldIntScalarOnNodes;
496 delete fieldDoubleVectorOnNodes;
497 delete fieldIntVectorOnNodes;
498 delete fieldDoubleScalarOnCells;
499 delete fieldIntScalarOnCells;
500 delete fieldDoubleVectorOnCells;
501 delete fieldIntVectorOnCells;
503 delete supportOnNodes;
504 delete supportOnCells;