Salome HOME
Bos #23995 [CEA 24030] ParaView 5.9: fix volumes selection
[modules/smesh.git] / src / Tools / blocFissure / gmu / insereFissureLongue_g.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2014-2021  EDF R&D
3 #
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.
8 #
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.
13 #
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
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 """Les groupes de la fissure longue"""
21
22 import logging
23
24 import salome
25 import SMESH
26
27 from .geomsmesh import geompy
28
29 from .putName import putName
30 from .enleveDefaut import enleveDefaut
31 from .shapeSurFissure import shapeSurFissure
32 from .regroupeSainEtDefaut import RegroupeSainEtDefaut
33 from .triedreBase import triedreBase
34
35 # -----------------------------------------------------------------------------
36
37 def insereFissureLongue_g(nomFicFissure, fichierMaillageFissure, nomFicSain, maillageSain, \
38                           meshBoiteDefaut, facePorteFissure, \
39                           group_faceFissInPipe, group_faceFissOutPipe, \
40                           zoneDefaut, zoneDefaut_skin, zoneDefaut_internalEdges, zoneDefaut_internalFaces, \
41                           nro_cas=None):
42   """Les groupes de la fissure longue"""
43   logging.info('start')
44   logging.info("Pour le cas n°%s", nro_cas)
45
46   O, _, _, _ = triedreBase()
47
48   groups = maillageSain.GetGroups()
49   grps1 = [ grp for grp in groups if grp.GetName() == 'P1']
50   grps2 = [ grp for grp in groups if grp.GetName() == 'P2']
51   coords1 = maillageSain.GetNodeXYZ(grps1[0].GetID(1))
52   coords2 = maillageSain.GetNodeXYZ(grps2[0].GetID(1))
53   logging.info("coords1 %s, coords2 %s",coords1, coords2)
54
55   _ = meshBoiteDefaut.GetMesh().UnionListOfGroups( [ group_faceFissOutPipe, group_faceFissInPipe ], 'FACE1' )
56   maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges)
57   putName(maillageSain, nomFicSain+"_coupe", i_pref=nro_cas)
58   extrusionFaceFissure, normfiss = shapeSurFissure(facePorteFissure)
59   maillageComplet = RegroupeSainEtDefaut(maillageSain, meshBoiteDefaut, extrusionFaceFissure, facePorteFissure, 'COUDE')
60
61   groups = maillageComplet.GetGroups()
62   grps1 = [ grp for grp in groups if grp.GetName() == 'P1']
63   grps2 = [ grp for grp in groups if grp.GetName() == 'P2']
64   nodeid1 = maillageComplet.AddNode(coords1[0], coords1[1], coords1[2])
65   nodeid2 = maillageComplet.AddNode(coords2[0], coords2[1], coords2[2])
66   grps1[0].Add([nodeid1])
67   grps2[0].Add([nodeid2])
68   ma0d1 = maillageComplet.Add0DElement(nodeid1)
69   ma0d2 = maillageComplet.Add0DElement(nodeid2)
70   grpma0d1 = maillageComplet.CreateEmptyGroup( SMESH.ELEM0D, 'P1' )
71   _ = grpma0d1.Add( [ma0d1] )
72   grpma0d2 = maillageComplet.CreateEmptyGroup( SMESH.ELEM0D, 'P2' )
73   _ = grpma0d2.Add( [ma0d2] )
74
75 #  grps = [ grp for grp in groups if grp.GetName() == 'affectedEdges']
76 #  grps[0].SetName('affEdges')
77 #  grps = [ grp for grp in groups if grp.GetName() == 'affectedFaces']
78 #  grps[0].SetName('affFaces')
79 #  grps = [ grp for grp in groups if grp.GetName() == 'affectedVolumes']
80 #  grps[0].SetName('affVols')
81
82   maillageComplet.ConvertToQuadratic( 1 )
83   grps = [ grp for grp in groups if grp.GetName() == 'FONDFISS']
84   _ = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FONDFISS' )
85
86   grps = [ grp for grp in groups if grp.GetName() == 'FACE1']
87   _ = maillageComplet.Reorient2D( grps[0], normfiss, grps[0].GetID(1))
88
89   plansim = geompy.MakePlane(O, normfiss, 10000)
90   fissnorm = geompy.MakeMirrorByPlane(normfiss, plansim)
91   grps = [ grp for grp in groups if grp.GetName() == 'FACE2']
92   _ = maillageComplet.Reorient2D( grps[0], fissnorm, grps[0].GetID(1))
93   #isDone = maillageComplet.ReorientObject( grps[0] )
94   _ = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FACE2' )
95
96   maillageComplet.ExportMED(fichierMaillageFissure)
97   putName(maillageComplet, nomFicFissure)
98   logging.info("fichier maillage fissure %s", fichierMaillageFissure)
99
100   return maillageComplet