1 # -*- coding: utf-8 -*-
5 from geomsmesh import geompy
6 from geomsmesh import geomPublish
7 from geomsmesh import geomPublishInFather
9 from geomsmesh import smesh
13 from partitionBlocDefaut import partitionBlocDefaut
14 from facesVolumesToriques import facesVolumesToriques
15 from facesCirculaires import facesCirculaires
16 from propagateTore import propagateTore
17 from sortGeneratrices import sortGeneratrices
18 from facesFissure import facesFissure
19 from facesToreInBloc import facesToreInBloc
20 from shapeSurFissure import shapeSurFissure
21 from meshBlocPart import meshBlocPart
22 from enleveDefaut import enleveDefaut
23 from regroupeSainEtDefaut import RegroupeSainEtDefaut
24 from putName import putName
26 # -----------------------------------------------------------------------------
27 # --- procedure complete fissure elliptique
29 def insereFissureElliptique(geometriesSaines, maillagesSains,
30 shapesFissure, shapeFissureParams,
31 maillageFissureParams, elementsDefaut, step=-1):
37 geometrieSaine = geometriesSaines[0]
38 maillageSain = maillagesSains[0]
39 isHexa = maillagesSains[1]
40 shapeDefaut = shapesFissure[0]
41 tailleDefaut = shapesFissure[2]
42 pipe0 = shapesFissure[4]
43 gener1 = shapesFissure[5]
44 pipe1 = shapesFissure[6]
45 facefis1 = shapesFissure[7]
46 plane1 = shapesFissure[8]
47 ellipsoide1 = shapesFissure[9]
50 demiGrandAxe = shapeFissureParams['demiGrandAxe']
51 demiPetitAxe = shapeFissureParams['demiPetitAxe']
52 orientation = shapeFissureParams['orientation']
54 nomRep = maillageFissureParams['nomRep']
55 nomFicSain = maillageFissureParams['nomFicSain']
56 nomFicFissure = maillageFissureParams['nomFicFissure']
58 nbsegExt = maillageFissureParams['nbsegExt'] # 5
59 nbsegGen = maillageFissureParams['nbsegGen'] # 25
60 nbsegRad = maillageFissureParams['nbsegRad'] # 5
61 scaleRad = maillageFissureParams['scaleRad'] # 4
62 nbsegCercle = maillageFissureParams['nbsegCercle'] # 6
63 nbsegFis = maillageFissureParams['nbsegFis'] # 20
64 lensegEllipsoide = maillageFissureParams['lensegEllipso'] # 1.0
66 fichierMaillageSain = nomRep + '/' + nomFicSain + '.med'
67 fichierMaillageFissure = nomRep + '/' + nomFicFissure + '.med'
69 facesDefaut = elementsDefaut[0]
70 centreDefaut = elementsDefaut[1]
71 normalDefaut = elementsDefaut[2]
72 extrusionDefaut = elementsDefaut[3]
73 dmoyen = elementsDefaut[4]
74 bordsPartages = elementsDefaut[5]
75 fillconts = elementsDefaut[6]
76 idFilToCont = elementsDefaut[7]
77 maillageSain = elementsDefaut[8]
78 internalBoundary = elementsDefaut[9]
79 zoneDefaut = elementsDefaut[10]
80 zoneDefaut_skin = elementsDefaut[11]
81 zoneDefaut_internalFaces = elementsDefaut[12]
82 zoneDefaut_internalEdges = elementsDefaut[13]
84 ## --- ellipse incomplete : generatrice
88 #allonge = demiGrandAxe/demiPetitAxe
89 #rayonTore = demiPetitAxe/5.0
90 #generatrice, FaceGenFiss, Pipe_1, FaceFissure, Plane_1, Pipe1Part = self.toreFissure(demiPetitAxe, allonge, rayonTore)
91 #ellipsoide = self.ellipsoideDefaut(demiPetitAxe, allonge, rayonTore)
93 ## --- positionnement sur le bloc defaut de generatrice, tore et plan fissure
97 #pipe0 = self.rotTrans(Pipe_1, orientation, centreDefaut, normalDefaut)
98 #gener1 = self.rotTrans(generatrice, orientation, centreDefaut, normalDefaut)
99 #pipe1 = self.rotTrans(Pipe1Part, orientation, centreDefaut, normalDefaut)
100 #facefis1 = self.rotTrans(FaceFissure, orientation, centreDefaut, normalDefaut)
101 #plane1 = self.rotTrans(Plane_1, orientation, centreDefaut, normalDefaut)
102 #ellipsoide1 = self.rotTrans(ellipsoide, orientation, centreDefaut, normalDefaut)
104 #geomPublish(initLog.debug, pipe0, 'pipe0' )
105 #geomPublish(initLog.debug, gener1, 'gener1' )
106 #geomPublish(initLog.debug, pipe1, 'pipe1' )
107 #geomPublish(initLog.debug, facefis1, 'facefis1' )
108 #geomPublish(initLog.debug, plane1, 'plane1' )
109 #geomPublish(initLog.debug, ellipsoide1, 'ellipsoide1' )
111 # --- partition du bloc défaut par génératrice, tore et plan fissure
115 [blocPartition, blocp, tore,
116 faceFissure, facesExternes, facesExtBloc, facesExtElli,
117 aretesInternes, ellipsoidep, sharedFaces, sharedEdges, edgesBords] = \
118 partitionBlocDefaut(extrusionDefaut, facesDefaut, gener1, pipe1,
119 facefis1, ellipsoide1)
121 edgesBords = None # maillage sain hexa ==> filling, et maillage edges Bords imposés du maillage sain
124 # --- faces toriques du tore
128 [facetore1, facetore2, volumeTore1, volumeTore2] = facesVolumesToriques(tore, plane1, facesDefaut)
130 # --- faces 1/2 circulaires et edges dans le plan de fissure
134 [faces, centres, edges, reverses] = facesCirculaires(extrusionDefaut, tore)
136 # --- recherche et classement des edges du tore par propagate
140 [diams, circles, geners] = propagateTore(tore)
142 # --- tri par longueur des 3 génératrices
146 [genext, genint, gencnt] = sortGeneratrices(tore, geners)
148 # --- faces fissure dans et hors tore, et edges face hors tore
152 [facefissintore, facefissoutore, edgeint, edgeext, reverext] = \
153 facesFissure(ellipsoidep, faceFissure, extrusionDefaut, genint)
155 # --- identification des faces tore et fissure dans le solide hors tore
159 [blocFaceFiss, blocFaceTore1, blocFaceTore2] = \
160 facesToreInBloc(ellipsoidep, facefissoutore, facetore1, facetore2)
162 # --- identification des shapes modifiées par la duplication des noeuds de la face fissure (d'un coté de la face)
164 #shapesAModifier = self.shapesSurFissure(blocPartition, plane1 faceFissure, gencnt)
168 extrusionFaceFissure, normfiss = shapeSurFissure(plane1)
170 # --- maillage du bloc partitionne
175 [bloc1, blocComplet] = \
176 meshBlocPart(blocPartition, faceFissure, tore, centres, edges, diams, circles, faces,
177 gencnt, facefissoutore, edgeext, facesExternes, facesExtBloc, facesExtElli,
178 aretesInternes, internalBoundary, ellipsoidep, sharedFaces, sharedEdges, edgesBords,
179 nbsegExt, nbsegGen, nbsegRad, scaleRad, reverses, reverext, nbsegCercle,
180 nbsegFis, dmoyen, lensegEllipsoide)
184 maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges)
188 maillageComplet = RegroupeSainEtDefaut(maillageSain, blocComplet, extrusionFaceFissure, faceFissure, 'VOLUMES')
192 maillageComplet.ExportMED( fichierMaillageFissure, 0, SMESH.MED_V2_2, 1 )
193 putName(maillageComplet, nomFicFissure)
194 logging.info("fichier maillage fissure : %s", fichierMaillageFissure)
196 if salome.sg.hasDesktop():
197 salome.sg.updateObjBrowser(1)
199 return maillageComplet