------------------ Dynamic Model ------------------ The fluid - body interaction must be simmulated due to the movement of the regulator cylinder inside the valve. In openFoam we will use the dinamycMotionSolverFvMesh, please read:: https://openfoamwiki.net/index.php/Parameter_Definitions_-_dynamicMotionSolverFvMesh ------------------- Overset Meshing ------------------- search in YouTube Overset Meshes with OpenFoam:: https://www.youtube.com/watch?v=0mbmIOf3hRk Coordinates for the Mesh, in order to create a mapped Mesh we developed the model of the figures: .. tabularcolumns:: | p{455pt} | .. table:: Valve Meassurement +--------------------------------------------+ | Figure | +============================================+ | .. figure:: ../images/valvula6.png | +--------------------------------------------+ .. tabularcolumns:: | p{455pt} | .. table:: Principal dimensions +--------------------------------------------+ | Figure | +============================================+ | .. figure:: ../images/valvula1.JPG | +--------------------------------------------+ .. tabularcolumns:: | p{455pt} | .. table:: Coordinates +--------------------------------------------+ | Figure | +============================================+ | .. figure:: ../images/valvula2.JPG | +--------------------------------------------+ Create Mesh in salome: .. code-block:: bash #!/usr/bin/env python ### ### This file is generated automatically by SALOME v9.3.0 with dump python functionality ### import sys import salome salome.salome_init() import salome_notebook notebook = salome_notebook.NoteBook() sys.path.insert(0, r'/home/hgasca/Desktop/valvula') ### ### GEOM component ### import GEOM from salome.geom import geomBuilder import math import SALOMEDS 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) #ALL GAP1 = 0.003 GAP2 = 0.002 GAP3 = 0.003 #OVERLAP GAP4 = 0.001 GAP5 = 0.002 GAP6 = 0.0003 GAP7 = 0.0005 #GENERAL D1 = 0.02365 D2 = 0.022 D3 = 0.003 D4 = 0.0099 D5 = 0.017 D6 = 0.024 D7 = D5 D8 = 0.038 D9 = 0.014 D10 = 0.021 D11 = 0.022 D12 = D7 + 0.001 L1 = 0.070 L2 = 0.001 L3 = 0.00633 L4 = 0.040 L5 = 0.003 L6 = 0.030 L7 = 0.08233 L8 = 0.002 L9 = 0.01 L10 = 0.05 L11 = 0.080 L12 = 0.005 L13 = 0.010 L14 = 0.035 L16 = 0.006 L15 = L14-L16 L17 = 0.010 AVANCE =0.01 Ax = 0 Bx = L1 Bx1=Bx-GAP2 Bx_d =Bx-GAP4 Cx = L1 + L2 Dx = Cx + L3 Ex = Dx + L4 Fx = Ex + L5 Gx = Fx + L6 Gx1= Gx + GAP1 Gx_d = Gx-AVANCE Hx = Dx + L7 Ix = Hx + L8 Ix_d = Ix+GAP5 Jx = Hx + L17 Kx = Hx + L9 Lx = Jx + L16 Mx = Jx + L14 Nx = Kx + L10 Ox = Nx + L11 Px = Ox + L12 Qx = Px + L13 ay = 0 by = D3/2 by_d = (ay+by)/2 cy = D2/2-GAP6 dy = D1/2 dy2= D1/2-GAP6 dy_d = D6/2 ey = D4/2 fy = D5/2 fy_d = fy+GAP7 gy = D6/2 gy1 = gy + GAP3 hy = D11/2 iy = hy jy = D8/2 ky = D9/2 ly = D9/2 + 0.001 my = D10/2 sy = D12/2 ty = (hy+sy)/2 #ALL P_1 = geompy.MakeVertex(Ax, ay, 0) P_2 = geompy.MakeVertex(Qx, ay, 0) P_3 = geompy.MakeVertex(Ax, fy, 0) P_4 = geompy.MakeVertex(Lx, fy, 0) P_5 = geompy.MakeVertex(Ax, sy, 0) P_6 = geompy.MakeVertex(Lx, sy, 0) P_7 = geompy.MakeVertex(Ax, ty, 0) P_8 = geompy.MakeVertex(Lx, ty, 0) P_9 = geompy.MakeVertex(Ax, dy, 0) P_10 = geompy.MakeVertex(Gx1, dy, 0) P_11 = geompy.MakeVertex(Bx1, gy1, 0) P_12 = geompy.MakeVertex(Gx1, gy1, 0) P_13 = geompy.MakeVertex(Hx, ty, 0) P_14 = geompy.MakeVertex(Hx, iy, 0) P_15 = geompy.MakeVertex(Kx, jy, 0) P_16 = geompy.MakeVertex(Nx, jy, 0) P_17 = geompy.MakeVertex(Nx, hy, 0) P_18 = geompy.MakeVertex(Mx, ky, 0) P_19 = geompy.MakeVertex(Qx, ky, 0) P_20 = geompy.MakeVertex(Nx, ky, 0) P_21 = geompy.MakeVertex(Ox, ky, 0) P_22 = geompy.MakeVertex(Ox, ly, 0) P_23 = geompy.MakeVertex(Px, my, 0) P_24 = geompy.MakeVertex(Qx, my, 0) P_25 = geompy.MakeVertex(Bx1, ay, 0) P_26 = geompy.MakeVertex(Bx1, dy, 0) P_27 = geompy.MakeVertex(Gx1, ay, 0) P_28 = geompy.MakeVertex(Hx, ay, 0) P_29 = geompy.MakeVertex(Hx+(Jx-Hx)*2/3 , ay, 0) P_30 = geompy.MakeVertex(Hx+(Jx-Hx)*2/3, hy, 0) P_31 = geompy.MakeVertex(Hx+(Jx-Hx)*1/3, (jy+iy)*2/3, 0) P_32 = geompy.MakeVertex(Jx, ay, 0) P_33 = geompy.MakeVertex(Jx, sy, 0) P_34 = geompy.MakeVertex(Jx, ty, 0) P_35 = geompy.MakeVertex(Jx, hy, 0) P_36 = geompy.MakeVertex(Lx, ay, 0) P_37 = geompy.MakeVertex(Mx, hy, 0) P_38 = geompy.MakeVertex(Mx, ay, 0) P_39 = geompy.MakeVertex(Nx, ay, 0) P_40 = geompy.MakeVertex(Ox, ay, 0) P_41 = geompy.MakeVertex(Ox+(Px-Ox)*2/3, ay, 0) P_42 = geompy.MakeVertex(Px, ay, 0) P_43 = geompy.MakeVertex(Ox+(Px-Ox)*2/3, ky, 0) P_44 = geompy.MakeVertex(Ox+(Px-Ox)*1/3, (ly+my)*2/3, 0) P_45 = geompy.MakeVertex(Jx, jy, 0) P_46 = geompy.MakeVertex(Kx, iy, 0) P_47 = geompy.MakeVertex(Mx, jy, 0) P_48 = geompy.MakeVertex(Hx+(Jx-Hx)*1/4 , ay, 0) P_49 = geompy.MakeVertex(Hx+(Jx-Hx)*1/4 , jy, 0) #OVERLAP P_100 = geompy.MakeVertex(Bx_d,by_d,0) P_101 = geompy.MakeVertex(Ix_d,by_d, 0) P_102 = geompy.MakeVertex(Bx_d,by,0) P_103 = geompy.MakeVertex(Ix_d,by,0) P_104 = geompy.MakeVertex(Bx_d,cy,0) P_105 = geompy.MakeVertex(Cx,cy,0) P_106 = geompy.MakeVertex(Bx_d,dy2,0) P_107 = geompy.MakeVertex(Gx_d,dy2,0) P_108 = geompy.MakeVertex(Bx_d,dy_d,0) P_109 = geompy.MakeVertex(Gx_d,dy_d,0) P_110 = geompy.MakeVertex(Dx,fy_d,0) P_111 = geompy.MakeVertex(Gx_d,fy_d,0) P_112 = geompy.MakeVertex(Dx,fy,0) P_113 = geompy.MakeVertex(Ix_d,fy,0) P_114 = geompy.MakeVertex(Dx,ey,0) P_115 = geompy.MakeVertex(Ix_d,ey,0) P_116 = geompy.MakeVertex(Bx,by_d,0) P_117 = geompy.MakeVertex(Bx,dy_d,0) P_118 = geompy.MakeVertex(Cx,by_d,0) P_119 = geompy.MakeVertex(Cx,by,0) P_120 = geompy.MakeVertex(Dx,by_d,0) P_121 = geompy.MakeVertex(Dx,dy,0) P_122 = geompy.MakeVertex(Dx,dy_d,0) P_123 = geompy.MakeVertex(Ex,by_d,0) P_124 = geompy.MakeVertex(Ex,ey,0) P_125 = geompy.MakeVertex(Ex,fy,0) P_126 = geompy.MakeVertex(Ex,dy_d,0) P_127 = geompy.MakeVertex(Fx,by_d,0) P_128 = geompy.MakeVertex(Fx,ey,0) P_129 = geompy.MakeVertex(Fx,fy,0) P_130 = geompy.MakeVertex(Fx,dy_d,0) P_131 = geompy.MakeVertex(Gx_d,by_d,0) P_132 = geompy.MakeVertex(Ix_d,fy_d,0) P_133 = geompy.MakeVertex(Ix,by_d,0) P_134 = geompy.MakeVertex(Ix,fy_d,0) ## ALL # Horizontales Edge_1 = geompy.MakeEdge(P_1, P_2) Edge_2 = geompy.MakeEdge(P_3, P_4) Edge_3 = geompy.MakeEdge(P_5, P_6) Edge_4 = geompy.MakeEdge(P_7, P_8) Edge_5 = geompy.MakeEdge(P_9, P_10) Edge_6 = geompy.MakeEdge(P_11, P_12) Edge_7 = geompy.MakeEdge(P_30, P_35) Edge_8 = geompy.MakeEdge(P_18, P_20) Edge_9 = geompy.MakeEdge(P_21, P_19) Edge_10 = geompy.MakeEdge(P_37, P_17) # Verticales Edge_11 = geompy.MakeEdge(P_25, P_11) Edge_12 = geompy.MakeEdge(P_27, P_12) Edge_13 = geompy.MakeEdge(P_28, P_14) Edge_14 = geompy.MakeEdge(P_29, P_30) Edge_15 = geompy.MakeEdge(P_30, P_31) Edge_16 = geompy.MakeEdge(P_32, P_45) Edge_17 = geompy.MakeEdge(P_40, P_21) Edge_18 = geompy.MakeEdge(P_37, P_47) Edge_19 = geompy.MakeEdge(P_41, P_43) Edge_20 = geompy.MakeEdge(P_43, P_44) Edge_21 = geompy.MakeEdge(P_42, P_23) Edge_22 = geompy.MakeEdge(P_48, P_49) ## OVERLAP #Horizontal Edge_100 = geompy.MakeEdge(P_102, P_103) Edge_101 = geompy.MakeEdge(P_104, P_105) Edge_102 = geompy.MakeEdge(P_110, P_111) Edge_103 = geompy.MakeEdge(P_106, P_107) Edge_104 = geompy.MakeEdge(P_112, P_113) Edge_105 = geompy.MakeEdge(P_114, P_115) #Vertical Edge_106 = geompy.MakeEdge(P_116, P_117) Edge_107 = geompy.MakeEdge(P_120, P_122) Edge_108 = geompy.MakeEdge(P_123, P_126) Edge_109 = geompy.MakeEdge(P_127, P_130) Edge_110 = geompy.MakeEdge(P_131, P_111) Edge_111 = geompy.MakeEdge(P_133, P_134) ## ALL # Sketch 2D O = geompy.MakeVertex(0, 0, 0) OX = geompy.MakeVectorDXDYDZ(1, 0, 0) OY = geompy.MakeVectorDXDYDZ(0, 1, 0) OZ = geompy.MakeVectorDXDYDZ(0, 0, 1) geomObj_1 = geompy.MakeMarker(0, 0, 0, 1, 0, 0, 0, 1, 0) sk = geompy.Sketcher2D() sk.addPoint(0.000000, 0.000000) sk.addSegmentAbsolute(0.000000, dy) sk.addSegmentAbsolute(Bx1 , dy) sk.addSegmentAbsolute(Bx1 , gy1) sk.addSegmentAbsolute(Gx1 , gy1) sk.addSegmentAbsolute(Gx1 , ty) sk.addSegmentAbsolute(Hx , ty) sk.addSegmentAbsolute(Hx , iy) sk.addSegmentAbsolute(Kx , jy) sk.addSegmentAbsolute(Nx , jy) sk.addSegmentAbsolute(Nx , ky) sk.addSegmentAbsolute(Ox , ky) sk.addSegmentAbsolute(Ox , ly) sk.addSegmentAbsolute(Px , my) sk.addSegmentAbsolute(Qx , my) sk.addSegmentAbsolute(Qx , ay) sk.close() Sketch_1 = sk.wire(geomObj_1) body1 = geompy.MakeFaceWires([Sketch_1], 1) geomObj_2 = geompy.MakeMarker(0, 0, 0, 1, 0, 0, 0, 1, 0) sk = geompy.Sketcher2D() sk.addPoint(Lx, 0.000000) sk.addSegmentAbsolute(Lx , ty) sk.addSegmentAbsolute(Jx , ty) sk.addSegmentAbsolute(Jx , hy) sk.addSegmentAbsolute(Mx , hy) sk.addSegmentAbsolute(Mx , 0) sk.close() Sketch_2 = sk.wire(geomObj_2) body2 = geompy.MakeFaceWires([Sketch_2], 1) body = geompy.MakeCutList(body1, [body2], True) Partition_1 = geompy.MakePartition([body], [Edge_1, Edge_2, Edge_3, Edge_4, Edge_5, Edge_6, Edge_7, Edge_8, Edge_9, Edge_10, Edge_11, Edge_12, Edge_13, Edge_14, Edge_15, Edge_16, Edge_17, Edge_18, Edge_19, Edge_20, Edge_21, Edge_22], [], [], geompy.ShapeType["FACE"], 0, [], 0) Rotation_1 = geompy.MakeRotation(Partition_1, OX, -2.5*math.pi/180.0) [Edge_23,Edge_24,Edge_25,Edge_26] = geompy.SubShapes(Rotation_1, [181, 162, 126, 193]) [Edge_27,Edge_28] = geompy.SubShapes(Rotation_1, [231, 236]) [Edge_29,Edge_30,Edge_31,Edge_32,Edge_33,Edge_34,Edge_35,Edge_36,Edge_37,Edge_38,Edge_39] = geompy.SubShapes(Rotation_1, [18, 51, 68, 172, 217, 128, 32, 229, 11, 203, 92]) [Edge_40,Edge_41,Edge_42,Edge_43,Edge_44,Edge_45,Edge_46,Edge_47,Edge_48,Edge_49,Edge_50,Edge_51,Edge_52,Edge_53,Edge_54,Edge_55,Edge_56,Edge_57,Edge_58,Edge_59,Edge_60,Edge_61,Edge_62,Edge_63,Edge_64,Edge_65,Edge_66] = geompy.SubShapes(Rotation_1, [226, 107, 176, 114, 121, 21, 200, 184, 117, 170, 155, 196, 40, 191, 238, 146, 157, 81, 212, 4, 42, 136, 141, 198, 150, 214, 143]) [Face_1,Face_2,Face_3] = geompy.SubShapes(Rotation_1, [134, 38, 194]) ## OVERLAP # Sketch 2D O = geompy.MakeVertex(0, 0, 0) OX = geompy.MakeVectorDXDYDZ(1, 0, 0) OY = geompy.MakeVectorDXDYDZ(0, 1, 0) OZ = geompy.MakeVectorDXDYDZ(0, 0, 1) geomObj_3 = geompy.MakeMarker(0, 0, 0, 1, 0, 0, 0, 1, 0) sk = geompy.Sketcher2D() sk.addPoint(Bx_d, by_d) sk.addSegmentAbsolute(Bx_d, dy_d) sk.addSegmentAbsolute(Gx_d , dy_d) sk.addSegmentAbsolute(Gx_d , fy_d) sk.addSegmentAbsolute(Ix_d , fy_d) sk.addSegmentAbsolute(Ix_d , by_d) sk.close() Sketch_3 = sk.wire(geomObj_3) body3 = geompy.MakeFaceWires([Sketch_3], 1) geomObj_4 = geompy.MakeMarker(0, 0, 0, 1, 0, 0, 0, 1, 0) sk = geompy.Sketcher2D() sk.addPoint(Cx, by) sk.addSegmentAbsolute(Cx , cy) sk.addSegmentAbsolute(Bx , cy) sk.addSegmentAbsolute(Bx , dy2) sk.addSegmentAbsolute(Dx , dy2) sk.addSegmentAbsolute(Dx , fy) sk.addSegmentAbsolute(Ex , fy) sk.addSegmentAbsolute(Ex , ey) sk.addSegmentAbsolute(Dx , ey) sk.addSegmentAbsolute(Dx , by) sk.close() Sketch_4 = sk.wire(geomObj_4) body4 = geompy.MakeFaceWires([Sketch_4], 1) geomObj_5 = geompy.MakeMarker(0, 0, 0, 1, 0, 0, 0, 1, 0) sk = geompy.Sketcher2D() sk.addPoint(Fx, ey) sk.addSegmentAbsolute(Fx , fy) sk.addSegmentAbsolute(Ix , fy) sk.addSegmentAbsolute(Ix , ey) sk.close() Sketch_5 = sk.wire(geomObj_5) body5 = geompy.MakeFaceWires([Sketch_5], 1) bodyII = geompy.MakeCutList(body3, [body4,body5], True) Partition_2 = geompy.MakePartition([bodyII], [Edge_100, Edge_101, Edge_102, Edge_103, Edge_104, Edge_105, Edge_106, Edge_107, Edge_108, Edge_109, Edge_110, Edge_111], [], [], geompy.ShapeType["FACE"], 0, [], 0) Rotation_2 = geompy.MakeRotation(Partition_2, OX, -2.5*math.pi/180.0) [Edge_67,Edge_68,Edge_69,Edge_70,Edge_71,Edge_72,Edge_73,Edge_74,Edge_75,Edge_76,Edge_77,Edge_78,Edge_79,Edge_80,Edge_81,Edge_82,Edge_83] = geompy.SubShapes(Rotation_2, [30, 89, 124, 37, 112, 67, 119, 184, 149, 25, 122, 115, 181, 39, 65, 70, 172]) [Edge_84,Edge_85,Edge_86,Edge_87,Edge_88,Edge_89,Edge_90,Edge_91,Edge_92,Edge_93,Edge_94,Edge_95,Edge_96,Edge_97,Edge_98,Edge_99,Edge_112,Edge_113,Edge_114,Edge_115,Edge_116,Edge_117,Edge_118,Edge_119] = geompy.SubShapes(Rotation_2, [77, 56, 190, 140, 21, 137, 34, 167, 53, 74, 157, 142, 11, 103, 164, 162, 100, 192, 4, 177, 18, 187, 51, 42]) inlet = geompy.CreateGroup(Rotation_1, geompy.ShapeType["EDGE"]) geompy.UnionIDs(inlet, [181, 162, 126, 193]) outlet = geompy.CreateGroup(Rotation_1, geompy.ShapeType["EDGE"]) geompy.UnionIDs(outlet, [231, 236]) axys = geompy.CreateGroup(Rotation_1, geompy.ShapeType["EDGE"]) geompy.UnionIDs(axys, [18, 51, 68, 172, 217, 128, 32, 229, 11, 203, 92]) wall_ext = geompy.CreateGroup(Rotation_1, geompy.ShapeType["EDGE"]) geompy.UnionIDs(wall_ext, [226, 107, 176, 114, 121, 21, 200, 184, 117, 170, 155, 196, 40, 191, 238, 146, 157, 81, 212, 4, 42, 136, 141, 198, 150, 214, 143]) porous = geompy.CreateGroup(Rotation_1, geompy.ShapeType["FACE"]) geompy.UnionIDs(porous, [134, 38, 194]) back = geompy.CreateGroup(Rotation_1, geompy.ShapeType["FACE"]) geompy.UnionIDs(back, [2, 12, 19, 26, 33, 45, 52, 57, 62, 69, 74, 79, 86, 93, 98, 103, 110, 115, 122, 129, 139, 144, 153, 158, 163, 168, 177, 182, 189, 201, 208, 215, 222, 227, 234]) wall = geompy.CreateGroup(Rotation_2, geompy.ShapeType["EDGE"]) geompy.UnionIDs(wall, [30, 89, 124, 37, 112, 67, 119, 184, 149, 25, 122, 115, 181, 39, 65, 70, 172]) oversetPatch = geompy.CreateGroup(Rotation_2, geompy.ShapeType["EDGE"]) geompy.UnionIDs(oversetPatch, [77, 56, 190, 140, 21, 137, 34, 167, 53, 74, 157, 142, 11, 103, 164, 162, 100, 192, 4, 177, 18, 187, 51, 42]) back_1 = geompy.CreateGroup(Rotation_2, geompy.ShapeType["FACE"]) geompy.UnionIDs(back_1, [2, 12, 19, 28, 35, 40, 47, 54, 61, 68, 75, 82, 87, 96, 101, 108, 113, 120, 126, 133, 138, 145, 150, 153, 160, 165, 170, 175, 182, 188]) geompy.addToStudy( P_1, 'P_1' ) geompy.addToStudy( P_2, 'P_2' ) geompy.addToStudy( P_3, 'P_3' ) geompy.addToStudy( P_4, 'P_4' ) geompy.addToStudy( P_5, 'P_5' ) geompy.addToStudy( P_6, 'P_6' ) geompy.addToStudy( P_7, 'P_7' ) geompy.addToStudy( P_8, 'P_8' ) geompy.addToStudy( P_9, 'P_9' ) geompy.addToStudy( P_10, 'P_10' ) geompy.addToStudy( P_11, 'P_11' ) geompy.addToStudy( P_12, 'P_12' ) geompy.addToStudy( P_13, 'P_13' ) geompy.addToStudy( P_14, 'P_14' ) geompy.addToStudy( P_15, 'P_15' ) geompy.addToStudy( P_16, 'P_16' ) geompy.addToStudy( P_17, 'P_17' ) geompy.addToStudy( P_18, 'P_18' ) geompy.addToStudy( P_19, 'P_19' ) geompy.addToStudy( P_20, 'P_20' ) geompy.addToStudy( P_21, 'P_21' ) geompy.addToStudy( P_22, 'P_22' ) geompy.addToStudy( P_23, 'P_23' ) geompy.addToStudy( P_24, 'P_24' ) geompy.addToStudy( P_25, 'P_25' ) geompy.addToStudy( P_26, 'P_26' ) geompy.addToStudy( P_27, 'P_27' ) geompy.addToStudy( P_28, 'P_28' ) geompy.addToStudy( P_29, 'P_29' ) geompy.addToStudy( P_30, 'P_30' ) geompy.addToStudy( P_31, 'P_31' ) geompy.addToStudy( P_32, 'P_32' ) geompy.addToStudy( P_33, 'P_33' ) geompy.addToStudy( P_34, 'P_34' ) geompy.addToStudy( P_35, 'P_35' ) geompy.addToStudy( P_36, 'P_36' ) geompy.addToStudy( P_37, 'P_37' ) geompy.addToStudy( P_38, 'P_38' ) geompy.addToStudy( P_39, 'P_39' ) geompy.addToStudy( P_40, 'P_40' ) geompy.addToStudy( P_41, 'P_41' ) geompy.addToStudy( P_42, 'P_42' ) geompy.addToStudy( P_43, 'P_43' ) geompy.addToStudy( P_44, 'P_44' ) geompy.addToStudy( P_45, 'P_45' ) geompy.addToStudy( P_46, 'P_46' ) geompy.addToStudy( P_47, 'P_47' ) geompy.addToStudy( P_48, 'P_48' ) geompy.addToStudy( P_49, 'P_49' ) geompy.addToStudy( P_100, 'P_100' ) geompy.addToStudy( P_101, 'P_101' ) geompy.addToStudy( P_102, 'P_102' ) geompy.addToStudy( P_103, 'P_103' ) geompy.addToStudy( P_104, 'P_104' ) geompy.addToStudy( P_105, 'P_105' ) geompy.addToStudy( P_106, 'P_106' ) geompy.addToStudy( P_107, 'P_107' ) geompy.addToStudy( P_108, 'P_108' ) geompy.addToStudy( P_109, 'P_109' ) geompy.addToStudy( P_110, 'P_110' ) geompy.addToStudy( P_111, 'P_111' ) geompy.addToStudy( P_112, 'P_112' ) geompy.addToStudy( P_113, 'P_113' ) geompy.addToStudy( P_114, 'P_114' ) geompy.addToStudy( P_115, 'P_115' ) geompy.addToStudy( P_116, 'P_116' ) geompy.addToStudy( P_117, 'P_117' ) geompy.addToStudy( P_118, 'P_118' ) geompy.addToStudy( P_119, 'P_119' ) geompy.addToStudy( P_120, 'P_120' ) geompy.addToStudy( P_121, 'P_121' ) geompy.addToStudy( P_122, 'P_122' ) geompy.addToStudy( P_123, 'P_123' ) geompy.addToStudy( P_124, 'P_124' ) geompy.addToStudy( P_125, 'P_125' ) geompy.addToStudy( P_126, 'P_126' ) geompy.addToStudy( P_127, 'P_127' ) geompy.addToStudy( P_128, 'P_128' ) geompy.addToStudy( P_129, 'P_129' ) geompy.addToStudy( P_130, 'P_130' ) geompy.addToStudy( P_131, 'P_131' ) geompy.addToStudy( P_132, 'P_132' ) geompy.addToStudy( P_133, 'P_133' ) geompy.addToStudy( P_134, 'P_134' ) geompy.addToStudy( Edge_1, 'Edge_1' ) geompy.addToStudy( Edge_2, 'Edge_2' ) geompy.addToStudy( Edge_3, 'Edge_3' ) geompy.addToStudy( Edge_4, 'Edge_4' ) geompy.addToStudy( Edge_5, 'Edge_5' ) geompy.addToStudy( Edge_6, 'Edge_6' ) geompy.addToStudy( Edge_7, 'Edge_7' ) geompy.addToStudy( Edge_8, 'Edge_8' ) geompy.addToStudy( Edge_9, 'Edge_9' ) geompy.addToStudy( Edge_10, 'Edge_10' ) geompy.addToStudy( Edge_11, 'Edge_11' ) geompy.addToStudy( Edge_12, 'Edge_12' ) geompy.addToStudy( Edge_13, 'Edge_13' ) geompy.addToStudy( Edge_14, 'Edge_14' ) geompy.addToStudy( Edge_15, 'Edge_15' ) geompy.addToStudy( Edge_16, 'Edge_16' ) geompy.addToStudy( Edge_17, 'Edge_17' ) geompy.addToStudy( Edge_18, 'Edge_18' ) geompy.addToStudy( Edge_19, 'Edge_19' ) geompy.addToStudy( Edge_20, 'Edge_20' ) geompy.addToStudy( Edge_21, 'Edge_21' ) geompy.addToStudy( Edge_22, 'Edge_22' ) geompy.addToStudy( Edge_100, 'Edge_100' ) geompy.addToStudy( Edge_101, 'Edge_101' ) geompy.addToStudy( Edge_102, 'Edge_102' ) geompy.addToStudy( Edge_103, 'Edge_103' ) geompy.addToStudy( Edge_104, 'Edge_104' ) geompy.addToStudy( Edge_105, 'Edge_105' ) geompy.addToStudy( Edge_106, 'Edge_106' ) geompy.addToStudy( Edge_107, 'Edge_107' ) geompy.addToStudy( Edge_108, 'Edge_108' ) geompy.addToStudy( Edge_109, 'Edge_109' ) geompy.addToStudy( Edge_110, 'Edge_110' ) geompy.addToStudy( Edge_111, 'Edge_111' ) geompy.addToStudy( Sketch_1, 'Sketch_1' ) geompy.addToStudy( body1, 'body1' ) geompy.addToStudy( Sketch_2, 'Sketch_2' ) geompy.addToStudy( body2, 'body2' ) geompy.addToStudy( body, 'body' ) geompy.addToStudy( Partition_1, 'Partition_1') geompy.addToStudy( Rotation_1, 'Rotation_1' ) geompy.addToStudy( O, 'O' ) geompy.addToStudy( OX, 'OX' ) geompy.addToStudy( OY, 'OY' ) geompy.addToStudy( OZ, 'OZ' ) geompy.addToStudy( Sketch_3, 'Sketch_3' ) geompy.addToStudy( body3, 'body3' ) geompy.addToStudy( Sketch_4, 'Sketch_4' ) geompy.addToStudy( body4, 'body4' ) geompy.addToStudy( Sketch_5, 'Sketch_5' ) geompy.addToStudy( body5, 'body5' ) geompy.addToStudy( bodyII, 'bodyII' ) geompy.addToStudy( Partition_2, 'Partition_2' ) geompy.addToStudy( Rotation_2, 'Rotation_2' ) geompy.addToStudyInFather( Rotation_1, Edge_23, 'Edge_23' ) geompy.addToStudyInFather( Rotation_1, Edge_24, 'Edge_24' ) geompy.addToStudyInFather( Rotation_1, Edge_25, 'Edge_25' ) geompy.addToStudyInFather( Rotation_1, Edge_26, 'Edge_26' ) geompy.addToStudyInFather( Rotation_1, inlet, 'inlet' ) geompy.addToStudyInFather( Rotation_1, Edge_27, 'Edge_27' ) geompy.addToStudyInFather( Rotation_1, Edge_28, 'Edge_28' ) geompy.addToStudyInFather( Rotation_1, outlet, 'outlet' ) geompy.addToStudyInFather( Rotation_1, Edge_29, 'Edge_29' ) geompy.addToStudyInFather( Rotation_1, Edge_30, 'Edge_30' ) geompy.addToStudyInFather( Rotation_1, Edge_31, 'Edge_31' ) geompy.addToStudyInFather( Rotation_1, Edge_32, 'Edge_32' ) geompy.addToStudyInFather( Rotation_1, Edge_33, 'Edge_33' ) geompy.addToStudyInFather( Rotation_1, Edge_34, 'Edge_34' ) geompy.addToStudyInFather( Rotation_1, Edge_35, 'Edge_35' ) geompy.addToStudyInFather( Rotation_1, Edge_36, 'Edge_36' ) geompy.addToStudyInFather( Rotation_1, Edge_37, 'Edge_37' ) geompy.addToStudyInFather( Rotation_1, Edge_38, 'Edge_38' ) geompy.addToStudyInFather( Rotation_1, Edge_39, 'Edge_39' ) geompy.addToStudyInFather( Rotation_1, axys, 'axys' ) geompy.addToStudyInFather( Rotation_1, Edge_40, 'Edge_40' ) geompy.addToStudyInFather( Rotation_1, Edge_41, 'Edge_41' ) geompy.addToStudyInFather( Rotation_1, Edge_42, 'Edge_42' ) geompy.addToStudyInFather( Rotation_1, Edge_43, 'Edge_43' ) geompy.addToStudyInFather( Rotation_1, Edge_44, 'Edge_44' ) geompy.addToStudyInFather( Rotation_1, Edge_45, 'Edge_45' ) geompy.addToStudyInFather( Rotation_1, Edge_46, 'Edge_46' ) geompy.addToStudyInFather( Rotation_1, Edge_47, 'Edge_47' ) geompy.addToStudyInFather( Rotation_1, Edge_48, 'Edge_48' ) geompy.addToStudyInFather( Rotation_1, Edge_49, 'Edge_49' ) geompy.addToStudyInFather( Rotation_1, Edge_50, 'Edge_50' ) geompy.addToStudyInFather( Rotation_1, Edge_51, 'Edge_51' ) geompy.addToStudyInFather( Rotation_1, Edge_52, 'Edge_52' ) geompy.addToStudyInFather( Rotation_1, Edge_53, 'Edge_53' ) geompy.addToStudyInFather( Rotation_1, Edge_54, 'Edge_54' ) geompy.addToStudyInFather( Rotation_1, Edge_55, 'Edge_55' ) geompy.addToStudyInFather( Rotation_1, Edge_56, 'Edge_56' ) geompy.addToStudyInFather( Rotation_1, Edge_57, 'Edge_57' ) geompy.addToStudyInFather( Rotation_1, Edge_58, 'Edge_58' ) geompy.addToStudyInFather( Rotation_1, Edge_59, 'Edge_59' ) geompy.addToStudyInFather( Rotation_1, Edge_60, 'Edge_60' ) geompy.addToStudyInFather( Rotation_1, Edge_61, 'Edge_61' ) geompy.addToStudyInFather( Rotation_1, Edge_62, 'Edge_62' ) geompy.addToStudyInFather( Rotation_1, Edge_63, 'Edge_63' ) geompy.addToStudyInFather( Rotation_1, Edge_64, 'Edge_64' ) geompy.addToStudyInFather( Rotation_1, Edge_65, 'Edge_65' ) geompy.addToStudyInFather( Rotation_1, Edge_66, 'Edge_66' ) geompy.addToStudyInFather( Rotation_1, wall_ext, 'wall_ext' ) geompy.addToStudyInFather( Rotation_1, Face_1, 'Face_1' ) geompy.addToStudyInFather( Rotation_1, Face_2, 'Face_2' ) geompy.addToStudyInFather( Rotation_1, Face_3, 'Face_3' ) geompy.addToStudyInFather( Rotation_1, porous, 'porous' ) geompy.addToStudyInFather( Rotation_1, back, 'back' ) geompy.addToStudyInFather( Rotation_2, Edge_67, 'Edge_67' ) geompy.addToStudyInFather( Rotation_2, Edge_68, 'Edge_68' ) geompy.addToStudyInFather( Rotation_2, Edge_69, 'Edge_69' ) geompy.addToStudyInFather( Rotation_2, Edge_70, 'Edge_70' ) geompy.addToStudyInFather( Rotation_2, Edge_71, 'Edge_71' ) geompy.addToStudyInFather( Rotation_2, Edge_72, 'Edge_72' ) geompy.addToStudyInFather( Rotation_2, Edge_73, 'Edge_73' ) geompy.addToStudyInFather( Rotation_2, Edge_74, 'Edge_74' ) geompy.addToStudyInFather( Rotation_2, Edge_75, 'Edge_75' ) geompy.addToStudyInFather( Rotation_2, Edge_76, 'Edge_76' ) geompy.addToStudyInFather( Rotation_2, Edge_77, 'Edge_77' ) geompy.addToStudyInFather( Rotation_2, Edge_78, 'Edge_78' ) geompy.addToStudyInFather( Rotation_2, Edge_79, 'Edge_79' ) geompy.addToStudyInFather( Rotation_2, Edge_80, 'Edge_80' ) geompy.addToStudyInFather( Rotation_2, Edge_81, 'Edge_81' ) geompy.addToStudyInFather( Rotation_2, Edge_82, 'Edge_82' ) geompy.addToStudyInFather( Rotation_2, Edge_83, 'Edge_83' ) geompy.addToStudyInFather( Rotation_2, wall, 'wall' ) geompy.addToStudyInFather( Rotation_2, Edge_84, 'Edge_84' ) geompy.addToStudyInFather( Rotation_2, Edge_85, 'Edge_85' ) geompy.addToStudyInFather( Rotation_2, Edge_86, 'Edge_86' ) geompy.addToStudyInFather( Rotation_2, Edge_87, 'Edge_87' ) geompy.addToStudyInFather( Rotation_2, Edge_88, 'Edge_88' ) geompy.addToStudyInFather( Rotation_2, Edge_89, 'Edge_89' ) geompy.addToStudyInFather( Rotation_2, Edge_90, 'Edge_90' ) geompy.addToStudyInFather( Rotation_2, Edge_91, 'Edge_91' ) geompy.addToStudyInFather( Rotation_2, Edge_92, 'Edge_92' ) geompy.addToStudyInFather( Rotation_2, Edge_93, 'Edge_93' ) geompy.addToStudyInFather( Rotation_2, Edge_94, 'Edge_94' ) geompy.addToStudyInFather( Rotation_2, Edge_95, 'Edge_95' ) geompy.addToStudyInFather( Rotation_2, Edge_96, 'Edge_96' ) geompy.addToStudyInFather( Rotation_2, Edge_97, 'Edge_97' ) geompy.addToStudyInFather( Rotation_2, Edge_98, 'Edge_98' ) geompy.addToStudyInFather( Rotation_2, Edge_99, 'Edge_99' ) geompy.addToStudyInFather( Rotation_2, Edge_112, 'Edge_112' ) geompy.addToStudyInFather( Rotation_2, Edge_113, 'Edge_113' ) geompy.addToStudyInFather( Rotation_2, Edge_114, 'Edge_114' ) geompy.addToStudyInFather( Rotation_2, Edge_115, 'Edge_115' ) geompy.addToStudyInFather( Rotation_2, Edge_116, 'Edge_116' ) geompy.addToStudyInFather( Rotation_2, Edge_117, 'Edge_117' ) geompy.addToStudyInFather( Rotation_2, Edge_118, 'Edge_118' ) geompy.addToStudyInFather( Rotation_2, Edge_119, 'Edge_119' ) geompy.addToStudyInFather( Rotation_2, oversetPatch, 'oversetPatch' ) geompy.addToStudyInFather( Rotation_2, back_1, 'back' ) ### ### SMESH component ### import SMESH, SALOMEDS from salome.smesh import smeshBuilder smesh = smeshBuilder.New() #smesh.SetEnablePublish( False ) # Set to False to avoid publish in study if not needed or in some particular situations: # multiples meshes built in parallel, complex and numerous mesh edition (performance) Mesh_1 = smesh.Mesh(Rotation_1) Regular_1D = Mesh_1.Segment() Local_Length_1 = Regular_1D.LocalLength(0.0002,None,1e-09) Quadrangle_2D = Mesh_1.Quadrangle(algo=smeshBuilder.QUADRANGLE) isDone = Mesh_1.Compute() inlet_1 = Mesh_1.GroupOnGeom(inlet,'inlet',SMESH.EDGE) outlet_1 = Mesh_1.GroupOnGeom(outlet,'outlet',SMESH.EDGE) axys_1 = Mesh_1.GroupOnGeom(axys,'axys',SMESH.EDGE) wall_ext_1 = Mesh_1.GroupOnGeom(wall_ext,'wall_ext',SMESH.EDGE) porous_1 = Mesh_1.GroupOnGeom(porous,'porous',SMESH.FACE) back_2 = Mesh_1.GroupOnGeom(back,'back',SMESH.FACE) [ inlet_rotated, outlet_rotated, axys_rotated, wall_ext_rotated, porous_rotated, back_rotated, inlet_top, outlet_top, axys_top, wall_ext_top, porous_top, back_top ] = Mesh_1.RotationSweepObjects( [ Mesh_1 ], [ Mesh_1 ], [ Mesh_1 ], SMESH.AxisStruct( 0, 0, 9e-09, 10, 0, 0 ), 0.0872665, 1, 1e-11, 1 ) Mesh_2 = smesh.Mesh(Rotation_2) Regular_1D_1 = Mesh_2.Segment() Local_Length_2 = Regular_1D_1.LocalLength(0.0002,None,1e-09) Quadrangle_2D_1 = Mesh_2.Quadrangle(algo=smeshBuilder.QUADRANGLE) isDone = Mesh_2.Compute() wall_1 = Mesh_2.GroupOnGeom(wall,'wall',SMESH.EDGE) oversetPatch_1 = Mesh_2.GroupOnGeom(oversetPatch,'oversetPatch',SMESH.EDGE) back_3 = Mesh_2.GroupOnGeom(back_1,'back',SMESH.FACE) [ wall_rotated, oversetPatch_rotated, back_rotated_1, wall_top, oversetPatch_top, back_top_1 ] = Mesh_2.RotationSweepObjects( [ Mesh_2 ], [ Mesh_2 ], [ Mesh_2 ], SMESH.AxisStruct( 0, 0, 9e-09, 10, 0, 0 ), 0.0872665, 1, 1e-11, 1 ) ## Set names of Mesh objects smesh.SetName(wall_1, 'wall') smesh.SetName(Regular_1D.GetAlgorithm(), 'Regular_1D') smesh.SetName(back_top, 'back_top') smesh.SetName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D') smesh.SetName(Local_Length_2, 'Local Length_2') smesh.SetName(back_rotated_1, 'back_rotated') smesh.SetName(Local_Length_1, 'Local Length_1') smesh.SetName(porous_1, 'porous') smesh.SetName(back_2, 'back') smesh.SetName(inlet_rotated, 'inlet_rotated') smesh.SetName(outlet_rotated, 'outlet_rotated') smesh.SetName(axys_rotated, 'axys_rotated') smesh.SetName(wall_ext_rotated, 'wall_ext_rotated') smesh.SetName(porous_top, 'porous_top') smesh.SetName(Mesh_1.GetMesh(), 'Mesh_1') smesh.SetName(Mesh_2.GetMesh(), 'Mesh_2') smesh.SetName(back_rotated, 'back_rotated') smesh.SetName(porous_rotated, 'porous_rotated') smesh.SetName(wall_ext_top, 'wall_ext_top') smesh.SetName(back_top_1, 'back_top') smesh.SetName(oversetPatch_rotated, 'oversetPatch_rotated') smesh.SetName(wall_rotated, 'wall_rotated') smesh.SetName(inlet_1, 'inlet') smesh.SetName(back_3, 'back') smesh.SetName(axys_1, 'axys') smesh.SetName(outlet_1, 'outlet') smesh.SetName(inlet_top, 'inlet_top') smesh.SetName(wall_ext_1, 'wall_ext') smesh.SetName(axys_top, 'axys_top') smesh.SetName(outlet_top, 'outlet_top') smesh.SetName(oversetPatch_top, 'oversetPatch_top') smesh.SetName(oversetPatch_1, 'oversetPatch') smesh.SetName(wall_top, 'wall_top') if salome.sg.hasDesktop(): salome.sg.updateObjBrowser() Here we have created two meshes, one for the overset object (moving part) and other for the fixed cells. .. tabularcolumns:: | p{455pt} | .. table:: Base geometry +--------------------------------------------+ | Figure | +============================================+ | .. figure:: ../images/valvula4.JPG | +--------------------------------------------+ .. tabularcolumns:: | p{455pt} | .. table:: Overset geometry +--------------------------------------------+ | Figure | +============================================+ | .. figure:: ../images/valvula5.JPG | +--------------------------------------------+ The mesh corresponding to the fixed part coantains the inlet, outlet and wall_ext. It also has zones to identify the porous and the fluid zone. The use of the overSet feature is exclusive for the openFoam ESI version, in this case we installed the 19.12 version. It created the folder /home/hgasca/openFoam/hgasca-v1912/run, there we created the case folders FRV... and inside three folders called all, cylinder ans ref_sol as in the overSet tutorials. The cylinder folder contains a constant and system folder in order to create the Mesh from the .unv salome file. The all folder will contain the complete case. The oversetPatch was created without the hole region which could be produced later. This is the Salome code to generate the meshes. Parameters:: #!/usr/bin/env python ### ### This file is generated automatically by SALOME v9.3.0 with dump python functionality ### import sys import salome salome.salome_init() import salome_notebook notebook = salome_notebook.NoteBook() sys.path.insert(0, r'/home/hgasca/Desktop/valvula') ### ### GEOM component ### import GEOM from salome.geom import geomBuilder import math import SALOMEDS 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) #ALL GAP1 = 0.003 GAP2 = 0.005 GAP3 = 0.003 #OVERLAP GAP4 = 0.002 GAP5 = 0.002 GAP6 = 0.0018 GAP7 = 0.001 #GENERAL D1 = 0.02365 D2 = 0.022 D3 = 0.003 D4 = 0.0099 D5 = 0.017 D6 = 0.024 D7 = D5 D8 = 0.038 D9 = 0.014 D10 = 0.021 D11 = 0.022 D12 = D7 + 0.001 L1 = 0.070 L2 = 0.001 L3 = 0.00633 L4 = 0.040 L5 = 0.003 L6 = 0.030 L7 = 0.08233 L8 = 0.002 L9 = 0.01 L10 = 0.05 L11 = 0.080 L12 = 0.005 L13 = 0.010 L14 = 0.035 L16 = 0.006 L15 = L14-L16 L17 = 0.010 AVANCE =0.01 Ax = 0 Bx = L1 Bx1=Bx-GAP2 Bx_d =Bx-GAP4 Cx = L1 + L2 Dx = Cx + L3 Ex = Dx + L4 Fx = Ex + L5 Gx = Fx + L6 Gx1= Gx + GAP1 Gx_d = Gx-AVANCE Hx = Dx + L7 Ix = Hx + L8 Ix_d = Ix+GAP5 Jx = Hx + L17 Kx = Hx + L9 Lx = Jx + L16 Mx = Jx + L14 Nx = Kx + L10 Ox = Nx + L11 Px = Ox + L12 Qx = Px + L13 ay = 0 by = D3/2 by_d = (ay+by)/2+0.00015 cy = D2/2 dy = D1/2 dy_d = dy+GAP6 ey = D4/2 fy = D5/2 fy_d = fy+GAP7 gy = D6/2 gy1 = gy + GAP3 hy = D11/2 iy = hy jy = D8/2 ky = D9/2 ly = D9/2 + 0.001 my = D10/2 sy = D12/2 ty = (hy+sy)/2+0.0005 Poins and edges:: #ALL P_1 = geompy.MakeVertex(Ax, ay, 0) P_2 = geompy.MakeVertex(Qx, ay, 0) P_3 = geompy.MakeVertex(Ax, fy, 0) P_4 = geompy.MakeVertex(Lx, fy, 0) P_5 = geompy.MakeVertex(Ax, sy, 0) P_6 = geompy.MakeVertex(Lx, sy, 0) P_7 = geompy.MakeVertex(Ax, ty, 0) P_8 = geompy.MakeVertex(Lx, ty, 0) P_9 = geompy.MakeVertex(Ax, dy, 0) P_10 = geompy.MakeVertex(Gx1, dy, 0) P_11 = geompy.MakeVertex(Bx1, gy1, 0) P_12 = geompy.MakeVertex(Gx1, gy1, 0) P_13 = geompy.MakeVertex(Hx, ty, 0) P_14 = geompy.MakeVertex(Hx, iy, 0) P_15 = geompy.MakeVertex(Kx, jy, 0) P_16 = geompy.MakeVertex(Nx, jy, 0) P_17 = geompy.MakeVertex(Nx, hy, 0) P_18 = geompy.MakeVertex(Mx, ky, 0) P_19 = geompy.MakeVertex(Qx, ky, 0) P_20 = geompy.MakeVertex(Nx, ky, 0) P_21 = geompy.MakeVertex(Ox, ky, 0) P_22 = geompy.MakeVertex(Ox, ly/2, 0) P_23 = geompy.MakeVertex(Px, my, 0) P_24 = geompy.MakeVertex(Qx, my, 0) P_25 = geompy.MakeVertex(Bx1, ay, 0) P_26 = geompy.MakeVertex(Bx1, dy, 0) P_27 = geompy.MakeVertex(Gx1, ay, 0) P_28 = geompy.MakeVertex(Hx, ay, 0) P_29 = geompy.MakeVertex(Hx+(Jx-Hx)*2/3 , ay, 0) P_30 = geompy.MakeVertex(Hx+(Jx-Hx)*2/3, hy, 0) P_30a = geompy.MakeVertex(Hx, hy, 0) P_31 = geompy.MakeVertex(Hx+(Jx-Hx)*0.55, (jy+iy)*2/3, 0) P_32 = geompy.MakeVertex(Jx, ay, 0) P_33 = geompy.MakeVertex(Jx, sy, 0) P_34 = geompy.MakeVertex(Jx, ty, 0) P_35 = geompy.MakeVertex(Jx, hy, 0) P_36 = geompy.MakeVertex(Lx, ay, 0) P_37 = geompy.MakeVertex(Mx, hy, 0) P_38 = geompy.MakeVertex(Mx, ay, 0) P_39 = geompy.MakeVertex(Nx, ay, 0) P_40 = geompy.MakeVertex(Ox, ay, 0) P_41 = geompy.MakeVertex(Ox+(Px-Ox)*2/3, ay, 0) P_42 = geompy.MakeVertex(Px, ay, 0) P_43 = geompy.MakeVertex(Ox+(Px-Ox)*2/3, ky, 0) P_44 = geompy.MakeVertex(Ox+(Px-Ox)*1/3, (ly+my)*2/3, 0) P_45 = geompy.MakeVertex(Jx, jy, 0) P_46 = geompy.MakeVertex(Kx, iy, 0) P_47 = geompy.MakeVertex(Mx, jy, 0) P_48 = geompy.MakeVertex(Hx+(Jx-Hx)*1/4 , ay, 0) P_49 = geompy.MakeVertex(Hx+(Jx-Hx)*1/4 , jy, 0) P_50 = geompy.MakeVertex(Hx+(Jx-Hx)*1/7 , ay, 0) P_51 = geompy.MakeVertex(Hx+(Jx-Hx)*1/7 , jy, 0) P_52= geompy.MakeVertex(Hx+(Jx-Hx)*1/12 , ay, 0) P_53= geompy.MakeVertex(Hx+(Jx-Hx)*1/12 , jy, 0) #OVERLAP P_100 = geompy.MakeVertex(Bx_d,by_d,0) P_101 = geompy.MakeVertex(Ix_d,by_d, 0) P_102 = geompy.MakeVertex(Bx_d,by,0) P_103 = geompy.MakeVertex(Ix_d,by,0) P_104 = geompy.MakeVertex(Bx_d,cy,0) P_105 = geompy.MakeVertex(Ix,cy,0) P_106 = geompy.MakeVertex(Bx_d,dy,0) P_107 = geompy.MakeVertex(Gx_d,dy,0) P_108 = geompy.MakeVertex(Bx_d,dy_d,0) P_109 = geompy.MakeVertex(Gx_d,dy_d,0) P_110 = geompy.MakeVertex(Bx_d,fy_d,0) P_111 = geompy.MakeVertex(Gx_d,fy_d,0) P_112 = geompy.MakeVertex(Bx_d,fy,0) P_113 = geompy.MakeVertex(Ix_d,fy,0) P_114 = geompy.MakeVertex(Bx_d,ey,0) P_115 = geompy.MakeVertex(Ix_d,ey,0) P_116 = geompy.MakeVertex(Bx,by_d,0) P_117 = geompy.MakeVertex(Bx,dy_d,0) P_118 = geompy.MakeVertex(Cx,by_d,0) P_119 = geompy.MakeVertex(Cx,by,0) P_120 = geompy.MakeVertex(Dx,by_d,0) P_121 = geompy.MakeVertex(Dx,dy,0) P_122 = geompy.MakeVertex(Dx,dy_d,0) P_123 = geompy.MakeVertex(Ex,by_d,0) P_124 = geompy.MakeVertex(Ex,ey,0) P_125 = geompy.MakeVertex(Ex,fy,0) P_126 = geompy.MakeVertex(Ex,dy_d,0) P_127 = geompy.MakeVertex(Fx,by_d,0) P_128 = geompy.MakeVertex(Fx,ey,0) P_129 = geompy.MakeVertex(Fx,fy,0) P_130 = geompy.MakeVertex(Fx,dy_d,0) P_131 = geompy.MakeVertex(Gx_d,by_d,0) P_132 = geompy.MakeVertex(Ix_d,fy_d,0) P_133 = geompy.MakeVertex(Ix,by_d,0) P_134 = geompy.MakeVertex(Ix,fy_d,0) ## ALL # Horizontales Edge_1 = geompy.MakeEdge(P_1, P_2) Edge_2 = geompy.MakeEdge(P_3, P_4) Edge_3 = geompy.MakeEdge(P_5, P_6) Edge_4 = geompy.MakeEdge(P_7, P_8) Edge_5 = geompy.MakeEdge(P_9, P_10) Edge_6 = geompy.MakeEdge(P_11, P_12) Edge_7 = geompy.MakeEdge(P_30a, P_35) Edge_8 = geompy.MakeEdge(P_18, P_20) Edge_9 = geompy.MakeEdge(P_21, P_19) Edge_10 = geompy.MakeEdge(P_37, P_17) # Verticales Edge_11 = geompy.MakeEdge(P_25, P_11) Edge_12 = geompy.MakeEdge(P_27, P_12) Edge_13 = geompy.MakeEdge(P_28, P_14) Edge_14 = geompy.MakeEdge(P_29, P_30) Edge_15 = geompy.MakeEdge(P_30, P_31) Edge_16 = geompy.MakeEdge(P_32, P_45) Edge_17 = geompy.MakeEdge(P_40, P_21) Edge_18 = geompy.MakeEdge(P_37, P_47) Edge_19 = geompy.MakeEdge(P_41, P_43) Edge_20 = geompy.MakeEdge(P_43, P_44) Edge_21 = geompy.MakeEdge(P_42, P_23) Edge_22 = geompy.MakeEdge(P_48, P_49) Edge_300 = geompy.MakeEdge(P_50, P_51) Edge_301 = geompy.MakeEdge(P_52, P_53) ## OVERLAP #Horizontal Edge_100 = geompy.MakeEdge(P_102, P_103) Edge_101 = geompy.MakeEdge(P_104, P_105) Edge_102 = geompy.MakeEdge(P_110, P_111) Edge_103 = geompy.MakeEdge(P_106, P_107) Edge_104 = geompy.MakeEdge(P_112, P_113) Edge_105 = geompy.MakeEdge(P_114, P_115) #Vertical Edge_106 = geompy.MakeEdge(P_116, P_117) Edge_107 = geompy.MakeEdge(P_120, P_122) Edge_108 = geompy.MakeEdge(P_123, P_126) Edge_109 = geompy.MakeEdge(P_127, P_130) Edge_110 = geompy.MakeEdge(P_131, P_111) Edge_111 = geompy.MakeEdge(P_133, P_134) Sketch and face for the fixed mesh:: ## ALL # Sketch 2D O = geompy.MakeVertex(0, 0, 0) OX = geompy.MakeVectorDXDYDZ(1, 0, 0) OY = geompy.MakeVectorDXDYDZ(0, 1, 0) OZ = geompy.MakeVectorDXDYDZ(0, 0, 1) geomObj_1 = geompy.MakeMarker(0, 0, 0, 1, 0, 0, 0, 1, 0) sk = geompy.Sketcher2D() sk.addPoint(0.000000, 0.000000) sk.addSegmentAbsolute(0.000000, dy) sk.addSegmentAbsolute(Bx1 , dy) sk.addSegmentAbsolute(Bx1 , gy1) sk.addSegmentAbsolute(Gx1 , gy1) sk.addSegmentAbsolute(Gx1 , ty) sk.addSegmentAbsolute(Hx , ty) #sk.addSegmentAbsolute(Hx , iy) sk.addSegmentAbsolute(Hx , 5*jy/6) sk.addSegmentAbsolute(Kx , jy) sk.addSegmentAbsolute(Nx , jy) sk.addSegmentAbsolute(Nx , ky) sk.addSegmentAbsolute(Ox , ky) #sk.addSegmentAbsolute(Ox , ly) sk.addSegmentAbsolute(Ox , 5*my/6) sk.addSegmentAbsolute(Px , my) sk.addSegmentAbsolute(Qx , my) sk.addSegmentAbsolute(Qx , ay) sk.close() Sketch_1 = sk.wire(geomObj_1) body1 = geompy.MakeFaceWires([Sketch_1], 1) geomObj_2 = geompy.MakeMarker(0, 0, 0, 1, 0, 0, 0, 1, 0) sk = geompy.Sketcher2D() sk.addPoint(Lx, 0.000000) sk.addSegmentAbsolute(Lx , ty) sk.addSegmentAbsolute(Jx , ty) sk.addSegmentAbsolute(Jx , hy) sk.addSegmentAbsolute(Mx , hy) sk.addSegmentAbsolute(Mx , 0) sk.close() Sketch_2 = sk.wire(geomObj_2) body2 = geompy.MakeFaceWires([Sketch_2], 1) body = geompy.MakeCutList(body1, [body2], True) Partition_1 = geompy.MakePartition([body], [Edge_1, Edge_2, Edge_3, Edge_4, Edge_5, Edge_6, Edge_7, Edge_8, Edge_9, Edge_10, Edge_11, Edge_12, Edge_13, Edge_14, Edge_15, Edge_16, Edge_17, Edge_18, Edge_19, Edge_20, Edge_21, Edge_22, Edge_300, Edge_301], [], [], geompy.ShapeType["FACE"], 0, [], 0) Here is rotated the face a negative angle of 2.5 degrees:: Rotation_1 = geompy.MakeRotation(Partition_1, OX, -2.5*math.pi/180.0) [Edge_23,Edge_24,Edge_25,Edge_26] = geompy.SubShapes(Rotation_1, [181, 162, 126, 193]) [Edge_27,Edge_28] = geompy.SubShapes(Rotation_1, [231, 236]) [Edge_29,Edge_30,Edge_31,Edge_32,Edge_33,Edge_34,Edge_35,Edge_36,Edge_37,Edge_38,Edge_39] = geompy.SubShapes(Rotation_1, [18, 51, 68, 172, 217, 128, 32, 229, 11, 203, 92]) [Edge_40,Edge_41,Edge_42,Edge_43,Edge_44,Edge_45,Edge_46,Edge_47,Edge_48,Edge_49,Edge_50,Edge_51,Edge_52,Edge_53,Edge_54,Edge_55,Edge_56,Edge_57,Edge_58,Edge_59,Edge_60,Edge_61,Edge_62,Edge_63,Edge_64,Edge_65,Edge_66] = geompy.SubShapes(Rotation_1, [226, 107, 176, 114, 121, 21, 200, 184, 117, 170, 155, 196, 40, 191, 238, 146, 157, 81, 212, 4, 42, 136, 141, 198, 150, 214, 143]) [Face_1,Face_2,Face_3] = geompy.SubShapes(Rotation_1, [134, 38, 194]) Sketch and faces for the overlap section:: ## OVERLAP # Sketch 2D O = geompy.MakeVertex(0, 0, 0) OX = geompy.MakeVectorDXDYDZ(1, 0, 0) OY = geompy.MakeVectorDXDYDZ(0, 1, 0) OZ = geompy.MakeVectorDXDYDZ(0, 0, 1) geomObj_3 = geompy.MakeMarker(0, 0, 0, 1, 0, 0, 0, 1, 0) sk = geompy.Sketcher2D() sk.addPoint(Bx_d, by_d) sk.addSegmentAbsolute(Bx_d, dy_d) sk.addSegmentAbsolute(Gx_d , dy_d) sk.addSegmentAbsolute(Gx_d , fy_d) sk.addSegmentAbsolute(Ix_d , fy_d) sk.addSegmentAbsolute(Ix_d , by_d) sk.close() Sketch_3 = sk.wire(geomObj_3) bodyII = geompy.MakeFaceWires([Sketch_3], 1) Partition_2 = geompy.MakePartition([bodyII], [Edge_100, Edge_101, Edge_102, Edge_103, Edge_104, Edge_105, Edge_106, Edge_107, Edge_108, Edge_109, Edge_110, Edge_111, Edge_12], [], [], geompy.ShapeType["FACE"], 0, [], 0) Rotation of -2.5 degrees necessary for the construction of wedge sector:: Rotation_2 = geompy.MakeRotation(Partition_2, OX, -2.5*math.pi/180.0) [Edge_67,Edge_68,Edge_69,Edge_70,Edge_71,Edge_72,Edge_73,Edge_74,Edge_75,Edge_76,Edge_77,Edge_78,Edge_79,Edge_80,Edge_81,Edge_82,Edge_83] = geompy.SubShapes(Rotation_2, [30, 89, 124, 37, 112, 67, 119, 184, 149, 25, 122, 115, 181, 39, 65, 70, 172]) [Edge_84,Edge_85,Edge_86,Edge_87,Edge_88,Edge_89,Edge_90,Edge_91,Edge_92,Edge_93,Edge_94,Edge_95,Edge_96,Edge_97,Edge_98,Edge_99,Edge_112,Edge_113,Edge_114,Edge_115,Edge_116,Edge_117,Edge_118,Edge_119] = geompy.SubShapes(Rotation_2, [77, 56, 190, 140, 21, 137, 34, 167, 53, 74, 157, 142, 11, 103, 164, 162, 100, 192, 4, 177, 18, 187, 51, 42]) Groups from geometry:: inlet = geompy.CreateGroup(Rotation_1, geompy.ShapeType["EDGE"]) geompy.UnionIDs(inlet, [203, 259, 283, 230]) Wall = geompy.CreateGroup(Rotation_1, geompy.ShapeType["EDGE"]) geompy.UnionIDs(Wall, [223, 121, 160, 155, 42, 40, 213, 112, 187, 162, 288, 240, 146, 4, 198, 262, 21, 254, 117, 302, 81, 238, 151, 278, 286, 220, 252, 192, 290, 281]) outlet = geompy.CreateGroup(Rotation_1, geompy.ShapeType["EDGE"]) geompy.UnionIDs(outlet, [300, 295]) axis = geompy.CreateGroup(Rotation_1, geompy.ShapeType["EDGE"]) geompy.UnionIDs(axis, [243, 18, 194, 269, 169, 51, 205, 32, 92, 128, 11, 68, 293]) back = geompy.CreateGroup(Rotation_1, geompy.ShapeType["FACE"]) geompy.UnionIDs(back, [2, 12, 26, 33, 45, 52, 57, 62, 69, 74, 79, 86, 93, 98, 103, 108, 115, 122, 129, 134, 139, 144, 149, 158, 163, 175, 180, 185, 190, 199, 206, 216, 221, 226, 231, 236, 241, 248, 255, 260, 267, 274, 279, 291, 298]) porous_back = geompy.CreateGroup(Rotation_1, geompy.ShapeType["FACE"]) geompy.UnionIDs(porous_back, [170, 38, 19, 284, 211]) oversetPatch = geompy.CreateGroup(Rotation_2, geompy.ShapeType["EDGE"]) geompy.UnionIDs(oversetPatch, [138, 75, 51, 18, 11, 32, 104, 242, 212, 136, 175, 262, 245, 260, 220, 252, 227, 267, 235, 265, 205, 255, 166, 40, 93, 127, 21, 203, 64, 4]) back_1 = geompy.CreateGroup(Rotation_2, geompy.ShapeType["FACE"]) geompy.UnionIDs(back_1, [2, 12, 19, 26, 33, 38, 45, 52, 57, 62, 69, 76, 81, 86, 91, 98, 105, 110, 115, 120, 125, 139, 144, 149, 154, 159, 164, 176, 181, 186, 191, 196, 201, 213, 218, 223, 228, 233, 243, 253]) porous_back_1 = geompy.CreateGroup(Rotation_2, geompy.ShapeType["FACE"]) geompy.UnionIDs(porous_back_1, [238, 248, 263, 208, 258, 132, 171]) After this part it's necessary to neme all the used variables with geompy command. Then Mesh 2D regions and add groups from geometry:: ### ### SMESH component ### import SMESH, SALOMEDS from salome.smesh import smeshBuilder smesh = smeshBuilder.New() #smesh.SetEnablePublish( False ) # Set to False to avoid publish in study if not needed or in some particular situations: # multiples meshes built in parallel, complex and numerous mesh edition (performance) Mesh_1 = smesh.Mesh(Rotation_1) Regular_1D = Mesh_1.Segment() Local_Length_1 = Regular_1D.LocalLength(0.0002,None,1e-09) Quadrangle_2D = Mesh_1.Quadrangle(algo=smeshBuilder.QUADRANGLE) isDone = Mesh_1.Compute() ## Set names of Mesh objects smesh.SetName(Regular_1D.GetAlgorithm(), 'Regular_1D') smesh.SetName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D') smesh.SetName(Local_Length_1, 'Local Length_1') Mesh_2 = smesh.Mesh(Rotation_2) Regular_1D_1 = Mesh_2.Segment() Local_Length_2 = Regular_1D_1.LocalLength(0.0002,None,1e-09) Quadrangle_2D_1 = Mesh_2.Quadrangle(algo=smeshBuilder.QUADRANGLE) isDone = Mesh_2.Compute() inlet_1 = Mesh_1.GroupOnGeom(inlet,'inlet',SMESH.EDGE) Wall_1 = Mesh_1.GroupOnGeom(Wall,'Wall',SMESH.EDGE) outlet_1 = Mesh_1.GroupOnGeom(outlet,'outlet',SMESH.EDGE) axis_1 = Mesh_1.GroupOnGeom(axis,'axis',SMESH.EDGE) back_2 = Mesh_1.GroupOnGeom(back,'back',SMESH.FACE) porous_back_2 = Mesh_1.GroupOnGeom(porous_back,'porous_back',SMESH.FACE) oversetPatch_1 = Mesh_2.GroupOnGeom(oversetPatch,'oversetPatch',SMESH.EDGE) back_3 = Mesh_2.GroupOnGeom(back_1,'back',SMESH.FACE) porous_back_3 = Mesh_2.GroupOnGeom(porous_back_1,'porous_back',SMESH.FACE) Now the meshes are rotated 5 degrees and a wedge is obtained, the tolerances are needed to produce an axis face. Openfoam works with volumes :: [ inlet_rotated, Wall_rotated, outlet_rotated, axis_rotated, back_rotated, porous_back_rotated, inlet_top, Wall_top, outlet_top, axis_top, back_top, porous_back_top ] = Mesh_1.RotationSweepObjects( [ Mesh_1 ], [ Mesh_1 ], [ Mesh_1 ], SMESH.AxisStruct( 0, 0, 9e-09, 10, 0, 0 ), 0.0872665, 1, 1e-11, 1 ) [ oversetPatch_rotated, back_rotated_1, porous_back_rotated_1, oversetPatch_top, back_top_1, porous_back_top_1 ] = Mesh_2.RotationSweepObjects( [ Mesh_2 ], [ Mesh_2 ], [ Mesh_2 ], SMESH.AxisStruct( 0, 0, 9e-09, 10, 0, 0 ), 0.0872665, 1, 1e-11, 1 ) Finally it's necessary to put the names for the meshes parts with smesh.SetName command. On Salome's GUI you must load this script and you will obtain the meshes showed below. .. tabularcolumns:: | p{455pt} | .. table:: Fixed Mesh +--------------------------------------------+ | Figure | +============================================+ | .. figure:: ../images/Malla_fija.png | +--------------------------------------------+ .. tabularcolumns:: | p{455pt} | .. table:: Overset Mesh +--------------------------------------------+ | Figure | +============================================+ | .. figure:: ../images/oversetMesh.png | +--------------------------------------------+ Before exporting to an unv file you have to delete the Groups on Edges from the meshes in the Object Browser pannel. You also coul see that in both meshes there are patches with the name porous. It will be created geometrically intersecting the front and back patches of both (fixed and overlap) and also the porous patches of them. the porous patches are going to act as "zero overset walls". In the openFoam's all folder create the mesh for the fixed part and then merge the mesh with the cylinder part:: >ideasUnvToFoam Mesh_1.unv In the openFoam's cylinder folder create the mesh with:: >ideasUnvToFoam Mesh_2.unv Once created you must assure the compatibility betweem them and with the axisymmetric model. In the first step you must modify the boundary file into the all/constant/bpolyMesh to the next:: /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: v1912 | | \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class polyBoundaryMesh; location "constant/polyMesh"; object boundary; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 9 ( overset { type overset; nFaces 0; startFace 185418; } back { type wedge; nFaces 85861; startFace 185418; } porous_back { type wedge; nFaces 7754; startFace 271279; } inlet { type patch; nFaces 61; startFace 279033; } Wall { type wall; nFaces 2036; startFace 279094; } outlet { type patch; nFaces 53; startFace 281130; } axis { type patch; nFaces 1432; startFace 281183; } front { type wedge; nFaces 85861; startFace 282615; } porous_front { type wedge; nFaces 7754; startFace 368476; } ) // ************************************************************************* // The overset reference has to be added in order to improve the order and efficience of the running. The type wedge is used in order to the recognition of the axisymmetric case. On the other hand, into the cylinder/polyMesh the boundary file must be like:: /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: v1912 | | \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class polyBoundaryMesh; location "constant/polyMesh"; object boundary; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 5 ( back { type wedge; nFaces 25522; startFace 57535; } porous_back { type wedge; nFaces 3518; startFace 83057; } oversetPatch { type overset; nFaces 1090; startFace 86575; } front { type wedge; nFaces 25522; startFace 87665; } porous_front { type wedge; nFaces 3518; startFace 113187; } ) // ************************************************************************* // In the next steps the wedge patches from the all and cylinder meshes will be merged, but before it is necessary to collapse the edge axis from the all/constant/polyMesh/boundary file. So, from all folder run:: >collapseEdges It creates a new folder i.e 1e-09 and it's necessary to remove from the boundary file:: axis { type patch; nFaces 0; startFace 281183; } And next replace the polyMesh folder from the all/constan by the correspondent folder and files in 1e-09 Delete the 1e-09 folder and merge the all and cylinder meshes from all by:: >mergeMeshes . ../cylinder -overwrite | tee log.mergeMeshes >checkMesh In the checkMesh result must appear:: *Number of regions: 2 The mesh has multiple regions which are not connected by any face. <. ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions >runApplication topoSet >runApplication subsetMesh box -patch hole -overwrite >paraFoam On paraFoam check that the hole was generated and the region0 and region1 are wheel defined:: >runApplication -s box topoSet >restore0Dir >runApplication setFields >paraFoam The zoneID should looks like. .. tabularcolumns:: | p{455pt} | .. table:: ZONE ID +--------------------------------------------+ | Figure | +============================================+ | .. figure:: ../images/zoneID.png | +--------------------------------------------+ where the two regions are wheel defined. Finally run:: >overPimpleDyMFoam