1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2014-2020 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"""
26 from .geomsmesh import geompy
27 from .geomsmesh import geomPublish
28 from .geomsmesh import geomPublishInFather
30 from .geomsmesh import smesh
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
47 # -----------------------------------------------------------------------------
48 # --- procedure complete fissure elliptique
50 def insereFissureElliptique(geometriesSaines, maillagesSains, \
51 shapesFissure, shapeFissureParams, \
52 maillageFissureParams, elementsDefaut, step=-1):
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]
71 demiGrandAxe = shapeFissureParams['demiGrandAxe']
72 demiPetitAxe = shapeFissureParams['demiPetitAxe']
73 orientation = shapeFissureParams['orientation']
75 nomRep = maillageFissureParams['nomRep']
76 nomFicSain = maillageFissureParams['nomFicSain']
77 nomFicFissure = maillageFissureParams['nomFicFissure']
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
87 fichierMaillageSain = os.path.join(nomRep, '{}.med'.format(nomFicSain))
88 fichierMaillageFissure = os.path.join(nomRep, '{}.med'.format(nomFicFissure))
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]
105 ## --- ellipse incomplete : generatrice
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)
114 ## --- positionnement sur le bloc defaut de generatrice, tore et plan fissure
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)
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' )
132 # --- partition du bloc défaut par génératrice, tore et plan fissure
136 [ blocPartition, blocp, tore, \
137 faceFissure, facesExternes, facesExtBloc, facesExtElli,
138 aretesInternes, ellipsoidep, sharedFaces, sharedEdges, edgesBords] = \
139 partitionBlocDefaut(extrusionDefaut, facesDefaut, gener1, pipe1, facefis1, ellipsoide1)
141 edgesBords = None # maillage sain hexa ==> filling, et maillage edges Bords imposés du maillage sain
144 # --- faces toriques du tore
148 [facetore1, facetore2, volumeTore1, volumeTore2] = facesVolumesToriques(tore, plane1, facesDefaut)
150 # --- faces 1/2 circulaires et edges dans le plan de fissure
154 [faces, centres, edges, reverses] = facesCirculaires(extrusionDefaut, tore)
156 # --- recherche et classement des edges du tore par propagate
160 [diams, circles, geners] = propagateTore(tore)
162 # --- tri par longueur des 3 génératrices
166 [genext, genint, gencnt] = sortGeneratrices(tore, geners)
168 # --- faces fissure dans et hors tore, et edges face hors tore
172 [facefissintore, facefissoutore, edgeint, edgeext, reverext] = \
173 facesFissure(ellipsoidep, faceFissure, extrusionDefaut, genint)
175 # --- identification des faces tore et fissure dans le solide hors tore
179 [blocFaceFiss, blocFaceTore1, blocFaceTore2] = \
180 facesToreInBloc(ellipsoidep, facefissoutore, facetore1, facetore2)
182 # --- identification des shapes modifiées par la duplication des noeuds de la face fissure (d'un coté de la face)
184 #shapesAModifier = self.shapesSurFissure(blocPartition, plane1 faceFissure, gencnt)
188 extrusionFaceFissure, normfiss = shapeSurFissure(plane1)
190 # --- maillage du bloc partitionne
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) \
204 maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges)
208 maillageComplet = RegroupeSainEtDefaut(maillageSain, blocComplet, extrusionFaceFissure, faceFissure, 'VOLUMES')
212 maillageComplet.ExportMED(fichierMaillageFissure)
213 putName(maillageComplet, nomFicFissure)
214 logging.info("fichier maillage fissure : %s", fichierMaillageFissure)
216 if salome.sg.hasDesktop():
217 salome.sg.updateObjBrowser()
219 return maillageComplet