Salome HOME
5847399348148e45db2057588cdf9e53fafeaaeb
[modules/smesh.git] / src / SMESH_SWIG / YACS_geomesh0.py
1 #!/usr/bin/env python
2
3 # test used in YACS, ForEachLoop
4
5 def geomesh(l0, r0, h0, d0, d1, my_container, direc):
6   print("Géometrie et maillage barre : (l0, r0, h0, d0, d1)=", (l0, r0, h0, d0, d1))
7
8   import sys
9   import salome
10   salome.salome_init()
11   import GEOM
12   from salome.geom import geomBuilder
13   import math
14   import os
15   import SALOMEDS
16   import  SMESH
17   from salome.smesh import smeshBuilder
18   
19   my_container.load_component_Library("GEOM")
20   #engineGeom = my_container.create_component_instance("GEOM")
21   engineGeom = my_container.load_impl("GEOM","")
22   geompy = geomBuilder.New(engineGeom)
23   my_container.load_component_Library("SMESH")
24   #engineSmesh = my_container.create_component_instance("SMESH")
25   engineSmesh = my_container.load_impl("SMESH","")
26   smesh = smeshBuilder.New(engineSmesh,engineGeom)
27   print("instances Names:", engineGeom.instanceName, engineSmesh.instanceName)
28   print("instances:", engineGeom, engineSmesh)
29   print("builders:", geompy, smesh)
30   
31   volume = (2.*l0*r0 + 0.75*math.pi*r0*r0)*h0
32   O = geompy.MakeVertex(0, 0, 0)
33   OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
34   OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
35   OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
36   Vertex_1 = geompy.MakeVertex(-l0, -r0, 0)
37   Vertex_2 = geompy.MakeVertex(-l0-r0, 0, 0)
38   Vertex_3 = geompy.MakeVertex(-l0, r0, 0)
39   Vertex_4 = geompy.MakeVertex(l0, r0, 0)
40   Vertex_5 = geompy.MakeVertex(l0+r0, 0, 0)
41   Vertex_6 = geompy.MakeVertex(l0, -r0, 0)
42   Arc_1 = geompy.MakeArc(Vertex_1, Vertex_2, Vertex_3)
43   Arc_2 = geompy.MakeArc(Vertex_4, Vertex_5, Vertex_6)
44   Line_1 = geompy.MakeLineTwoPnt(Vertex_3, Vertex_4)
45   Line_2 = geompy.MakeLineTwoPnt(Vertex_6, Vertex_1)
46   Face_1 = geompy.MakeFaceWires([Arc_1, Arc_2, Line_1, Line_2], 1)
47   barre0 = geompy.MakePrismVecH(Face_1, OZ, h0)
48   Vertex_1a = geompy.MakeVertex(-l0, -r0/2, 0)
49   Vertex_2a = geompy.MakeVertex(-l0-r0/2, 0, 0)
50   Vertex_3a = geompy.MakeVertex(-l0, r0/2, 0)
51   Vertex_4a = geompy.MakeVertex(l0, r0/2, 0)
52   Vertex_5a = geompy.MakeVertex(l0+r0/2, 0, 0)
53   Vertex_6a = geompy.MakeVertex(l0, -r0/2, 0)
54   Arc_1a = geompy.MakeArc(Vertex_1a, Vertex_2a, Vertex_3a)
55   Arc_2a = geompy.MakeArc(Vertex_4a, Vertex_5a, Vertex_6a)
56   Line_1a = geompy.MakeLineTwoPnt(Vertex_3a, Vertex_4a)
57   Line_2a = geompy.MakeLineTwoPnt(Vertex_6a, Vertex_1a)
58   Face_1a = geompy.MakeFaceWires([Arc_1a, Arc_2a, Line_1a, Line_2a], 1)
59   barrea = geompy.MakePrismVecH(Face_1a, OZ, h0)
60   barreb = geompy.MakeCut(barre0, barrea)
61   Plane_1 = geompy.MakePlane(Vertex_1, OX, 2000)
62   Plane_2 = geompy.MakePlane(Vertex_6, OX, 2000)
63   barre = geompy.MakePartition([barreb], [Plane_1, Plane_2], [], [], geompy.ShapeType["SOLID"], 0, [], 0)
64   v1 = geompy.MakeVertex(-l0-r0, 0, h0/2.)
65   v2 = geompy.MakeVertex(l0+r0, 0, h0/2.)
66   f1 = geompy.GetShapesNearPoint(barre, v1, geompy.ShapeType["FACE"])
67   f2 = geompy.GetShapesNearPoint(barre, v2, geompy.ShapeType["FACE"])
68   #f1 = geompy.CreateGroup(barre, geompy.ShapeType["FACE"])
69   #geompy.UnionIDs(f1, [3])
70   #f2 = geompy.CreateGroup(barre, geompy.ShapeType["FACE"])
71   #geompy.UnionIDs(f2, [20])
72
73   Auto_group_for_Sub_mesh_1 = geompy.CreateGroup(barre, geompy.ShapeType["FACE"])
74   geompy.UnionList(Auto_group_for_Sub_mesh_1, [f1, f2])
75   nom = r'barre_l_{:03d}__r_{:05.2f}__h_{:05.2f}__d0_{:05.2f}__d1_{:05.2f}'.format(int(l0), r0, h0, d0, d1)
76   nombrep = nom + ".brep"
77   geompy.ExportBREP(barre, direc + os.sep + nombrep )
78   props = geompy.BasicProperties(barre)
79   geomvol = props[2]
80
81   #geompy.addToStudy( barre, 'barre' )
82   #geompy.addToStudyInFather( barre, f1, 'f1' )
83   #geompy.addToStudyInFather( barre, f2, 'f2' )
84
85   isTetra = False
86   barre_1 = smesh.Mesh(barre)
87   if (isTetra):
88     NETGEN_1D_2D_3D = barre_1.Tetrahedron(algo=smeshBuilder.NETGEN_1D2D3D)
89     NETGEN_3D_Parameters_1 = NETGEN_1D_2D_3D.Parameters()
90     NETGEN_3D_Parameters_1.SetMaxSize( d0 )
91     NETGEN_3D_Parameters_1.SetSecondOrder( 0 )
92     NETGEN_3D_Parameters_1.SetOptimize( 1 )
93     NETGEN_3D_Parameters_1.SetFineness( 3 )
94     NETGEN_3D_Parameters_1.SetChordalError( 0.1 )
95     NETGEN_3D_Parameters_1.SetChordalErrorEnabled( 0 )
96     NETGEN_3D_Parameters_1.SetMinSize( d0 )
97     NETGEN_3D_Parameters_1.SetUseSurfaceCurvature( 1 )
98     NETGEN_3D_Parameters_1.SetFuseEdges( 1 )
99     NETGEN_3D_Parameters_1.SetQuadAllowed( 0 )
100     NETGEN_1D_2D = barre_1.Triangle(algo=smeshBuilder.NETGEN_1D2D,geom=Auto_group_for_Sub_mesh_1)
101     NETGEN_2D_Parameters_1 = NETGEN_1D_2D.Parameters()
102     NETGEN_2D_Parameters_1.SetMaxSize( d1 )
103     NETGEN_2D_Parameters_1.SetSecondOrder( 0 )
104     NETGEN_2D_Parameters_1.SetOptimize( 1 )
105     NETGEN_2D_Parameters_1.SetFineness( 3 )
106     NETGEN_2D_Parameters_1.SetChordalError( 0.1 )
107     NETGEN_2D_Parameters_1.SetChordalErrorEnabled( 0 )
108     NETGEN_2D_Parameters_1.SetMinSize( d1 )
109     NETGEN_2D_Parameters_1.SetUseSurfaceCurvature( 1 )
110     NETGEN_2D_Parameters_1.SetFuseEdges( 1 )
111     NETGEN_2D_Parameters_1.SetQuadAllowed( 0 )
112   else:
113     Regular_1D = barre_1.Segment()
114     Number_of_Segments_1 = Regular_1D.NumberOfSegments(15)
115     Quadrangle_2D = barre_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
116     Hexa_3D = barre_1.Hexahedron(algo=smeshBuilder.Hexa)   
117   isDone = barre_1.Compute()
118   
119   f1_1 = barre_1.GroupOnGeom(f1,'f1',SMESH.FACE)
120   f2_1 = barre_1.GroupOnGeom(f2,'f2',SMESH.FACE)
121   smesh.SetName(barre_1, nom)
122   nommed = nom + ".med"
123   barre_1.ExportMED( direc + os.sep + nommed, auto_groups=0, minor=0, overwrite=1, meshPart=None, autoDimension=1 )
124   measure = smesh.CreateMeasurements()
125   meshvol = measure.Volume(barre_1.mesh)
126   print("Maillage publié : ", direc + os.sep + nommed)
127   clearMesh(barre_1, salome.myStudy, nom)
128   deltag = abs(geomvol - volume)/volume
129   deltam = abs(meshvol - geomvol)/geomvol
130   delta = abs(meshvol - volume)/volume
131   print("volumes:", volume, geomvol, meshvol, deltag, deltam)
132   assert(deltag < 1.e-5)
133   assert(deltam < 2.e-3)
134   #import time
135   #time.sleep(30)
136   return delta
137
138
139 def clearMesh(theMesh, theStudy, aName):
140   theMesh.Clear()
141   aMesh = theMesh.GetMesh()
142   aStudyBuilder = theStudy.NewBuilder()
143   SO = theStudy.FindObjectIOR(theStudy.ConvertObjectToIOR(aMesh))
144   objects_to_unpublish = [SO]
145   refs = theStudy.FindDependances(SO)
146   objects_to_unpublish += refs
147   for o in objects_to_unpublish:
148     if o is not None:
149       aStudyBuilder.RemoveObjectWithChildren(o)
150   print("clearMesh done:", aName)
151
152 def genere(r0, h0, my_container, direc):
153   l0 = 50.0
154   d0 = min(r0/2., h0/6.)
155   d1 = d0/2.
156   res = geomesh(l0, r0, h0, d0, d1, my_container, direc)
157   return res
158
159 def genere2(r0h0, my_container, direc):
160   l0 = 50.0
161   r0 = r0h0[0]
162   h0 = r0h0[1]
163   d0 = min(r0/2., h0/6.)
164   d1 = d0/2.
165   res = geomesh(l0, r0, h0, d0, d1, my_container, direc)
166   return res
167