Salome HOME
bos #17015 [CEA 17008] Body fitting with Viscous Layers for CFD meshing
[modules/smesh.git] / doc / examples / transforming_meshes_ex10.py
1 # Sew Side Elements
2
3 import salome
4 salome.salome_init_without_session()
5
6 import SMESH
7 from salome.geom import geomBuilder
8 from salome.smesh import smeshBuilder
9
10 geom_builder = geomBuilder.New()
11 smesh_builder = smeshBuilder.New()
12
13 # create two boxes
14 box1 = geom_builder.MakeBox(0.,  0., 0., 10., 10., 10.)
15 box2 = geom_builder.MakeBox(0., 15., 0., 20., 25., 10.)
16
17 EdgesList = geom_builder.SubShapeAll(box2, geom_builder.ShapeType["EDGE"])
18
19 aComp = geom_builder.MakeCompound([box1, box2])
20 geom_builder.addToStudy(aComp, "Two boxes")
21
22 # create a mesh on two boxes
23 mesh = smesh_builder.Mesh(aComp, "Sew Side Elements")
24
25 algo1D = mesh.Segment()
26 algo1D.NumberOfSegments(2)
27 algo2D = mesh.Quadrangle()
28
29 algo_local = mesh.Segment(EdgesList[8])
30 algo_local.NumberOfSegments(4)
31 algo_local.Propagation()
32
33 if not mesh.Compute(): raise Exception("Error when computing Mesh")
34
35 # sew side elements
36
37 # find elements to sew
38 face1 = geom_builder.GetFaceNearPoint( aComp, geom_builder.MakeVertex( 5, 10, 5 ))
39 IDsOfSide1Elements = mesh.GetSubMeshElementsId( face1 )
40 print("side faces 1:",IDsOfSide1Elements)
41
42 face1Translated = geom_builder.MakeTranslation( face1, 0,5,0 )
43 faceFilter = smesh_builder.GetFilter( SMESH.FACE, SMESH.FT_BelongToGeom,'=', face1Translated )
44 IDsOfSide2Elements = mesh.GetIdsFromFilter( faceFilter )
45 print("side faces 2:",IDsOfSide2Elements)
46
47 # find corresponding nodes on sides
48 edge1 = geom_builder.GetEdgeNearPoint( aComp, geom_builder.MakeVertex( 0, 10, 5 ))
49 segs1 = mesh.GetSubMeshElementsId( edge1 ) # mesh segments generated on edge1
50 NodeID1OfSide1ToMerge = mesh.GetElemNode( segs1[0], 0 )
51 NodeID2OfSide1ToMerge = mesh.GetElemNode( segs1[0], 1 )
52 print("nodes of side1:", [NodeID1OfSide1ToMerge,NodeID2OfSide1ToMerge])
53
54 edge2 = geom_builder.GetEdgeNearPoint( aComp, geom_builder.MakeVertex( 0, 15, 5 ))
55 segs2 = mesh.GetSubMeshElementsId( edge2 ) # mesh segments generated on edge2
56 NodeID1OfSide2ToMerge = mesh.GetElemNode( segs2[0], 0 )
57 NodeID2OfSide2ToMerge = mesh.GetElemNode( segs2[0], 1 )
58 print("nodes of side2:", [NodeID1OfSide2ToMerge,NodeID2OfSide2ToMerge])
59
60 res = mesh.SewSideElements(IDsOfSide1Elements, IDsOfSide2Elements,
61                            NodeID1OfSide1ToMerge, NodeID1OfSide2ToMerge,
62                            NodeID2OfSide1ToMerge, NodeID2OfSide2ToMerge)
63 print(res)