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 maillageComplet = None
102 ## --- ellipse incomplete : generatrice
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)
111 ## --- positionnement sur le bloc defaut de generatrice, tore et plan fissure
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)
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' )
129 # --- partition du bloc défaut par génératrice, tore et plan fissure
133 [ blocPartition, _, tore, \
134 faceFissure, facesExternes, facesExtBloc, facesExtElli,
135 aretesInternes, ellipsoidep, sharedFaces, sharedEdges, edgesBords] = \
136 partitionBlocDefaut(extrusionDefaut, facesDefaut, gener1, pipe1, facefis1, ellipsoide1)
138 edgesBords = None # maillage sain hexa ==> filling, et maillage edges Bords imposés du maillage sain
141 # --- faces toriques du tore
145 [facetore1, facetore2, _, _] = facesVolumesToriques(tore, plane1, facesDefaut)
147 # --- faces 1/2 circulaires et edges dans le plan de fissure
151 [faces, centres, edges, reverses] = facesCirculaires(extrusionDefaut, tore)
153 # --- recherche et classement des edges du tore par propagate
157 [diams, circles, geners] = propagateTore(tore)
159 # --- tri par longueur des 3 génératrices
163 [_, genint, gencnt] = sortGeneratrices(tore, geners)
165 # --- faces fissure dans et hors tore, et edges face hors tore
169 [_, facefissoutore, _, edgeext, reverext] = \
170 facesFissure(ellipsoidep, faceFissure, extrusionDefaut, genint)
172 # --- identification des faces tore et fissure dans le solide hors tore
177 facesToreInBloc(ellipsoidep, facefissoutore, facetore1, facetore2)
179 # --- identification des shapes modifiées par la duplication des noeuds de la face fissure (d'un coté de la face)
181 #shapesAModifier = self.shapesSurFissure(blocPartition, plane1 faceFissure, gencnt)
185 extrusionFaceFissure, _ = shapeSurFissure(plane1)
187 # --- maillage du bloc partitionne
193 meshBlocPart(blocPartition, faceFissure, tore, centres, edges, diams, circles, faces, \
194 gencnt, facefissoutore, edgeext, facesExternes, facesExtBloc, facesExtElli, \
195 aretesInternes, internalBoundary, ellipsoidep, sharedFaces, sharedEdges, edgesBords, \
196 nbsegExt, nbsegGen, nbsegRad, scaleRad, reverses, reverext, nbsegCercle, \
197 nbsegFis, dmoyen, lensegEllipsoide)
201 maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges)
205 maillageComplet = RegroupeSainEtDefaut(maillageSain, blocComplet, extrusionFaceFissure, faceFissure, 'VOLUMES')
209 maillageComplet.ExportMED(fichierMaillageFissure)
210 putName(maillageComplet, nomFicFissure)
211 logging.info("fichier maillage fissure : %s", fichierMaillageFissure)
215 if salome.sg.hasDesktop():
216 salome.sg.updateObjBrowser()
218 return maillageComplet