Salome HOME
Merge branch 'V9_9_BR'
[modules/smesh.git] / src / Tools / blocFissure / gmu / construitFissureGenerale.py
index 7895244da8bfd1a8267df42ce7df3ba82e676a45..3f48bebac29f611922083c5e5e984d933de3c14f 100644 (file)
@@ -1,47 +1,39 @@
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
+# Copyright (C) 2014-2022  EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+"""procédure complète de construction d'une fissure générale"""
 
 import logging
 
 import logging
+
+from . import initLog
+
 import salome
 import salome
+
 from .geomsmesh import geompy
 from .geomsmesh import geompy
-from .geomsmesh import geomPublish
 from .geomsmesh import geomPublishInFather
 from .geomsmesh import geomPublishInFather
-from . import initLog
-import GEOM
 from .geomsmesh import smesh
 from .geomsmesh import smesh
-from salome.smesh import smeshBuilder
-import SMESH
-import math
-import bisect
-import traceback
-
-# from extractionOrientee import extractionOrientee
-# from extractionOrienteeMulti import extractionOrienteeMulti
-# from sortFaces import sortFaces
-#from sortEdges import sortEdges
-# from eliminateDoubles import eliminateDoubles
-# from substractSubShapes import substractSubShapes
-# from produitMixte import produitMixte
-# from findWireEndVertices import findWireEndVertices
-#from findWireIntermediateVertices import findWireIntermediateVertices
+
 from .orderEdgesFromWire import orderEdgesFromWire
 from .orderEdgesFromWire import orderEdgesFromWire
-# from getSubshapeIds import getSubshapeIds
-from .putName import putName
-# from distance2 import distance2
-from .enleveDefaut import enleveDefaut
-from .shapeSurFissure import shapeSurFissure
-from .regroupeSainEtDefaut import RegroupeSainEtDefaut
-from .triedreBase import triedreBase
-# from checkDecoupePartition import checkDecoupePartition
-# from whichSide import whichSide
-# from whichSideMulti import whichSideMulti
-#from whichSideVertex import whichSideVertex
-#from projettePointSurCourbe import projettePointSurCourbe
-# from prolongeWire import prolongeWire
 from .restreintFaceFissure import restreintFaceFissure
 from .partitionneFissureParPipe import partitionneFissureParPipe
 from .construitPartitionsPeauFissure import construitPartitionsPeauFissure
 from .compoundFromList import compoundFromList
 from .restreintFaceFissure import restreintFaceFissure
 from .partitionneFissureParPipe import partitionneFissureParPipe
 from .construitPartitionsPeauFissure import construitPartitionsPeauFissure
 from .compoundFromList import compoundFromList
-from .identifieElementsGeometriquesPeau import identifieElementsGeometriquesPeau
 from .identifieFacesEdgesFissureExterne import identifieFacesEdgesFissureExterne
 from .calculePointsAxiauxPipe import calculePointsAxiauxPipe
 from .elimineExtremitesPipe import elimineExtremitesPipe
 from .identifieFacesEdgesFissureExterne import identifieFacesEdgesFissureExterne
 from .calculePointsAxiauxPipe import calculePointsAxiauxPipe
 from .elimineExtremitesPipe import elimineExtremitesPipe
@@ -52,21 +44,22 @@ from .construitMaillagePipe import construitMaillagePipe
 from .mailleAretesEtJonction import mailleAretesEtJonction
 from .mailleFacesFissure import mailleFacesFissure
 from .mailleFacesPeau import mailleFacesPeau
 from .mailleAretesEtJonction import mailleAretesEtJonction
 from .mailleFacesFissure import mailleFacesFissure
 from .mailleFacesPeau import mailleFacesPeau
-from .fissError import fissError
+from .putName import putName
+
+from .construitFissureGenerale_a import construitFissureGenerale_a
+from .construitFissureGenerale_b import construitFissureGenerale_b
+from .construitFissureGenerale_c import construitFissureGenerale_c
 
 # -----------------------------------------------------------------------------
 
 # -----------------------------------------------------------------------------
-# --- procédure complète fissure générale
-
-def construitFissureGenerale(maillagesSains,
-                             shapesFissure, shapeFissureParams,
-                             maillageFissureParams, elementsDefaut, step=-1):
-  """
-  TODO: a completer
-  """
+
+def construitFissureGenerale(shapesFissure, shapeFissureParams, \
+                             maillageFissureParams, elementsDefaut, \
+                             mailleur="MeshGems", nro_cas=None):
+  """procédure complète fissure générale"""
   logging.info('start')
   logging.info('start')
-  
+  logging.info("Usage du mailleur %s pour le cas n°%s", mailleur, nro_cas)
+
   shapeDefaut       = shapesFissure[0] # faces de fissure, débordant
   shapeDefaut       = shapesFissure[0] # faces de fissure, débordant
-  fondFiss          = shapesFissure[4] # groupe d'edges de fond de fissure
 
   rayonPipe = shapeFissureParams['rayonPipe']
   if 'lenSegPipe' in shapeFissureParams:
 
   rayonPipe = shapeFissureParams['rayonPipe']
   if 'lenSegPipe' in shapeFissureParams:
@@ -74,10 +67,6 @@ def construitFissureGenerale(maillagesSains,
   else:
     lenSegPipe = rayonPipe
 
   else:
     lenSegPipe = rayonPipe
 
-  nomRep            = maillageFissureParams['nomRep']
-  nomFicSain        = maillageFissureParams['nomFicSain']
-  nomFicFissure     = maillageFissureParams['nomFicFissure']
-
   nbsegRad          = maillageFissureParams['nbsegRad']      # nombre de couches selon un rayon du pipe
   nbsegCercle       = maillageFissureParams['nbsegCercle']   # nombre de secteur dans un cercle du pipe
   areteFaceFissure  = maillageFissureParams['areteFaceFissure']
   nbsegRad          = maillageFissureParams['nbsegRad']      # nombre de couches selon un rayon du pipe
   nbsegCercle       = maillageFissureParams['nbsegCercle']   # nombre de secteur dans un cercle du pipe
   areteFaceFissure  = maillageFissureParams['areteFaceFissure']
@@ -85,26 +74,8 @@ def construitFissureGenerale(maillagesSains,
   if 'aretesVives' in maillageFissureParams:
     lgAretesVives   = maillageFissureParams['aretesVives']
 
   if 'aretesVives' in maillageFissureParams:
     lgAretesVives   = maillageFissureParams['aretesVives']
 
-  pointIn_x = 0.0
-  pointIn_y = 0.0
-  pointIn_z = 0.0
-  isPointInterne = False
-  if 'pointIn_x' in shapeFissureParams:
-    pointIn_x = shapeFissureParams['pointIn_x']
-    isPointInterne = True
-  if 'pointIn_y' in shapeFissureParams:
-    pointIn_y = shapeFissureParams['pointIn_y']
-    isPointInterne = True
-  if 'pointIn_z' in shapeFissureParams:
-    pointIn_z = shapeFissureParams['pointIn_z']
-    isPointInterne = True
-  if isPointInterne:
-    pointInterne = geompy.MakeVertex(pointIn_x, pointIn_y, pointIn_z)
-  else:
-    pointInterne = None
-
-  #fichierMaillageSain = nomRep + '/' + nomFicSain + '.med'
-  fichierMaillageFissure = nomRep + '/' + nomFicFissure + '.med'
+# Point interne
+  pointInterne = construitFissureGenerale_a (geompy, shapeFissureParams)
 
   # fillings des faces en peau
   facesDefaut              = elementsDefaut[0]
 
   # fillings des faces en peau
   facesDefaut              = elementsDefaut[0]
@@ -125,24 +96,25 @@ def construitFissureGenerale(maillagesSains,
   centreFondFiss           = elementsDefaut[15]
   #tgtCentre                = elementsDefaut[16]
   if lgAretesVives == 0:
   centreFondFiss           = elementsDefaut[15]
   #tgtCentre                = elementsDefaut[16]
   if lgAretesVives == 0:
-     lgAretesVives = dmoyen
-
-
-  O, OX, OY, OZ = triedreBase()
+    lgAretesVives = dmoyen
 
   # --- restriction de la face de fissure au domaine solide :
   #     partition face fissure étendue par fillings, on garde la face interne
 
   # --- restriction de la face de fissure au domaine solide :
   #     partition face fissure étendue par fillings, on garde la face interne
-  
-  facesPortFissure = restreintFaceFissure(shapeDefaut, facesDefaut, pointInterne)
+
+  facesPortFissure = restreintFaceFissure(shapeDefaut, facesDefaut, pointInterne, \
+                                          nro_cas)
+
   # --- pipe de fond de fissure, prolongé, partition face fissure par pipe
   #     identification des edges communes pipe et face fissure
   # --- pipe de fond de fissure, prolongé, partition face fissure par pipe
   #     identification des edges communes pipe et face fissure
-  
-  (fissPipe, edgesPipeFiss, edgesFondFiss, wirePipeFiss, wireFondFiss) = partitionneFissureParPipe(shapesFissure, elementsDefaut, rayonPipe)
+
+  (fissPipe, edgesPipeFiss, edgesFondFiss, wirePipeFiss, wireFondFiss) = \
+                          partitionneFissureParPipe(shapesFissure, elementsDefaut, rayonPipe, \
+                                                    nro_cas)
   edgesFondFiss, edgesIdByOrientation = orderEdgesFromWire(wireFondFiss)
   edgesFondFiss, edgesIdByOrientation = orderEdgesFromWire(wireFondFiss)
-  for i,edge in enumerate(edgesFondFiss):
-    geomPublishInFather(initLog.debug, wireFondFiss, edge, "edgeFondFiss%d"%i)
-  
+
+  for i_aux, edge in enumerate(edgesFondFiss):
+    geomPublishInFather(initLog.debug, wireFondFiss, edge, "edgeFondFiss{}".format(i_aux), nro_cas)
+
   # --- peau et face de fissure
   #
   # --- partition peau défaut - face de fissure prolongée - wire de fond de fissure prolongée
   # --- peau et face de fissure
   #
   # --- partition peau défaut - face de fissure prolongée - wire de fond de fissure prolongée
@@ -151,190 +123,109 @@ def construitFissureGenerale(maillagesSains,
   #     liste de partitions face externe - fissure : partitionPeauFissFond (None quand pas d'intersection)
 
   partitionsPeauFissFond = construitPartitionsPeauFissure(facesDefaut, fissPipe)
   #     liste de partitions face externe - fissure : partitionPeauFissFond (None quand pas d'intersection)
 
   partitionsPeauFissFond = construitPartitionsPeauFissure(facesDefaut, fissPipe)
-    
+
   # --- arêtes vives détectées (dans quadranglesToShapeNoCorner
   #                             et quadranglesToShapeWithCorner)
   # --- arêtes vives détectées (dans quadranglesToShapeNoCorner
   #                             et quadranglesToShapeWithCorner)
-    
+
   aretesVivesC = compoundFromList(bordsPartages, "areteVive")
   aretesVivesC = compoundFromList(bordsPartages, "areteVive")
-  aretesVivesCoupees = []  # ensembles des arêtes vives identifiées sur les faces de peau dans l'itération sur partitionsPeauFissFond
-   
+  aretesVivesCoupees = list()  # ensemble des arêtes vives identifiées sur les faces de peau dans l'itération sur partitionsPeauFissFond
+
   # --- inventaire des faces de peau coupées par la fissure
   # --- inventaire des faces de peau coupées par la fissure
-  #     pour chaque face de peau : 0, 1 ou 2 faces débouchante du fond de fissure
-  #                                0, 1 ou plus edges de la face de fissure externe au pipe
-  
-  nbFacesFilling = len(partitionsPeauFissFond)
-  
-  ptEdgeFond = [ []  for i in range(nbFacesFilling)] # pour chaque face [points edge fond de fissure aux débouchés du pipe]
-  fsPipePeau = [ []  for i in range(nbFacesFilling)] # pour chaque face [faces du pipe débouchantes]
-  edRadFPiPo = [ []  for i in range(nbFacesFilling)] # pour chaque face [edge radiale des faces du pipe débouchantes ]
-  fsFissuExt = [ []  for i in range(nbFacesFilling)] # pour chaque face [faces de fissure externes au pipe]
-  edFisExtPe = [ []  for i in range(nbFacesFilling)] # pour chaque face [edge en peau des faces de fissure externes (pas subshape facePeau)]
-  edFisExtPi = [ []  for i in range(nbFacesFilling)] # pour chaque face [edge commun au pipe des faces de fissure externes]
-  facesPeaux = [None for i in range(nbFacesFilling)] # pour chaque face : la face de peau finale a mailler (percée des faces débouchantes)
-  edCircPeau = [ []  for i in range(nbFacesFilling)] # pour chaque face de peau : [subshape edge circulaire aux débouchés du pipe]
-  ptCircPeau = [ []  for i in range(nbFacesFilling)] # pour chaque face de peau : [subshape point sur edge circulaire aux débouchés du pipe]
-  gpedgeBord = [None for i in range(nbFacesFilling)] # pour chaque face de peau : groupe subshape des edges aux bords liés à la partie saine
-  gpedgeVifs = [None for i in range(nbFacesFilling)] # pour chaque face de peau : groupes subshape des edges aux arêtes vives entre fillings
-  edFissPeau = [ []  for i in range(nbFacesFilling)] # pour chaque face de peau : [subshape edge en peau des faces de fissure externes]
-  ptFisExtPi = [ []  for i in range(nbFacesFilling)] # pour chaque face de peau : [point commun edFissPeau edCircPeau]
-  
-  for ifil, partitionPeauFissFond in enumerate(partitionsPeauFissFond):
-    if partitionPeauFissFond is not None:
-      dataPPFF,aretesVivesCoupees = identifieElementsGeometriquesPeau(ifil, partitionPeauFissFond, edgesPipeFiss,
-                                                                      edgesFondFiss, wireFondFiss, aretesVivesC,
-                                                                      facesDefaut, centreFondFiss, rayonPipe,
-                                                                      aretesVivesCoupees)      
-      ptEdgeFond[ifil] = dataPPFF['endsEdgeFond']
-      fsPipePeau[ifil] = dataPPFF['facesPipePeau']
-      edRadFPiPo[ifil] = dataPPFF['edgeRadFacePipePeau']
-      fsFissuExt[ifil] = dataPPFF['facesFissExt']
-      edFisExtPe[ifil] = dataPPFF['edgesFissExtPeau']
-      edFisExtPi[ifil] = dataPPFF['edgesFissExtPipe']
-      facesPeaux[ifil] = dataPPFF['facePeau']
-      edCircPeau[ifil] = dataPPFF['edgesCircPeau']
-      ptCircPeau[ifil] = dataPPFF['verticesCircPeau']
-      gpedgeBord[ifil] = dataPPFF['groupEdgesBordPeau']
-      gpedgeVifs[ifil] = dataPPFF['bordsVifs']
-      edFissPeau[ifil] = dataPPFF['edgesFissurePeau']
-      ptFisExtPi[ifil] = dataPPFF['verticesPipePeau']
-
-  facesPipePeau = []
-  edgeRadFacePipePeau = []
-  for ifil in range(nbFacesFilling):
-    facesPipePeau += fsPipePeau[ifil]
-    edgeRadFacePipePeau += edRadFPiPo[ifil]
-  
-  for i, avc in enumerate(aretesVivesCoupees):
-    name = "areteViveCoupee%d"%i
-    geomPublish(initLog.debug, avc, name)
-  
+
+  ptEdgeFond, fsFissuExt, edFisExtPe, edFisExtPi, facesPeaux, edCircPeau, \
+    gpedgeBord, gpedgeVifs, edFissPeau, ptFisExtPi, \
+    edgeRadFacePipePeau, facesPipePeau = \
+    construitFissureGenerale_b( partitionsPeauFissFond, \
+                                edgesPipeFiss, edgesFondFiss, wireFondFiss, aretesVivesC, \
+                                facesDefaut, centreFondFiss, rayonPipe, aretesVivesCoupees, \
+                                nro_cas )
+
   # --- identification des faces et edges de fissure externe pour maillage
   # --- identification des faces et edges de fissure externe pour maillage
-  
-  (faceFissureExterne, edgesPipeFissureExterneC,
-    wirePipeFissureExterne, edgesPeauFissureExterneC) = identifieFacesEdgesFissureExterne(fsFissuExt, edFisExtPe,
-                                                                                          edFisExtPi, edgesPipeFiss)
 
 
-  # --- preparation maillage du pipe :
+  (faceFissureExterne, edgesPipeFissureExterneC, wirePipeFissureExterne, edgesPeauFissureExterneC) = \
+      identifieFacesEdgesFissureExterne(fsFissuExt, edFisExtPe, edFisExtPi, edgesPipeFiss, \
+                                        nro_cas)
+
+  # --- préparation maillage du pipe :
   #     - détections des points a respecter : jonction des edges/faces constituant la face de fissure externe au pipe
   #     - points sur les edges de fond de fissure et edges pipe/face fissure,
   #     - vecteurs tangents au fond de fissure (normal au disque maillé)
   #     - détections des points a respecter : jonction des edges/faces constituant la face de fissure externe au pipe
   #     - points sur les edges de fond de fissure et edges pipe/face fissure,
   #     - vecteurs tangents au fond de fissure (normal au disque maillé)
-  
-  (centres, gptsdisks, raydisks) = calculePointsAxiauxPipe(edgesFondFiss, edgesIdByOrientation, facesDefaut, 
-                                                           centreFondFiss, wireFondFiss, wirePipeFiss,
-                                                           lenSegPipe, rayonPipe, nbsegCercle, nbsegRad)
-   
+
+  (centres, gptsdisks, raydisks) = calculePointsAxiauxPipe (edgesFondFiss, edgesIdByOrientation, facesDefaut, \
+                                                            centreFondFiss, wireFondFiss, wirePipeFiss, \
+                                                            lenSegPipe, rayonPipe, nbsegCercle, nbsegRad, \
+                                                            nro_cas)
+
   # --- recherche des points en trop (externes au volume à remailler)
   # --- recherche des points en trop (externes au volume à remailler)
-  #     - on associe chaque extrémité du pipe à une face filling 
+  #     - on associe chaque extrémité du pipe à une face filling
   #     - on part des disques aux extrémités du pipe
   #     - on part des disques aux extrémités du pipe
-  #     - pour chaque disque, on prend les vertices de géométrie,
-  #       on marque leur position relative à la face.
+  #     - pour chaque disque, on prend les vertices de géométrie on marque leur position relative à la face.
   #     - on s'arrete quand tous les noeuds sont dedans
   #     - on s'arrete quand tous les noeuds sont dedans
-  
+
   (idFillingFromBout, idisklim, idiskout) = elimineExtremitesPipe(ptEdgeFond, facesDefaut, centres, gptsdisks, nbsegCercle)
 
   # --- construction des listes d'edges radiales sur chaque extrémité débouchante
   (idFillingFromBout, idisklim, idiskout) = elimineExtremitesPipe(ptEdgeFond, facesDefaut, centres, gptsdisks, nbsegCercle)
 
   # --- construction des listes d'edges radiales sur chaque extrémité débouchante
-  
-  (listEdges, idFacesDebouchantes) = construitEdgesRadialesDebouchantes(idisklim, idiskout, gptsdisks, raydisks,
+
+  (listEdges, idFacesDebouchantes) = construitEdgesRadialesDebouchantes(idisklim, idiskout, gptsdisks, raydisks, \
                                                                         facesPipePeau, edgeRadFacePipePeau, nbsegCercle)
                                                                         facesPipePeau, edgeRadFacePipePeau, nbsegCercle)
-    
+
   # --- création des points du maillage du pipe sur la face de peau
   # --- création des points du maillage du pipe sur la face de peau
-  
-  (gptsdisks, idisklim) = creePointsPipePeau(listEdges, idFacesDebouchantes, idFillingFromBout,
-                                             ptEdgeFond, ptFisExtPi, edCircPeau, gptsdisks, idisklim, nbsegRad)
-  
+
+  gptsdisks = creePointsPipePeau(listEdges, idFacesDebouchantes, idFillingFromBout, \
+                                 ptEdgeFond, ptFisExtPi, edCircPeau, gptsdisks, idisklim, nbsegRad)
+
   # --- ajustement precis des points sur edgesPipeFissureExterneC
   # --- ajustement precis des points sur edgesPipeFissureExterneC
-  
+
   gptsdisks = ajustePointsEdgePipeFissure(edgesPipeFissureExterneC, wirePipeFissureExterne, gptsdisks, idisklim)
   gptsdisks = ajustePointsEdgePipeFissure(edgesPipeFissureExterneC, wirePipeFissureExterne, gptsdisks, idisklim)
-    
+
    # --- maillage effectif du pipe
 
    # --- maillage effectif du pipe
 
-  (meshPipe, meshPipeGroups, edgesCircPipeGroup) = construitMaillagePipe(gptsdisks, idisklim, nbsegCercle, nbsegRad)
-  
+  (meshPipe, edgeFaceFissGroup, edgesCircPipeGroup) =  \
+      construitMaillagePipe(gptsdisks, idisklim, nbsegCercle, nbsegRad, \
+                             nro_cas)
+
   # --- edges de bord, faces défaut à respecter
   # --- edges de bord, faces défaut à respecter
-  
-  (internalBoundary, bordsLibres, grpAretesVives) = mailleAretesEtJonction(internalBoundary, aretesVivesCoupees, lgAretesVives)
+
+  (internalBoundary, bordsLibres, grpAretesVives) =  \
+      mailleAretesEtJonction(internalBoundary, aretesVivesCoupees, lgAretesVives, \
+                             nro_cas)
 
   # --- maillage faces de fissure
 
   # --- maillage faces de fissure
-  
-  (meshFaceFiss, grpFaceFissureExterne, 
-   grpEdgesPeauFissureExterne, grpEdgesPipeFissureExterne) = mailleFacesFissure(faceFissureExterne, edgesPipeFissureExterneC, edgesPeauFissureExterneC,
-                                                                                meshPipeGroups, areteFaceFissure, rayonPipe, nbsegRad)
+
+  (meshFaceFiss, _, grpEdgesPeauFissureExterne, _) = \
+      mailleFacesFissure(faceFissureExterne, \
+                         edgesPipeFissureExterneC, edgesPeauFissureExterneC, \
+                         edgeFaceFissGroup, areteFaceFissure, rayonPipe, nbsegRad, \
+                         mailleur, nro_cas)
 
   # --- maillage faces de peau
 
   # --- maillage faces de peau
-  
-  meshesFacesPeau = mailleFacesPeau(partitionsPeauFissFond, idFillingFromBout, facesDefaut,
-                                    facesPeaux, edCircPeau, ptCircPeau, gpedgeBord, gpedgeVifs, edFissPeau, 
-                                    bordsLibres, grpEdgesPeauFissureExterne, grpAretesVives,
-                                    edgesCircPipeGroup, dmoyen, rayonPipe, nbsegRad)
+
+  meshesFacesPeau = mailleFacesPeau(partitionsPeauFissFond, idFillingFromBout, facesDefaut, \
+                                    facesPeaux, edCircPeau, gpedgeBord, gpedgeVifs, edFissPeau, \
+                                    bordsLibres, grpEdgesPeauFissureExterne, grpAretesVives, \
+                                    edgesCircPipeGroup, dmoyen, rayonPipe, nbsegRad, \
+                                    mailleur, nro_cas)
 
   # --- regroupement des maillages du défaut
 
 
   # --- regroupement des maillages du défaut
 
-  listMeshes = [internalBoundary.GetMesh(),
-                meshPipe.GetMesh(),
-                meshFaceFiss.GetMesh()]
-  for mp in meshesFacesPeau:
-    listMeshes.append(mp.GetMesh())
-
-  meshBoiteDefaut = smesh.Concatenate(listMeshes, 1, 1, 1e-05,False)
-  # pour aider l'algo hexa-tetra à ne pas mettre de pyramides à l'exterieur des volumes repliés sur eux-mêmes
-  # on désigne les faces de peau en quadrangles par le groupe "skinFaces"
-  group_faceFissOutPipe = None
-  group_faceFissInPipe = None
-  groups = meshBoiteDefaut.GetGroups()
-  for grp in groups:
-    if grp.GetType() == SMESH.FACE:
-      if grp.GetName() == "fisOutPi":
-        group_faceFissOutPipe = grp
-      elif grp.GetName() == "fisInPi":
-        group_faceFissInPipe = grp
-
-  # le maillage NETGEN ne passe pas toujours ==> utiliser GHS3D
-  distene=True
-  if distene:
-    algo3d = meshBoiteDefaut.Tetrahedron(algo=smeshBuilder.GHS3D)
-  else:
-    algo3d = meshBoiteDefaut.Tetrahedron(algo=smeshBuilder.NETGEN)
-    hypo3d = algo3d.MaxElementVolume(1000.0)
-  putName(algo3d.GetSubMesh(), "boiteDefaut")
-  putName(algo3d, "algo3d_boiteDefaut")
-  isDone = meshBoiteDefaut.Compute()
-  putName(meshBoiteDefaut, "boiteDefaut")
-  logging.info("meshBoiteDefaut fini")
-  
-  faceFissure = meshBoiteDefaut.GetMesh().UnionListOfGroups( [ group_faceFissOutPipe, group_faceFissInPipe ], 'FACE1' )
-  maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin,
-                              zoneDefaut_internalFaces, zoneDefaut_internalEdges)
-  putName(maillageSain, nomFicSain+"_coupe")
-  extrusionFaceFissure, normfiss = shapeSurFissure(facesPortFissure)
-  maillageComplet = RegroupeSainEtDefaut(maillageSain, meshBoiteDefaut,
-                                         None, None, 'COMPLET', normfiss)
-
-  logging.info("conversion quadratique")
-  maillageComplet.ConvertToQuadratic( 1 )
-  logging.info("groupes")
-  groups = maillageComplet.GetGroups()
-  grps = [ grp for grp in groups if grp.GetName() == 'FONDFISS']
-  fond = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FONDFISS' )
-
-  logging.info("réorientation face de fissure FACE1")
-  grps = [ grp for grp in groups if grp.GetName() == 'FACE1']
-  nb = maillageComplet.Reorient2D( grps[0], normfiss, grps[0].GetID(1))
-
-  logging.info("réorientation face de fissure FACE2")
-  plansim = geompy.MakePlane(O, normfiss, 10000)
-  fissnorm = geompy.MakeMirrorByPlane(normfiss, plansim)
-  grps = [ grp for grp in groups if grp.GetName() == 'FACE2']
-  nb = maillageComplet.Reorient2D( grps[0], fissnorm, grps[0].GetID(1))
-  fond = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FACE2' )
-
-  logging.info("export maillage fini")
-  maillageComplet.ExportMED(fichierMaillageFissure)
-  putName(maillageComplet, nomFicFissure)
-  logging.info("fichier maillage fissure %s", fichierMaillageFissure)
+  listMeshes = [internalBoundary.GetMesh(), meshPipe.GetMesh(), meshFaceFiss.GetMesh()]
+  for mfpeau in meshesFacesPeau:
+    listMeshes.append(mfpeau.GetMesh())
+
+  # Attention à la précision... 1.e-5 est trop exigeant. Il faudrait mettre une valeur en cohérence avec les tailles de mailles.
+  meshBoiteDefaut = smesh.Concatenate(listMeshes, 1, 1, 1.e-04)
+  putName(meshBoiteDefaut, "boiteDefaut", i_pref=nro_cas)
+
+# Maillage complet
+  maillageComplet = construitFissureGenerale_c( maillageSain, meshBoiteDefaut, \
+                                                zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges, \
+                                                facesPortFissure, \
+                                                maillageFissureParams, \
+                                                mailleur, nro_cas )
 
   if salome.sg.hasDesktop():
     salome.sg.updateObjBrowser()
 
   logging.info("maillage fissure fini")
 
   if salome.sg.hasDesktop():
     salome.sg.updateObjBrowser()
 
   logging.info("maillage fissure fini")
-  
+
   return maillageComplet
   return maillageComplet