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