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
20 """construction de la fissure générale - maillage"""
26 from .geomsmesh import geompy
28 from .geomsmesh import smesh
29 from salome.smesh import smeshBuilder
32 from .putName import putName
33 from .enleveDefaut import enleveDefaut
34 from .shapeSurFissure import shapeSurFissure
35 from .regroupeSainEtDefaut import RegroupeSainEtDefaut
36 from .triedreBase import triedreBase
38 # -----------------------------------------------------------------------------
40 def construitFissureGenerale_c(maillageSain, meshBoiteDefaut, \
41 zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges, \
43 maillageFissureParams, \
45 """construction de la fissure générale - maillage"""
47 logging.info("Usage du mailleur %s", mailleur)
49 nomRep = maillageFissureParams['nomRep']
50 nomFicSain = maillageFissureParams['nomFicSain']
51 nomFicFissure = maillageFissureParams['nomFicFissure']
53 O, _, _, _ = triedreBase()
55 # pour aider l'algo hexa-tetra à ne pas mettre de pyramides à l'exterieur des volumes repliés sur eux-mêmes
56 # on désigne les faces de peau en quadrangles par le groupe "skinFaces"
57 group_faceFissOutPipe = None
58 group_faceFissInPipe = None
59 groups = meshBoiteDefaut.GetGroups()
61 if grp.GetType() == SMESH.FACE:
62 if grp.GetName() == "fisOutPi":
63 group_faceFissOutPipe = grp
64 elif grp.GetName() == "fisInPi":
65 group_faceFissInPipe = grp
67 # le maillage NETGEN ne passe pas toujours ==> on force l'usage de MG_Tetra
69 logging.info("Maillage avec %s", mailleur)
70 if ( mailleur == "MeshGems"):
71 algo3d = meshBoiteDefaut.Tetrahedron(algo=smeshBuilder.MG_Tetra)
73 algo3d = meshBoiteDefaut.Tetrahedron(algo=smeshBuilder.NETGEN)
74 hypo3d = algo3d.MaxElementVolume(1000.0)
75 hypo3d.SetVerboseLevel( 0 )
76 hypo3d.SetStandardOutputLog( 0 )
77 hypo3d.SetRemoveLogOnSuccess( 1 )
78 putName(algo3d.GetSubMesh(), "boiteDefaut")
79 putName(algo3d, "algo3d_boiteDefaut")
80 putName(meshBoiteDefaut, "boiteDefaut")
82 is_done = meshBoiteDefaut.Compute()
83 text = "meshBoiteDefaut.Compute"
85 logging.info(text+" OK")
87 text = "Erreur au calcul du maillage.\n" + text
91 _ = meshBoiteDefaut.GetMesh().UnionListOfGroups( [ group_faceFissOutPipe, group_faceFissInPipe ], \
93 maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin,
94 zoneDefaut_internalFaces, zoneDefaut_internalEdges)
95 putName(maillageSain, nomFicSain+"_coupe")
96 _, normfiss = shapeSurFissure(facesPortFissure)
97 maillageComplet = RegroupeSainEtDefaut(maillageSain, meshBoiteDefaut, \
98 None, None, 'COMPLET', normfiss)
100 logging.info("conversion quadratique")
101 maillageComplet.ConvertToQuadratic( 1 )
102 logging.info("groupes")
103 groups = maillageComplet.GetGroups()
104 grps = [ grp for grp in groups if grp.GetName() == 'FONDFISS']
105 _ = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FONDFISS' )
107 logging.info("réorientation face de fissure FACE1")
108 grps = [ grp for grp in groups if grp.GetName() == 'FACE1']
109 _ = maillageComplet.Reorient2D( grps[0], normfiss, grps[0].GetID(1))
111 logging.info("réorientation face de fissure FACE2")
112 plansim = geompy.MakePlane(O, normfiss, 10000)
113 fissnorm = geompy.MakeMirrorByPlane(normfiss, plansim)
114 grps = [ grp for grp in groups if grp.GetName() == 'FACE2']
115 _ = maillageComplet.Reorient2D( grps[0], fissnorm, grps[0].GetID(1))
116 _ = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FACE2' )
118 logging.info("export maillage fini")
119 fichierMaillageFissure = os.path.join (nomRep , '{}.med'.format(nomFicFissure))
120 maillageComplet.ExportMED(fichierMaillageFissure)
121 putName(maillageComplet, nomFicFissure)
122 logging.info("fichier maillage fissure %s", fichierMaillageFissure)
124 return maillageComplet