Salome HOME
Nerge with PAL/SALOME 2.1.0d
[modules/smesh.git] / src / SMESH_SWIG / cyl2geometry.py
1 # CEA/LGLS 2004, Francis KLOSS (OCC)
2 # ==================================
3
4 # Import
5 # ------
6
7 from geompy import *
8 from meshpy import *
9
10 # Piece
11 # -----
12
13 # Creer la geometrie en bloc hexahedrique d'une piece en forme de T composee de 2 cylindres de diametre different dont les axes se coupent orthogonalement,
14 # puis mailler en hexahedrique.
15
16 cx = 0
17 cy = 0
18 cz = 0
19
20 g_rayon   = 100.0
21 g_hauteur = 500
22
23 p_rayon   =  50.0
24 p_hauteur = 500
25
26 g_trim = 1000
27
28 # Geometrie
29 # =========
30
31 cpd = []
32
33 # Gros cylindre
34 # -------------
35
36 g_base = MakeVertex(cx, cy, cz)
37 g_dir  = MakeVectorDXDYDZ(0, 0, 1)
38 t_hauteur = p_rayon+10.0
39
40 g_cyl = MakeCylinder(g_base, g_dir, g_rayon, g_hauteur)
41
42 g_coupe = MakeVectorDXDYDZ(1, 0, 0)
43
44 g_tools = []
45 g_tools.append(MakePlane(MakeVertex(cx+t_hauteur, cy, cz), g_coupe, g_trim))
46 g_tools.append(MakePlane(MakeVertex(cx-t_hauteur, cy, cz), g_coupe, g_trim))
47
48 g_partie = MakePartition([g_cyl], g_tools, [], [], ShapeType["SOLID"])
49 g_bas, g_centre, g_haut = SubShapeAllSorted(g_partie, ShapeType["SOLID"])
50
51 # Partie basse du gros cylindre
52 # -----------------------------
53
54 b_hauteur = 10
55 b_base    = 20
56
57 b_boite = MakeBox(cx-t_hauteur, cy-b_base, cz,  cx-t_hauteur-b_hauteur, cy+b_base, cz+g_hauteur)
58 cpd.append(b_boite)
59
60 b_cyl = MakeCut(g_bas, b_boite)
61
62 b_tools = []
63 b_tools.append(MakePlane(MakeVertex(cx-t_hauteur-b_hauteur, cy+b_base, cz), MakeVectorDXDYDZ( 1, 1, 0), g_trim))
64 b_tools.append(MakePlane(MakeVertex(cx-t_hauteur-b_hauteur, cy-b_base, cz), MakeVectorDXDYDZ(-1, 1, 0), g_trim))
65
66 b_partie = MakePartition([b_cyl], b_tools, [], [], ShapeType["SOLID"])
67 b_element = SubShapeAll(b_partie, ShapeType["SOLID"])
68 cpd = cpd + b_element
69
70 # Partie haute du gros cylindre
71 # -----------------------------
72
73 h_plan = MakePlane(g_base, g_coupe, g_trim)
74
75 cpd.append(MakeMirrorByPlane(b_boite, h_plan))
76
77 for h in b_element:
78     h_symetrie = MakeMirrorByPlane(h, h_plan)
79     cpd.append(h_symetrie)
80
81 # Petit cylindre
82 # --------------
83
84 z_arete = p_rayon/2
85 x_arete = z_arete*t_hauteur*2/g_hauteur
86
87 px = cx-x_arete
88 py = cy-1.5*g_rayon
89 pz = cz+g_hauteur/2
90
91 p_base = MakeVertex(cx, py, pz)
92 p_dir  = MakeVectorDXDYDZ(0, 1, 0)
93 p_cyl  = MakeCylinder(p_base, p_dir, p_rayon, p_hauteur)
94
95 p_boite = MakeBox(px, py, pz-z_arete,  cx+x_arete, py+p_hauteur, pz+z_arete)
96
97 # Partie interieure du petit cylindre
98 # -----------------------------------
99
100 i_cyl   = MakeCommon(p_cyl, g_cyl)
101 i_tuyau = MakeCut(i_cyl, p_boite)
102 i_boite = MakeCommon(p_boite, g_cyl)
103
104 # Partie exterieure du petit cylindre
105 # -----------------------------------
106
107 e_cyl0 = MakeCut(p_cyl, g_cyl)
108 e_cyl  = SubShapeAllSorted(e_cyl0, ShapeType["SOLID"])
109
110 e_tuyau = MakeCut(e_cyl[1], p_boite)
111
112 e_boite0 = MakeCut(p_boite, g_cyl)
113 e_boite  = SubShapeAllSorted(e_boite0, ShapeType["SOLID"])
114
115 cpd.append(e_boite[1])
116
117 # Partie centrale du gros cylindre
118 # --------------------------------
119
120 c_cyl = MakeCut(g_centre, p_cyl)
121
122 # Partitionner
123 # ------------
124
125 p_tools = []
126 p_tools.append(MakePlane(MakeVertex(px, py, pz-z_arete), MakeVectorDXDYDZ(-z_arete, 0, x_arete), g_trim))
127 p_tools.append(MakePlane(MakeVertex(px, py, pz+z_arete), MakeVectorDXDYDZ( z_arete, 0, x_arete), g_trim))
128
129 p_partie = MakePartition([e_tuyau], p_tools, [], [], ShapeType["SOLID"])
130 p_element = SubShapeAll(p_partie, ShapeType["SOLID"])
131 cpd = cpd + p_element
132
133 q_partie = MakePartition([i_tuyau, c_cyl], p_tools, [], [], ShapeType["SOLID"])
134 q_element = SubShapeAll(q_partie, ShapeType["SOLID"])
135
136 q_element = q_element + [i_boite]
137
138 q_tools = []
139 q_tools.append(MakePlane(MakeVertex(cx, cy-b_base, cz), MakeVectorDXDYDZ(0, 1, 0), g_trim))
140 q_tools.append(MakePlane(MakeVertex(cx, cy+b_base, cz), MakeVectorDXDYDZ(0, 1, 0), g_trim))
141
142 r_element = []
143 for e in q_element:
144     r_partie = MakePartition([e], q_tools, [], [], ShapeType["SOLID"])
145     r_element = r_element + SubShapeAll(r_partie, ShapeType["SOLID"])
146
147 cpd = cpd + r_element
148
149 # Compound
150 # --------
151
152 piece = MakeCompound(cpd)
153
154 # Ajouter la piece dans l'etude
155 # -----------------------------
156
157 piece_id = addToStudy(piece, "T2Cylindres")
158
159 # Maillage
160 # ========
161
162 # Mailler des hexahedres
163 # ----------------------
164
165 m_hexa=MeshHexa(piece, 4, "T2CylindresHexa")
166
167 # Calculer le maillage
168 # --------------------
169
170 m_hexa.Compute()