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