]> SALOME platform Git repositories - modules/med.git/blob - src/MEDMEM/test_MEDMEM_Meshing.cxx
Salome HOME
adding some castem mesh file to test the GIBI driver of Med Memory.
[modules/med.git] / src / MEDMEM / test_MEDMEM_Meshing.cxx
1 #include "MEDMEM_Meshing.hxx"
2 #include "MEDMEM_Group.hxx"
3 #include "MEDMEM_Field.hxx"
4
5 using namespace std;
6
7 int main (int argc, char ** argv) {
8
9   if (argc <2) {
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;
14     exit(-1);
15   }
16
17   // filename to save the generated MESH
18   string filenameRoot = argv[1] ;
19
20   string filenameMed = filenameRoot+".med";
21   string filenameVtk = filenameRoot+".vtk";
22
23   MESHING myMeshing ;
24   myMeshing.setName("meshing") ;
25
26   // define coordinates
27
28   int SpaceDimension = 3 ;
29   int NumberOfNodes = 19 ;
30   double Coordinates[57] = {
31     0.0, 0.0, 0.0, 
32     0.0, 0.0, 1.0, 
33     2.0, 0.0, 1.0, 
34     0.0, 2.0, 1.0, 
35     -2.0, 0.0, 1.0, 
36     0.0, -2.0, 1.0, 
37     1.0, 1.0, 2.0, 
38     -1.0, 1.0, 2.0, 
39     -1.0, -1.0, 2.0, 
40     1.0, -1.0, 2.0, 
41     1.0, 1.0, 3.0, 
42     -1.0, 1.0, 3.0, 
43     -1.0, -1.0, 3.0, 
44     1.0, -1.0, 3.0, 
45     1.0, 1.0, 4.0, 
46     -1.0, 1.0, 4.0, 
47     -1.0, -1.0, 4.0, 
48     1.0, -1.0, 4.0,
49     0.0, 0.0, 5.0
50   };
51
52   myMeshing.setCoordinates(SpaceDimension,NumberOfNodes,Coordinates,"CARTESIAN",MED_FULL_INTERLACE);
53
54   string Names[3] = { "X","Y","Z" } ;
55   myMeshing.setCoordinatesNames(Names);
56
57   string Units[3] = { "cm","cm","cm" } ;
58   myMeshing.setCoordinatesUnits(Units) ;
59
60   // define conectivities
61
62   // cell part
63   
64   const int NumberOfTypes = 3 ;
65   medGeometryElement Types[NumberOfTypes] = {MED_TETRA4,MED_PYRA5,MED_HEXA8} ;
66   const int NumberOfElements[NumberOfTypes] = {12,2,2} ;
67
68   myMeshing.setNumberOfTypes(NumberOfTypes,MED_CELL);
69   myMeshing.setTypes(Types,MED_CELL);
70   myMeshing.setNumberOfElements(NumberOfElements,MED_CELL);
71
72   const int sizeTetra = 12*4 ;
73   int ConnectivityTetra[sizeTetra]=
74   {
75     1,2,3,6,
76     1,2,4,3,
77     1,2,5,4,
78     1,2,6,5,
79     2,7,4,3,
80     2,8,5,4,
81     2,9,6,5,
82     2,10,3,6,
83     2,7,3,10,
84     2,8,4,7,
85     2,9,5,8,
86     2,10,6,9
87   };
88   
89   myMeshing.setConnectivity(ConnectivityTetra,MED_CELL,MED_TETRA4);
90
91   int ConnectivityPyra[2*5]=
92   {
93     7,8,9,10,2,
94     15,18,17,16,19
95   };
96
97   myMeshing.setConnectivity(ConnectivityPyra,MED_CELL,MED_PYRA5);
98
99   int ConnectivityHexa[2*8]=
100   {
101     11,12,13,14,7,8,9,10,
102     15,16,17,18,11,12,13,14
103   };
104
105   myMeshing.setConnectivity(ConnectivityHexa,MED_CELL,MED_HEXA8);
106
107   // face part
108
109   const int NumberOfFacesTypes = 2 ;
110   medGeometryElement FacesTypes[NumberOfFacesTypes] = {MED_TRIA3,MED_QUAD4} ;
111   const int NumberOfFacesElements[NumberOfFacesTypes] = {4,4} ;
112
113   myMeshing.setNumberOfTypes(NumberOfFacesTypes,MED_FACE);
114   myMeshing.setTypes(FacesTypes,MED_FACE);
115   myMeshing.setNumberOfElements(NumberOfFacesElements,MED_FACE);
116
117   const int sizeTria = 3*4 ;
118   int ConnectivityTria[sizeTria]=
119   {
120     1,4,3,
121     1,5,4,
122     1,6,5,
123     1,3,6
124   };
125   
126   myMeshing.setConnectivity(ConnectivityTria,MED_FACE,MED_TRIA3);
127
128   int ConnectivityQua[4*4]=
129   {
130     7,8,9,10,
131     11,12,13,14,
132     11,7,8,12,
133     12,8,9,13
134   };
135
136   myMeshing.setConnectivity(ConnectivityQua,MED_FACE,MED_QUAD4);
137
138   // edge part
139
140   // not yet implemented : if set, results are unpredictable.
141
142   // Some groups :
143
144   // Node :
145   {
146     GROUP myGroup ;
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);
158     
159     myMeshing.addGroup(myGroup);
160   }
161   {
162     GROUP 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);
174     
175     myMeshing.addGroup(myGroup);
176   }
177
178   // Cell :
179   {
180     GROUP 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]=
191     {
192       2,7,8,12,
193       13,
194       15,16
195     };
196     myGroup.setNumber(index,value);
197     
198     myMeshing.addGroup(myGroup);
199   }
200   {
201     GROUP 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]=
212     {
213       3,4,5,9,
214       14
215     };
216     myGroup.setNumber(index,value);
217     
218     myMeshing.addGroup(myGroup);
219   }
220
221   // Face :
222   {
223     GROUP 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]=
234     {
235       2,4,
236       5,6,8
237     } ;
238     myGroup.setNumber(index,value);
239     
240     myMeshing.addGroup(myGroup);
241   }
242   {
243     GROUP 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} ;
253     const int value[2]=
254     {
255       1,3
256     } ;
257     myGroup.setNumber(index,value);
258     
259     myMeshing.addGroup(myGroup);
260   }
261
262   // all rigtht, we save it !
263
264   int idMed = myMeshing.addDriver(MED_DRIVER,filenameMed,myMeshing.getName());
265   myMeshing.write(idMed) ;
266
267   int idVtk = myMeshing.addDriver(VTK_DRIVER,filenameVtk,myMeshing.getName());
268   myMeshing.write(idVtk) ;
269
270   // we build now 8 fields : 4 fields double (integer) :
271   //                         2 fields on nodes (cells) :
272   //                         1 scalar (vector)
273
274   SUPPORT * supportOnNodes = new SUPPORT(&myMeshing,"On_All_Nodes",MED_NODE);
275   int numberOfNodes = supportOnNodes->getNumberOfElements(MED_ALL_ELEMENTS);
276
277   SUPPORT * supportOnCells = new SUPPORT(&myMeshing,"On_All_Cells",MED_CELL);
278   int numberOfCells = supportOnCells->getNumberOfElements(MED_ALL_ELEMENTS);
279
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);
285
286   fieldDoubleScalarOnNodes->setComponentName(1,"Vx");
287   fieldDoubleScalarOnNodes->setComponentDescription(1,"comp1");
288   fieldDoubleScalarOnNodes->setMEDComponentUnit(1,"unit1");
289
290   fieldDoubleScalarOnNodes->setValueType(MED_REEL64);
291
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);
297
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");
307
308   fieldDoubleVectorOnNodes->setValueType(MED_REEL64);
309
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);
315
316   fieldDoubleScalarOnCells->setComponentName(1,"Vx");
317   fieldDoubleScalarOnCells->setComponentDescription(1,"comp1");
318   fieldDoubleScalarOnCells->setMEDComponentUnit(1,"unit1");
319
320   fieldDoubleScalarOnCells->setValueType(MED_REEL64);
321
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);
327
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");
337
338   fieldDoubleVectorOnCells->setValueType(MED_REEL64);
339
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);
345
346   fieldIntScalarOnNodes->setComponentName(1,"Vx");
347   fieldIntScalarOnNodes->setComponentDescription(1,"comp1");
348   fieldIntScalarOnNodes->setMEDComponentUnit(1,"unit1");
349
350   fieldIntScalarOnNodes->setValueType(MED_INT32);
351
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);
357
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");
367
368   fieldIntVectorOnNodes->setValueType(MED_INT32);
369
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);
375
376   fieldIntScalarOnCells->setComponentName(1,"Vx");
377   fieldIntScalarOnCells->setComponentDescription(1,"comp1");
378   fieldIntScalarOnCells->setMEDComponentUnit(1,"unit1");
379
380   fieldIntScalarOnCells->setValueType(MED_INT32);
381
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);
387
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");
397
398   fieldIntVectorOnCells->setValueType(MED_INT32);
399
400   for (int i = 0; i<numberOfNodes; i++)
401     {
402       double valueDbl1, valueDbl2, valueDbl3;
403       int valueInt1, valueInt2, valueInt3;
404       valueInt1 = i+1;
405       valueInt2 = i+2;
406       valueInt3 = i+3;
407       valueDbl1 = valueInt1*0.1;
408       valueDbl2 = valueInt2*0.1;
409       valueDbl3 = valueInt3*0.1;
410       fieldDoubleScalarOnNodes->setValueIJ(i+1,1,valueDbl1);
411
412       fieldIntScalarOnNodes->setValueIJ(i+1,1,valueInt1);
413
414       fieldDoubleVectorOnNodes->setValueIJ(i+1,1,valueDbl1);
415       fieldDoubleVectorOnNodes->setValueIJ(i+1,2,valueDbl2);
416       fieldDoubleVectorOnNodes->setValueIJ(i+1,3,valueDbl3);
417
418       fieldIntVectorOnNodes->setValueIJ(i+1,1,valueInt1);
419       fieldIntVectorOnNodes->setValueIJ(i+1,2,valueInt2);
420       fieldIntVectorOnNodes->setValueIJ(i+1,3,valueInt3);
421     }
422
423   for (int i = 0; i<numberOfCells; i++)
424     {
425       double valueDbl1, valueDbl2, valueDbl3;
426       int valueInt1, valueInt2, valueInt3;
427       valueInt1 = i+1;
428       valueInt2 = i+2;
429       valueInt3 = i+3;
430       valueDbl1 = valueInt1*0.1;
431       valueDbl2 = valueInt2*0.1;
432       valueDbl3 = valueInt3*0.1;
433       fieldDoubleScalarOnCells->setValueIJ(i+1,1,valueDbl1);
434
435       fieldIntScalarOnCells->setValueIJ(i+1,1,valueInt1);
436
437       fieldDoubleVectorOnCells->setValueIJ(i+1,1,valueDbl1);
438       fieldDoubleVectorOnCells->setValueIJ(i+1,2,valueDbl2);
439       fieldDoubleVectorOnCells->setValueIJ(i+1,3,valueDbl3);
440
441       fieldIntVectorOnCells->setValueIJ(i+1,1,valueInt1);
442       fieldIntVectorOnCells->setValueIJ(i+1,2,valueInt2);
443       fieldIntVectorOnCells->setValueIJ(i+1,3,valueInt3);
444     }
445
446   idMed = fieldDoubleScalarOnNodes->addDriver(MED_DRIVER,filenameMed,fieldDoubleScalarOnNodes->getName());
447   fieldDoubleScalarOnNodes->write(idMed) ;
448
449   idMed = fieldIntScalarOnNodes->addDriver(MED_DRIVER,filenameMed,fieldIntScalarOnNodes->getName());
450   fieldIntScalarOnNodes->write(idMed) ;
451
452   idMed = fieldDoubleVectorOnNodes->addDriver(MED_DRIVER,filenameMed,fieldDoubleVectorOnNodes->getName());
453   fieldDoubleVectorOnNodes->write(idMed) ;
454
455   idMed = fieldIntVectorOnNodes->addDriver(MED_DRIVER,filenameMed,fieldIntVectorOnNodes->getName());
456   fieldIntVectorOnNodes->write(idMed) ;
457
458   idMed = fieldDoubleScalarOnCells->addDriver(MED_DRIVER,filenameMed,fieldDoubleScalarOnCells->getName());
459   fieldDoubleScalarOnCells->write(idMed) ;
460
461   idMed = fieldIntScalarOnCells->addDriver(MED_DRIVER,filenameMed,fieldIntScalarOnCells->getName());
462   fieldIntScalarOnCells->write(idMed) ;
463
464   idMed = fieldDoubleVectorOnCells->addDriver(MED_DRIVER,filenameMed,fieldDoubleVectorOnCells->getName());
465   fieldDoubleVectorOnCells->write(idMed) ;
466
467   idMed = fieldIntVectorOnCells->addDriver(MED_DRIVER,filenameMed,fieldIntVectorOnCells->getName());
468   fieldIntVectorOnCells->write(idMed) ;
469
470   idVtk = fieldDoubleScalarOnNodes->addDriver(VTK_DRIVER,filenameVtk,fieldDoubleScalarOnNodes->getName());
471   fieldDoubleScalarOnNodes->writeAppend(idVtk) ;
472
473   idVtk = fieldIntScalarOnNodes->addDriver(VTK_DRIVER,filenameVtk,fieldIntScalarOnNodes->getName());
474   fieldIntScalarOnNodes->writeAppend(idVtk) ;
475
476   idVtk = fieldDoubleVectorOnNodes->addDriver(VTK_DRIVER,filenameVtk,fieldDoubleVectorOnNodes->getName());
477   fieldDoubleVectorOnNodes->writeAppend(idVtk) ;
478
479   idVtk = fieldIntVectorOnNodes->addDriver(VTK_DRIVER,filenameVtk,fieldIntVectorOnNodes->getName());
480   fieldIntVectorOnNodes->writeAppend(idVtk) ;
481
482   idVtk = fieldDoubleScalarOnCells->addDriver(VTK_DRIVER,filenameVtk,fieldDoubleScalarOnCells->getName());
483   fieldDoubleScalarOnCells->writeAppend(idVtk) ;
484
485   idVtk = fieldIntScalarOnCells->addDriver(VTK_DRIVER,filenameVtk,fieldIntScalarOnCells->getName());
486   fieldIntScalarOnCells->writeAppend(idVtk) ;
487
488   idVtk = fieldDoubleVectorOnCells->addDriver(VTK_DRIVER,filenameVtk,fieldDoubleVectorOnCells->getName());
489   fieldDoubleVectorOnCells->writeAppend(idVtk) ;
490
491   idVtk = fieldIntVectorOnCells->addDriver(VTK_DRIVER,filenameVtk,fieldIntVectorOnCells->getName());
492   fieldIntVectorOnCells->writeAppend(idVtk) ;
493
494   delete fieldDoubleScalarOnNodes;
495   delete fieldIntScalarOnNodes;
496   delete fieldDoubleVectorOnNodes;
497   delete fieldIntVectorOnNodes;
498   delete fieldDoubleScalarOnCells;
499   delete fieldIntScalarOnCells;
500   delete fieldDoubleVectorOnCells;
501   delete fieldIntVectorOnCells;
502
503   delete supportOnNodes;
504   delete supportOnCells;
505 }