2014-09-08 14:58:52 +02:00
|
|
|
# -*- coding: utf-8 -*-
|
2021-03-23 17:44:27 +03:00
|
|
|
# Copyright (C) 2014-2021 EDF R&D
|
2019-02-14 14:55:47 +03:00
|
|
|
#
|
|
|
|
# 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
|
|
|
|
#
|
2021-03-17 18:46:40 +01:00
|
|
|
"""procédure complète de construction d'une fissure générale"""
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2014-09-08 14:58:52 +02:00
|
|
|
import logging
|
|
|
|
import salome
|
2017-03-20 13:27:30 +01:00
|
|
|
from .geomsmesh import geompy
|
|
|
|
from .geomsmesh import geomPublishInFather
|
|
|
|
from . import initLog
|
2014-09-08 14:58:52 +02:00
|
|
|
import GEOM
|
2017-03-20 13:27:30 +01:00
|
|
|
from .geomsmesh import smesh
|
2014-09-08 14:58:52 +02:00
|
|
|
from salome.smesh import smeshBuilder
|
|
|
|
import SMESH
|
2021-03-17 18:46:40 +01:00
|
|
|
|
2017-03-20 13:27:30 +01:00
|
|
|
from .orderEdgesFromWire import orderEdgesFromWire
|
|
|
|
from .restreintFaceFissure import restreintFaceFissure
|
|
|
|
from .partitionneFissureParPipe import partitionneFissureParPipe
|
|
|
|
from .construitPartitionsPeauFissure import construitPartitionsPeauFissure
|
|
|
|
from .compoundFromList import compoundFromList
|
|
|
|
from .identifieFacesEdgesFissureExterne import identifieFacesEdgesFissureExterne
|
|
|
|
from .calculePointsAxiauxPipe import calculePointsAxiauxPipe
|
|
|
|
from .elimineExtremitesPipe import elimineExtremitesPipe
|
|
|
|
from .construitEdgesRadialesDebouchantes import construitEdgesRadialesDebouchantes
|
|
|
|
from .creePointsPipePeau import creePointsPipePeau
|
|
|
|
from .ajustePointsEdgePipeFissure import ajustePointsEdgePipeFissure
|
|
|
|
from .construitMaillagePipe import construitMaillagePipe
|
|
|
|
from .mailleAretesEtJonction import mailleAretesEtJonction
|
|
|
|
from .mailleFacesFissure import mailleFacesFissure
|
|
|
|
from .mailleFacesPeau import mailleFacesPeau
|
2021-03-17 18:46:40 +01:00
|
|
|
|
|
|
|
from .construitFissureGenerale_a import construitFissureGenerale_a
|
|
|
|
from .construitFissureGenerale_b import construitFissureGenerale_b
|
|
|
|
from .construitFissureGenerale_c import construitFissureGenerale_c
|
2014-09-08 14:58:52 +02:00
|
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
2021-03-17 18:46:40 +01:00
|
|
|
def construitFissureGenerale(shapesFissure, shapeFissureParams, \
|
2021-03-16 16:52:38 +01:00
|
|
|
maillageFissureParams, elementsDefaut, \
|
|
|
|
step=-1, mailleur="MeshGems"):
|
2021-03-17 18:46:40 +01:00
|
|
|
"""procédure complète fissure générale"""
|
2014-09-08 14:58:52 +02:00
|
|
|
logging.info('start')
|
2021-03-17 18:46:40 +01:00
|
|
|
logging.info("Usage du mailleur %s", mailleur)
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2014-09-08 14:58:52 +02:00
|
|
|
shapeDefaut = shapesFissure[0] # faces de fissure, débordant
|
|
|
|
|
|
|
|
rayonPipe = shapeFissureParams['rayonPipe']
|
2017-03-20 13:27:30 +01:00
|
|
|
if 'lenSegPipe' in shapeFissureParams:
|
2014-09-08 14:58:52 +02:00
|
|
|
lenSegPipe = shapeFissureParams['lenSegPipe']
|
|
|
|
else:
|
|
|
|
lenSegPipe = rayonPipe
|
|
|
|
|
|
|
|
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']
|
2016-05-12 15:19:52 +02:00
|
|
|
lgAretesVives = 0
|
2017-03-20 13:27:30 +01:00
|
|
|
if 'aretesVives' in maillageFissureParams:
|
2016-05-12 15:19:52 +02:00
|
|
|
lgAretesVives = maillageFissureParams['aretesVives']
|
2014-09-08 14:58:52 +02:00
|
|
|
|
2021-03-17 18:46:40 +01:00
|
|
|
# Point interne
|
|
|
|
pointInterne = construitFissureGenerale_a (geompy, shapeFissureParams)
|
2014-09-08 14:58:52 +02:00
|
|
|
|
|
|
|
# fillings des faces en peau
|
2014-09-14 21:38:46 +02:00
|
|
|
facesDefaut = elementsDefaut[0]
|
2014-09-08 14:58:52 +02:00
|
|
|
#centresDefaut = elementsDefaut[1]
|
|
|
|
#normalsDefaut = elementsDefaut[2]
|
|
|
|
#extrusionsDefaut = elementsDefaut[3]
|
|
|
|
dmoyen = elementsDefaut[4]
|
2014-09-14 21:38:46 +02:00
|
|
|
bordsPartages = elementsDefaut[5]
|
|
|
|
#fillconts = elementsDefaut[6]
|
|
|
|
#idFilToCont = elementsDefaut[7]
|
2014-09-08 14:58:52 +02:00
|
|
|
maillageSain = elementsDefaut[8]
|
|
|
|
internalBoundary = elementsDefaut[9]
|
|
|
|
zoneDefaut = elementsDefaut[10]
|
|
|
|
zoneDefaut_skin = elementsDefaut[11]
|
|
|
|
zoneDefaut_internalFaces = elementsDefaut[12]
|
|
|
|
zoneDefaut_internalEdges = elementsDefaut[13]
|
2014-09-14 21:38:46 +02:00
|
|
|
#edgeFondExt = elementsDefaut[14]
|
2014-09-08 14:58:52 +02:00
|
|
|
centreFondFiss = elementsDefaut[15]
|
2014-09-14 21:38:46 +02:00
|
|
|
#tgtCentre = elementsDefaut[16]
|
2016-05-12 15:19:52 +02:00
|
|
|
if lgAretesVives == 0:
|
2021-01-26 16:00:53 +01:00
|
|
|
lgAretesVives = dmoyen
|
2016-05-12 15:19:52 +02:00
|
|
|
|
2014-09-08 14:58:52 +02:00
|
|
|
# --- restriction de la face de fissure au domaine solide :
|
|
|
|
# partition face fissure étendue par fillings, on garde la face interne
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2014-09-08 14:58:52 +02:00
|
|
|
facesPortFissure = restreintFaceFissure(shapeDefaut, facesDefaut, pointInterne)
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2014-09-08 14:58:52 +02:00
|
|
|
# --- pipe de fond de fissure, prolongé, partition face fissure par pipe
|
|
|
|
# identification des edges communes pipe et face fissure
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2021-03-17 18:46:40 +01:00
|
|
|
(fissPipe, edgesPipeFiss, edgesFondFiss, wirePipeFiss, wireFondFiss) = \
|
|
|
|
partitionneFissureParPipe(shapesFissure, elementsDefaut, rayonPipe)
|
2014-09-08 14:58:52 +02:00
|
|
|
edgesFondFiss, edgesIdByOrientation = orderEdgesFromWire(wireFondFiss)
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2014-09-08 14:58:52 +02:00
|
|
|
for i,edge in enumerate(edgesFondFiss):
|
2014-12-11 15:45:06 +01:00
|
|
|
geomPublishInFather(initLog.debug, wireFondFiss, edge, "edgeFondFiss%d"%i)
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2014-09-08 14:58:52 +02:00
|
|
|
# --- peau et face de fissure
|
|
|
|
#
|
|
|
|
# --- partition peau défaut - face de fissure prolongée - wire de fond de fissure prolongée
|
|
|
|
# il peut y avoir plusieurs faces externes, dont certaines sont découpées par la fissure
|
|
|
|
# liste de faces externes : facesDefaut
|
|
|
|
# liste de partitions face externe - fissure : partitionPeauFissFond (None quand pas d'intersection)
|
|
|
|
|
|
|
|
partitionsPeauFissFond = construitPartitionsPeauFissure(facesDefaut, fissPipe)
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2014-09-08 14:58:52 +02:00
|
|
|
# --- arêtes vives détectées (dans quadranglesToShapeNoCorner
|
|
|
|
# et quadranglesToShapeWithCorner)
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2014-09-08 14:58:52 +02:00
|
|
|
aretesVivesC = compoundFromList(bordsPartages, "areteVive")
|
2021-03-17 18:46:40 +01:00
|
|
|
aretesVivesCoupees = list() # ensemble des arêtes vives identifiées sur les faces de peau dans l'itération sur partitionsPeauFissFond
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2014-09-08 14:58:52 +02:00
|
|
|
# --- inventaire des faces de peau coupées par la fissure
|
2021-03-17 18:46:40 +01:00
|
|
|
|
|
|
|
ptEdgeFond, fsFissuExt, edFisExtPe, edFisExtPi, \
|
|
|
|
facesPeaux, edCircPeau, ptCircPeau, gpedgeBord, gpedgeVifs, edFissPeau, ptFisExtPi, \
|
|
|
|
edgeRadFacePipePeau, facesPipePeau = \
|
|
|
|
construitFissureGenerale_b( partitionsPeauFissFond, \
|
|
|
|
edgesPipeFiss, edgesFondFiss, wireFondFiss, aretesVivesC, \
|
|
|
|
facesDefaut, centreFondFiss, rayonPipe, aretesVivesCoupees )
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2014-09-08 14:58:52 +02:00
|
|
|
# --- identification des faces et edges de fissure externe pour maillage
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2021-01-26 16:00:53 +01:00
|
|
|
(faceFissureExterne, edgesPipeFissureExterneC, wirePipeFissureExterne, edgesPeauFissureExterneC) = \
|
|
|
|
identifieFacesEdgesFissureExterne(fsFissuExt, edFisExtPe, edFisExtPi, edgesPipeFiss)
|
2014-09-14 21:38:46 +02:00
|
|
|
|
2014-09-08 14:58:52 +02:00
|
|
|
# --- preparation maillage du pipe :
|
2014-09-14 21:38:46 +02:00
|
|
|
# - détections des points a respecter : jonction des edges/faces constituant la face de fissure externe au pipe
|
2014-09-08 14:58:52 +02:00
|
|
|
# - points sur les edges de fond de fissure et edges pipe/face fissure,
|
|
|
|
# - vecteurs tangents au fond de fissure (normal au disque maillé)
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2021-03-17 18:46:40 +01:00
|
|
|
(centres, gptsdisks, raydisks) = calculePointsAxiauxPipe(edgesFondFiss, edgesIdByOrientation, facesDefaut, \
|
|
|
|
centreFondFiss, wireFondFiss, wirePipeFiss, \
|
2014-09-14 21:38:46 +02:00
|
|
|
lenSegPipe, rayonPipe, nbsegCercle, nbsegRad)
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2014-09-08 14:58:52 +02:00
|
|
|
# --- recherche des points en trop (externes au volume à remailler)
|
2021-01-26 11:45:01 +01:00
|
|
|
# - on associe chaque extrémité du pipe à une face filling
|
2014-09-08 14:58:52 +02:00
|
|
|
# - 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.
|
|
|
|
# - on s'arrete quand tous les noeuds sont dedans
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2014-09-14 21:38:46 +02:00
|
|
|
(idFillingFromBout, idisklim, idiskout) = elimineExtremitesPipe(ptEdgeFond, facesDefaut, centres, gptsdisks, nbsegCercle)
|
2014-09-08 14:58:52 +02:00
|
|
|
|
2014-09-14 21:38:46 +02:00
|
|
|
# --- construction des listes d'edges radiales sur chaque extrémité débouchante
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2021-03-17 18:46:40 +01:00
|
|
|
(listEdges, idFacesDebouchantes) = construitEdgesRadialesDebouchantes(idisklim, idiskout, gptsdisks, raydisks, \
|
2014-09-14 21:38:46 +02:00
|
|
|
facesPipePeau, edgeRadFacePipePeau, nbsegCercle)
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2014-09-08 14:58:52 +02:00
|
|
|
# --- création des points du maillage du pipe sur la face de peau
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2021-03-17 18:46:40 +01:00
|
|
|
(gptsdisks, idisklim) = creePointsPipePeau(listEdges, idFacesDebouchantes, idFillingFromBout, \
|
2014-09-14 21:38:46 +02:00
|
|
|
ptEdgeFond, ptFisExtPi, edCircPeau, gptsdisks, idisklim, nbsegRad)
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2014-09-14 21:38:46 +02:00
|
|
|
# --- ajustement precis des points sur edgesPipeFissureExterneC
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2014-09-14 21:38:46 +02:00
|
|
|
gptsdisks = ajustePointsEdgePipeFissure(edgesPipeFissureExterneC, wirePipeFissureExterne, gptsdisks, idisklim)
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2014-09-14 21:38:46 +02:00
|
|
|
# --- maillage effectif du pipe
|
2014-09-08 14:58:52 +02:00
|
|
|
|
2014-09-14 21:38:46 +02:00
|
|
|
(meshPipe, meshPipeGroups, edgesCircPipeGroup) = construitMaillagePipe(gptsdisks, idisklim, nbsegCercle, nbsegRad)
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2014-09-08 14:58:52 +02:00
|
|
|
# --- edges de bord, faces défaut à respecter
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2016-05-12 15:19:52 +02:00
|
|
|
(internalBoundary, bordsLibres, grpAretesVives) = mailleAretesEtJonction(internalBoundary, aretesVivesCoupees, lgAretesVives)
|
2014-09-08 14:58:52 +02:00
|
|
|
|
|
|
|
# --- maillage faces de fissure
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2021-03-17 18:46:40 +01:00
|
|
|
(meshFaceFiss, _, grpEdgesPeauFissureExterne, _) = \
|
2021-03-16 16:52:38 +01:00
|
|
|
mailleFacesFissure(faceFissureExterne, \
|
|
|
|
edgesPipeFissureExterneC, edgesPeauFissureExterneC, \
|
|
|
|
meshPipeGroups, areteFaceFissure, rayonPipe, nbsegRad, \
|
|
|
|
mailleur)
|
2014-09-08 14:58:52 +02:00
|
|
|
|
|
|
|
# --- maillage faces de peau
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2021-03-16 16:52:38 +01:00
|
|
|
meshesFacesPeau = mailleFacesPeau(partitionsPeauFissFond, idFillingFromBout, facesDefaut, \
|
|
|
|
facesPeaux, edCircPeau, ptCircPeau, gpedgeBord, gpedgeVifs, edFissPeau, \
|
|
|
|
bordsLibres, grpEdgesPeauFissureExterne, grpAretesVives, \
|
|
|
|
edgesCircPipeGroup, dmoyen, rayonPipe, nbsegRad, \
|
|
|
|
mailleur)
|
2014-09-08 14:58:52 +02:00
|
|
|
|
|
|
|
# --- regroupement des maillages du défaut
|
|
|
|
|
2021-03-17 18:46:40 +01:00
|
|
|
listMeshes = [internalBoundary.GetMesh(), meshPipe.GetMesh(), meshFaceFiss.GetMesh()]
|
|
|
|
for mfpeau in meshesFacesPeau:
|
|
|
|
listMeshes.append(mfpeau.GetMesh())
|
2014-09-08 14:58:52 +02:00
|
|
|
|
|
|
|
meshBoiteDefaut = smesh.Concatenate(listMeshes, 1, 1, 1e-05,False)
|
2021-03-17 18:46:40 +01:00
|
|
|
|
|
|
|
# Maillage complet
|
|
|
|
maillageComplet = construitFissureGenerale_c( maillageSain, meshBoiteDefaut, \
|
|
|
|
zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges, \
|
|
|
|
facesPortFissure, \
|
|
|
|
maillageFissureParams, \
|
|
|
|
mailleur )
|
2014-09-08 14:58:52 +02:00
|
|
|
|
|
|
|
if salome.sg.hasDesktop():
|
2017-06-13 13:01:10 +03:00
|
|
|
salome.sg.updateObjBrowser()
|
2014-09-08 14:58:52 +02:00
|
|
|
|
|
|
|
logging.info("maillage fissure fini")
|
2021-01-26 11:45:01 +01:00
|
|
|
|
2014-09-08 14:58:52 +02:00
|
|
|
return maillageComplet
|