X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FTools%2FblocFissure%2Fgmu%2FinsereFissureGenerale.py;h=26caa4069160c4673b2ea8b44a837be3723740db;hb=3f80bd10608d0dfcc296dad35cabbcf0705b7af4;hp=3c12d89b7b1ece33956443df75953a6a4f189190;hpb=0068dfdcb1ee619cb96d637e7384d6e341e71cff;p=modules%2Fsmesh.git diff --git a/src/Tools/blocFissure/gmu/insereFissureGenerale.py b/src/Tools/blocFissure/gmu/insereFissureGenerale.py index 3c12d89b7..26caa4069 100644 --- a/src/Tools/blocFissure/gmu/insereFissureGenerale.py +++ b/src/Tools/blocFissure/gmu/insereFissureGenerale.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright (C) 2014-2020 EDF R&D +# Copyright (C) 2014-2021 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 @@ -17,55 +17,49 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # - """procédure complète fissure générale""" import os +import math import logging +from . import initLog + import salome +from salome.smesh import smeshBuilder +import GEOM +import SMESH + from .geomsmesh import geompy from .geomsmesh import geomPublish from .geomsmesh import geomPublishInFather -from . import initLog -import GEOM from .geomsmesh import smesh -from salome.smesh import smeshBuilder -import SMESH -import math -import bisect 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 .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 getCentreFondFiss import getCentreFondFiss def insereFissureGenerale(maillagesSains, shapesFissure, shapeFissureParams, - maillageFissureParams, elementsDefaut, step=-1): - """ - TODO: a completer - """ + maillageFissureParams, elementsDefaut, \ + step=-1, mailleur="MeshGems"): + """ TODO: a completer""" logging.info('start') shapeDefaut = shapesFissure[0] # faces de fissure, débordant @@ -111,15 +105,15 @@ def insereFissureGenerale(maillagesSains, #extrusionsDefaut = elementsDefaut[3] dmoyen = elementsDefaut[4] bordsPartages = elementsDefaut[5] - fillconts = elementsDefaut[6] - idFilToCont = elementsDefaut[7] + #fillconts = elementsDefaut[6] + #idFilToCont = elementsDefaut[7] maillageSain = elementsDefaut[8] internalBoundary = elementsDefaut[9] zoneDefaut = elementsDefaut[10] zoneDefaut_skin = elementsDefaut[11] zoneDefaut_internalFaces = elementsDefaut[12] zoneDefaut_internalEdges = elementsDefaut[13] - edgeFondExt = elementsDefaut[14] + #edgeFondExt = elementsDefaut[14] centreFondFiss = elementsDefaut[15] tgtCentre = elementsDefaut[16] @@ -141,7 +135,7 @@ def insereFissureGenerale(maillagesSains, geomPublish(initLog.debug, facesPortFissure, "facesPortFissure") - O, OX, OY, OZ = triedreBase() + O, _, _, _ = triedreBase() # ----------------------------------------------------------------------------- # --- pipe de fond de fissure, prolongé, partition face fissure par pipe @@ -273,11 +267,11 @@ def insereFissureGenerale(maillagesSains, geomPublishInFather(initLog.debug,partitionPeauFissFond, edgesFondC, "edgesFondFiss") if aretesVivesC is None: #= global facesInside facesOnside - [edgesInside, edgesOutside, edgesOnside] = extractionOrientee(fillingFaceExterne, partitionPeauFissFond, centreFondFiss, "EDGE", 1.e-3) - [facesInside, facesOutside, facesOnside] = extractionOrientee(fillingFaceExterne, partitionPeauFissFond, centreFondFiss, "FACE", 1.e-3) + [edgesInside, _, _] = extractionOrientee(fillingFaceExterne, partitionPeauFissFond, centreFondFiss, "EDGE", 1.e-3) + [facesInside, _, facesOnside] = extractionOrientee(fillingFaceExterne, partitionPeauFissFond, centreFondFiss, "FACE", 1.e-3) else: - [edgesInside, edgesOutside, edgesOnside] = extractionOrienteeMulti(facesDefaut, ifil, partitionPeauFissFond, centreFondFiss, "EDGE", 1.e-3) - [facesInside, facesOutside, facesOnside] = extractionOrienteeMulti(facesDefaut, ifil, partitionPeauFissFond, centreFondFiss, "FACE", 1.e-3) + [edgesInside, _, _] = extractionOrienteeMulti(facesDefaut, ifil, partitionPeauFissFond, centreFondFiss, "EDGE", 1.e-3) + [facesInside, _, facesOnside] = extractionOrienteeMulti(facesDefaut, ifil, partitionPeauFissFond, centreFondFiss, "FACE", 1.e-3) edgesPipeIn = geompy.GetSharedShapesMulti([edgesPipeC, geompy.MakeCompound(edgesInside)], geompy.ShapeType["EDGE"]) #= global verticesPipePeau = list() #= global @@ -318,16 +312,16 @@ def insereFissureGenerale(maillagesSains, geomPublishInFather(initLog.debug,partitionPeauFissFond, edge, name) dist = [ geompy.MinDistance(pt, edge) for pt in verticesPipePeau] ptPeau = verticesPipePeau[dist.index(min(dist))] # le point de verticesPipePeau a distance minimale de l'edge - [u, PointOnEdge, EdgeInWireIndex] = geompy.MakeProjectionOnWire(ptPeau, wireFondFiss) - logging.debug("u:%s, EdgeInWireIndex: %s, len(edgesFondFiss): %s", u, EdgeInWireIndex, len(edgesFondFiss)) + [parametre, PointOnEdge, EdgeInWireIndex] = geompy.MakeProjectionOnWire(ptPeau, wireFondFiss) + logging.debug("parametre:%s, EdgeInWireIndex: %s, len(edgesFondFiss): %s", parametre, EdgeInWireIndex, len(edgesFondFiss)) localEdgeInFondFiss = edgesFondFiss[EdgeInWireIndex] centre = PointOnEdge - centre2 = geompy.MakeVertexOnCurve(localEdgeInFondFiss, u) + centre2 = geompy.MakeVertexOnCurve(localEdgeInFondFiss, parametre) geomPublishInFather(initLog.debug,partitionPeauFissFond, centre2, "centre2_%d"%iedf) verticesEdgesFondIn.append(centre) name = "verticeEdgesFondIn%d"%iedf geomPublishInFather(initLog.debug,partitionPeauFissFond, centre, name) - norm = geompy.MakeTangentOnCurve(localEdgeInFondFiss, u) + norm = geompy.MakeTangentOnCurve(localEdgeInFondFiss, parametre) geomPublishInFather(initLog.debug,partitionPeauFissFond, centre, "norm%d"%iedf) cercle = geompy.MakeCircle(centre, norm, rayonPipe) geomPublishInFather(initLog.debug,partitionPeauFissFond, cercle, "cerclorig%d"%iedf) @@ -407,7 +401,6 @@ def insereFissureGenerale(maillagesSains, logging.debug(" edgesFondIn %s ", edgesPipeFnd) except: logging.debug(" pb edges communes %s %s %s",edgesPeauFis, edgesPipeFis, edgesPipeFnd) - pass if (len(edgesPeauFis) > 0) and (len(edgesPipeFis) > 0) and (len(edgesPipeFnd) == 0): dist = geompy.MinDistance(geompy.MakeCompound(edgesPeauFis), ptPeau) logging.debug(" test distance extrémité reference %s", dist) @@ -417,8 +410,8 @@ def insereFissureGenerale(maillagesSains, name="faceFissExt%d"%iedf geomPublishInFather(initLog.debug,partitionPeauFissFond, face, name) dist = 1. - for ipe, edpe in enumerate(edgesPeauFis): - for ipi, edpi in enumerate(edgesPipeFis): + for _, edpe in enumerate(edgesPeauFis): + for _, edpi in enumerate(edgesPipeFis): dist = geompy.MinDistance(edpe, edpi) if dist < 1.e-3: edgesFissExtPeau.append(edpe) @@ -473,7 +466,7 @@ def insereFissureGenerale(maillagesSains, edgeEnTrop = list() outilPart = pipexts facesPeau = geompy.ExtractShapes(partitionPeauByPipe, geompy.ShapeType["FACE"], False) - facesPeauSorted, minsur, maxsurf = sortFaces(facesPeau) + facesPeauSorted, _, _ = sortFaces(facesPeau) for i, face in enumerate(facesPeauSorted[:-1]): # on ne teste que la ou les petites faces "circulaires" nbv = geompy.NumberOfEdges(face) logging.debug("nombre d'edges sur face circulaire: %s", nbv) @@ -495,17 +488,15 @@ def insereFissureGenerale(maillagesSains, j = 1-i if bad: outilPart[j] = geompy.MakeProjection(cercles[j],facesOnside[0]) - pass partitionPeauByPipe = geompy.MakePartition(facesAndFond, outilPart, list(), list(), geompy.ShapeType["FACE"], 0, list(), 1) - pass name="partitionPeauByPipe%d"%ifil geomPublish(initLog.debug, partitionPeauByPipe, name) - [edgesPeauFondIn, edgesPeauFondOut, edgesPeauFondOn] = extractionOrientee(fillingFaceExterne, partitionPeauByPipe, centreFondFiss, "EDGE", 1.e-3) - [facesPeauFondIn, facesPeauFondOut, facesPeauFondOn] = extractionOrientee(fillingFaceExterne, partitionPeauByPipe, centreFondFiss, "FACE", 1.e-3) + [edgesPeauFondIn, _, _] = extractionOrientee(fillingFaceExterne, partitionPeauByPipe, centreFondFiss, "EDGE", 1.e-3) + [_, _, facesPeauFondOn] = extractionOrientee(fillingFaceExterne, partitionPeauByPipe, centreFondFiss, "FACE", 1.e-3) if len(verticesPipePeau) > 0: # --- au moins une extrémité du pipe sur cette face de peau - facesPeauSorted, minsur, maxsurf = sortFaces(facesPeauFondOn) + facesPeauSorted, _, _ = sortFaces(facesPeauFondOn) facePeau = facesPeauSorted[-1] # la plus grande face else: facePeau =geompy.MakePartition(facesPeauFondOn, list(), list(), list(), geompy.ShapeType["FACE"], 0, list(), 1) @@ -545,10 +536,6 @@ def insereFissureGenerale(maillagesSains, edgeRadFacePipePeau[i] = edge geomPublish(initLog.debug, edge, nameEdge) break - pass - pass - pass - pass # --- edges circulaires de la face de peau et points de jonction de la face externe de fissure logging.debug("facesPipePeau: %s", facesPipePeau) @@ -568,8 +555,7 @@ def insereFissureGenerale(maillagesSains, verticesCircPeau[i] = grpVertCircPeau name = "pointEdgeCirc%d"%i geomPublishInFather(initLog.debug,facePeau, grpVertCircPeau, name) - pass - pass # --- au moins une extrémité du pipe sur cette face de peau + # --- au moins une extrémité du pipe sur cette face de peau # --- edges de bord de la face de peau @@ -672,7 +658,7 @@ def insereFissureGenerale(maillagesSains, edgesPipeFissureExterneC = geompy.GetInPlace(faceFissureExterne, geompy.MakeCompound(edgesPipeFiss)) # edgesFissExtPipe peut ne pas couvrir toute la longueur # edgesPeauFissureExterneC = geompy.GetInPlace(faceFissureExterne, geompy.MakeCompound(edgesFissExtPeau)) # il peut manquer des edges de faceFissureExterne en contact avec la peau dans edgesFissExtPeau - (isDone, closedFreeBoundaries, openFreeBoundaries) = geompy.GetFreeBoundary(faceFissureExterne) + (_, closedFreeBoundaries, _) = geompy.GetFreeBoundary(faceFissureExterne) edgesBordFFE = list() for bound in closedFreeBoundaries: edgesBordFFE += geompy.ExtractShapes(bound, geompy.ShapeType["EDGE"], False) @@ -721,6 +707,7 @@ def insereFissureGenerale(maillagesSains, meshFondExt = smesh.Mesh(wireFondFiss) algo1d = meshFondExt.Segment() hypo1d = algo1d.Adaptive(lgmin, lgmax, deflexion) # a ajuster selon la profondeur de la fissure + is_done = meshFondExt.Compute() text = "meshFondExt.Compute" if is_done: @@ -736,10 +723,10 @@ def insereFissureGenerale(maillagesSains, xyz = meshFondExt.GetNodeXYZ(nodeId) #logging.debug("nodeId %s, coords %s", nodeId, str(xyz)) pt = geompy.MakeVertex(xyz[0], xyz[1], xyz[2]) - u, PointOnEdge, EdgeInWireIndex = geompy.MakeProjectionOnWire(pt, wireFondFiss) # u compris entre 0 et 1 + parametre, PointOnEdge, EdgeInWireIndex = geompy.MakeProjectionOnWire(pt, wireFondFiss) # parametre compris entre 0 et 1 edgeOrder = edgesIdByOrientation[EdgeInWireIndex] - ptGSdic[(edgeOrder, EdgeInWireIndex, u)] = pt - #logging.debug("nodeId %s, u %s", nodeId, str(u)) + ptGSdic[(edgeOrder, EdgeInWireIndex, parametre)] = pt + #logging.debug("nodeId %s, parametre %s", nodeId, str(parametre)) usort = sorted(ptGSdic) logging.debug("nombre de points obtenus par deflexion %s",len(usort)) @@ -747,10 +734,8 @@ def insereFissureGenerale(maillagesSains, origins = list() normals = list() for edu in usort: - ied = edu[1] - u = edu[2] vertcx = ptGSdic[edu] - norm = geompy.MakeTangentOnCurve(edgesFondFiss[ied], u) + norm = geompy.MakeTangentOnCurve(edgesFondFiss[edu[1]], edu[2]) plan = geompy.MakePlane(vertcx, norm, 3*rayonPipe) part = geompy.MakePartition([plan], [wirePipeFiss], list(), list(), geompy.ShapeType["VERTEX"], 0, list(), 0) liste = geompy.ExtractShapes(part, geompy.ShapeType["VERTEX"], True) @@ -820,7 +805,7 @@ def insereFissureGenerale(maillagesSains, pt1 = centres[-1] idFillingFromBout = [None, None] # contiendra l'index du filling pour les extrémités 0 et 1 for ifil in range(nbFacesFilling): - for ipt, pt in enumerate(ptEdgeFond[ifil]): # il y a un ou deux points débouchant sur cette face + for _, pt in enumerate(ptEdgeFond[ifil]): # il y a un ou deux points débouchant sur cette face if geompy.MinDistance(pt,pt0) < geompy.MinDistance(pt,pt1): # TODO: trouver plus fiable pour les cas tordus... idFillingFromBout[0] = ifil else: @@ -911,12 +896,12 @@ def insereFissureGenerale(maillagesSains, # --- construction des listes d'edges radiales sur chaque extrémité débouchante listEdges = list() for i, nappes in enumerate(listNappes): - id = idFacesDebouchantes[i] # indice de face débouchante (facesPipePeau) - if id < 0: + indice = idFacesDebouchantes[i] # indice de face débouchante (facesPipePeau) + if indice < 0: listEdges.append(list()) else: - face = facesPipePeau[id] - edges = [edgeRadFacePipePeau[id]] + face = facesPipePeau[indice] + edges = [edgeRadFacePipePeau[indice]] for k, nappe in enumerate(nappes): if k > 0: obj = geompy.MakeSection(face, nappes[k]) # normalement une edge, parfois un compound d'edges dont un tout petit @@ -924,7 +909,7 @@ def insereFissureGenerale(maillagesSains, vs = geompy.ExtractShapes(obj, geompy.ShapeType["VERTEX"], False) if len(vs) > 2: eds = geompy.ExtractShapes(obj, geompy.ShapeType["EDGE"], False) - [edsorted, minl,maxl] = sortEdges(eds) + [edsorted, _,maxl] = sortEdges(eds) edge = edsorted[-1] else: maxl = geompy.BasicProperties(edge)[0] @@ -944,7 +929,7 @@ def insereFissureGenerale(maillagesSains, logging.debug(" edges issues de la partition: %s", ednouv) for ii, ed in enumerate(ednouv): geomPublish(initLog.debug, ed, "ednouv%d"%ii) - [edsorted, minl,maxl] = sortEdges(ednouv) + [edsorted, _,maxl] = sortEdges(ednouv) logging.debug(" longueur edge trouvée: %s", maxl) edge = edsorted[-1] edges.append(edge) @@ -954,15 +939,15 @@ def insereFissureGenerale(maillagesSains, # --- création des points du maillage du pipe sur la face de peau for i, edges in enumerate(listEdges): - id = idFacesDebouchantes[i] # indice de face débouchante (facesPipePeau) - if id >= 0: + indice = idFacesDebouchantes[i] # indice de face débouchante (facesPipePeau) + if indice >= 0: gptdsk = list() - if id > 0: # id vaut 0 ou 1 - id = -1 # si id vaut 1, on prend le dernier élément de la liste (1 ou 2 extrémités débouchent sur la face) - centre = ptEdgeFond[idFillingFromBout[i]][id] - name = "centre%d"%id + if indice > 0: # indice vaut 0 ou 1 + indice = -1 # si indice vaut 1, on prend le dernier élément de la liste (1 ou 2 extrémités débouchent sur la face) + centre = ptEdgeFond[idFillingFromBout[i]][indice] + name = "centre%d"%indice geomPublish(initLog.debug, centre, name) - vertPipePeau = ptFisExtPi[idFillingFromBout[i]][id] + vertPipePeau = ptFisExtPi[idFillingFromBout[i]][indice] geomPublishInFather(initLog.debug,centre, vertPipePeau, "vertPipePeau") grpsEdgesCirc = edCircPeau[idFillingFromBout[i]] # liste de groupes edgesCirc = list() @@ -986,7 +971,6 @@ def insereFissureGenerale(maillagesSains, bout = extrCircs[0] else: bout = extrCircs[1] - pass else: bout = geompy.MakeVertexOnCurve(distEdgeCirc[0][2], u) name ="bout%d"%k @@ -1011,7 +995,7 @@ def insereFissureGenerale(maillagesSains, # --- ajustement precis des points sur edgesPipeFissureExterneC edgesPFE = geompy.ExtractShapes(edgesPipeFissureExterneC, geompy.ShapeType["EDGE"], False) - verticesPFE = findWireIntermediateVertices(wirePipeFissureExterne) # vertices intermédiaires (des points en trop dans ptsInWireFissExtPipe) + verticesPFE, _ = findWireIntermediateVertices(wirePipeFissureExterne) # vertices intermédiaires (des points en trop dans ptsInWireFissExtPipe) idiskmin = idisklim[0] + 1 # on ne prend pas le disque sur la peau, déjà ajusté idiskmax = idisklim[1] # on ne prend pas le disque sur la peau, déjà ajusté idiskint = list() @@ -1072,11 +1056,11 @@ def insereFissureGenerale(maillagesSains, mptids = list() for j, pt in enumerate(points): if j == 0 and k > 0: - id = mptdsk[0][0] + indice = mptdsk[0][0] else: coords = geompy.PointCoordinates(pt) - id = meshPipe.AddNode(coords[0], coords[1], coords[2]) - mptids.append(id) + indice = meshPipe.AddNode(coords[0], coords[1], coords[2]) + mptids.append(indice) mptdsk.append(mptids) mptsdisks.append(mptdsk) @@ -1179,17 +1163,17 @@ def insereFissureGenerale(maillagesSains, mVols.append(idVols) pipeFissGroup = meshPipe.CreateEmptyGroup( SMESH.VOLUME, 'PIPEFISS' ) - nbAdd = pipeFissGroup.AddFrom( meshPipe.GetMesh() ) + _ = pipeFissGroup.AddFrom( meshPipe.GetMesh() ) - nb, new_mesh, new_group = meshPipe.MakeBoundaryElements(SMESH.BND_2DFROM3D, "pipeBoundaries") + _, _, _ = meshPipe.MakeBoundaryElements(SMESH.BND_2DFROM3D, "pipeBoundaries") edgesCircPipeGroup = [edgeCircPipe0Group, edgeCircPipe1Group] # --- fin du maillage du pipe # ----------------------------------------------------------------------- # --- edges de bord, faces défaut à respecter - aFilterManager = smesh.CreateFilterManager() - nbAdded, internalBoundary, _NoneGroup = internalBoundary.MakeBoundaryElements( SMESH.BND_1DFROM2D, '', '', 0, [ ]) + _ = smesh.CreateFilterManager() + _, internalBoundary, _NoneGroup = internalBoundary.MakeBoundaryElements( SMESH.BND_1DFROM2D, '', '', 0, [ ]) criteres = list() unCritere = smesh.GetCriterion(SMESH.EDGE,SMESH.FT_FreeBorders,SMESH.FT_Undefined,0) criteres.append(unCritere) @@ -1201,11 +1185,12 @@ def insereFissureGenerale(maillagesSains, # on désigne les faces de peau en quadrangles par le groupe "skinFaces" skinFaces = internalBoundary.CreateEmptyGroup( SMESH.FACE, 'skinFaces' ) - nbAdd = skinFaces.AddFrom( internalBoundary.GetMesh() ) + _ = skinFaces.AddFrom( internalBoundary.GetMesh() ) # --- maillage des éventuelles arêtes vives entre faces reconstruites - if len(aretesVivesCoupees) > 0: + if aretesVivesCoupees: + aretesVivesC = geompy.MakeCompound(aretesVivesCoupees) meshAretesVives = smesh.Mesh(aretesVivesC) algo1d = meshAretesVives.Segment() @@ -1213,6 +1198,7 @@ def insereFissureGenerale(maillagesSains, putName(algo1d.GetSubMesh(), "aretesVives") putName(algo1d, "algo1d_aretesVives") putName(hypo1d, "hypo1d_aretesVives") + is_done = meshAretesVives.Compute() text = "meshAretesVives.Compute" if is_done: @@ -1222,7 +1208,7 @@ def insereFissureGenerale(maillagesSains, logging.info(text) raise Exception(text) grpAretesVives = meshAretesVives.CreateEmptyGroup( SMESH.EDGE, 'grpAretesVives' ) - nbAdd = grpAretesVives.AddFrom( meshAretesVives.GetMesh() ) + _ = grpAretesVives.AddFrom( meshAretesVives.GetMesh() ) # ----------------------------------------------------------------------- # --- maillage faces de fissure @@ -1230,14 +1216,24 @@ def insereFissureGenerale(maillagesSains, logging.debug("---------------------------- maillage faces de fissure externes au pipe :%s --------------", len(facesFissExt)) meshFaceFiss = smesh.Mesh(faceFissureExterne) - algo2d = meshFaceFiss.Triangle(algo=smeshBuilder.NETGEN_1D2D) - hypo2d = algo2d.Parameters() - hypo2d.SetMaxSize( areteFaceFissure ) - hypo2d.SetSecondOrder( 0 ) - hypo2d.SetOptimize( 1 ) - hypo2d.SetFineness( 2 ) - hypo2d.SetMinSize( rayonPipe/float(nbsegRad) ) - hypo2d.SetQuadAllowed( 0 ) + logging.info("Maillage avec %s", mailleur) + if ( mailleur == "MeshGems"): + algo2d = meshFaceFiss.Triangle(algo=smeshBuilder.MG_CADSurf) + hypo2d = algo2d.Parameters() + hypo2d.SetPhySize( areteFaceFissure ) + hypo2d.SetMinSize( rayonPipe/float(nbsegRad) ) + hypo2d.SetMaxSize( areteFaceFissure*3. ) + hypo2d.SetChordalError( areteFaceFissure*0.25 ) + hypo2d.SetVerbosity( 0 ) + else: + algo2d = meshFaceFiss.Triangle(algo=smeshBuilder.NETGEN_1D2D) + hypo2d = algo2d.Parameters() + hypo2d.SetMaxSize( areteFaceFissure ) + hypo2d.SetSecondOrder( 0 ) + hypo2d.SetOptimize( 1 ) + hypo2d.SetFineness( 2 ) + hypo2d.SetMinSize( rayonPipe/float(nbsegRad) ) + hypo2d.SetQuadAllowed( 0 ) putName(algo2d.GetSubMesh(), "faceFiss") putName(algo2d, "algo2d_faceFiss") putName(hypo2d, "hypo2d_faceFiss") @@ -1248,6 +1244,10 @@ def insereFissureGenerale(maillagesSains, putName(algo1d, "algo1d_edgeFissPeau") putName(hypo1d, "hypo1d_edgeFissPeau") + _ = meshFaceFiss.GroupOnGeom(faceFissureExterne, "fisOutPi", SMESH.FACE) + grpEdgesPeauFissureExterne = meshFaceFiss.GroupOnGeom(edgesPeauFissureExterneC,'edgesPeauFissureExterne',SMESH.EDGE) + _ = meshFaceFiss.GroupOnGeom(edgesPipeFissureExterneC,'edgesPipeFissureExterne',SMESH.EDGE) + is_done = meshFaceFiss.Compute() text = "meshFaceFiss.Compute" if is_done: @@ -1257,10 +1257,6 @@ def insereFissureGenerale(maillagesSains, logging.info(text) raise Exception(text) - grpFaceFissureExterne = meshFaceFiss.GroupOnGeom(faceFissureExterne, "fisOutPi", SMESH.FACE) - grpEdgesPeauFissureExterne = meshFaceFiss.GroupOnGeom(edgesPeauFissureExterneC,'edgesPeauFissureExterne',SMESH.EDGE) - grpEdgesPipeFissureExterne = meshFaceFiss.GroupOnGeom(edgesPipeFissureExterneC,'edgesPipeFissureExterne',SMESH.EDGE) - # --- maillage faces de peau boutFromIfil = [None for i in range(nbFacesFilling)] @@ -1331,13 +1327,23 @@ def insereFissureGenerale(maillagesSains, putName(algo1d, "algo1d_" + name, ifil) putName(hypo1d, "hypo1d_" + name, ifil) - algo2d = meshFacePeau.Triangle(algo=smeshBuilder.NETGEN_1D2D) - hypo2d = algo2d.Parameters() - hypo2d.SetMaxSize( dmoyen ) - hypo2d.SetOptimize( 1 ) - hypo2d.SetFineness( 2 ) - hypo2d.SetMinSize( rayonPipe/float(nbsegRad) ) - hypo2d.SetQuadAllowed( 0 ) + logging.info("Maillage avec %s", mailleur) + if ( mailleur == "MeshGems"): + algo2d = meshFacePeau.Triangle(algo=smeshBuilder.MG_CADSurf) + hypo2d = algo2d.Parameters() + hypo2d.SetPhySize( dmoyen ) + hypo2d.SetMinSize( rayonPipe/float(nbsegRad) ) + hypo2d.SetMaxSize( dmoyen*3. ) + hypo2d.SetChordalError( dmoyen*0.25 ) + hypo2d.SetVerbosity( 0 ) + else: + algo2d = meshFacePeau.Triangle(algo=smeshBuilder.NETGEN_1D2D) + hypo2d = algo2d.Parameters() + hypo2d.SetMaxSize( dmoyen*0.75 ) + hypo2d.SetOptimize( 1 ) + hypo2d.SetFineness( 2 ) + hypo2d.SetMinSize( rayonPipe/float(nbsegRad) ) + hypo2d.SetQuadAllowed( 0 ) putName(algo2d.GetSubMesh(), "facePeau", ifil) putName(algo2d, "algo2d_facePeau", ifil) putName(hypo2d, "hypo2d_facePeau", ifil) @@ -1350,8 +1356,9 @@ def insereFissureGenerale(maillagesSains, text = "Erreur au calcul du maillage.\n" + text logging.info(text) raise Exception(text) + GroupFaces = meshFacePeau.CreateEmptyGroup( SMESH.FACE, "facePeau%d"%ifil ) - nbAdd = GroupFaces.AddFrom( meshFacePeau.GetMesh() ) + _ = GroupFaces.AddFrom( meshFacePeau.GetMesh() ) meshesFacesPeau.append(meshFacePeau) # --- regroupement des maillages du défaut @@ -1377,16 +1384,21 @@ def insereFissureGenerale(maillagesSains, 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) + # le maillage NETGEN ne passe pas toujours ==> on force l'usage de MG_Tetra + mailleur = "MeshGems" + logging.info("Maillage avec %s", mailleur) + if ( mailleur == "MeshGems"): + algo3d = meshBoiteDefaut.Tetrahedron(algo=smeshBuilder.MG_Tetra) else: algo3d = meshBoiteDefaut.Tetrahedron(algo=smeshBuilder.NETGEN) hypo3d = algo3d.MaxElementVolume(1000.0) + hypo3d.SetVerboseLevel( 0 ) + hypo3d.SetStandardOutputLog( 0 ) + hypo3d.SetRemoveLogOnSuccess( 1 ) putName(algo3d.GetSubMesh(), "boiteDefaut") putName(algo3d, "algo3d_boiteDefaut") putName(meshBoiteDefaut, "boiteDefaut") + is_done = meshBoiteDefaut.Compute() text = "meshBoiteDefaut.Compute" if is_done: @@ -1396,11 +1408,11 @@ def insereFissureGenerale(maillagesSains, logging.info(text) raise Exception(text) - faceFissure = meshBoiteDefaut.GetMesh().UnionListOfGroups( [ group_faceFissOutPipe, group_faceFissInPipe ], 'FACE1' ) + _ = 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) + _, normfiss = shapeSurFissure(facesPortFissure) maillageComplet = RegroupeSainEtDefaut(maillageSain, meshBoiteDefaut, None, None, 'COMPLET', normfiss) @@ -1409,18 +1421,18 @@ def insereFissureGenerale(maillagesSains, logging.info("groupes") groups = maillageComplet.GetGroups() grps = [ grp for grp in groups if grp.GetName() == 'FONDFISS'] - fond = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FONDFISS' ) + _ = 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)) + _ = 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' ) + _ = maillageComplet.Reorient2D( grps[0], fissnorm, grps[0].GetID(1)) + _ = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FACE2' ) logging.info("export maillage fini") maillageComplet.ExportMED(fichierMaillageFissure)