X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=test%2Ftest_vlapi_growthlayer.py;fp=test%2Ftest_vlapi_growthlayer.py;h=a82afed7d5d01f31e8d4be6064d42adad0378578;hp=0000000000000000000000000000000000000000;hb=d3c3260cd969833da715c1aaec3bfcaea2ceabea;hpb=e3d582dca70275fa15c65d7d01a3b9c019017c8d diff --git a/test/test_vlapi_growthlayer.py b/test/test_vlapi_growthlayer.py new file mode 100644 index 000000000..a82afed7d --- /dev/null +++ b/test/test_vlapi_growthlayer.py @@ -0,0 +1,145 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2023 CEA, EDF, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +import math +import salome +salome.salome_init_without_session() + +import GEOM +import SHAPERSTUDY +from salome.geom import geomBuilder +from salome.smesh import smeshBuilder +from salome.shaper import model + +def assertAlmostEqual(a,b,tol): + if ( abs(a-b) < tol ): + return True + else: + print( "not close vals", a, b ) + return False + + +geompy = geomBuilder.New() + +O = geompy.MakeVertex(0, 0, 0) +OX = geompy.MakeVectorDXDYDZ(1, 0, 0) +OY = geompy.MakeVectorDXDYDZ(0, 1, 0) +OZ = geompy.MakeVectorDXDYDZ(0, 0, 1) + +# create a disk +geompy.addToStudy( O, 'O' ) +geompy.addToStudy( OX, 'OX' ) +geompy.addToStudy( OY, 'OY' ) +geompy.addToStudy( OZ, 'OZ' ) +Box = geompy.MakeBox(0,0,0,10,10,10) + +smesh_builder = smeshBuilder.New() + +MesherBox = smesh_builder.Mesh(Box, "Box") +viscousBuilder = MesherBox.ViscousLayerBuilder() + +#############BOX AND TETRA ELEMENTS +#Set prismatic layer parameters +offset = 0.7 +numLayers = 4 +viscousBuilder.setBuilderParameters( offset, numLayers, 1.2, [13], False ) +ShrinkBox = viscousBuilder.GetShrinkGeometry() + +#Mesh the shrink box +MesherShinkBox = smesh_builder.Mesh(ShrinkBox, "ShrinkMesh") +ShrinkBoxMesh = MesherShinkBox.Tetrahedron(smeshBuilder.NETGEN_1D2D3D) + +#Compute +success = MesherShinkBox.Compute() +assert( success ) +assert( MesherShinkBox.NbVolumes() == 5 ) # if Fails! change the default value of volumes when meshing with Netgen! + +FinalMesh = viscousBuilder.AddLayers( MesherShinkBox ) +assert( FinalMesh.NbVolumes() == 5 + numLayers * 2 ) # here 2 stands for the number of face elements per face in the box +assert( FinalMesh.NbFaces() == 6 * 2 + 4 * numLayers ) # here is the number of face elements for the box + the new faces in the VL. (6 is the number of sides in the box) + +#Testing the configuration where face 13 is ignored and so the offset is applied to all other faces +viscousBuilder.setBuilderParameters( offset, numLayers, 1.2, [13], True ) +ShrinkBox2 = viscousBuilder.GetShrinkGeometry() +#Mesh the shrink box +MesherShinkBox2 = smesh_builder.Mesh(ShrinkBox2, "ShrinkMesh2") +ShrinkBoxMesh2 = MesherShinkBox2.Tetrahedron(smeshBuilder.NETGEN_1D2D3D) + +#Compute +success = MesherShinkBox2.Compute() +assert( success ) + +#Test the number of elements on the shrink mesh +assert( MesherShinkBox2.NbVolumes() == 5 ) # if Fails! change the default (default hypo) number of volumes when meshing with Netgen! + +FinalMesh2 = viscousBuilder.AddLayers( MesherShinkBox2 ) + +assert( FinalMesh2.NbVolumes() == 5 + numLayers * 2 * 5 ) # here 2 stands for the number of face elements per face in the box +assert( FinalMesh2.NbFaces() == 6 * 2 + 4 * numLayers ) # here is the number of face elements for the box + the new faces in the VL. (6 is the number of sides in the box) +#############END BOX AND TETRA ELEMENTS + +#############MESH SQUARE FACE +Face = geompy.MakeFaceHW(5, 5, 1) +Disk = geompy.MakeDiskR(5, 1) + +MesherSqr = smesh_builder.Mesh(Face, "Face") +viscousBuilder = MesherSqr.ViscousLayerBuilder() +#Set prismatic layer parameters +offset = 0.5 +numberOfLayers = 6 +viscousBuilder.setBuilderParameters( offset, numberOfLayers, 1.2 ) +ShrinkFace = viscousBuilder.GetShrinkGeometry() +#Mesh the shrink face +MesherShinkFace = smesh_builder.Mesh(ShrinkFace, "ShrinkFaceMesh") +algo = MesherShinkFace.Segment() +numOfSegments = 4 +algo.NumberOfSegments(numOfSegments) +ShrinkFaceMesh = MesherShinkFace.Triangle() +#Compute +success = MesherShinkFace.Compute() +assert( success ) +numFaceElementShrinkGeom = MesherShinkFace.NbFaces() +FinalFaceMesh = viscousBuilder.AddLayers( MesherShinkFace ) +# Check the number of additional elements +# numOfSegments * 4 * numberOfLayers +finalNumOfElements = FinalFaceMesh.NbFaces() +assert( numFaceElementShrinkGeom + 4 * numOfSegments * numberOfLayers == finalNumOfElements ) + +#############END MESH SQUARE FACE + +#############MESH CIRCULAR FACE +MesherCircle = smesh_builder.Mesh(Disk, "Disk") +viscousBuilder = MesherCircle.ViscousLayerBuilder() +viscousBuilder.setBuilderParameters( offset, numberOfLayers, 1.2 ) +ShrinkCircle = viscousBuilder.GetShrinkGeometry() +MesherShinkCircle = smesh_builder.Mesh(ShrinkCircle, "ShrinkCircleMesh") +algo = MesherShinkCircle.Segment() +numOfSegments = 12 +algo.NumberOfSegments(numOfSegments) +ShrinkCircleMesh = MesherShinkCircle.Triangle() + +#Compute +success = MesherShinkCircle.Compute() +numFaceElementShrinkGeom = MesherShinkCircle.NbFaces() +assert( success ) +FinalCircleMesh = viscousBuilder.AddLayers( MesherShinkCircle ) +finalNumOfElements = FinalCircleMesh.NbFaces() +assert( numFaceElementShrinkGeom + numOfSegments * numberOfLayers == finalNumOfElements ) +#############END MESH CIRCULAR FACE \ No newline at end of file