Salome HOME
Merge branch 'gni/evolution'
[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   ## --- ellipse incomplete : generatrice
99   #if step == 5:
100     #return None
101
102   #allonge = demiGrandAxe/demiPetitAxe
103   #rayonTore = demiPetitAxe/5.0
104   #generatrice, FaceGenFiss, Pipe_1, FaceFissure, Plane_1, Pipe1Part = self.toreFissure(demiPetitAxe, allonge, rayonTore)
105   #ellipsoide = self.ellipsoideDefaut(demiPetitAxe, allonge)
106
107   ## --- positionnement sur le bloc defaut de generatrice, tore et plan fissure
108   #if step == 6:
109     #return None
110
111   #pipe0 = self.rotTrans(Pipe_1, orientation, centreDefaut, normalDefaut)
112   #gener1 = self.rotTrans(generatrice, orientation, centreDefaut, normalDefaut)
113   #pipe1 = self.rotTrans(Pipe1Part, orientation, centreDefaut, normalDefaut)
114   #facefis1 = self.rotTrans(FaceFissure, orientation, centreDefaut, normalDefaut)
115   #plane1 = self.rotTrans(Plane_1, orientation, centreDefaut, normalDefaut)
116   #ellipsoide1 = self.rotTrans(ellipsoide, orientation, centreDefaut, normalDefaut)
117
118   #geomPublish(initLog.debug,  pipe0, 'pipe0' )
119   #geomPublish(initLog.debug,  gener1, 'gener1' )
120   #geomPublish(initLog.debug,  pipe1, 'pipe1' )
121   #geomPublish(initLog.debug,  facefis1, 'facefis1' )
122   #geomPublish(initLog.debug,  plane1, 'plane1' )
123   #geomPublish(initLog.debug,  ellipsoide1, 'ellipsoide1' )
124
125   # --- partition du bloc défaut par génératrice, tore et plan fissure
126   if step == 7:
127     return None
128
129   [ blocPartition, _, tore, \
130     faceFissure, facesExternes, facesExtBloc, facesExtElli,
131     aretesInternes, ellipsoidep, sharedFaces, sharedEdges, edgesBords] = \
132     partitionBlocDefaut(extrusionDefaut, facesDefaut, gener1, pipe1, facefis1, ellipsoide1)
133   if not isHexa:
134     edgesBords = None # maillage sain hexa ==> filling, et maillage edges Bords imposés du maillage sain
135
136   # --- TORE
137   # --- faces toriques du tore
138   if step == 8:
139     return None
140
141   [facetore1, facetore2, _, _] = facesVolumesToriques(tore, plane1, facesDefaut)
142
143   # --- faces 1/2 circulaires et edges dans le plan de fissure
144   if step == 9:
145     return None
146
147   [faces, centres, edges, reverses] = facesCirculaires(extrusionDefaut, tore)
148
149   # --- recherche et classement des edges du tore par propagate
150   if step == 10:
151     return None
152
153   [diams, circles, geners] = propagateTore(tore)
154
155   # --- tri par longueur des 3 génératrices
156   if step == 11:
157     return None
158
159   [_, genint, gencnt] = sortGeneratrices(tore, geners)
160
161   # --- faces fissure dans et hors tore, et edges face hors tore
162   if step == 12:
163     return None
164
165   [_, facefissoutore, _, edgeext, reverext] = \
166     facesFissure(ellipsoidep, faceFissure, extrusionDefaut, genint)
167
168   # --- identification des faces tore et fissure dans le solide hors tore
169   if step == 13:
170     return None
171
172   [_, _, _] = \
173     facesToreInBloc(ellipsoidep, facefissoutore, facetore1, facetore2)
174
175   # --- identification des shapes modifiées par la duplication des noeuds de la face fissure (d'un coté de la face)
176
177   #shapesAModifier = self.shapesSurFissure(blocPartition, plane1 faceFissure, gencnt)
178   if step == 14:
179     return None
180
181   extrusionFaceFissure, _ = shapeSurFissure(plane1)
182
183   # --- maillage du bloc partitionne
184
185   if step == 15:
186     return None
187
188   [_, blocComplet] = \
189     meshBlocPart(blocPartition, faceFissure, tore, centres, edges, diams, circles, faces, \
190                  gencnt, facefissoutore, edgeext, facesExternes, facesExtBloc, facesExtElli, \
191                  aretesInternes, internalBoundary, ellipsoidep, sharedFaces, sharedEdges, edgesBords, \
192                  nbsegExt, nbsegGen, nbsegRad, scaleRad, reverses, reverext, nbsegCercle,
193                  nbsegFis, dmoyen, lensegEllipsoide) \
194
195   if step == 16:
196     return None
197   maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges)
198
199   if step == 17:
200     return None
201   maillageComplet = RegroupeSainEtDefaut(maillageSain, blocComplet, extrusionFaceFissure, faceFissure, 'VOLUMES')
202
203   if step == 18:
204     return None
205   maillageComplet.ExportMED(fichierMaillageFissure)
206   putName(maillageComplet, nomFicFissure)
207   logging.info("fichier maillage fissure : %s", fichierMaillageFissure)
208
209   if salome.sg.hasDesktop():
210     salome.sg.updateObjBrowser()
211
212   return maillageComplet