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