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
28 from .partitionBlocDefaut import partitionBlocDefaut
29 from .facesVolumesToriques import facesVolumesToriques
30 from .facesCirculaires import facesCirculaires
31 from .propagateTore import propagateTore
32 from .sortGeneratrices import sortGeneratrices
33 from .facesFissure import facesFissure
34 from .facesToreInBloc import facesToreInBloc
35 from .shapeSurFissure import shapeSurFissure
36 from .meshBlocPart import meshBlocPart
37 from .enleveDefaut import enleveDefaut
38 from .regroupeSainEtDefaut import RegroupeSainEtDefaut
39 from .putName import putName
40
41 def insereFissureElliptique(geometriesSaines, maillagesSains, \
42                             shapesFissure, shapeFissureParams, \
43                             maillageFissureParams, elementsDefaut, step=-1):
44   """procedure complete fissure elliptique"""
45   logging.info('start')
46
47   #geometrieSaine    = geometriesSaines[0]
48   maillageSain      = maillagesSains[0]
49   isHexa            = maillagesSains[1]
50   #shapeDefaut       = shapesFissure[0]
51   #tailleDefaut      = shapesFissure[2]
52   #pipe0             = shapesFissure[4]
53   gener1            = shapesFissure[5]
54   pipe1             = shapesFissure[6]
55   facefis1          = shapesFissure[7]
56   plane1            = shapesFissure[8]
57   ellipsoide1       = shapesFissure[9]
58
59
60   #demiGrandAxe      = shapeFissureParams['demiGrandAxe']
61   #demiPetitAxe      = shapeFissureParams['demiPetitAxe']
62   #orientation       = shapeFissureParams['orientation']
63
64   nomRep            = maillageFissureParams['nomRep']
65   #nomFicSain        = maillageFissureParams['nomFicSain']
66   nomFicFissure     = maillageFissureParams['nomFicFissure']
67
68   nbsegExt          = maillageFissureParams['nbsegExt']      # 5
69   nbsegGen          = maillageFissureParams['nbsegGen']      # 25
70   nbsegRad          = maillageFissureParams['nbsegRad']      # 5
71   scaleRad          = maillageFissureParams['scaleRad']      # 4
72   nbsegCercle       = maillageFissureParams['nbsegCercle']   # 6
73   nbsegFis          = maillageFissureParams['nbsegFis']      # 20
74   lensegEllipsoide  = maillageFissureParams['lensegEllipso'] # 1.0
75
76   #fichierMaillageSain = os.path.join(nomRep, '{}.med'.format(nomFicSain))
77   fichierMaillageFissure = os.path.join(nomRep, '{}.med'.format(nomFicFissure))
78
79   facesDefaut              = elementsDefaut[0]
80   #centreDefaut             = elementsDefaut[1]
81   #normalDefaut             = elementsDefaut[2]
82   extrusionDefaut          = elementsDefaut[3]
83   dmoyen                   = elementsDefaut[4]
84   #bordsPartages            = elementsDefaut[5]
85   #fillconts                = elementsDefaut[6]
86   #idFilToCont              = elementsDefaut[7]
87   #maillageSain             = elementsDefaut[8]
88   internalBoundary         = elementsDefaut[9]
89   zoneDefaut               = elementsDefaut[10]
90   zoneDefaut_skin          = elementsDefaut[11]
91   zoneDefaut_internalFaces = elementsDefaut[12]
92   zoneDefaut_internalEdges = elementsDefaut[13]
93
94   maillageComplet = None
95
96   while True:
97
98     ## --- ellipse incomplete : generatrice
99     #if step == 5:
100       #break
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       #break
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       break
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       break
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       break
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       break
152
153     [diams, circles, geners] = propagateTore(tore)
154
155     # --- tri par longueur des 3 génératrices
156     if step == 11:
157       break
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       break
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       break
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       break
180
181     extrusionFaceFissure, _ = shapeSurFissure(plane1)
182
183     # --- maillage du bloc partitionne
184
185     if step == 15:
186       break
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     if step == 16:
195       break
196
197     maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges)
198     if step == 17:
199       break
200
201     maillageComplet = RegroupeSainEtDefaut(maillageSain, blocComplet, extrusionFaceFissure, faceFissure, 'VOLUMES')
202     if step == 18:
203       break
204
205     maillageComplet.ExportMED(fichierMaillageFissure)
206     putName(maillageComplet, nomFicFissure)
207     logging.info("fichier maillage fissure : %s", fichierMaillageFissure)
208
209     break
210
211   if salome.sg.hasDesktop():
212     salome.sg.updateObjBrowser()
213
214   return maillageComplet