X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FTools%2FblocFissure%2Fgmu%2FmailleFacesPeau.py;h=f53859b711a8bc7ccfb026579b515d1ab4ff5a4a;hp=949218f07f0c7fc385c4b38186275419f5c197e6;hb=HEAD;hpb=33b6f8700337fa00f3e48076a6f6d8df87d8e57f diff --git a/src/Tools/blocFissure/gmu/mailleFacesPeau.py b/src/Tools/blocFissure/gmu/mailleFacesPeau.py index 949218f07..79505c777 100644 --- a/src/Tools/blocFissure/gmu/mailleFacesPeau.py +++ b/src/Tools/blocFissure/gmu/mailleFacesPeau.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright (C) 2014-2021 EDF R&D +# Copyright (C) 2014-2024 EDF # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -22,27 +22,30 @@ import logging +import SMESH +from salome.smesh import smeshBuilder + from .geomsmesh import geompy -from .geomsmesh import geomPublish from .geomsmesh import geomPublishInFather -from . import initLog from .geomsmesh import smesh -from salome.smesh import smeshBuilder -import SMESH + +from . import initLog from .putName import putName def mailleFacesPeau(partitionsPeauFissFond, idFillingFromBout, facesDefaut, \ - facesPeaux, edCircPeau, ptCircPeau, gpedgeBord, gpedgeVifs, edFissPeau, \ + facesPeaux, edCircPeau, gpedgeBord, gpedgeVifs, edFissPeau, \ bordsLibres, grpEdgesPeauFissureExterne, grpAretesVives, \ edgesCircPipeGroup, dmoyen, rayonPipe, nbsegRad, \ - mailleur="MeshGems"): + mailleur="MeshGems", nro_cas=None): """maillage faces de peau""" logging.info('start') - logging.info(mailleur) + logging.info("Maillage avec %s pour le cas n°%s", mailleur, nro_cas) + nbFacesFilling = len(partitionsPeauFissFond) - boutFromIfil = [None for i in range(nbFacesFilling)] - if idFillingFromBout[0] != idFillingFromBout[1]: # repérage des extremites du pipe quand elles débouchent sur des faces différentes + boutFromIfil = [None for _ in range(nbFacesFilling)] + # repérage des extremites du pipe quand elles débouchent sur des faces différentes : + if ( idFillingFromBout[0] != idFillingFromBout[1] ): boutFromIfil[idFillingFromBout[0]] = 0 boutFromIfil[idFillingFromBout[1]] = 1 @@ -50,73 +53,17 @@ def mailleFacesPeau(partitionsPeauFissFond, idFillingFromBout, facesDefaut, \ logging.info("nbFacesFilling = %d", nbFacesFilling) meshesFacesPeau = list() for ifil in range(nbFacesFilling): - meshFacePeau = None - if partitionsPeauFissFond[ifil] is None: # face de peau maillage sain intacte - - logging.debug("meshFacePeau %d intacte", ifil) - # --- edges de bord de la face de filling - filling = facesDefaut[ifil] - edgesFilling = geompy.ExtractShapes(filling, geompy.ShapeType["EDGE"], False) - groupEdgesBordPeau = geompy.CreateGroup(filling, geompy.ShapeType["EDGE"]) - geompy.UnionList(groupEdgesBordPeau, edgesFilling) - geomPublishInFather(initLog.debug,filling, groupEdgesBordPeau , "EdgesBords") - - meshFacePeau = smesh.Mesh(facesDefaut[ifil]) - - algo1d = meshFacePeau.UseExisting1DElements(geom=groupEdgesBordPeau) - hypo1d = algo1d.SourceEdges([ bordsLibres ],0,0) - putName(algo1d.GetSubMesh(), "bordsLibres", ifil) - putName(algo1d, "algo1d_bordsLibres", ifil) - putName(hypo1d, "hypo1d_bordsLibres", ifil) + if partitionsPeauFissFond[ifil] is None: # face de peau maillage sain intacte + logging.info("face de peau %d intacte", ifil) + facePeau = facesDefaut[ifil] else: + logging.info("face de peau %d coupée par la fissure", ifil) + # pour chaque face : la face de peau finale a mailler (percée des faces débouchantes) + facePeau = facesPeaux[ifil] + meshFacePeau = smesh.Mesh(facePeau) + putName(meshFacePeau.GetMesh(), "facePeau", ifil, nro_cas) - logging.info("meshFacePeau %d coupée par la fissure", ifil) - facePeau = facesPeaux[ifil] # pour chaque face : la face de peau finale a mailler (percée des faces débouchantes) - edgesCircPeau = edCircPeau[ifil] # pour chaque face de peau : [subshape edge circulaire aux débouchés du pipe] - _ = ptCircPeau[ifil] # pour chaque face de peau : [subshape point sur edge circulaire aux débouchés du pipe] - groupEdgesBordPeau = gpedgeBord[ifil] # pour chaque face de peau : groupe subshape des edges aux bords liés à la partie saine - bordsVifs = gpedgeVifs[ifil] # pour chaque face de peau : groupe subshape des edges aux bords correspondant à des arêtes vives - edgesFissurePeau = edFissPeau[ifil] # pour chaque face de peau : [subshape edge en peau des faces de fissure externes] - - logging.info("a") - meshFacePeau = smesh.Mesh(facePeau) - - algo1d = meshFacePeau.UseExisting1DElements(geom=groupEdgesBordPeau) - hypo1d = algo1d.SourceEdges([ bordsLibres ],0,0) - putName(algo1d.GetSubMesh(), "bordsLibres", ifil) - putName(algo1d, "algo1d_bordsLibres", ifil) - putName(hypo1d, "hypo1d_bordsLibres", ifil) - - logging.info("b") - algo1d = meshFacePeau.UseExisting1DElements(geom=geompy.MakeCompound(edgesFissurePeau)) - hypo1d = algo1d.SourceEdges([ grpEdgesPeauFissureExterne ],0,0) - putName(algo1d.GetSubMesh(), "edgePeauFiss", ifil) - putName(algo1d, "algo1d_edgePeauFiss", ifil) - putName(hypo1d, "hypo1d_edgePeauFiss", ifil) - - if bordsVifs is not None: - algo1d = meshFacePeau.UseExisting1DElements(geom=bordsVifs) - hypo1d = algo1d.SourceEdges([ grpAretesVives ],0,0) - putName(algo1d.GetSubMesh(), "bordsVifs", ifil) - putName(algo1d, "algo1d_bordsVifs", ifil) - putName(hypo1d, "hypo1d_bordsVifs", ifil) - - for i, edgeCirc in enumerate(edgesCircPeau): - logging.info("i = {}".format(i)) - if edgeCirc is not None: - algo1d = meshFacePeau.UseExisting1DElements(geom=edgeCirc) # addToStudy() failed ? - if boutFromIfil[ifil] is None: - hypo1d = algo1d.SourceEdges([ edgesCircPipeGroup[i] ],0,0) - else: - hypo1d = algo1d.SourceEdges([ edgesCircPipeGroup[boutFromIfil[ifil]] ],0,0) - name = "cercle%d"%i - putName(algo1d.GetSubMesh(), name, ifil) - putName(algo1d, "algo1d_" + name, ifil) - putName(hypo1d, "hypo1d_" + name, ifil) - - logging.info("c") - logging.info("Maillage avec %s", mailleur) if ( mailleur == "MeshGems"): algo2d = meshFacePeau.Triangle(algo=smeshBuilder.MG_CADSurf) hypo2d = algo2d.Parameters() @@ -132,11 +79,75 @@ def mailleFacesPeau(partitionsPeauFissFond, idFillingFromBout, facesDefaut, \ hypo2d.SetOptimize( 1 ) hypo2d.SetFineness( 2 ) hypo2d.SetMinSize( rayonPipe/float(nbsegRad) ) + hypo2d.SetChordalErrorEnabled (True) + hypo2d.SetChordalError( dmoyen*0.25 ) + hypo2d.SetUseSurfaceCurvature (True) hypo2d.SetQuadAllowed( 0 ) - logging.info("d") - putName(algo2d.GetSubMesh(), "facePeau", ifil) - putName(algo2d, "algo2d_facePeau", ifil) - putName(hypo2d, "hypo2d_facePeau", ifil) + putName(hypo2d, "{}_2d_facePeau".format(mailleur), ifil, nro_cas) + + if partitionsPeauFissFond[ifil] is None: # face de peau maillage sain intacte + + logging.debug("face de peau %d intacte", ifil) + # --- edges de bord de la face de filling + filling = facesDefaut[ifil] + edgesFilling = geompy.ExtractShapes(filling, geompy.ShapeType["EDGE"], False) + gpedgeBord[ifil] = geompy.CreateGroup(filling, geompy.ShapeType["EDGE"]) + geompy.UnionList(gpedgeBord[ifil], edgesFilling) + geomPublishInFather(initLog.always, filling, gpedgeBord[ifil], "EdgesBords", nro_cas) + + logging.info("UseExisting1DElements sur la géométrie '%s' avec les mailles de '%s'", \ + gpedgeBord[ifil].GetName(), bordsLibres.GetName()) + algo1d = meshFacePeau.UseExisting1DElements(geom=gpedgeBord[ifil]) + putName(algo1d.GetSubMesh(), "bordsLibres", ifil, nro_cas) + hypo1d = algo1d.SourceEdges([ bordsLibres ],0,0) + putName(hypo1d, "SourceEdges_{}".format(bordsLibres.GetName()), ifil, nro_cas) + + else: + + logging.info("face de peau %d coupée par la fissure", ifil) + # edCircPeau[ifil] # pour chaque face de peau : [subshape edge circulaire aux débouchés du pipe] + # gpedgeBord[ifil] : pour chaque face de peau : groupe subshape des edges aux bords liés à la partie saine + # gpedgeVifs[ifil] : pour chaque face de peau : groupe subshape des edges aux bords correspondant à des arêtes vives + # edFissPeau[ifil] : pour chaque face de peau : [subshape edge en peau des faces de fissure externes] + + logging.info("UseExisting1DElements sur la géométrie '%s' avec les mailles de '%s'", \ + gpedgeBord[ifil].GetName(), bordsLibres.GetName()) + algo1d = meshFacePeau.UseExisting1DElements(geom=gpedgeBord[ifil]) + putName(algo1d.GetSubMesh(), "bordsLibres", ifil, nro_cas) + hypo1d = algo1d.SourceEdges([ bordsLibres ],0,0) + putName(hypo1d, "SourceEdges_{}".format(bordsLibres.GetName()), i_pref=nro_cas) + + objet = geompy.MakeCompound(edFissPeau[ifil]) + geomPublishInFather(initLog.always, facePeau, objet, "edFissPeau_{}".format(ifil)) + logging.info("UseExisting1DElements sur la géométrie '%s' avec les mailles de '%s'", \ + objet.GetName(), grpEdgesPeauFissureExterne.GetName()) + algo1d = meshFacePeau.UseExisting1DElements(geom=objet) + putName(algo1d.GetSubMesh(), objet.GetName(), i_pref=nro_cas) + hypo1d = algo1d.SourceEdges([ grpEdgesPeauFissureExterne ],0,0) + putName(hypo1d, "SourceEdges_{}".format(grpEdgesPeauFissureExterne.GetName()), i_pref=nro_cas) + + if gpedgeVifs[ifil] is not None: + logging.info("UseExisting1DElements sur la géométrie '%s' avec les mailles de '%s'", \ + gpedgeVifs[ifil].GetName(), grpAretesVives.GetName()) + algo1d = meshFacePeau.UseExisting1DElements(geom=gpedgeVifs[ifil]) + putName(algo1d.GetSubMesh(), "gpedgeVifs", ifil, nro_cas) + hypo1d = algo1d.SourceEdges([ grpAretesVives ],0,0) + putName(hypo1d, "SourceEdges_{}".format(grpAretesVives.GetName()), i_pref=nro_cas) + + for i_aux, edgeCirc in enumerate(edCircPeau[ifil]): + texte = "i_aux = {}".format(i_aux) + logging.info(texte) + if edgeCirc is not None: + if boutFromIfil[ifil] is None: + groupe = edgesCircPipeGroup[i_aux] + else: + groupe = edgesCircPipeGroup[boutFromIfil[ifil]] + logging.info("UseExisting1DElements sur la géométrie '%s' avec les mailles de '%s'", \ + edgeCirc.GetName(), groupe.GetName()) + algo1d = meshFacePeau.UseExisting1DElements(geom=edgeCirc) # addToStudy() failed ? + putName(algo1d.GetSubMesh(), groupe.GetName(), i_pref=nro_cas) + hypo1d = algo1d.SourceEdges([ groupe ],0,0) + putName(hypo1d, "SourceEdges_{}".format(groupe.GetName()), i_pref=nro_cas) is_done = meshFacePeau.Compute() text = "meshFacePeau {} .Compute".format(ifil) @@ -147,8 +158,8 @@ def mailleFacesPeau(partitionsPeauFissFond, idFillingFromBout, facesDefaut, \ logging.info(text) raise Exception(text) - GroupFaces = meshFacePeau.CreateEmptyGroup( SMESH.FACE, "facePeau%d"%ifil ) - _ = GroupFaces.AddFrom( meshFacePeau.GetMesh() ) + groupe_des_faces = meshFacePeau.CreateEmptyGroup( SMESH.FACE, "facePeau%d"%ifil ) + _ = groupe_des_faces.AddFrom( meshFacePeau.GetMesh() ) meshesFacesPeau.append(meshFacePeau) return meshesFacesPeau