1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
4 # Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
5 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
21 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
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 ###################################################################################
31 from libMEDMEM_Swig import *
33 # files name to save the generated MESH(ING) in different format
36 med22FileName = "toto22.med"
38 vtkFileName = "toto.vtk"
42 myMeshing.setName("meshing")
44 # definition of the coordinates
71 myMeshing.setCoordinates(spaceDimension,numberOfNodes,coordinates,"CARTESIAN",MED_FULL_INTERLACE)
73 for i in range(spaceDimension):
82 myMeshing.setCoordinateName(name,i)
83 myMeshing.setCoordinateUnit(unit,i)
85 # definition of connectivities
94 types.append(MED_TETRA4)
95 numberOfElements.append(12)
97 types.append(MED_PYRA5)
98 numberOfElements.append(2)
100 types.append(MED_HEXA8)
101 numberOfElements.append(2)
103 myMeshing.setNumberOfTypes(numberOfTypes,entity)
104 myMeshing.setTypes(types,entity)
105 myMeshing.setNumberOfElements(numberOfElements,entity)
107 connectivityTetra = [1,2,3,6,
120 myMeshing.setConnectivity(entity,types[0],connectivityTetra)
126 myMeshing.setConnectivity(entity,types[1],connectivityPyra)
129 11,12,13,14,7,8,9,10,
130 15,16,17,18,11,12,13,14]
132 myMeshing.setConnectivity(entity,types[2],connectivityHexa)
140 numberOfElements = []
142 types.append(MED_TRIA3)
143 numberOfElements.append(4)
145 types.append(MED_QUAD4)
146 numberOfElements.append(4)
148 myMeshing.setNumberOfTypes(numberOfTypes,entity)
149 myMeshing.setTypes(types,entity)
150 myMeshing.setNumberOfElements(numberOfElements,entity)
158 myMeshing.setConnectivity(entity,types[0],connectivityTria)
166 myMeshing.setConnectivity(entity,types[1],connectivityQuad)
174 myGroup.setName("SomeNodes")
175 myGroup.setMesh(myMeshing)
176 myGroup.setEntity(MED_NODE)
177 myGroup.setNumberOfGeometricType(1)
180 myGroup.setGeometricType(myTypes)
182 myNumberOfElements = [4]
183 myGroup.setNumberOfElements(myNumberOfElements)
187 myGroup.setNumber(index,values)
189 myMeshing.addGroup(myGroup)
192 myGroup.setName("OtherNodes")
193 myGroup.setMesh(myMeshing)
194 myGroup.setEntity(MED_NODE)
195 myGroup.setNumberOfGeometricType(1)
198 myGroup.setGeometricType(myTypes)
200 myNumberOfElements = [3]
201 myGroup.setNumberOfElements(myNumberOfElements)
205 myGroup.setNumber(index,values)
207 myMeshing.addGroup(myGroup)
212 myGroup.setName("SomeCells")
213 myGroup.setMesh(myMeshing)
214 myGroup.setEntity(MED_CELL)
215 myGroup.setNumberOfGeometricType(3)
217 myTypes = [MED_TETRA4,MED_PYRA5,MED_HEXA8]
218 myGroup.setGeometricType(myTypes)
220 myNumberOfElements = [4,1,2]
221 myGroup.setNumberOfElements(myNumberOfElements)
229 myGroup.setNumber(index,values)
231 myMeshing.addGroup(myGroup)
234 myGroup.setName("OtherCells")
235 myGroup.setMesh(myMeshing)
236 myGroup.setEntity(MED_CELL)
237 myGroup.setNumberOfGeometricType(2)
239 myTypes = [MED_TETRA4,MED_PYRA5]
240 myGroup.setGeometricType(myTypes)
242 myNumberOfElements = [4,1]
243 myGroup.setNumberOfElements(myNumberOfElements)
250 myGroup.setNumber(index,values)
252 myMeshing.addGroup(myGroup)
257 myGroup.setName("SomeFaces")
258 myGroup.setMesh(myMeshing)
259 myGroup.setEntity(MED_FACE)
260 myGroup.setNumberOfGeometricType(2)
262 myTypes = [MED_TRIA3,MED_QUAD4]
263 myGroup.setGeometricType(myTypes)
265 myNumberOfElements = [2,3]
266 myGroup.setNumberOfElements(myNumberOfElements)
273 myGroup.setNumber(index,values)
275 myMeshing.addGroup(myGroup)
278 myGroup.setName("OtherFaces")
279 myGroup.setMesh(myMeshing)
280 myGroup.setEntity(MED_FACE)
281 myGroup.setNumberOfGeometricType(1)
283 myTypes = [MED_TRIA3]
284 myGroup.setGeometricType(myTypes)
286 myNumberOfElements = [2]
287 myGroup.setNumberOfElements(myNumberOfElements)
293 myGroup.setNumber(index,values)
295 myMeshing.addGroup(myGroup)
297 # saving of the generated mesh in MED and VTK format
299 driver = MED_MESH_WRONLY_DRIVER( med22FileName, myMeshing )
300 myMeshing.write(driver)
302 myMeshing.write(VTK_DRIVER,vtkFileName)
304 # we build now 8 fields : 4 fields double (integer) :
305 # 2 fields on nodes (cells) :
308 supportOnNodes = myMeshing.getSupportOnAll(MED_NODE)
309 numberOfNodes = supportOnNodes.getNumberOfElements(MED_ALL_ELEMENTS)
311 supportOnCells = myMeshing.getSupportOnAll(MED_CELL)
312 numberOfCells = supportOnCells.getNumberOfElements(MED_ALL_ELEMENTS)
314 fieldDoubleScalarOnNodes = FIELDDOUBLE(supportOnNodes,1)
315 fieldDoubleScalarOnNodes.setName("fieldScalarDoubleNode")
316 fieldDoubleScalarOnNodes.setIterationNumber(-1)
317 fieldDoubleScalarOnNodes.setOrderNumber(-1)
318 fieldDoubleScalarOnNodes.setTime(0.0)
320 fieldDoubleScalarOnNodes.setComponentName(1,"Vx")
321 fieldDoubleScalarOnNodes.setComponentDescription(1,"comp1")
322 fieldDoubleScalarOnNodes.setMEDComponentUnit(1,"unit1")
324 fieldDoubleVectorOnNodes = FIELDDOUBLE(supportOnNodes,spaceDimension)
325 fieldDoubleVectorOnNodes.setName("fieldVectorDoubleNode")
326 fieldDoubleVectorOnNodes.setIterationNumber(-1)
327 fieldDoubleVectorOnNodes.setOrderNumber(-1)
328 fieldDoubleVectorOnNodes.setTime(0.0)
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")
340 fieldDoubleScalarOnCells = FIELDDOUBLE(supportOnCells,1)
341 fieldDoubleScalarOnCells.setName("fieldScalarDoubleCell")
342 fieldDoubleScalarOnCells.setIterationNumber(-1)
343 fieldDoubleScalarOnCells.setOrderNumber(-1)
344 fieldDoubleScalarOnCells.setTime(0.0)
346 fieldDoubleScalarOnCells.setComponentName(1,"Vx")
347 fieldDoubleScalarOnCells.setComponentDescription(1,"comp1")
348 fieldDoubleScalarOnCells.setMEDComponentUnit(1,"unit1")
350 fieldDoubleVectorOnCells = FIELDDOUBLE(supportOnCells,spaceDimension)
351 fieldDoubleVectorOnCells.setName("fieldVectorrDoubleCell")
352 fieldDoubleVectorOnCells.setIterationNumber(-1)
353 fieldDoubleVectorOnCells.setOrderNumber(-1)
354 fieldDoubleVectorOnCells.setTime(0.0)
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")
366 fieldIntScalarOnNodes = FIELDINT(supportOnNodes,1)
367 fieldIntScalarOnNodes.setName("fieldScalarIntNode")
368 fieldIntScalarOnNodes.setIterationNumber(-1)
369 fieldIntScalarOnNodes.setOrderNumber(-1)
370 fieldIntScalarOnNodes.setTime(0.0)
372 fieldIntScalarOnNodes.setComponentName(1,"Vx")
373 fieldIntScalarOnNodes.setComponentDescription(1,"comp1")
374 fieldIntScalarOnNodes.setMEDComponentUnit(1,"unit1")
376 fieldIntVectorOnNodes = FIELDINT(supportOnNodes,spaceDimension)
377 fieldIntVectorOnNodes.setName("fieldVectorIntNode")
378 fieldIntVectorOnNodes.setIterationNumber(-1)
379 fieldIntVectorOnNodes.setOrderNumber(-1)
380 fieldIntVectorOnNodes.setTime(0.0)
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")
392 fieldIntScalarOnCells = FIELDINT(supportOnCells,1)
393 fieldIntScalarOnCells.setName("fieldScalarIntCell")
394 fieldIntScalarOnCells.setIterationNumber(-1)
395 fieldIntScalarOnCells.setOrderNumber(-1)
396 fieldIntScalarOnCells.setTime(0.0)
398 fieldIntScalarOnCells.setComponentName(1,"Vx")
399 fieldIntScalarOnCells.setComponentDescription(1,"comp1")
400 fieldIntScalarOnCells.setMEDComponentUnit(1,"unit1")
402 fieldIntVectorOnCells = FIELDINT(supportOnCells,spaceDimension)
403 fieldIntVectorOnCells.setName("fieldVectorrIntCell")
404 fieldIntVectorOnCells.setIterationNumber(-1)
405 fieldIntVectorOnCells.setOrderNumber(-1)
406 fieldIntVectorOnCells.setTime(0.0)
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")
418 for i in range(numberOfNodes):
422 valueDbl1 = valueInt1*0.1
423 valueDbl2 = valueInt2*0.1
424 valueDbl3 = valueInt3*0.1
425 fieldDoubleScalarOnNodes.setValueIJ(i+1,1,valueDbl1)
427 fieldIntScalarOnNodes.setValueIJ(i+1,1,valueInt1)
429 fieldDoubleVectorOnNodes.setValueIJ(i+1,1,valueDbl1)
430 fieldDoubleVectorOnNodes.setValueIJ(i+1,2,valueDbl2)
431 fieldDoubleVectorOnNodes.setValueIJ(i+1,3,valueDbl3)
433 fieldIntVectorOnNodes.setValueIJ(i+1,1,valueInt1)
434 fieldIntVectorOnNodes.setValueIJ(i+1,2,valueInt2)
435 fieldIntVectorOnNodes.setValueIJ(i+1,3,valueInt3)
437 for i in range(numberOfCells):
441 valueDbl1 = valueInt1*0.1
442 valueDbl2 = valueInt2*0.1
443 valueDbl3 = valueInt3*0.1
444 fieldDoubleScalarOnCells.setValueIJ(i+1,1,valueDbl1)
446 fieldIntScalarOnCells.setValueIJ(i+1,1,valueInt1)
448 fieldDoubleVectorOnCells.setValueIJ(i+1,1,valueDbl1)
449 fieldDoubleVectorOnCells.setValueIJ(i+1,2,valueDbl2)
450 fieldDoubleVectorOnCells.setValueIJ(i+1,3,valueDbl3)
452 fieldIntVectorOnCells.setValueIJ(i+1,1,valueInt1)
453 fieldIntVectorOnCells.setValueIJ(i+1,2,valueInt2)
454 fieldIntVectorOnCells.setValueIJ(i+1,3,valueInt3)
456 driver = MED_FIELDDOUBLE_WRONLY_DRIVER(med22FileName,fieldDoubleScalarOnNodes)
461 driver = MED_FIELDINT_WRONLY_DRIVER(med22FileName,fieldIntScalarOnNodes)
462 fieldIntScalarOnNodes.write(driver)
464 idMedV22 = fieldDoubleScalarOnCells.addDriver(MED_DRIVER,med22FileName)
465 fieldDoubleScalarOnCells.write(idMedV22)
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)
474 idVtk = fieldDoubleScalarOnNodes.addDriver(VTK_DRIVER,vtkFileName,fieldDoubleScalarOnNodes.getName())
475 fieldDoubleScalarOnNodes.writeAppend(idVtk)
477 idVtk = fieldIntScalarOnNodes.addDriver(VTK_DRIVER,vtkFileName,fieldIntScalarOnNodes.getName())
478 fieldIntScalarOnNodes.writeAppend(idVtk)
480 idVtk = fieldDoubleVectorOnNodes.addDriver(VTK_DRIVER,vtkFileName,fieldDoubleVectorOnNodes.getName())
481 fieldDoubleVectorOnNodes.writeAppend(idVtk)
483 idVtk = fieldIntVectorOnNodes.addDriver(VTK_DRIVER,vtkFileName,fieldIntVectorOnNodes.getName())
484 fieldIntVectorOnNodes.writeAppend(idVtk)
486 idVtk = fieldDoubleScalarOnCells.addDriver(VTK_DRIVER,vtkFileName,fieldDoubleScalarOnCells.getName())
487 fieldDoubleScalarOnCells.writeAppend(idVtk)
489 idVtk = fieldIntScalarOnCells.addDriver(VTK_DRIVER,vtkFileName,fieldIntScalarOnCells.getName())
490 fieldIntScalarOnCells.writeAppend(idVtk)
492 idVtk = fieldDoubleVectorOnCells.addDriver(VTK_DRIVER,vtkFileName,fieldDoubleVectorOnCells.getName())
493 fieldDoubleVectorOnCells.writeAppend(idVtk)
495 idVtk = fieldIntVectorOnCells.addDriver(VTK_DRIVER,vtkFileName,fieldIntVectorOnCells.getName())
496 fieldIntVectorOnCells.writeAppend(idVtk)