1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2014-2023 EDF
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"""
28 from .partitionBlocDefaut import partitionBlocDefaut
29 from .facesVolumesToriques import facesVolumesToriques
30 from .facesCirculaires import facesCirculaires
31 from .propagateTore import propagateTore
32 from .sortGeneratrices import sortGeneratrices
33 from .facesFissure import facesFissure
34 from .facesToreInBloc import facesToreInBloc
35 from .shapeSurFissure import shapeSurFissure
36 from .meshBlocPart import meshBlocPart
37 from .enleveDefaut import enleveDefaut
38 from .regroupeSainEtDefaut import RegroupeSainEtDefaut
39 from .putName import putName
41 def insereFissureElliptique(geometriesSaines, maillagesSains, \
42 shapesFissure, shapeFissureParams, \
43 maillageFissureParams, elementsDefaut, step=-1):
44 """procedure complete fissure elliptique"""
47 #geometrieSaine = geometriesSaines[0]
48 maillageSain = maillagesSains[0]
49 isHexa = maillagesSains[1]
50 #shapeDefaut = shapesFissure[0]
51 #tailleDefaut = shapesFissure[2]
52 #pipe0 = shapesFissure[4]
53 gener1 = shapesFissure[5]
54 pipe1 = shapesFissure[6]
55 facefis1 = shapesFissure[7]
56 plane1 = shapesFissure[8]
57 ellipsoide1 = shapesFissure[9]
60 #demiGrandAxe = shapeFissureParams['demiGrandAxe']
61 #demiPetitAxe = shapeFissureParams['demiPetitAxe']
62 #orientation = shapeFissureParams['orientation']
64 nomRep = maillageFissureParams['nomRep']
65 #nomFicSain = maillageFissureParams['nomFicSain']
66 nomFicFissure = maillageFissureParams['nomFicFissure']
68 nbsegExt = maillageFissureParams['nbsegExt'] # 5
69 nbsegGen = maillageFissureParams['nbsegGen'] # 25
70 nbsegRad = maillageFissureParams['nbsegRad'] # 5
71 scaleRad = maillageFissureParams['scaleRad'] # 4
72 nbsegCercle = maillageFissureParams['nbsegCercle'] # 6
73 nbsegFis = maillageFissureParams['nbsegFis'] # 20
74 lensegEllipsoide = maillageFissureParams['lensegEllipso'] # 1.0
76 #fichierMaillageSain = os.path.join(nomRep, '{}.med'.format(nomFicSain))
77 fichierMaillageFissure = os.path.join(nomRep, '{}.med'.format(nomFicFissure))
79 facesDefaut = elementsDefaut[0]
80 #centreDefaut = elementsDefaut[1]
81 #normalDefaut = elementsDefaut[2]
82 extrusionDefaut = elementsDefaut[3]
83 dmoyen = elementsDefaut[4]
84 #bordsPartages = elementsDefaut[5]
85 #fillconts = elementsDefaut[6]
86 #idFilToCont = elementsDefaut[7]
87 #maillageSain = elementsDefaut[8]
88 internalBoundary = elementsDefaut[9]
89 zoneDefaut = elementsDefaut[10]
90 zoneDefaut_skin = elementsDefaut[11]
91 zoneDefaut_internalFaces = elementsDefaut[12]
92 zoneDefaut_internalEdges = elementsDefaut[13]
94 maillageComplet = None
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)
211 if salome.sg.hasDesktop():
212 salome.sg.updateObjBrowser()
214 return maillageComplet