1 # -*- coding: utf-8 -*-
5 from geomsmesh import geompy
6 from geomsmesh import smesh
10 from partitionBlocDefaut import partitionBlocDefaut
11 from facesVolumesToriques import facesVolumesToriques
12 from facesCirculaires import facesCirculaires
13 from propagateTore import propagateTore
14 from sortGeneratrices import sortGeneratrices
15 from facesFissure import facesFissure
16 from facesToreInBloc import facesToreInBloc
17 from shapeSurFissure import shapeSurFissure
18 from meshBlocPart import meshBlocPart
19 from enleveDefaut import enleveDefaut
20 from regroupeSainEtDefaut import RegroupeSainEtDefaut
21 from putName import putName
23 # -----------------------------------------------------------------------------
24 # --- procedure complete fissure elliptique
26 def insereFissureElliptique(geometriesSaines, maillagesSains,
27 shapesFissure, shapeFissureParams,
28 maillageFissureParams, elementsDefaut, step=-1):
34 geometrieSaine = geometriesSaines[0]
35 maillageSain = maillagesSains[0]
36 isHexa = maillagesSains[1]
37 shapeDefaut = shapesFissure[0]
38 tailleDefaut = shapesFissure[2]
39 pipe0 = shapesFissure[4]
40 gener1 = shapesFissure[5]
41 pipe1 = shapesFissure[6]
42 facefis1 = shapesFissure[7]
43 plane1 = shapesFissure[8]
44 ellipsoide1 = shapesFissure[9]
47 demiGrandAxe = shapeFissureParams['demiGrandAxe']
48 demiPetitAxe = shapeFissureParams['demiPetitAxe']
49 orientation = shapeFissureParams['orientation']
51 nomRep = maillageFissureParams['nomRep']
52 nomFicSain = maillageFissureParams['nomFicSain']
53 nomFicFissure = maillageFissureParams['nomFicFissure']
55 nbsegExt = maillageFissureParams['nbsegExt'] # 5
56 nbsegGen = maillageFissureParams['nbsegGen'] # 25
57 nbsegRad = maillageFissureParams['nbsegRad'] # 5
58 scaleRad = maillageFissureParams['scaleRad'] # 4
59 nbsegCercle = maillageFissureParams['nbsegCercle'] # 6
60 nbsegFis = maillageFissureParams['nbsegFis'] # 20
61 lensegEllipsoide = maillageFissureParams['lensegEllipso'] # 1.0
63 fichierMaillageSain = nomRep + '/' + nomFicSain + '.med'
64 fichierMaillageFissure = nomRep + '/' + nomFicFissure + '.med'
66 facesDefaut = elementsDefaut[0]
67 centreDefaut = elementsDefaut[1]
68 normalDefaut = elementsDefaut[2]
69 extrusionDefaut = elementsDefaut[3]
70 dmoyen = elementsDefaut[4]
71 bordsPartages = elementsDefaut[5]
72 fillconts = elementsDefaut[6]
73 idFilToCont = elementsDefaut[7]
74 maillageSain = elementsDefaut[8]
75 internalBoundary = elementsDefaut[9]
76 zoneDefaut = elementsDefaut[10]
77 zoneDefaut_skin = elementsDefaut[11]
78 zoneDefaut_internalFaces = elementsDefaut[12]
79 zoneDefaut_internalEdges = elementsDefaut[13]
81 ## --- ellipse incomplete : generatrice
85 #allonge = demiGrandAxe/demiPetitAxe
86 #rayonTore = demiPetitAxe/5.0
87 #generatrice, FaceGenFiss, Pipe_1, FaceFissure, Plane_1, Pipe1Part = self.toreFissure(demiPetitAxe, allonge, rayonTore)
88 #ellipsoide = self.ellipsoideDefaut(demiPetitAxe, allonge, rayonTore)
90 ## --- positionnement sur le bloc defaut de generatrice, tore et plan fissure
94 #pipe0 = self.rotTrans(Pipe_1, orientation, centreDefaut, normalDefaut)
95 #gener1 = self.rotTrans(generatrice, orientation, centreDefaut, normalDefaut)
96 #pipe1 = self.rotTrans(Pipe1Part, orientation, centreDefaut, normalDefaut)
97 #facefis1 = self.rotTrans(FaceFissure, orientation, centreDefaut, normalDefaut)
98 #plane1 = self.rotTrans(Plane_1, orientation, centreDefaut, normalDefaut)
99 #ellipsoide1 = self.rotTrans(ellipsoide, orientation, centreDefaut, normalDefaut)
101 #geompy.addToStudy( pipe0, 'pipe0' )
102 #geompy.addToStudy( gener1, 'gener1' )
103 #geompy.addToStudy( pipe1, 'pipe1' )
104 #geompy.addToStudy( facefis1, 'facefis1' )
105 #geompy.addToStudy( plane1, 'plane1' )
106 #geompy.addToStudy( ellipsoide1, 'ellipsoide1' )
108 # --- partition du bloc défaut par génératrice, tore et plan fissure
112 [blocPartition, blocp, tore,
113 faceFissure, facesExternes, facesExtBloc, facesExtElli,
114 aretesInternes, ellipsoidep, sharedFaces, sharedEdges, edgesBords] = \
115 partitionBlocDefaut(extrusionDefaut, facesDefaut, gener1, pipe1,
116 facefis1, ellipsoide1)
118 edgesBords = None # maillage sain hexa ==> filling, et maillage edges Bords imposés du maillage sain
121 # --- faces toriques du tore
125 [facetore1, facetore2, volumeTore1, volumeTore2] = facesVolumesToriques(tore, plane1, facesDefaut)
127 # --- faces 1/2 circulaires et edges dans le plan de fissure
131 [faces, centres, edges, reverses] = facesCirculaires(extrusionDefaut, tore)
133 # --- recherche et classement des edges du tore par propagate
137 [diams, circles, geners] = propagateTore(tore)
139 # --- tri par longueur des 3 génératrices
143 [genext, genint, gencnt] = sortGeneratrices(tore, geners)
145 # --- faces fissure dans et hors tore, et edges face hors tore
149 [facefissintore, facefissoutore, edgeint, edgeext, reverext] = \
150 facesFissure(ellipsoidep, faceFissure, extrusionDefaut, genint)
152 # --- identification des faces tore et fissure dans le solide hors tore
156 [blocFaceFiss, blocFaceTore1, blocFaceTore2] = \
157 facesToreInBloc(ellipsoidep, facefissoutore, facetore1, facetore2)
159 # --- identification des shapes modifiées par la duplication des noeuds de la face fissure (d'un coté de la face)
161 #shapesAModifier = self.shapesSurFissure(blocPartition, plane1 faceFissure, gencnt)
165 extrusionFaceFissure, normfiss = shapeSurFissure(plane1)
167 # --- maillage du bloc partitionne
172 [bloc1, blocComplet] = \
173 meshBlocPart(blocPartition, faceFissure, tore, centres, edges, diams, circles, faces,
174 gencnt, facefissoutore, edgeext, facesExternes, facesExtBloc, facesExtElli,
175 aretesInternes, internalBoundary, ellipsoidep, sharedFaces, sharedEdges, edgesBords,
176 nbsegExt, nbsegGen, nbsegRad, scaleRad, reverses, reverext, nbsegCercle,
177 nbsegFis, dmoyen, lensegEllipsoide)
181 maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges)
185 maillageComplet = RegroupeSainEtDefaut(maillageSain, blocComplet, extrusionFaceFissure, faceFissure, 'VOLUMES')
189 maillageComplet.ExportMED( fichierMaillageFissure, 0, SMESH.MED_V2_2, 1 )
190 putName(maillageComplet, nomFicFissure)
191 logging.info("fichier maillage fissure : %s", fichierMaillageFissure)
193 if salome.sg.hasDesktop():
194 salome.sg.updateObjBrowser(1)
196 return maillageComplet