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
23 from .geomsmesh import geompy
24 from .geomsmesh import geomPublish
25 from .geomsmesh import geomPublishInFather
27 from .geomsmesh import smesh
31 from .partitionBlocDefaut import partitionBlocDefaut
32 from .facesVolumesToriques import facesVolumesToriques
33 from .facesCirculaires import facesCirculaires
34 from .propagateTore import propagateTore
35 from .sortGeneratrices import sortGeneratrices
36 from .facesFissure import facesFissure
37 from .facesToreInBloc import facesToreInBloc
38 from .shapeSurFissure import shapeSurFissure
39 from .meshBlocPart import meshBlocPart
40 from .enleveDefaut import enleveDefaut
41 from .regroupeSainEtDefaut import RegroupeSainEtDefaut
42 from .putName import putName
44 # -----------------------------------------------------------------------------
45 # --- procedure complete fissure elliptique
47 def insereFissureElliptique(geometriesSaines, maillagesSains,
48 shapesFissure, shapeFissureParams,
49 maillageFissureParams, elementsDefaut, step=-1):
55 geometrieSaine = geometriesSaines[0]
56 maillageSain = maillagesSains[0]
57 isHexa = maillagesSains[1]
58 shapeDefaut = shapesFissure[0]
59 tailleDefaut = shapesFissure[2]
60 pipe0 = shapesFissure[4]
61 gener1 = shapesFissure[5]
62 pipe1 = shapesFissure[6]
63 facefis1 = shapesFissure[7]
64 plane1 = shapesFissure[8]
65 ellipsoide1 = shapesFissure[9]
68 demiGrandAxe = shapeFissureParams['demiGrandAxe']
69 demiPetitAxe = shapeFissureParams['demiPetitAxe']
70 orientation = shapeFissureParams['orientation']
72 nomRep = maillageFissureParams['nomRep']
73 nomFicSain = maillageFissureParams['nomFicSain']
74 nomFicFissure = maillageFissureParams['nomFicFissure']
76 nbsegExt = maillageFissureParams['nbsegExt'] # 5
77 nbsegGen = maillageFissureParams['nbsegGen'] # 25
78 nbsegRad = maillageFissureParams['nbsegRad'] # 5
79 scaleRad = maillageFissureParams['scaleRad'] # 4
80 nbsegCercle = maillageFissureParams['nbsegCercle'] # 6
81 nbsegFis = maillageFissureParams['nbsegFis'] # 20
82 lensegEllipsoide = maillageFissureParams['lensegEllipso'] # 1.0
84 fichierMaillageSain = nomRep + '/' + nomFicSain + '.med'
85 fichierMaillageFissure = nomRep + '/' + nomFicFissure + '.med'
87 facesDefaut = elementsDefaut[0]
88 centreDefaut = elementsDefaut[1]
89 normalDefaut = elementsDefaut[2]
90 extrusionDefaut = elementsDefaut[3]
91 dmoyen = elementsDefaut[4]
92 bordsPartages = elementsDefaut[5]
93 fillconts = elementsDefaut[6]
94 idFilToCont = elementsDefaut[7]
95 maillageSain = elementsDefaut[8]
96 internalBoundary = elementsDefaut[9]
97 zoneDefaut = elementsDefaut[10]
98 zoneDefaut_skin = elementsDefaut[11]
99 zoneDefaut_internalFaces = elementsDefaut[12]
100 zoneDefaut_internalEdges = elementsDefaut[13]
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, rayonTore)
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, blocp, tore,
134 faceFissure, facesExternes, facesExtBloc, facesExtElli,
135 aretesInternes, ellipsoidep, sharedFaces, sharedEdges, edgesBords] = \
136 partitionBlocDefaut(extrusionDefaut, facesDefaut, gener1, pipe1,
137 facefis1, ellipsoide1)
139 edgesBords = None # maillage sain hexa ==> filling, et maillage edges Bords imposés du maillage sain
142 # --- faces toriques du tore
146 [facetore1, facetore2, volumeTore1, volumeTore2] = facesVolumesToriques(tore, plane1, facesDefaut)
148 # --- faces 1/2 circulaires et edges dans le plan de fissure
152 [faces, centres, edges, reverses] = facesCirculaires(extrusionDefaut, tore)
154 # --- recherche et classement des edges du tore par propagate
158 [diams, circles, geners] = propagateTore(tore)
160 # --- tri par longueur des 3 génératrices
164 [genext, genint, gencnt] = sortGeneratrices(tore, geners)
166 # --- faces fissure dans et hors tore, et edges face hors tore
170 [facefissintore, facefissoutore, edgeint, edgeext, reverext] = \
171 facesFissure(ellipsoidep, faceFissure, extrusionDefaut, genint)
173 # --- identification des faces tore et fissure dans le solide hors tore
177 [blocFaceFiss, blocFaceTore1, blocFaceTore2] = \
178 facesToreInBloc(ellipsoidep, facefissoutore, facetore1, facetore2)
180 # --- identification des shapes modifiées par la duplication des noeuds de la face fissure (d'un coté de la face)
182 #shapesAModifier = self.shapesSurFissure(blocPartition, plane1 faceFissure, gencnt)
186 extrusionFaceFissure, normfiss = shapeSurFissure(plane1)
188 # --- maillage du bloc partitionne
193 [bloc1, blocComplet] = \
194 meshBlocPart(blocPartition, faceFissure, tore, centres, edges, diams, circles, faces,
195 gencnt, facefissoutore, edgeext, facesExternes, facesExtBloc, facesExtElli,
196 aretesInternes, internalBoundary, ellipsoidep, sharedFaces, sharedEdges, edgesBords,
197 nbsegExt, nbsegGen, nbsegRad, scaleRad, reverses, reverext, nbsegCercle,
198 nbsegFis, dmoyen, lensegEllipsoide)
202 maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges)
206 maillageComplet = RegroupeSainEtDefaut(maillageSain, blocComplet, extrusionFaceFissure, faceFissure, 'VOLUMES')
210 maillageComplet.ExportMED(fichierMaillageFissure)
211 putName(maillageComplet, nomFicFissure)
212 logging.info("fichier maillage fissure : %s", fichierMaillageFissure)
214 if salome.sg.hasDesktop():
215 salome.sg.updateObjBrowser()
217 return maillageComplet