]> SALOME platform Git repositories - modules/hexablock.git/blob - src/TEST_PY/test_unit/bielle_v5.py
Salome HOME
Merge from V6_main 01/04/2013
[modules/hexablock.git] / src / TEST_PY / test_unit / bielle_v5.py
1 # -*- coding: latin-1 -*-
2 # Copyright (C) 2009-2013  CEA/DEN, EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20
21 # Francis KLOSS : 2011-2013 : CEA-Saclay, DEN, DM2S, SFME, LGLS, F-91191 Gif-sur-Yvette, France
22 # =============================================================================================
23
24 import math
25
26 import geompy
27 import hexablock
28
29 # Construire le modele de bloc
30 # ============================
31
32 doc = hexablock.addDocument("bielle_v5")
33
34 # Construire les 2 grilles cylindriques
35 # -------------------------------------
36
37 centre_pb = doc.addVertex(-0.107, 0, -0.02)
38 centre_gb = doc.addVertex(0.119, 0, -0.02)
39
40 angle_px   = math.pi / 3
41 vecteur_px = doc.addVector(math.cos(angle_px), math.sin(angle_px), 0)
42 vecteur_gx = doc.addVector(1, 0, 0)
43
44 vecteur_z = doc.addVector(0, 0, 1)
45
46 grille_p = doc.makeCylindrical(centre_pb, vecteur_px, vecteur_z,  0.012, 360, 0.04,  1, 3, 1,  False)
47 grille_g = doc.makeCylindrical(centre_gb, vecteur_gx, vecteur_z,  0.025, 360, 0.04,  1, 3, 1,  False)
48
49 # Relier les 2 grilles
50 # --------------------
51
52 quad_p = grille_p.getQuadJK(1, 2, 0)
53 quad_g = grille_g.getQuadJK(1, 1, 0)
54
55 point_p1 = grille_p.getVertexIJK(1, 0, 0)
56 point_p2 = grille_p.getVertexIJK(1, 2, 0)
57
58 point_g1 = grille_g.getVertexIJK(1, 1, 0)
59 point_g2 = grille_g.getVertexIJK(1, 2, 0)
60
61 prisme = doc.joinQuad(quad_p, quad_g,  point_p1, point_g1,  point_p2, point_g2,  3)
62
63 # Charger la geometrie
64 # ====================
65
66 bielle = geompy.ImportSTEP("bielle.stp")
67
68 # Selectionner des sous-parties de la geometrie
69 # ---------------------------------------------
70
71 sommets  = geompy.SubShapeAllSortedCentres    (bielle, geompy.ShapeType["VERTEX"])
72 nodes_id = geompy.SubShapeAllSortedCentresIDs (bielle, geompy.ShapeType["VERTEX"])
73      ##   0   1   2   3   4   5   6   7   8   9
74      ##  23, 70, 15, 52, 17, 57, 13, 47, 19, 62,
75      ##  11, 42,  6, 30,  9, 37,  7, 32, 26, 75]
76
77 sommets_petit     = [  6,  8,  7,  9 ]
78 sommets_grand     = [ 10, 12, 11, 13 ]
79 node_little_subid = [ 13, 19, 47, 62 ]
80 node_big_subid    = [ 11,  6, 42, 30 ]
81
82 aretes  = geompy.SubShapeAllSortedCentres    (bielle, geompy.ShapeType["EDGE"])
83 edge_id = geompy.SubShapeAllSortedCentresIDs (bielle, geompy.ShapeType["EDGE"])
84      ##   0   1   2   3   4   5   6   7   8   9
85      ##  16, 56, 22, 71, 69, 53, 58, 14, 51, 18,
86      ##  61, 48, 63, 12, 46, 20, 66, 43, 29, 10,
87      ##  41,  5, 31, 38, 33, 25, 76,  8, 36, 74
88
89
90 aretes_petit     = [  7,  9,  8, 10 ]
91 aretes_grand     = [ 19, 21, 20, 22 ]
92 arc_little_subid = [ 14, 18, 51, 61 ]
93 arc_big_subid    = [ 10,  5, 41, 31 ]
94
95 subid_pbcd = 16
96 subid_pbe  = 22
97
98 subid_phcd = 56
99 subid_phe  = 71
100
101 subid_gbcd = 8
102 subid_gbe  = 25
103
104 subid_ghcd = 36
105 subid_ghe  = 76
106
107 ga_pbcd = aretes[ 0]
108 ga_pbe  = aretes[ 2]
109
110 ga_phcd = aretes[ 1]
111 ga_phe  = aretes[ 3]
112
113 ga_gbcd = aretes[27]
114 ga_gbe  = aretes[25]
115
116 ga_ghcd = aretes[28]
117 ga_ghe  = aretes[26]
118
119 # Associer le modele de bloc avec la geometrie
120 # ============================================
121
122 geometry = doc.addShape(bielle, "bielle")
123 doc.setLevel (748)
124
125 # Nettoyer les associations implicites du document
126 # ------------------------------------------------
127
128 doc.clearAssociation()
129
130 # Associer les cercles exterieurs
131 # -------------------------------
132
133 def cercle(grille, k, subid, p):
134     ms  = grille.getVertexIJK(0, 0, k)
135
136     ma1 = grille.getEdgeJ (0, 2, k)
137     ma2 = grille.getEdgeJ (0, 1, k)
138     ma3 = grille.getEdgeJ (0, 0, k)
139
140     doc.associateClosedLine (ms, [ma1, ma2, ma3 ], [geometry], [subid], p, False)
141
142 cercle (grille_p, 0, subid_pbe, 5.0/6)
143 cercle (grille_p, 1, subid_phe, 5.0/6)
144
145 cercle (grille_g, 0, subid_gbe, 0)
146 cercle (grille_g, 1, subid_ghe, 0)
147
148 # Associer les arcs exterieurs (excentres)
149 # ----------------------------------------
150
151 def arc(grille, i1, i2, k, subid):
152     ma1 = grille.getEdgeJ(1, i1, k)
153     ma2 = grille.getEdgeJ(1, i2, k)
154
155     doc.associateOpenedLine ([ma1, ma2 ], [geometry], [subid], 0, 1)
156
157 arc(grille_p, 1, 0, 0, subid_pbcd)
158 arc(grille_p, 1, 0, 1, subid_phcd)
159
160 arc(grille_g, 0, 2, 0, subid_gbcd)
161 arc(grille_g, 0, 2, 1, subid_ghcd)
162
163 # Associer les sommets des arcs de cercle de raccord
164 # --------------------------------------------------
165
166 hm = prisme.getHexa(1)
167 for i in xrange(0, 4):
168   vm = hm.getVertex(i)
169   subid = node_little_subid [i]
170   vm.setAssociation (geometry, subid)
171
172 hm = prisme.getHexa(2)
173 for i in xrange(0, 4):
174   vm = hm.getVertex(i)
175   subid = node_big_subid [i]
176   vm.setAssociation (geometry, subid)
177
178 # Associer les arcs de cercle de raccord
179 # --------------------------------------
180
181 hm = prisme.getHexa(0)
182 for i in xrange(0, 4):
183   em = hm.getEdge(i+8)
184   subid = arc_little_subid [i]
185   em.addAssociation (geometry, subid, 0, 1)
186
187 hm = prisme.getHexa(2)
188 for i in xrange(0, 4):
189   em = hm.getEdge(i+8)
190   subid = arc_big_subid [i]
191   em.addAssociation (geometry, subid, 0, 1)
192
193 # Arrondir des associations implicites cylindriques
194 # -------------------------------------------------
195
196 larc = []
197 for h, i, ech in [ [0, 0, 0.95], [0, 1, 0.95],  [2, 2, 0.85], [2, 3, 0.85] ]:
198   hm = prisme.getHexa(h)
199   em = hm.getEdge(i)
200
201   v1 = em.getVertex(0)
202   v2 = em.getVertex(1)
203
204   vax = v1.getAssoX ();
205   vay = v1.getAssoY ();
206   vaz = v1.getAssoZ ();
207
208   vbx = v2.getAssoX ();
209   vby = v2.getAssoY ();
210   vbz = v2.getAssoZ ();
211
212   vmx = ( vax + vbx ) / 2.0 * ech
213   vmy = ( vay + vby ) / 2.0
214   vmz = ( vaz + vbz ) / 2.0
215
216   va = geompy.MakeVertex(vax, vay, vaz)
217   vb = geompy.MakeVertex(vbx, vby, vbz)
218   vm = geompy.MakeVertex(vmx, vmy, vmz)
219   eg = geompy.MakeArc(va, vm, vb)
220   larc.append(eg)
221
222 arc = geompy.MakeCompound(larc)
223 shape = doc.addShape (arc, "arc")
224
225 # Mailler le modele de bloc
226 for h, i in [ [0, 0], [0, 1],  [2, 2], [2, 3] ]:
227   hm = prisme.getHexa(h)
228   em = hm.getEdge(i)
229
230   em.clearAssociation()
231   shape_subid = 2+3*i
232   em.addAssociation (shape, shape_subid, 0.0, 1.0)
233
234 # Mailler le modele de bloc
235 # =========================
236
237 # Definir 5 groupes de faces
238 # --------------------------
239
240 groupe_petit   = doc.addQuadGroup("Petit")
241 groupe_grand   = doc.addQuadGroup("Grand")
242 groupe_bas     = doc.addQuadGroup("Bas")
243 groupe_haut    = doc.addQuadGroup("Haut")
244 groupe_contour = doc.addQuadGroup("Contour")
245
246 # Constituer les groupes petit et grand
247 # -------------------------------------
248
249 for i in xrange(3):
250   groupe_petit.addElement( grille_p.getQuadJK(0, i, 0) )
251   groupe_grand.addElement( grille_g.getQuadJK(0, i, 0) )
252
253 # Constituer les groupes bas et haut
254 # ----------------------------------
255
256 for i in xrange(3):
257   groupe_bas.addElement(  grille_p.getQuadIJ(0, i, 0) )
258   groupe_bas.addElement(  grille_g.getQuadIJ(0, i, 0) )
259
260   groupe_haut.addElement( grille_p.getQuadIJ(0, i, 1) )
261   groupe_haut.addElement( grille_g.getQuadIJ(0, i, 1) )
262
263 for i in xrange(3):
264   h = prisme.getHexa(i)
265
266   groupe_bas.addElement(  h.getQuad(2) )
267   groupe_haut.addElement( h.getQuad(3) )
268
269 # Constituer le groupe contour
270 # ----------------------------
271
272 for i in xrange(2):
273   groupe_contour.addElement( grille_p.getQuadJK(1, i, 0) )
274
275 for i in [0, 2]:
276   groupe_contour.addElement( grille_g.getQuadJK(1, i, 0) )
277
278 for i in xrange(3):
279   h = prisme.getHexa(i)
280
281   groupe_contour.addElement( h.getQuad(4) )
282   groupe_contour.addElement( h.getQuad(5) )
283
284 # Definir 3 groupes de volumes
285 # ----------------------------
286
287 groupe_petit  = doc.addHexaGroup("Petit")
288 groupe_grand  = doc.addHexaGroup("Grand")
289 groupe_prisme = doc.addHexaGroup("Prisme")
290
291 for i in xrange(3):
292   groupe_petit.addElement( grille_p.getHexa(i) )
293   groupe_grand.addElement( grille_g.getHexa(i) )
294
295 for i in xrange(3):
296   groupe_prisme.addElement( prisme.getHexa(i) )
297
298 # Mailler le modele de bloc avec association
299 # ------------------------------------------
300
301 ##########  hexablock.addLaws(doc, 0.003, True) Ne marche plus !!!!
302
303 law = doc.addLaw("Uniform", 4)
304
305 for j in range(doc.countPropagation()):
306     propa = doc.getPropagation(j)
307     propa.setLaw(law)
308
309 doc.save("bielle_v5")
310 doc.setName("bielle_v5")
311 hexablock.addToStudy(doc)
312
313 blocs = hexablock.mesh(doc)
314
315 muv, mue, muq, muh = hexablock.dump(doc, blocs)