Salome HOME
remove a reference to the $MED_ROOT_DIR in the Makefile.in wich is useless
[modules/med.git] / src / MEDMEM / test_MEDMEM_MeshingPoly.cxx
1 #include "MEDMEM_Meshing.hxx"
2 #include "MEDMEM_Field.hxx"
3 #include "LocalTraceCollector.hxx"
4
5 using namespace std;
6 using namespace MEDMEM;
7 using namespace MED_EN;
8
9 int main (int argc, char ** argv) {
10   LocalTraceCollector::instance();
11
12   double Coordinates[57] = {
13     2.0, 3.0, 2.0,
14     3.0, 2.0, 2.0,
15     4.0, 1.0, 2.0,
16     2.0, 0.0, 2.0,
17     0.0, 1.0, 2.0,
18     1.0, 2.0, 2.0,
19     2.0, 3.0, 1.0,
20     3.0, 2.0, 0.0,
21     4.0, 1.0, 0.0,
22     2.0, 0.0, 0.0,
23     0.0, 1.0, 0.0,
24     1.0, 2.0, 0.0,
25     5.0, 3.0, 2.0,
26     7.0, 2.0, 2.0,
27     6.0, 0.0, 2.0,
28     6.0, 3.0, 0.0,
29     7.0, 2.0, 0.0,
30     6.0, 0.0, -1.0,
31     5.0, 1.0, -3.0};
32
33   const int REFnodalConnOfFaces[74] = {
34     1, 2, 3, 4, 5, 6, // Polyhedron 1
35     1, 7, 8, 2, 
36     2, 8, 9, 3, 
37     4, 3, 9, 10, 
38     5, 4, 10, 11, 
39     6, 5, 11, 12, 
40     1, 6, 12, 7, 
41     7, 12, 8, 
42     10, 9, 8, 12, 11,
43                                    
44     13, 14, 15, 3, 2, // Polyhedron 2
45     13, 2, 8, 16, 
46     14, 13, 16, 17, 
47     15, 14, 17, 
48     15, 17, 18, 
49     15, 18, 9, 
50     3, 15, 9, 
51     2, 3, 9, 8, 
52     8, 9, 17, 16, 
53     9, 18, 17};
54
55   const int REFfacesIndex[20] = {
56     1, 7, 11, 15, 19, 23, 27, 31, 34, 
57     39, 44, 48, 52, 55, 58, 61, 64, 68, 72, 75};
58
59   const int REFpolyIndex[3] = {1, 10, 20};
60
61   double PolygonCoordinates[27] = {
62     2.0, 3.0, 12.0,
63     3.0, 2.0, 12.0,
64     4.0, 1.0, 12.0,
65     2.0, 0.0, 12.0,
66     0.0, 1.0, 12.0,
67     1.0, 2.0, 12.0,
68     5.0, 3.0, 12.0,
69     7.0, 2.0, 12.0,
70     6.0, 0.0, 12.0};
71
72   const int REFpolygonFaces[11] = {
73     1, 2, 3, 4, 5, 6, // Polygon 1   
74     7, 8, 9, 3, 2}; // Polygon 2
75
76   const int REFpolygonIndex[3] = {1, 7, 12};
77
78   MESHING myMeshing;
79   myMeshing.setName("meshing");
80
81   int NumberOfNodes = 19;
82   int SpaceDimension = 3;
83   int MeshDimension = 3;
84
85   const int NumberOfTypes = 1;
86   medGeometryElement Types[NumberOfTypes] = {MED_TETRA4};
87   const int NumberOfElements[NumberOfTypes] = {1};
88
89   myMeshing.setNumberOfTypes(NumberOfTypes, MED_CELL);
90
91   myMeshing.setCoordinates(SpaceDimension, NumberOfNodes, Coordinates,
92                            "CARTESIAN", MED_FULL_INTERLACE);
93   myMeshing.setSpaceDimension(SpaceDimension);
94   myMeshing.setMeshDimension(MeshDimension);
95   myMeshing.setTypes(Types, MED_CELL);
96   myMeshing.setNumberOfElements(NumberOfElements, MED_CELL);
97
98   string Names[3] = {"X","Y","Z"};
99   myMeshing.setCoordinatesNames(Names);
100
101   string Units[3] = {"cm","cm","cm"};
102   myMeshing.setCoordinatesUnits(Units);
103
104   const int sizeTetra = 4*1 ;
105   int ConnectivityTetra[sizeTetra]=
106   {
107     17, 9, 18, 19
108   };
109   
110   myMeshing.setConnectivity(ConnectivityTetra, MED_CELL, MED_TETRA4);
111
112   myMeshing.setPolyhedraConnectivity(REFpolyIndex, REFfacesIndex, 
113                                      REFnodalConnOfFaces, 2, MED_CELL);
114
115
116   MESHING myPolygonMeshing;
117   myPolygonMeshing.setName("PolygonMeshing");
118
119   NumberOfNodes = 9;
120   SpaceDimension = 3;
121   MeshDimension = 2;
122   medGeometryElement PolygonTypes[NumberOfTypes] = {MED_TRIA3};
123   const int PolygonNumberOfElements[NumberOfTypes] = {2};
124
125   myPolygonMeshing.setNumberOfTypes(NumberOfTypes, MED_CELL);
126
127   myPolygonMeshing.setCoordinates(SpaceDimension, NumberOfNodes, PolygonCoordinates,
128                            "CARTESIAN", MED_FULL_INTERLACE);
129   myPolygonMeshing.setSpaceDimension(SpaceDimension);
130   myPolygonMeshing.setMeshDimension(MeshDimension);
131   myPolygonMeshing.setTypes(PolygonTypes, MED_CELL);
132   myPolygonMeshing.setNumberOfElements(PolygonNumberOfElements, MED_CELL);
133
134   myPolygonMeshing.setCoordinatesNames(Names);
135   myPolygonMeshing.setCoordinatesUnits(Units);
136
137   const int sizeTri = 3*2 ;
138   int ConnectivityTri[sizeTri]=
139   {
140     1, 7, 2, 3, 9, 4
141   };
142
143   myPolygonMeshing.setConnectivity(ConnectivityTri, MED_CELL, MED_TRIA3);
144   myPolygonMeshing.setPolygonsConnectivity(REFpolygonIndex, REFpolygonFaces, 2, MED_CELL);
145   SUPPORT *sup2 = new SUPPORT(&myPolygonMeshing);
146   FIELD<double> *areas = myPolygonMeshing.getArea(sup2);
147   const double *vals2 = areas->getValue(MED_FULL_INTERLACE);
148   const double REFAreaOfPolyg[4] ={1.5, 2, 6, 6.5};
149   int nbPts=0;
150   int i;
151   for(i=0;i<4;i++)
152     if(fabs(REFAreaOfPolyg[i]-vals2[i])<1e-12)
153       nbPts++;
154   delete sup2;
155   delete areas;
156
157   SUPPORT *sup = new SUPPORT(&myMeshing);
158   FIELD<double> *vols = myMeshing.getVolume(sup);
159   const double *vals = vols->getValue(MED_FULL_INTERLACE);
160   const double REFVolOfPolyHedron[3] = {2.333333333333333, 11.66666666666666, 13.83224131414673};
161   for(i=0;i<3;i++)
162     if(fabs(REFVolOfPolyHedron[i]-vals[i])<1e-12)
163       nbPts++;
164   
165   delete vols;
166   delete sup;
167   if(nbPts==7)
168     {
169       cout << "ALL TESTS OK !!!" << endl;
170       return 0;
171     }
172   else
173     {
174       cout << "TEST FAILS !!!" << endl;
175       return -1;
176     }
177
178 }