1 # -*- coding: utf-8 -*-
4 from blocFissure import gmu
5 from blocFissure.gmu.geomsmesh import geompy, smesh
16 from blocFissure.gmu.fissureGenerique import fissureGenerique
18 from blocFissure.gmu.initEtude import initEtude
19 from blocFissure.gmu.triedreBase import triedreBase
20 from blocFissure.gmu.genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
21 from blocFissure.gmu.creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
22 from blocFissure.gmu.insereFissureGenerale import insereFissureGenerale
24 O, OX, OY, OZ = triedreBase()
26 class casStandard(fissureGenerique):
28 problème de fissure standard, défini par :
29 - un maillage sain (hexaèdres),
30 - une face géométrique de fissure, qui doit légèrement dépasser hors du volume maillé
31 - les numéros d'arêtes (edges géométriques) correspondant au fond de fissure
32 - les paramètres de maillage de la fissure
35 # ---------------------------------------------------------------------------
36 def __init__ (self, dicoParams, references = None, numeroCas = 0):
38 self.references = references
39 self.dicoParams = dicoParams
40 if self.dicoParams.has_key('nomCas'):
41 self.nomCas = self.dicoParams['nomCas']
43 self.nomCas = 'casStandard'
44 self.numeroCas = numeroCas
45 if self.numeroCas != 0:
46 self.nomCas = self.nomProbleme +"_%d"%(self.numeroCas)
48 self.nomProbleme = self.nomCas
49 if self.dicoParams.has_key('lenSegPipe'):
50 self.lenSegPipe = self.dicoParams['lenSegPipe']
52 self.lenSegPipe =self.dicoParams['rayonPipe']
53 if self.dicoParams.has_key('step'):
54 step = self.dicoParams['step']
56 step = -1 # exécuter toutes les étapes
57 if self.numeroCas == 0: # valeur par défaut : exécution immédiate, sinon execution différée dans le cas d'une liste de problèmes
58 self.executeProbleme(step)
60 # ---------------------------------------------------------------------------
61 def genereMaillageSain(self, geometriesSaines, meshParams):
62 logging.info("genereMaillageSain %s", self.nomCas)
64 ([objetSain], status) = smesh.CreateMeshesFromMED(self.dicoParams['maillageSain'])
65 smesh.SetName(objetSain.GetMesh(), 'objetSain')
67 return [objetSain, True] # True : maillage hexa
69 # ---------------------------------------------------------------------------
70 def setParamShapeFissure(self):
72 paramètres de la fissure pour méthode insereFissureGenerale
73 lgInfluence : distance autour de la shape de fissure a remailler (A ajuster selon le maillage)
74 rayonPipe : le rayon du pile maillé en hexa autour du fond de fissure
75 convexe : True : la face est convexe (vue de l'exterieur) sert si on ne donne pas de point interne
76 pointIn_x : optionnel : coordonnée x d'un point dans le solide sain (pour orienter la face - idem avec y,z)
78 logging.info("setParamShapeFissure %s", self.nomCas)
79 if self.dicoParams.has_key('pointInterieur'):
80 self.shapeFissureParams = dict(lgInfluence = self.dicoParams['lgInfluence'],
81 rayonPipe = self.dicoParams['rayonPipe'],
82 lenSegPipe = self.lenSegPipe,
83 pointIn_x = self.dicoParams['pointInterieur'][0],
84 pointIn_y = self.dicoParams['pointInterieur'][1],
85 pointIn_z = self.dicoParams['pointInterieur'][2])
87 self.shapeFissureParams = dict(lgInfluence = self.dicoParams['lgInfluence'],
88 rayonPipe = self.dicoParams['rayonPipe'],
89 lenSegPipe = self.lenSegPipe)
91 # ---------------------------------------------------------------------------
92 def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams):
93 logging.info("genereShapeFissure %s", self.nomCas)
95 lgInfluence = shapeFissureParams['lgInfluence']
97 shellFiss = geompy.ImportFile( self.dicoParams['brepFaceFissure'], "BREP")
98 fondFiss = geompy.CreateGroup(shellFiss, geompy.ShapeType["EDGE"])
99 geompy.UnionIDs(fondFiss, self.dicoParams['edgeFissIds'] )
100 geompy.addToStudy( shellFiss, 'shellFiss' )
101 geompy.addToStudyInFather( shellFiss, fondFiss, 'fondFiss' )
104 coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, self.dicoParams['meshBrep'][0] ,self.dicoParams['meshBrep'][1])
107 return [shellFiss, centre, lgInfluence, coordsNoeudsFissure, fondFiss]
109 # ---------------------------------------------------------------------------
110 def setParamMaillageFissure(self):
111 self.maillageFissureParams = dict(nomRep = '.',
112 nomFicSain = self.nomCas,
113 nomFicFissure = 'fissure_' + self.nomCas,
114 nbsegRad = self.dicoParams['nbSegRad'],
115 nbsegCercle = self.dicoParams['nbSegCercle'],
116 areteFaceFissure = self.dicoParams['areteFaceFissure'])
118 # ---------------------------------------------------------------------------
119 def genereZoneDefaut(self, geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams):
120 elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams)
121 return elementsDefaut
123 # ---------------------------------------------------------------------------
124 def genereMaillageFissure(self, geometriesSaines, maillagesSains,
125 shapesFissure, shapeFissureParams,
126 maillageFissureParams, elementsDefaut, step):
127 maillageFissure = insereFissureGenerale(maillagesSains,
128 shapesFissure, shapeFissureParams,
129 maillageFissureParams, elementsDefaut, step)
130 return maillageFissure
132 # ---------------------------------------------------------------------------
133 def setReferencesMaillageFissure(self):
134 if self.references is not None:
135 self.referencesMaillageFissure = self.references
137 self.referencesMaillageFissure = dict(Entity_Quad_Pyramid = 0,
138 Entity_Quad_Triangle = 0,
139 Entity_Quad_Edge = 0,
140 Entity_Quad_Penta = 0,
141 Entity_Quad_Hexa = 0,
143 Entity_Quad_Tetra = 0,
144 Entity_Quad_Quadrangle = 0)