# -*- coding: utf-8 -*-
-# Copyright (C) 2014-2021 EDF R&D
+# 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
from . import initLog
import salome
-from salome.smesh import smeshBuilder
-import GEOM
-import SMESH
from .geomsmesh import geompy
from .geomsmesh import geomPublishInFather
from .mailleAretesEtJonction import mailleAretesEtJonction
from .mailleFacesFissure import mailleFacesFissure
from .mailleFacesPeau import mailleFacesPeau
+from .putName import putName
from .construitFissureGenerale_a import construitFissureGenerale_a
from .construitFissureGenerale_b import construitFissureGenerale_b
def construitFissureGenerale(shapesFissure, shapeFissureParams, \
maillageFissureParams, elementsDefaut, \
- step=-1, mailleur="MeshGems", nro_cas=-1):
+ mailleur="MeshGems", nro_cas=None):
"""procédure complète fissure générale"""
logging.info('start')
- logging.info("Usage du mailleur %s", mailleur)
- logging.info("pour le cas %d", nro_cas)
+ logging.info("Usage du mailleur %s pour le cas n°%s", mailleur, nro_cas)
shapeDefaut = shapesFissure[0] # faces de fissure, débordant
# --- 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
(fissPipe, edgesPipeFiss, edgesFondFiss, wirePipeFiss, wireFondFiss) = \
- partitionneFissureParPipe(shapesFissure, elementsDefaut, rayonPipe)
+ partitionneFissureParPipe(shapesFissure, elementsDefaut, rayonPipe, \
+ nro_cas)
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
#
# --- inventaire des faces de peau coupées par la fissure
- ptEdgeFond, fsFissuExt, edFisExtPe, edFisExtPi, \
- facesPeaux, edCircPeau, ptCircPeau, gpedgeBord, gpedgeVifs, edFissPeau, ptFisExtPi, \
+ ptEdgeFond, fsFissuExt, edFisExtPe, edFisExtPi, facesPeaux, edCircPeau, \
+ gpedgeBord, gpedgeVifs, edFissPeau, ptFisExtPi, \
edgeRadFacePipePeau, facesPipePeau = \
construitFissureGenerale_b( partitionsPeauFissFond, \
edgesPipeFiss, edgesFondFiss, wireFondFiss, aretesVivesC, \
- facesDefaut, centreFondFiss, rayonPipe, aretesVivesCoupees )
+ facesDefaut, centreFondFiss, rayonPipe, aretesVivesCoupees, \
+ nro_cas )
# --- identification des faces et edges de fissure externe pour maillage
(faceFissureExterne, edgesPipeFissureExterneC, wirePipeFissureExterne, edgesPeauFissureExterneC) = \
- identifieFacesEdgesFissureExterne(fsFissuExt, edFisExtPe, edFisExtPi, edgesPipeFiss)
+ identifieFacesEdgesFissureExterne(fsFissuExt, edFisExtPe, edFisExtPi, edgesPipeFiss, \
+ nro_cas)
- # --- preparation maillage du pipe :
+ # --- 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é)
- (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)
# - on associe chaque extrémité du pipe à une face filling
# - 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
(idFillingFromBout, idisklim, idiskout) = elimineExtremitesPipe(ptEdgeFond, facesDefaut, centres, gptsdisks, nbsegCercle)
# --- 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
# --- 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
- (internalBoundary, bordsLibres, grpAretesVives) = mailleAretesEtJonction(internalBoundary, aretesVivesCoupees, lgAretesVives)
+ (internalBoundary, bordsLibres, grpAretesVives) = \
+ mailleAretesEtJonction(internalBoundary, aretesVivesCoupees, lgAretesVives, \
+ nro_cas)
# --- maillage faces de fissure
(meshFaceFiss, _, grpEdgesPeauFissureExterne, _) = \
mailleFacesFissure(faceFissureExterne, \
edgesPipeFissureExterneC, edgesPeauFissureExterneC, \
- meshPipeGroups, areteFaceFissure, rayonPipe, nbsegRad, \
- mailleur)
+ edgeFaceFissGroup, areteFaceFissure, rayonPipe, nbsegRad, \
+ mailleur, nro_cas)
# --- maillage faces de peau
meshesFacesPeau = mailleFacesPeau(partitionsPeauFissFond, idFillingFromBout, facesDefaut, \
- facesPeaux, edCircPeau, ptCircPeau, gpedgeBord, gpedgeVifs, edFissPeau, \
+ facesPeaux, edCircPeau, gpedgeBord, gpedgeVifs, edFissPeau, \
bordsLibres, grpEdgesPeauFissureExterne, grpAretesVives, \
edgesCircPipeGroup, dmoyen, rayonPipe, nbsegRad, \
mailleur, nro_cas)
for mfpeau in meshesFacesPeau:
listMeshes.append(mfpeau.GetMesh())
- meshBoiteDefaut = smesh.Concatenate(listMeshes, 1, 1, 1e-05,False)
+ # 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, \