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