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
25 from .geomsmesh import geompy
26 from .geomsmesh import geomPublish
27 from .geomsmesh import geomPublishInFather
29 from .geomsmesh import smesh
33 from .partitionBlocDefaut import partitionBlocDefaut
34 from .facesVolumesToriques import facesVolumesToriques
35 from .facesCirculaires import facesCirculaires
36 from .propagateTore import propagateTore
37 from .sortGeneratrices import sortGeneratrices
38 from .facesFissure import facesFissure
39 from .facesToreInBloc import facesToreInBloc
40 from .shapeSurFissure import shapeSurFissure
41 from .meshBlocPart import meshBlocPart
42 from .enleveDefaut import enleveDefaut
43 from .regroupeSainEtDefaut import RegroupeSainEtDefaut
44 from .putName import putName
46 # -----------------------------------------------------------------------------
47 # --- procedure complete fissure elliptique
49 def insereFissureElliptique(geometriesSaines, maillagesSains,
50 shapesFissure, shapeFissureParams,
51 maillageFissureParams, elementsDefaut, step=-1):
57 geometrieSaine = geometriesSaines[0]
58 maillageSain = maillagesSains[0]
59 isHexa = maillagesSains[1]
60 shapeDefaut = shapesFissure[0]
61 tailleDefaut = shapesFissure[2]
62 pipe0 = shapesFissure[4]
63 gener1 = shapesFissure[5]
64 pipe1 = shapesFissure[6]
65 facefis1 = shapesFissure[7]
66 plane1 = shapesFissure[8]
67 ellipsoide1 = shapesFissure[9]
70 demiGrandAxe = shapeFissureParams['demiGrandAxe']
71 demiPetitAxe = shapeFissureParams['demiPetitAxe']
72 orientation = shapeFissureParams['orientation']
74 nomRep = maillageFissureParams['nomRep']
75 nomFicSain = maillageFissureParams['nomFicSain']
76 nomFicFissure = maillageFissureParams['nomFicFissure']
78 nbsegExt = maillageFissureParams['nbsegExt'] # 5
79 nbsegGen = maillageFissureParams['nbsegGen'] # 25
80 nbsegRad = maillageFissureParams['nbsegRad'] # 5
81 scaleRad = maillageFissureParams['scaleRad'] # 4
82 nbsegCercle = maillageFissureParams['nbsegCercle'] # 6
83 nbsegFis = maillageFissureParams['nbsegFis'] # 20
84 lensegEllipsoide = maillageFissureParams['lensegEllipso'] # 1.0
86 fichierMaillageSain = os.path.join(nomRep, '{}.med'.format(nomFicSain))
87 fichierMaillageFissure = os.path.join(nomRep, '{}.med'.format(nomFicFissure))
89 facesDefaut = elementsDefaut[0]
90 centreDefaut = elementsDefaut[1]
91 normalDefaut = elementsDefaut[2]
92 extrusionDefaut = elementsDefaut[3]
93 dmoyen = elementsDefaut[4]
94 bordsPartages = elementsDefaut[5]
95 fillconts = elementsDefaut[6]
96 idFilToCont = elementsDefaut[7]
97 maillageSain = elementsDefaut[8]
98 internalBoundary = elementsDefaut[9]
99 zoneDefaut = elementsDefaut[10]
100 zoneDefaut_skin = elementsDefaut[11]
101 zoneDefaut_internalFaces = elementsDefaut[12]
102 zoneDefaut_internalEdges = elementsDefaut[13]
104 ## --- ellipse incomplete : generatrice
108 #allonge = demiGrandAxe/demiPetitAxe
109 #rayonTore = demiPetitAxe/5.0
110 #generatrice, FaceGenFiss, Pipe_1, FaceFissure, Plane_1, Pipe1Part = self.toreFissure(demiPetitAxe, allonge, rayonTore)
111 #ellipsoide = self.ellipsoideDefaut(demiPetitAxe, allonge, rayonTore)
113 ## --- positionnement sur le bloc defaut de generatrice, tore et plan fissure
117 #pipe0 = self.rotTrans(Pipe_1, orientation, centreDefaut, normalDefaut)
118 #gener1 = self.rotTrans(generatrice, orientation, centreDefaut, normalDefaut)
119 #pipe1 = self.rotTrans(Pipe1Part, orientation, centreDefaut, normalDefaut)
120 #facefis1 = self.rotTrans(FaceFissure, orientation, centreDefaut, normalDefaut)
121 #plane1 = self.rotTrans(Plane_1, orientation, centreDefaut, normalDefaut)
122 #ellipsoide1 = self.rotTrans(ellipsoide, orientation, centreDefaut, normalDefaut)
124 #geomPublish(initLog.debug, pipe0, 'pipe0' )
125 #geomPublish(initLog.debug, gener1, 'gener1' )
126 #geomPublish(initLog.debug, pipe1, 'pipe1' )
127 #geomPublish(initLog.debug, facefis1, 'facefis1' )
128 #geomPublish(initLog.debug, plane1, 'plane1' )
129 #geomPublish(initLog.debug, ellipsoide1, 'ellipsoide1' )
131 # --- partition du bloc défaut par génératrice, tore et plan fissure
135 [blocPartition, blocp, tore,
136 faceFissure, facesExternes, facesExtBloc, facesExtElli,
137 aretesInternes, ellipsoidep, sharedFaces, sharedEdges, edgesBords] = \
138 partitionBlocDefaut(extrusionDefaut, facesDefaut, gener1, pipe1,
139 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