]> SALOME platform Git repositories - modules/med.git/blob - src/MEDMEM_SWIG/medMeshing_test.py
Salome HOME
MEDMEM suppression
[modules/med.git] / src / MEDMEM_SWIG / medMeshing_test.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
3 #
4 # Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
5 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 #
7 # This library is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU Lesser General Public
9 # License as published by the Free Software Foundation; either
10 # version 2.1 of the License.
11 #
12 # This library is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 # Lesser General Public License for more details.
16 #
17 # You should have received a copy of the GNU Lesser General Public
18 # License along with this library; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
20 #
21 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 #
23
24 ###################################################################################
25 # This Python script uses the wrapped C++ class MESHING to buid a mesh from only
26 # primitive data like coordinates (Pythoin double array) and connectivity (Python
27 # integer arrays). It is the Python equivalent of the C++ program
28 # test_MEDMEM_Meshing.cxx in the ../MEDMEM directory of the SALOME distribution
29 ###################################################################################
30 #
31 from libMEDMEM_Swig import *
32
33 # files name to save the generated MESH(ING) in different format
34 # Med V2.2 and vtk
35
36 med22FileName = "toto22.med"
37
38 vtkFileName = "toto.vtk"
39
40 myMeshing = MESHING()
41
42 myMeshing.setName("meshing")
43
44 # definition of the coordinates
45
46 spaceDimension = 3
47
48 numberOfNodes = 19
49
50 coordinates = [
51     0.0, 0.0, 0.0  ,
52     0.0, 0.0, 1.0  ,
53     2.0, 0.0, 1.0  ,
54     0.0, 2.0, 1.0  ,
55     -2.0, 0.0, 1.0 ,
56     0.0, -2.0, 1.0 ,
57     1.0, 1.0, 2.0  ,
58     -1.0, 1.0, 2.0 ,
59     -1.0, -1.0, 2.0,
60     1.0, -1.0, 2.0 ,
61     1.0, 1.0, 3.0  ,
62     -1.0, 1.0, 3.0 ,
63     -1.0, -1.0, 3.0,
64     1.0, -1.0, 3.0 ,
65     1.0, 1.0, 4.0  ,
66     -1.0, 1.0, 4.0 ,
67     -1.0, -1.0, 4.0,
68     1.0, -1.0, 4.0 ,
69     0.0, 0.0, 5.0]
70
71 myMeshing.setCoordinates(spaceDimension,numberOfNodes,coordinates,"CARTESIAN",MED_FULL_INTERLACE)
72
73 for i in range(spaceDimension):
74     unit = "cm      "
75     if (i == 0):
76         name = "X       "
77     elif (i == 1):
78         name = "Y       "
79     elif (i == 2):
80         name = "Z       "
81
82     myMeshing.setCoordinateName(name,i)
83     myMeshing.setCoordinateUnit(unit,i)
84
85 # definition of connectivities
86 # cell part
87
88 numberOfTypes = 3
89 entity = MED_CELL
90
91 types = []
92 numberOfElements = []
93
94 types.append(MED_TETRA4)
95 numberOfElements.append(12)
96
97 types.append(MED_PYRA5)
98 numberOfElements.append(2)
99
100 types.append(MED_HEXA8)
101 numberOfElements.append(2)
102
103 myMeshing.setNumberOfTypes(numberOfTypes,entity)
104 myMeshing.setTypes(types,entity)
105 myMeshing.setNumberOfElements(numberOfElements,entity)
106
107 connectivityTetra =  [1,2,3,6,
108                       1,2,4,3 ,
109                       1,2,5,4 ,
110                       1,2,6,5 ,
111                       2,7,4,3 ,
112                       2,8,5,4 ,
113                       2,9,6,5 ,
114                       2,10,3,6,
115                       2,7,3,10,
116                       2,8,4,7 ,
117                       2,9,5,8 ,
118                       2,10,6,9]
119
120 myMeshing.setConnectivity(entity,types[0],connectivityTetra)
121
122 connectivityPyra = [
123     7,8,9,10,2,
124     15,18,17,16,19]
125
126 myMeshing.setConnectivity(entity,types[1],connectivityPyra)
127
128 connectivityHexa = [
129     11,12,13,14,7,8,9,10,
130     15,16,17,18,11,12,13,14]
131
132 myMeshing.setConnectivity(entity,types[2],connectivityHexa)
133
134 # face part
135
136 numberOfTypes = 2
137 entity = MED_FACE
138
139 types = []
140 numberOfElements = []
141
142 types.append(MED_TRIA3)
143 numberOfElements.append(4)
144
145 types.append(MED_QUAD4)
146 numberOfElements.append(4)
147
148 myMeshing.setNumberOfTypes(numberOfTypes,entity)
149 myMeshing.setTypes(types,entity)
150 myMeshing.setNumberOfElements(numberOfElements,entity)
151
152 connectivityTria = [
153     1,4,3,
154     1,5,4,
155     1,6,5,
156     1,3,6]
157
158 myMeshing.setConnectivity(entity,types[0],connectivityTria)
159
160 connectivityQuad = [
161     7,8,9,10   ,
162     11,12,13,14,
163     11,7,8,12  ,
164     12,8,9,13]
165
166 myMeshing.setConnectivity(entity,types[1],connectivityQuad)
167
168 # edge part
169
170 # adding GROUPs
171 # on Node
172
173 myGroup = GROUP()
174 myGroup.setName("SomeNodes")
175 myGroup.setMesh(myMeshing)
176 myGroup.setEntity(MED_NODE)
177 myGroup.setNumberOfGeometricType(1)
178
179 myTypes = [MED_NONE]
180 myGroup.setGeometricType(myTypes)
181
182 myNumberOfElements = [4]
183 myGroup.setNumberOfElements(myNumberOfElements)
184
185 index = [1,5]
186 values = [1,4,5,7]
187 myGroup.setNumber(index,values)
188
189 myMeshing.addGroup(myGroup)
190
191 myGroup = GROUP()
192 myGroup.setName("OtherNodes")
193 myGroup.setMesh(myMeshing)
194 myGroup.setEntity(MED_NODE)
195 myGroup.setNumberOfGeometricType(1)
196
197 myTypes = [MED_NONE]
198 myGroup.setGeometricType(myTypes)
199
200 myNumberOfElements = [3]
201 myGroup.setNumberOfElements(myNumberOfElements)
202
203 index = [1,4]
204 values = [2,3,6]
205 myGroup.setNumber(index,values)
206
207 myMeshing.addGroup(myGroup)
208
209 # on Cell
210
211 myGroup = GROUP()
212 myGroup.setName("SomeCells")
213 myGroup.setMesh(myMeshing)
214 myGroup.setEntity(MED_CELL)
215 myGroup.setNumberOfGeometricType(3)
216
217 myTypes = [MED_TETRA4,MED_PYRA5,MED_HEXA8]
218 myGroup.setGeometricType(myTypes)
219
220 myNumberOfElements = [4,1,2]
221 myGroup.setNumberOfElements(myNumberOfElements)
222
223 index = [1,5,6,8]
224 values = [
225     2,7,8,12,
226     13,
227     15,16
228     ]
229 myGroup.setNumber(index,values)
230
231 myMeshing.addGroup(myGroup)
232
233 myGroup = GROUP()
234 myGroup.setName("OtherCells")
235 myGroup.setMesh(myMeshing)
236 myGroup.setEntity(MED_CELL)
237 myGroup.setNumberOfGeometricType(2)
238
239 myTypes = [MED_TETRA4,MED_PYRA5]
240 myGroup.setGeometricType(myTypes)
241
242 myNumberOfElements = [4,1]
243 myGroup.setNumberOfElements(myNumberOfElements)
244
245 index = [1,5,6]
246 values = [
247     3,4,5,9,
248     14
249     ]
250 myGroup.setNumber(index,values)
251
252 myMeshing.addGroup(myGroup)
253
254 # on Face
255
256 myGroup = GROUP()
257 myGroup.setName("SomeFaces")
258 myGroup.setMesh(myMeshing)
259 myGroup.setEntity(MED_FACE)
260 myGroup.setNumberOfGeometricType(2)
261
262 myTypes = [MED_TRIA3,MED_QUAD4]
263 myGroup.setGeometricType(myTypes)
264
265 myNumberOfElements = [2,3]
266 myGroup.setNumberOfElements(myNumberOfElements)
267
268 index = [1,3,6]
269 values = [
270     2,4,
271     5,6,8
272     ]
273 myGroup.setNumber(index,values)
274
275 myMeshing.addGroup(myGroup)
276
277 myGroup = GROUP()
278 myGroup.setName("OtherFaces")
279 myGroup.setMesh(myMeshing)
280 myGroup.setEntity(MED_FACE)
281 myGroup.setNumberOfGeometricType(1)
282
283 myTypes = [MED_TRIA3]
284 myGroup.setGeometricType(myTypes)
285
286 myNumberOfElements = [2]
287 myGroup.setNumberOfElements(myNumberOfElements)
288
289 index = [1,3]
290 values = [
291     1,3
292     ]
293 myGroup.setNumber(index,values)
294
295 myMeshing.addGroup(myGroup)
296
297 # saving of the generated mesh in MED and VTK format
298
299 driver = MED_MESH_WRONLY_DRIVER( med22FileName, myMeshing )
300 myMeshing.write(driver)
301
302 myMeshing.write(VTK_DRIVER,vtkFileName)
303
304 # we build now 8 fields : 4 fields double (integer) :
305 #                         2 fields on nodes (cells) :
306 #                         1 scalar (vector)
307
308 supportOnNodes = myMeshing.getSupportOnAll(MED_NODE)
309 numberOfNodes = supportOnNodes.getNumberOfElements(MED_ALL_ELEMENTS)
310
311 supportOnCells = myMeshing.getSupportOnAll(MED_CELL)
312 numberOfCells = supportOnCells.getNumberOfElements(MED_ALL_ELEMENTS)
313
314 fieldDoubleScalarOnNodes = FIELDDOUBLE(supportOnNodes,1)
315 fieldDoubleScalarOnNodes.setName("fieldScalarDoubleNode")
316 fieldDoubleScalarOnNodes.setIterationNumber(-1)
317 fieldDoubleScalarOnNodes.setOrderNumber(-1)
318 fieldDoubleScalarOnNodes.setTime(0.0)
319
320 fieldDoubleScalarOnNodes.setComponentName(1,"Vx")
321 fieldDoubleScalarOnNodes.setComponentDescription(1,"comp1")
322 fieldDoubleScalarOnNodes.setMEDComponentUnit(1,"unit1")
323
324 fieldDoubleVectorOnNodes = FIELDDOUBLE(supportOnNodes,spaceDimension)
325 fieldDoubleVectorOnNodes.setName("fieldVectorDoubleNode")
326 fieldDoubleVectorOnNodes.setIterationNumber(-1)
327 fieldDoubleVectorOnNodes.setOrderNumber(-1)
328 fieldDoubleVectorOnNodes.setTime(0.0)
329
330 fieldDoubleVectorOnNodes.setComponentName(1,"Vx")
331 fieldDoubleVectorOnNodes.setComponentDescription(1,"comp1")
332 fieldDoubleVectorOnNodes.setMEDComponentUnit(1,"unit1")
333 fieldDoubleVectorOnNodes.setComponentName(2,"Vy")
334 fieldDoubleVectorOnNodes.setComponentDescription(2,"comp2")
335 fieldDoubleVectorOnNodes.setMEDComponentUnit(2,"unit2")
336 fieldDoubleVectorOnNodes.setComponentName(3,"Vz")
337 fieldDoubleVectorOnNodes.setComponentDescription(3,"comp3")
338 fieldDoubleVectorOnNodes.setMEDComponentUnit(3,"unit3")
339
340 fieldDoubleScalarOnCells = FIELDDOUBLE(supportOnCells,1)
341 fieldDoubleScalarOnCells.setName("fieldScalarDoubleCell")
342 fieldDoubleScalarOnCells.setIterationNumber(-1)
343 fieldDoubleScalarOnCells.setOrderNumber(-1)
344 fieldDoubleScalarOnCells.setTime(0.0)
345
346 fieldDoubleScalarOnCells.setComponentName(1,"Vx")
347 fieldDoubleScalarOnCells.setComponentDescription(1,"comp1")
348 fieldDoubleScalarOnCells.setMEDComponentUnit(1,"unit1")
349
350 fieldDoubleVectorOnCells = FIELDDOUBLE(supportOnCells,spaceDimension)
351 fieldDoubleVectorOnCells.setName("fieldVectorrDoubleCell")
352 fieldDoubleVectorOnCells.setIterationNumber(-1)
353 fieldDoubleVectorOnCells.setOrderNumber(-1)
354 fieldDoubleVectorOnCells.setTime(0.0)
355
356 fieldDoubleVectorOnCells.setComponentName(1,"Vx")
357 fieldDoubleVectorOnCells.setComponentDescription(1,"comp1")
358 fieldDoubleVectorOnCells.setMEDComponentUnit(1,"unit1")
359 fieldDoubleVectorOnCells.setComponentName(2,"Vy")
360 fieldDoubleVectorOnCells.setComponentDescription(2,"comp2")
361 fieldDoubleVectorOnCells.setMEDComponentUnit(2,"unit2")
362 fieldDoubleVectorOnCells.setComponentName(3,"Vz")
363 fieldDoubleVectorOnCells.setComponentDescription(3,"comp3")
364 fieldDoubleVectorOnCells.setMEDComponentUnit(3,"unit3")
365
366 fieldIntScalarOnNodes = FIELDINT(supportOnNodes,1)
367 fieldIntScalarOnNodes.setName("fieldScalarIntNode")
368 fieldIntScalarOnNodes.setIterationNumber(-1)
369 fieldIntScalarOnNodes.setOrderNumber(-1)
370 fieldIntScalarOnNodes.setTime(0.0)
371
372 fieldIntScalarOnNodes.setComponentName(1,"Vx")
373 fieldIntScalarOnNodes.setComponentDescription(1,"comp1")
374 fieldIntScalarOnNodes.setMEDComponentUnit(1,"unit1")
375
376 fieldIntVectorOnNodes = FIELDINT(supportOnNodes,spaceDimension)
377 fieldIntVectorOnNodes.setName("fieldVectorIntNode")
378 fieldIntVectorOnNodes.setIterationNumber(-1)
379 fieldIntVectorOnNodes.setOrderNumber(-1)
380 fieldIntVectorOnNodes.setTime(0.0)
381
382 fieldIntVectorOnNodes.setComponentName(1,"Vx")
383 fieldIntVectorOnNodes.setComponentDescription(1,"comp1")
384 fieldIntVectorOnNodes.setMEDComponentUnit(1,"unit1")
385 fieldIntVectorOnNodes.setComponentName(2,"Vy")
386 fieldIntVectorOnNodes.setComponentDescription(2,"comp2")
387 fieldIntVectorOnNodes.setMEDComponentUnit(2,"unit2")
388 fieldIntVectorOnNodes.setComponentName(3,"Vz")
389 fieldIntVectorOnNodes.setComponentDescription(3,"comp3")
390 fieldIntVectorOnNodes.setMEDComponentUnit(3,"unit3")
391
392 fieldIntScalarOnCells = FIELDINT(supportOnCells,1)
393 fieldIntScalarOnCells.setName("fieldScalarIntCell")
394 fieldIntScalarOnCells.setIterationNumber(-1)
395 fieldIntScalarOnCells.setOrderNumber(-1)
396 fieldIntScalarOnCells.setTime(0.0)
397
398 fieldIntScalarOnCells.setComponentName(1,"Vx")
399 fieldIntScalarOnCells.setComponentDescription(1,"comp1")
400 fieldIntScalarOnCells.setMEDComponentUnit(1,"unit1")
401
402 fieldIntVectorOnCells = FIELDINT(supportOnCells,spaceDimension)
403 fieldIntVectorOnCells.setName("fieldVectorrIntCell")
404 fieldIntVectorOnCells.setIterationNumber(-1)
405 fieldIntVectorOnCells.setOrderNumber(-1)
406 fieldIntVectorOnCells.setTime(0.0)
407
408 fieldIntVectorOnCells.setComponentName(1,"Vx")
409 fieldIntVectorOnCells.setComponentDescription(1,"comp1")
410 fieldIntVectorOnCells.setMEDComponentUnit(1,"unit1")
411 fieldIntVectorOnCells.setComponentName(2,"Vy")
412 fieldIntVectorOnCells.setComponentDescription(2,"comp2")
413 fieldIntVectorOnCells.setMEDComponentUnit(2,"unit2")
414 fieldIntVectorOnCells.setComponentName(3,"Vz")
415 fieldIntVectorOnCells.setComponentDescription(3,"comp3")
416 fieldIntVectorOnCells.setMEDComponentUnit(3,"unit3")
417
418 for i in range(numberOfNodes):
419     valueInt1 = i+1
420     valueInt2 = i+2
421     valueInt3 = i+3
422     valueDbl1 = valueInt1*0.1
423     valueDbl2 = valueInt2*0.1
424     valueDbl3 = valueInt3*0.1
425     fieldDoubleScalarOnNodes.setValueIJ(i+1,1,valueDbl1)
426
427     fieldIntScalarOnNodes.setValueIJ(i+1,1,valueInt1)
428
429     fieldDoubleVectorOnNodes.setValueIJ(i+1,1,valueDbl1)
430     fieldDoubleVectorOnNodes.setValueIJ(i+1,2,valueDbl2)
431     fieldDoubleVectorOnNodes.setValueIJ(i+1,3,valueDbl3)
432
433     fieldIntVectorOnNodes.setValueIJ(i+1,1,valueInt1)
434     fieldIntVectorOnNodes.setValueIJ(i+1,2,valueInt2)
435     fieldIntVectorOnNodes.setValueIJ(i+1,3,valueInt3)
436
437 for i in range(numberOfCells):
438     valueInt1 = i+1
439     valueInt2 = i+2
440     valueInt3 = i+3
441     valueDbl1 = valueInt1*0.1
442     valueDbl2 = valueInt2*0.1
443     valueDbl3 = valueInt3*0.1
444     fieldDoubleScalarOnCells.setValueIJ(i+1,1,valueDbl1)
445
446     fieldIntScalarOnCells.setValueIJ(i+1,1,valueInt1)
447
448     fieldDoubleVectorOnCells.setValueIJ(i+1,1,valueDbl1)
449     fieldDoubleVectorOnCells.setValueIJ(i+1,2,valueDbl2)
450     fieldDoubleVectorOnCells.setValueIJ(i+1,3,valueDbl3)
451
452     fieldIntVectorOnCells.setValueIJ(i+1,1,valueInt1)
453     fieldIntVectorOnCells.setValueIJ(i+1,2,valueInt2)
454     fieldIntVectorOnCells.setValueIJ(i+1,3,valueInt3)
455
456 driver = MED_FIELDDOUBLE_WRONLY_DRIVER(med22FileName,fieldDoubleScalarOnNodes)
457 driver.open()
458 driver.write()
459 driver.close()
460
461 driver = MED_FIELDINT_WRONLY_DRIVER(med22FileName,fieldIntScalarOnNodes)
462 fieldIntScalarOnNodes.write(driver)
463
464 idMedV22 = fieldDoubleScalarOnCells.addDriver(MED_DRIVER,med22FileName)
465 fieldDoubleScalarOnCells.write(idMedV22)
466
467 fieldDoubleVectorOnNodes.write(MED_DRIVER,med22FileName)
468 fieldIntVectorOnNodes.write   (MED_DRIVER,med22FileName)
469 fieldIntScalarOnCells.write   (MED_DRIVER,med22FileName)
470 fieldDoubleVectorOnCells.write(MED_DRIVER,med22FileName)
471 fieldIntVectorOnCells.write   (MED_DRIVER,med22FileName)
472
473
474 idVtk = fieldDoubleScalarOnNodes.addDriver(VTK_DRIVER,vtkFileName,fieldDoubleScalarOnNodes.getName())
475 fieldDoubleScalarOnNodes.writeAppend(idVtk)
476
477 idVtk = fieldIntScalarOnNodes.addDriver(VTK_DRIVER,vtkFileName,fieldIntScalarOnNodes.getName())
478 fieldIntScalarOnNodes.writeAppend(idVtk)
479
480 idVtk = fieldDoubleVectorOnNodes.addDriver(VTK_DRIVER,vtkFileName,fieldDoubleVectorOnNodes.getName())
481 fieldDoubleVectorOnNodes.writeAppend(idVtk)
482
483 idVtk = fieldIntVectorOnNodes.addDriver(VTK_DRIVER,vtkFileName,fieldIntVectorOnNodes.getName())
484 fieldIntVectorOnNodes.writeAppend(idVtk)
485
486 idVtk = fieldDoubleScalarOnCells.addDriver(VTK_DRIVER,vtkFileName,fieldDoubleScalarOnCells.getName())
487 fieldDoubleScalarOnCells.writeAppend(idVtk)
488
489 idVtk = fieldIntScalarOnCells.addDriver(VTK_DRIVER,vtkFileName,fieldIntScalarOnCells.getName())
490 fieldIntScalarOnCells.writeAppend(idVtk)
491
492 idVtk = fieldDoubleVectorOnCells.addDriver(VTK_DRIVER,vtkFileName,fieldDoubleVectorOnCells.getName())
493 fieldDoubleVectorOnCells.writeAppend(idVtk)
494
495 idVtk = fieldIntVectorOnCells.addDriver(VTK_DRIVER,vtkFileName,fieldIntVectorOnCells.getName())
496 fieldIntVectorOnCells.writeAppend(idVtk)