Salome HOME
b0bca4ec19438462f0f59fa302076e36fce89500
[modules/smesh.git] / src / Tools / blocFissure / gmu / casStandard.py
1 # -*- coding: utf-8 -*-
2
3 import os
4 from geomsmesh import geompy, smesh
5 from geomsmesh import geomPublish
6 from geomsmesh import geomPublishInFather
7 import initLog
8
9 import math
10 import GEOM
11 import SALOMEDS
12 import SMESH
13 #import StdMeshers
14 #import GHS3DPlugin
15 #import NETGENPlugin
16 import logging
17
18 from fissureGenerique import fissureGenerique
19
20 from initEtude import initEtude
21 from triedreBase import triedreBase
22 from genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
23 from creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
24 from construitFissureGenerale import construitFissureGenerale
25
26 O, OX, OY, OZ = triedreBase()
27
28 class casStandard(fissureGenerique):
29   """
30   problème de fissure standard, défini par :
31   - un maillage sain (hexaèdres),
32   - une face géométrique de fissure, qui doit légèrement dépasser hors du volume maillé
33   - les numéros d'arêtes (edges géométriques) correspondant au fond de fissure
34   - les paramètres de maillage de la fissure
35   """
36
37   # ---------------------------------------------------------------------------
38   def __init__ (self, dicoParams, references = None, numeroCas = 0):
39     initEtude()
40     self.references = references
41     self.dicoParams = dicoParams
42     if self.dicoParams.has_key('nomCas'):
43       self.nomCas = self.dicoParams['nomCas']
44     else:
45       self.nomCas = 'casStandard'    
46     self.numeroCas = numeroCas
47     if self.numeroCas != 0:
48       self.nomCas = self.nomProbleme +"_%d"%(self.numeroCas)
49     else:
50       self.nomProbleme = self.nomCas
51     if self.dicoParams.has_key('lenSegPipe'):
52       self.lenSegPipe = self.dicoParams['lenSegPipe']
53     else:
54       self.lenSegPipe =self.dicoParams['rayonPipe']
55     if self.dicoParams.has_key('step'):
56       step = self.dicoParams['step']
57     else:
58       step = -1 # exécuter toutes les étapes
59     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
60       self.executeProbleme(step)
61     
62   # ---------------------------------------------------------------------------
63   def genereMaillageSain(self, geometriesSaines, meshParams):
64     logging.info("genereMaillageSain %s", self.nomCas)
65
66     ([objetSain], status) = smesh.CreateMeshesFromMED(self.dicoParams['maillageSain'])
67     smesh.SetName(objetSain.GetMesh(), 'objetSain')
68
69     return [objetSain, True] # True : maillage hexa
70
71   # ---------------------------------------------------------------------------
72   def setParamShapeFissure(self):
73     """
74     paramètres de la fissure pour méthode insereFissureGenerale
75     lgInfluence : distance autour de la shape de fissure a remailler (A ajuster selon le maillage)
76     rayonPipe   : le rayon du pile maillé en hexa autour du fond de fissure
77     convexe     : True : la face est convexe (vue de l'exterieur) sert si on ne donne pas de point interne
78     pointIn_x   : optionnel : coordonnée x d'un point dans le solide sain (pour orienter la face - idem avec y,z)
79     """
80     logging.info("setParamShapeFissure %s", self.nomCas)
81     if self.dicoParams.has_key('pointInterieur'):
82       self.shapeFissureParams = dict(lgInfluence = self.dicoParams['lgInfluence'],
83                                      rayonPipe   = self.dicoParams['rayonPipe'],
84                                      lenSegPipe  = self.lenSegPipe,
85                                      pointIn_x   = self.dicoParams['pointInterieur'][0],
86                                      pointIn_y   = self.dicoParams['pointInterieur'][1],
87                                      pointIn_z   = self.dicoParams['pointInterieur'][2])
88     else:
89       self.shapeFissureParams = dict(lgInfluence = self.dicoParams['lgInfluence'],
90                                      rayonPipe   = self.dicoParams['rayonPipe'],
91                                      lenSegPipe  = self.lenSegPipe)
92
93   # ---------------------------------------------------------------------------
94   def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams):
95     logging.info("genereShapeFissure %s", self.nomCas)
96
97     lgInfluence = shapeFissureParams['lgInfluence']
98
99     shellFiss = geompy.ImportFile( self.dicoParams['brepFaceFissure'], "BREP")
100     fondFiss = geompy.CreateGroup(shellFiss, geompy.ShapeType["EDGE"])
101     geompy.UnionIDs(fondFiss, self.dicoParams['edgeFissIds'] )
102     geomPublish(initLog.debug, shellFiss, 'shellFiss' )
103     geomPublishInFather(initLog.debug, shellFiss, fondFiss, 'fondFiss' )
104
105
106     coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, self.dicoParams['meshBrep'][0] ,self.dicoParams['meshBrep'][1])
107
108     centre = None
109     return [shellFiss, centre, lgInfluence, coordsNoeudsFissure, fondFiss]
110
111   # ---------------------------------------------------------------------------
112   def setParamMaillageFissure(self):
113     self.maillageFissureParams = dict(nomRep           = '.',
114                                       nomFicSain       = self.nomCas,
115                                       nomFicFissure    = 'fissure_' + self.nomCas,
116                                       nbsegRad         = self.dicoParams['nbSegRad'],
117                                       nbsegCercle      = self.dicoParams['nbSegCercle'],
118                                       areteFaceFissure = self.dicoParams['areteFaceFissure'])
119
120   # ---------------------------------------------------------------------------
121   def genereZoneDefaut(self, geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams):
122     elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams)
123     return elementsDefaut
124
125   # ---------------------------------------------------------------------------
126   def genereMaillageFissure(self, geometriesSaines, maillagesSains,
127                             shapesFissure, shapeFissureParams,
128                             maillageFissureParams, elementsDefaut, step):
129     maillageFissure = construitFissureGenerale(maillagesSains,
130                                               shapesFissure, shapeFissureParams,
131                                               maillageFissureParams, elementsDefaut, step)
132     return maillageFissure
133
134   # ---------------------------------------------------------------------------
135   def setReferencesMaillageFissure(self):
136     if self.references is not None:
137       self.referencesMaillageFissure = self.references
138     else:
139       self.referencesMaillageFissure = dict(Entity_Quad_Pyramid    = 0,
140                                             Entity_Quad_Triangle   = 0,
141                                             Entity_Quad_Edge       = 0,
142                                             Entity_Quad_Penta      = 0,
143                                             Entity_Quad_Hexa       = 0,
144                                             Entity_Node            = 0,
145                                             Entity_Quad_Tetra      = 0,
146                                             Entity_Quad_Quadrangle = 0)
147