Salome HOME
Bos #23995 [CEA 24030] ParaView 5.9: fix volumes selection
[modules/smesh.git] / src / Tools / blocFissure / gmu / insereFissureElliptique.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2014-2021  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, or (at your option) any later version.
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 """Insertion d'une fissure elliptique"""
21
22 import os
23
24 import logging
25
26 import salome
27 import SMESH
28
29 from .partitionBlocDefaut import partitionBlocDefaut
30 from .facesVolumesToriques import facesVolumesToriques
31 from .facesCirculaires import facesCirculaires
32 from .propagateTore import propagateTore
33 from .sortGeneratrices import sortGeneratrices
34 from .facesFissure import facesFissure
35 from .facesToreInBloc import facesToreInBloc
36 from .shapeSurFissure import shapeSurFissure
37 from .meshBlocPart import meshBlocPart
38 from .enleveDefaut import enleveDefaut
39 from .regroupeSainEtDefaut import RegroupeSainEtDefaut
40 from .putName import putName
41
42 # -----------------------------------------------------------------------------
43 # --- procedure complete fissure elliptique
44
45 def insereFissureElliptique(geometriesSaines, maillagesSains, \
46                             shapesFissure, shapeFissureParams, \
47                             maillageFissureParams, elementsDefaut, step=-1):
48   """procedure complete fissure elliptique"""
49   logging.info('start')
50
51   #geometrieSaine    = geometriesSaines[0]
52   maillageSain      = maillagesSains[0]
53   isHexa            = maillagesSains[1]
54   #shapeDefaut       = shapesFissure[0]
55   #tailleDefaut      = shapesFissure[2]
56   #pipe0             = shapesFissure[4]
57   gener1            = shapesFissure[5]
58   pipe1             = shapesFissure[6]
59   facefis1          = shapesFissure[7]
60   plane1            = shapesFissure[8]
61   ellipsoide1       = shapesFissure[9]
62
63
64   #demiGrandAxe      = shapeFissureParams['demiGrandAxe']
65   #demiPetitAxe      = shapeFissureParams['demiPetitAxe']
66   #orientation       = shapeFissureParams['orientation']
67
68   nomRep            = maillageFissureParams['nomRep']
69   #nomFicSain        = maillageFissureParams['nomFicSain']
70   nomFicFissure     = maillageFissureParams['nomFicFissure']
71
72   nbsegExt          = maillageFissureParams['nbsegExt']      # 5
73   nbsegGen          = maillageFissureParams['nbsegGen']      # 25
74   nbsegRad          = maillageFissureParams['nbsegRad']      # 5
75   scaleRad          = maillageFissureParams['scaleRad']      # 4
76   nbsegCercle       = maillageFissureParams['nbsegCercle']   # 6
77   nbsegFis          = maillageFissureParams['nbsegFis']      # 20
78   lensegEllipsoide  = maillageFissureParams['lensegEllipso'] # 1.0
79
80   #fichierMaillageSain = os.path.join(nomRep, '{}.med'.format(nomFicSain))
81   fichierMaillageFissure = os.path.join(nomRep, '{}.med'.format(nomFicFissure))
82
83   facesDefaut              = elementsDefaut[0]
84   #centreDefaut             = elementsDefaut[1]
85   #normalDefaut             = elementsDefaut[2]
86   extrusionDefaut          = elementsDefaut[3]
87   dmoyen                   = elementsDefaut[4]
88   #bordsPartages            = elementsDefaut[5]
89   #fillconts                = elementsDefaut[6]
90   #idFilToCont              = elementsDefaut[7]
91   #maillageSain             = elementsDefaut[8]
92   internalBoundary         = elementsDefaut[9]
93   zoneDefaut               = elementsDefaut[10]
94   zoneDefaut_skin          = elementsDefaut[11]
95   zoneDefaut_internalFaces = elementsDefaut[12]
96   zoneDefaut_internalEdges = elementsDefaut[13]
97
98   maillageComplet = None
99
100   while True:
101
102     ## --- ellipse incomplete : generatrice
103     #if step == 5:
104       #break
105
106     #allonge = demiGrandAxe/demiPetitAxe
107     #rayonTore = demiPetitAxe/5.0
108     #generatrice, FaceGenFiss, Pipe_1, FaceFissure, Plane_1, Pipe1Part = self.toreFissure(demiPetitAxe, allonge, rayonTore)
109     #ellipsoide = self.ellipsoideDefaut(demiPetitAxe, allonge)
110
111     ## --- positionnement sur le bloc defaut de generatrice, tore et plan fissure
112     #if step == 6:
113       #break
114
115     #pipe0 = self.rotTrans(Pipe_1, orientation, centreDefaut, normalDefaut)
116     #gener1 = self.rotTrans(generatrice, orientation, centreDefaut, normalDefaut)
117     #pipe1 = self.rotTrans(Pipe1Part, orientation, centreDefaut, normalDefaut)
118     #facefis1 = self.rotTrans(FaceFissure, orientation, centreDefaut, normalDefaut)
119     #plane1 = self.rotTrans(Plane_1, orientation, centreDefaut, normalDefaut)
120     #ellipsoide1 = self.rotTrans(ellipsoide, orientation, centreDefaut, normalDefaut)
121
122     #geomPublish(initLog.debug,  pipe0, 'pipe0' )
123     #geomPublish(initLog.debug,  gener1, 'gener1' )
124     #geomPublish(initLog.debug,  pipe1, 'pipe1' )
125     #geomPublish(initLog.debug,  facefis1, 'facefis1' )
126     #geomPublish(initLog.debug,  plane1, 'plane1' )
127     #geomPublish(initLog.debug,  ellipsoide1, 'ellipsoide1' )
128
129     # --- partition du bloc défaut par génératrice, tore et plan fissure
130     if step == 7:
131       break
132
133     [ blocPartition, _, tore, \
134       faceFissure, facesExternes, facesExtBloc, facesExtElli,
135       aretesInternes, ellipsoidep, sharedFaces, sharedEdges, edgesBords] = \
136       partitionBlocDefaut(extrusionDefaut, facesDefaut, gener1, pipe1, facefis1, ellipsoide1)
137     if not isHexa:
138       edgesBords = None # maillage sain hexa ==> filling, et maillage edges Bords imposés du maillage sain
139
140     # --- TORE
141     # --- faces toriques du tore
142     if step == 8:
143       break
144
145     [facetore1, facetore2, _, _] = facesVolumesToriques(tore, plane1, facesDefaut)
146
147     # --- faces 1/2 circulaires et edges dans le plan de fissure
148     if step == 9:
149       break
150
151     [faces, centres, edges, reverses] = facesCirculaires(extrusionDefaut, tore)
152
153     # --- recherche et classement des edges du tore par propagate
154     if step == 10:
155       break
156
157     [diams, circles, geners] = propagateTore(tore)
158
159     # --- tri par longueur des 3 génératrices
160     if step == 11:
161       break
162
163     [_, genint, gencnt] = sortGeneratrices(tore, geners)
164
165     # --- faces fissure dans et hors tore, et edges face hors tore
166     if step == 12:
167       break
168
169     [_, facefissoutore, _, edgeext, reverext] = \
170       facesFissure(ellipsoidep, faceFissure, extrusionDefaut, genint)
171
172     # --- identification des faces tore et fissure dans le solide hors tore
173     if step == 13:
174       break
175
176     [_, _, _] = \
177       facesToreInBloc(ellipsoidep, facefissoutore, facetore1, facetore2)
178
179     # --- identification des shapes modifiées par la duplication des noeuds de la face fissure (d'un coté de la face)
180
181     #shapesAModifier = self.shapesSurFissure(blocPartition, plane1 faceFissure, gencnt)
182     if step == 14:
183       break
184
185     extrusionFaceFissure, _ = shapeSurFissure(plane1)
186
187     # --- maillage du bloc partitionne
188
189     if step == 15:
190       break
191
192     [_, blocComplet] = \
193       meshBlocPart(blocPartition, faceFissure, tore, centres, edges, diams, circles, faces, \
194                   gencnt, facefissoutore, edgeext, facesExternes, facesExtBloc, facesExtElli, \
195                   aretesInternes, internalBoundary, ellipsoidep, sharedFaces, sharedEdges, edgesBords, \
196                   nbsegExt, nbsegGen, nbsegRad, scaleRad, reverses, reverext, nbsegCercle, \
197                   nbsegFis, dmoyen, lensegEllipsoide)
198     if step == 16:
199       break
200
201     maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges)
202     if step == 17:
203       break
204
205     maillageComplet = RegroupeSainEtDefaut(maillageSain, blocComplet, extrusionFaceFissure, faceFissure, 'VOLUMES')
206     if step == 18:
207       break
208
209     maillageComplet.ExportMED(fichierMaillageFissure)
210     putName(maillageComplet, nomFicFissure)
211     logging.info("fichier maillage fissure : %s", fichierMaillageFissure)
212
213     break
214
215   if salome.sg.hasDesktop():
216     salome.sg.updateObjBrowser()
217
218   return maillageComplet