Salome HOME
Join modifications from branch BR_DEBUG_3_2_0b1
[tools/medcoupling.git] / doc / MEDMEM / MESHINGexample.cxx
1 // Copyright (C) 2005  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
3 // 
4 #include "MEDMEM_Meshing.hxx"
5 #include "MEDMEM_Group.hxx"
6
7 using namespace MEDMEM ;
8 using namespace MED_EN ;
9
10 using namespace std;
11
12 int main (int argc, char ** argv) {
13
14   // filename to save the generated MESH
15   string filename = "meshing.med" ;
16
17   MESHING myMeshing ;
18   myMeshing.setName("meshing") ;
19
20   // define coordinates
21
22   int SpaceDimension = 3 ;
23   int NumberOfNodes = 19 ;
24   double Coordinates[57] = {
25     0.0, 0.0, 0.0, 
26     0.0, 0.0, 1.0, 
27     2.0, 0.0, 1.0, 
28     0.0, 2.0, 1.0, 
29     -2.0, 0.0, 1.0, 
30     0.0, -2.0, 1.0, 
31     1.0, 1.0, 2.0, 
32     -1.0, 1.0, 2.0, 
33     -1.0, -1.0, 2.0, 
34     1.0, -1.0, 2.0, 
35     1.0, 1.0, 3.0, 
36     -1.0, 1.0, 3.0, 
37     -1.0, -1.0, 3.0, 
38     1.0, -1.0, 3.0, 
39     1.0, 1.0, 4.0, 
40     -1.0, 1.0, 4.0, 
41     -1.0, -1.0, 4.0, 
42     1.0, -1.0, 4.0,
43     0.0, 0.0, 5.0
44   };
45
46   myMeshing.setCoordinates(SpaceDimension,NumberOfNodes,Coordinates,"CARTESIAN",MED_FULL_INTERLACE);
47
48   string Names[3] = { "X","Y","Z" } ;
49   myMeshing.setCoordinatesNames(Names);
50
51   string Units[3] = { "cm","cm","cm" } ;
52   myMeshing.setCoordinatesUnits(Units) ;
53
54   // define conectivities
55
56   // cell part
57   
58   const int NumberOfTypes = 3 ;
59   medGeometryElement Types[NumberOfTypes] = {MED_TETRA4,MED_PYRA5,MED_HEXA8} ;
60   const int NumberOfElements[NumberOfTypes] = {12,2,2} ;
61
62   myMeshing.setNumberOfTypes(NumberOfTypes,MED_CELL);
63   myMeshing.setTypes(Types,MED_CELL);
64   myMeshing.setNumberOfElements(NumberOfElements,MED_CELL);
65
66   const int sizeTetra = 12*4 ;
67   int ConnectivityTetra[sizeTetra]=
68   {
69     1,2,3,6,
70     1,2,4,3,
71     1,2,5,4,
72     1,2,6,5,
73     2,7,4,3,
74     2,8,5,4,
75     2,9,6,5,
76     2,10,3,6,
77     2,7,3,10,
78     2,8,4,7,
79     2,9,5,8,
80     2,10,6,9
81   };
82   
83   myMeshing.setConnectivity(ConnectivityTetra,MED_CELL,MED_TETRA4);
84
85   int ConnectivityPyra[2*5]=
86   {
87     7,8,9,10,2,
88     15,18,17,16,19
89   };
90
91   myMeshing.setConnectivity(ConnectivityPyra,MED_CELL,MED_PYRA5);
92
93   int ConnectivityHexa[2*8]=
94   {
95     11,12,13,14,7,8,9,10,
96     15,16,17,18,11,12,13,14
97   };
98
99   myMeshing.setConnectivity(ConnectivityHexa,MED_CELL,MED_HEXA8);
100
101   // face part
102
103   const int NumberOfFacesTypes = 2 ;
104   medGeometryElement FacesTypes[NumberOfFacesTypes] = {MED_TRIA3,MED_QUAD4} ;
105   const int NumberOfFacesElements[NumberOfFacesTypes] = {4,4} ;
106
107   myMeshing.setNumberOfTypes(NumberOfFacesTypes,MED_FACE);
108   myMeshing.setTypes(FacesTypes,MED_FACE);
109   myMeshing.setNumberOfElements(NumberOfFacesElements,MED_FACE);
110
111   const int sizeTria = 3*4 ;
112   int ConnectivityTria[sizeTria]=
113   {
114     1,4,3,
115     1,5,4,
116     1,6,5,
117     1,3,6
118   };
119   
120   myMeshing.setConnectivity(ConnectivityTria,MED_FACE,MED_TRIA3);
121
122   int ConnectivityQua[4*4]=
123   {
124     7,8,9,10,
125     11,12,13,14,
126     11,7,8,12,
127     12,8,9,13
128   };
129
130   myMeshing.setConnectivity(ConnectivityQua,MED_FACE,MED_QUAD4);
131
132   // edge part
133
134   // not yet implemented : if set, results are unpredictable.
135
136   // Some groups :
137
138   // Node :
139   {
140     GROUP myGroup ;
141     myGroup.setName("SomeNodes");
142     myGroup.setMesh(&myMeshing);
143     myGroup.setEntity(MED_NODE);
144     myGroup.setNumberOfGeometricType(1);
145     medGeometryElement myTypes[1] = {MED_NONE};
146     myGroup.setGeometricType(myTypes);
147     const int myNumberOfElements[1] = {4} ;
148     myGroup.setNumberOfElements(myNumberOfElements);
149     const int index[1+1] = {1,5} ;
150     const int value[4]= { 1,4,5,7} ;
151     myGroup.setNumber(index,value);
152     
153     myMeshing.addGroup(myGroup);
154   }
155   {
156     GROUP myGroup ;
157     myGroup.setName("OtherNodes");
158     myGroup.setMesh(&myMeshing);
159     myGroup.setEntity(MED_NODE);
160     myGroup.setNumberOfGeometricType(1);
161     medGeometryElement myTypes[1] = {MED_NONE};
162     myGroup.setGeometricType(myTypes);
163     const int myNumberOfElements[1] = {3} ;
164     myGroup.setNumberOfElements(myNumberOfElements);
165     const int index[1+1] = {1,4} ;
166     const int value[3]= { 2,3,6} ;
167     myGroup.setNumber(index,value);
168     
169     myMeshing.addGroup(myGroup);
170   }
171
172   // Cell :
173   {
174     GROUP myGroup ;
175     myGroup.setName("SomeCells");
176     myGroup.setMesh(&myMeshing);
177     myGroup.setEntity(MED_CELL);
178     myGroup.setNumberOfGeometricType(3);
179     medGeometryElement myTypes[3] = {MED_TETRA4,MED_PYRA5,MED_HEXA8};
180     myGroup.setGeometricType(myTypes);
181     const int myNumberOfElements[3] = {4,1,2} ;
182     myGroup.setNumberOfElements(myNumberOfElements);
183     const int index[3+1] = {1,5,6,8} ;
184     const int value[4+1+2]=
185     {
186       2,7,8,12,
187       13,
188       15,16
189     };
190     myGroup.setNumber(index,value);
191     
192     myMeshing.addGroup(myGroup);
193   }
194   {
195     GROUP myGroup ;
196     myGroup.setName("OtherCells");
197     myGroup.setMesh(&myMeshing);
198     myGroup.setEntity(MED_CELL);
199     myGroup.setNumberOfGeometricType(2);
200     medGeometryElement myTypes[] = {MED_TETRA4,MED_PYRA5};
201     myGroup.setGeometricType(myTypes);
202     const int myNumberOfElements[] = {4,1} ;
203     myGroup.setNumberOfElements(myNumberOfElements);
204     const int index[3+1] = {1,5,6} ;
205     const int value[4+1]=
206     {
207       3,4,5,9,
208       14
209     };
210     myGroup.setNumber(index,value);
211     
212     myMeshing.addGroup(myGroup);
213   }
214
215   // Face :
216   {
217     GROUP myGroup ;
218     myGroup.setName("SomeFaces");
219     myGroup.setMesh(&myMeshing);
220     myGroup.setEntity(MED_FACE);
221     myGroup.setNumberOfGeometricType(2);
222     medGeometryElement myTypes[2] = {MED_TRIA3,MED_QUAD4};
223     myGroup.setGeometricType(myTypes);
224     const int myNumberOfElements[2] = {2,3} ;
225     myGroup.setNumberOfElements(myNumberOfElements);
226     const int index[2+1] = {1,3,6} ;
227     const int value[2+3]=
228     {
229       2,4,
230       5,6,8
231     } ;
232     myGroup.setNumber(index,value);
233     
234     myMeshing.addGroup(myGroup);
235   }
236   {
237     GROUP myGroup ;
238     myGroup.setName("OtherFaces");
239     myGroup.setMesh(&myMeshing);
240     myGroup.setEntity(MED_FACE);
241     myGroup.setNumberOfGeometricType(1);
242     medGeometryElement myTypes[1] = {MED_TRIA3};
243     myGroup.setGeometricType(myTypes);
244     const int myNumberOfElements[1] = {2} ;
245     myGroup.setNumberOfElements(myNumberOfElements);
246     const int index[1+1] = {1,3} ;
247     const int value[2]=
248     {
249       1,3
250     } ;
251     myGroup.setNumber(index,value);
252     
253     myMeshing.addGroup(myGroup);
254   }
255
256   // all rigtht, we save it !
257
258   int id = myMeshing.addDriver(MED_DRIVER,filename,myMeshing.getName());
259   myMeshing.write(id) ;
260
261 }