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