Salome HOME
Copyrights update
[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 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either 
7 // version 2.1 of the License.
8 // 
9 // This library is distributed in the hope that it will be useful 
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
12 // Lesser General Public License for more details.
13 //
14 // You should have received a copy of the GNU Lesser General Public  
15 // License along with this library; if not, write to the Free Software 
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 //
18 // See http://www.salome-platform.org/
19 //
20 #include "MEDMEM_Meshing.hxx"
21 #include "MEDMEM_Group.hxx"
22
23 using namespace MEDMEM ;
24 using namespace MED_EN ;
25
26 using namespace std;
27
28 int main (int argc, char ** argv) {
29
30   // filename to save the generated MESH
31   string filename = "meshing.med" ;
32
33   MESHING myMeshing ;
34   myMeshing.setName("meshing") ;
35
36   // define coordinates
37
38   int SpaceDimension = 3 ;
39   int NumberOfNodes = 19 ;
40   double Coordinates[57] = {
41     0.0, 0.0, 0.0, 
42     0.0, 0.0, 1.0, 
43     2.0, 0.0, 1.0, 
44     0.0, 2.0, 1.0, 
45     -2.0, 0.0, 1.0, 
46     0.0, -2.0, 1.0, 
47     1.0, 1.0, 2.0, 
48     -1.0, 1.0, 2.0, 
49     -1.0, -1.0, 2.0, 
50     1.0, -1.0, 2.0, 
51     1.0, 1.0, 3.0, 
52     -1.0, 1.0, 3.0, 
53     -1.0, -1.0, 3.0, 
54     1.0, -1.0, 3.0, 
55     1.0, 1.0, 4.0, 
56     -1.0, 1.0, 4.0, 
57     -1.0, -1.0, 4.0, 
58     1.0, -1.0, 4.0,
59     0.0, 0.0, 5.0
60   };
61
62   myMeshing.setCoordinates(SpaceDimension,NumberOfNodes,Coordinates,"CARTESIAN",MED_FULL_INTERLACE);
63
64   string Names[3] = { "X","Y","Z" } ;
65   myMeshing.setCoordinatesNames(Names);
66
67   string Units[3] = { "cm","cm","cm" } ;
68   myMeshing.setCoordinatesUnits(Units) ;
69
70   // define conectivities
71
72   // cell part
73   
74   const int NumberOfTypes = 3 ;
75   medGeometryElement Types[NumberOfTypes] = {MED_TETRA4,MED_PYRA5,MED_HEXA8} ;
76   const int NumberOfElements[NumberOfTypes] = {12,2,2} ;
77
78   myMeshing.setNumberOfTypes(NumberOfTypes,MED_CELL);
79   myMeshing.setTypes(Types,MED_CELL);
80   myMeshing.setNumberOfElements(NumberOfElements,MED_CELL);
81
82   const int sizeTetra = 12*4 ;
83   int ConnectivityTetra[sizeTetra]=
84   {
85     1,2,3,6,
86     1,2,4,3,
87     1,2,5,4,
88     1,2,6,5,
89     2,7,4,3,
90     2,8,5,4,
91     2,9,6,5,
92     2,10,3,6,
93     2,7,3,10,
94     2,8,4,7,
95     2,9,5,8,
96     2,10,6,9
97   };
98   
99   myMeshing.setConnectivity(ConnectivityTetra,MED_CELL,MED_TETRA4);
100
101   int ConnectivityPyra[2*5]=
102   {
103     7,8,9,10,2,
104     15,18,17,16,19
105   };
106
107   myMeshing.setConnectivity(ConnectivityPyra,MED_CELL,MED_PYRA5);
108
109   int ConnectivityHexa[2*8]=
110   {
111     11,12,13,14,7,8,9,10,
112     15,16,17,18,11,12,13,14
113   };
114
115   myMeshing.setConnectivity(ConnectivityHexa,MED_CELL,MED_HEXA8);
116
117   // face part
118
119   const int NumberOfFacesTypes = 2 ;
120   medGeometryElement FacesTypes[NumberOfFacesTypes] = {MED_TRIA3,MED_QUAD4} ;
121   const int NumberOfFacesElements[NumberOfFacesTypes] = {4,4} ;
122
123   myMeshing.setNumberOfTypes(NumberOfFacesTypes,MED_FACE);
124   myMeshing.setTypes(FacesTypes,MED_FACE);
125   myMeshing.setNumberOfElements(NumberOfFacesElements,MED_FACE);
126
127   const int sizeTria = 3*4 ;
128   int ConnectivityTria[sizeTria]=
129   {
130     1,4,3,
131     1,5,4,
132     1,6,5,
133     1,3,6
134   };
135   
136   myMeshing.setConnectivity(ConnectivityTria,MED_FACE,MED_TRIA3);
137
138   int ConnectivityQua[4*4]=
139   {
140     7,8,9,10,
141     11,12,13,14,
142     11,7,8,12,
143     12,8,9,13
144   };
145
146   myMeshing.setConnectivity(ConnectivityQua,MED_FACE,MED_QUAD4);
147
148   // edge part
149
150   // not yet implemented : if set, results are unpredictable.
151
152   // Some groups :
153
154   // Node :
155   {
156     GROUP myGroup ;
157     myGroup.setName("SomeNodes");
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] = {4} ;
164     myGroup.setNumberOfElements(myNumberOfElements);
165     const int index[1+1] = {1,5} ;
166     const int value[4]= { 1,4,5,7} ;
167     myGroup.setNumber(index,value);
168     
169     myMeshing.addGroup(myGroup);
170   }
171   {
172     GROUP myGroup ;
173     myGroup.setName("OtherNodes");
174     myGroup.setMesh(&myMeshing);
175     myGroup.setEntity(MED_NODE);
176     myGroup.setNumberOfGeometricType(1);
177     medGeometryElement myTypes[1] = {MED_NONE};
178     myGroup.setGeometricType(myTypes);
179     const int myNumberOfElements[1] = {3} ;
180     myGroup.setNumberOfElements(myNumberOfElements);
181     const int index[1+1] = {1,4} ;
182     const int value[3]= { 2,3,6} ;
183     myGroup.setNumber(index,value);
184     
185     myMeshing.addGroup(myGroup);
186   }
187
188   // Cell :
189   {
190     GROUP myGroup ;
191     myGroup.setName("SomeCells");
192     myGroup.setMesh(&myMeshing);
193     myGroup.setEntity(MED_CELL);
194     myGroup.setNumberOfGeometricType(3);
195     medGeometryElement myTypes[3] = {MED_TETRA4,MED_PYRA5,MED_HEXA8};
196     myGroup.setGeometricType(myTypes);
197     const int myNumberOfElements[3] = {4,1,2} ;
198     myGroup.setNumberOfElements(myNumberOfElements);
199     const int index[3+1] = {1,5,6,8} ;
200     const int value[4+1+2]=
201     {
202       2,7,8,12,
203       13,
204       15,16
205     };
206     myGroup.setNumber(index,value);
207     
208     myMeshing.addGroup(myGroup);
209   }
210   {
211     GROUP myGroup ;
212     myGroup.setName("OtherCells");
213     myGroup.setMesh(&myMeshing);
214     myGroup.setEntity(MED_CELL);
215     myGroup.setNumberOfGeometricType(2);
216     medGeometryElement myTypes[] = {MED_TETRA4,MED_PYRA5};
217     myGroup.setGeometricType(myTypes);
218     const int myNumberOfElements[] = {4,1} ;
219     myGroup.setNumberOfElements(myNumberOfElements);
220     const int index[3+1] = {1,5,6} ;
221     const int value[4+1]=
222     {
223       3,4,5,9,
224       14
225     };
226     myGroup.setNumber(index,value);
227     
228     myMeshing.addGroup(myGroup);
229   }
230
231   // Face :
232   {
233     GROUP myGroup ;
234     myGroup.setName("SomeFaces");
235     myGroup.setMesh(&myMeshing);
236     myGroup.setEntity(MED_FACE);
237     myGroup.setNumberOfGeometricType(2);
238     medGeometryElement myTypes[2] = {MED_TRIA3,MED_QUAD4};
239     myGroup.setGeometricType(myTypes);
240     const int myNumberOfElements[2] = {2,3} ;
241     myGroup.setNumberOfElements(myNumberOfElements);
242     const int index[2+1] = {1,3,6} ;
243     const int value[2+3]=
244     {
245       2,4,
246       5,6,8
247     } ;
248     myGroup.setNumber(index,value);
249     
250     myMeshing.addGroup(myGroup);
251   }
252   {
253     GROUP myGroup ;
254     myGroup.setName("OtherFaces");
255     myGroup.setMesh(&myMeshing);
256     myGroup.setEntity(MED_FACE);
257     myGroup.setNumberOfGeometricType(1);
258     medGeometryElement myTypes[1] = {MED_TRIA3};
259     myGroup.setGeometricType(myTypes);
260     const int myNumberOfElements[1] = {2} ;
261     myGroup.setNumberOfElements(myNumberOfElements);
262     const int index[1+1] = {1,3} ;
263     const int value[2]=
264     {
265       1,3
266     } ;
267     myGroup.setNumber(index,value);
268     
269     myMeshing.addGroup(myGroup);
270   }
271
272   // all rigtht, we save it !
273
274   int id = myMeshing.addDriver(MED_DRIVER,filename,myMeshing.getName());
275   myMeshing.write(id) ;
276
277 }