1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2014-2021 EDF R&D
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.
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.
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
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 """Insertion d'une fissure elliptique"""
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
42 # -----------------------------------------------------------------------------
43 # --- procedure complete fissure elliptique
45 def insereFissureElliptique(geometriesSaines, maillagesSains, \
46 shapesFissure, shapeFissureParams, \
47 maillageFissureParams, elementsDefaut, step=-1):
48 """procedure complete fissure elliptique"""
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]
64 #demiGrandAxe = shapeFissureParams['demiGrandAxe']
65 #demiPetitAxe = shapeFissureParams['demiPetitAxe']
66 #orientation = shapeFissureParams['orientation']
68 nomRep = maillageFissureParams['nomRep']
69 #nomFicSain = maillageFissureParams['nomFicSain']
70 nomFicFissure = maillageFissureParams['nomFicFissure']
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
80 #fichierMaillageSain = os.path.join(nomRep, '{}.med'.format(nomFicSain))
81 fichierMaillageFissure = os.path.join(nomRep, '{}.med'.format(nomFicFissure))
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]
98 ## --- ellipse incomplete : generatrice
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)
107 ## --- positionnement sur le bloc defaut de generatrice, tore et plan fissure
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)
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' )
125 # --- partition du bloc défaut par génératrice, tore et plan fissure
129 [ blocPartition, _, tore, \
130 faceFissure, facesExternes, facesExtBloc, facesExtElli,
131 aretesInternes, ellipsoidep, sharedFaces, sharedEdges, edgesBords] = \
132 partitionBlocDefaut(extrusionDefaut, facesDefaut, gener1, pipe1, facefis1, ellipsoide1)
134 edgesBords = None # maillage sain hexa ==> filling, et maillage edges Bords imposés du maillage sain
137 # --- faces toriques du tore
141 [facetore1, facetore2, _, _] = facesVolumesToriques(tore, plane1, facesDefaut)
143 # --- faces 1/2 circulaires et edges dans le plan de fissure
147 [faces, centres, edges, reverses] = facesCirculaires(extrusionDefaut, tore)
149 # --- recherche et classement des edges du tore par propagate
153 [diams, circles, geners] = propagateTore(tore)
155 # --- tri par longueur des 3 génératrices
159 [_, genint, gencnt] = sortGeneratrices(tore, geners)
161 # --- faces fissure dans et hors tore, et edges face hors tore
165 [_, facefissoutore, _, edgeext, reverext] = \
166 facesFissure(ellipsoidep, faceFissure, extrusionDefaut, genint)
168 # --- identification des faces tore et fissure dans le solide hors tore
173 facesToreInBloc(ellipsoidep, facefissoutore, facetore1, facetore2)
175 # --- identification des shapes modifiées par la duplication des noeuds de la face fissure (d'un coté de la face)
177 #shapesAModifier = self.shapesSurFissure(blocPartition, plane1 faceFissure, gencnt)
181 extrusionFaceFissure, _ = shapeSurFissure(plane1)
183 # --- maillage du bloc partitionne
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) \
197 maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges)
201 maillageComplet = RegroupeSainEtDefaut(maillageSain, blocComplet, extrusionFaceFissure, faceFissure, 'VOLUMES')
205 maillageComplet.ExportMED(fichierMaillageFissure)
206 putName(maillageComplet, nomFicFissure)
207 logging.info("fichier maillage fissure : %s", fichierMaillageFissure)
209 if salome.sg.hasDesktop():
210 salome.sg.updateObjBrowser()
212 return maillageComplet