X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FTools%2FblocFissure%2Fgmu%2FinsereFissureLongue_d.py;h=a2b47bc2bcad719af8af46c50aeb908a7b5fd8ef;hp=ba9c382a3d910d801cf665c6bbff01bac4fc9868;hb=499f29d24922cec66e41b41a0039a954993bc6df;hpb=54d6af9301c07f47a988dc85864b24b7e3fb61d9 diff --git a/src/Tools/blocFissure/gmu/insereFissureLongue_d.py b/src/Tools/blocFissure/gmu/insereFissureLongue_d.py index ba9c382a3..a2b47bc2b 100644 --- a/src/Tools/blocFissure/gmu/insereFissureLongue_d.py +++ b/src/Tools/blocFissure/gmu/insereFissureLongue_d.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright (C) 2014-2020 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 @@ -17,52 +17,83 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -"""Insertion de fissure longue - maillage meshBoiteDefaut""" +"""Insertion de fissure longue - maillage face de peau""" import logging -import salome -from .geomsmesh import smesh + from salome.smesh import smeshBuilder import SMESH +from .geomsmesh import geompy +from .geomsmesh import smesh + from .putName import putName -def insereFissureLongue_d (internalBoundary, meshFondFiss, meshFacePeau, meshFaceFiss, \ - distene = True): - """maillage meshBoiteDefaut""" +def insereFissureLongue_d (facePeau, edgePeauFiss, groupEdgesBordPeau, bordsLibres, \ + groupsDemiCerclesPeau, groups_demiCercles, verticesOutCercles, \ + nbSegGenLong, nbSegGenBout, profondeur, \ + mailleur="MeshGems", nro_cas=None): + """maillage face de peau""" logging.info('start') + logging.info("Maillage avec %s pour le cas n°%s", mailleur, nro_cas) - meshBoiteDefaut = smesh.Concatenate( [internalBoundary.GetMesh(), \ - meshFondFiss.GetMesh(), \ - meshFacePeau.GetMesh(), \ - meshFaceFiss.GetMesh()], \ - 1, 1, 1e-05,False) - # pour aider l'algo hexa-tetra a ne pas mettre de pyramides a l'exterieur des volumes replies sur eux-memes - # on designe 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 "internalBoundary" in grp.GetName(): - # grp.SetName("skinFaces") - if grp.GetName() == "fisOutPi": - group_faceFissOutPipe = grp - elif grp.GetName() == "fisInPi": - group_faceFissInPipe = grp + meshFacePeau = smesh.Mesh(facePeau) + putName(meshFacePeau, "facePeau", i_pref=nro_cas) - # le maillage NETGEN ne passe pas toujours ==> utiliser GHS3D - if distene: - algo3d = meshBoiteDefaut.Tetrahedron(algo=smeshBuilder.GHS3D) + if ( mailleur == "MeshGems"): + algo2d = meshFacePeau.Triangle(algo=smeshBuilder.MG_CADSurf) + hypo2d = algo2d.Parameters() + hypo2d.SetPhySize( 1000 ) + hypo2d.SetMinSize( 100 ) + hypo2d.SetMaxSize( 3000. ) + hypo2d.SetChordalError( 250. ) + hypo2d.SetVerbosity( 0 ) else: - algo3d = meshBoiteDefaut.Tetrahedron(algo=smeshBuilder.NETGEN) - hypo3d = algo3d.MaxElementVolume(1000.0) - putName(algo3d.GetSubMesh(), "boiteDefaut") - putName(algo3d, "algo3d_boiteDefaut") - putName(meshBoiteDefaut, "boiteDefaut") + algo2d = meshFacePeau.Triangle(algo=smeshBuilder.NETGEN_2D) + hypo2d = algo2d.Parameters() + hypo2d.SetMaxSize( 1000 ) + hypo2d.SetOptimize( 1 ) + hypo2d.SetFineness( 2 ) + hypo2d.SetMinSize( 2 ) + hypo2d.SetChordalErrorEnabled (True) + hypo2d.SetChordalError( 250. ) + hypo2d.SetUseSurfaceCurvature (True) + hypo2d.SetQuadAllowed( 0 ) + putName(algo2d.GetSubMesh(), "facePeau", i_pref=nro_cas) + putName(hypo2d, "facePeau", i_pref=nro_cas) + # + lenEdgePeauFiss = geompy.BasicProperties(edgePeauFiss)[0] + frac = profondeur/lenEdgePeauFiss + nbSeg = nbSegGenLong +2*nbSegGenBout + ratio = (nbSegGenBout/float(profondeur)) / (nbSegGenLong/lenEdgePeauFiss) + logging.info("lenEdgePeauFiss %s, profondeur %s, nbSegGenLong %s, nbSegGenBout %s, frac %s, ratio %s", lenEdgePeauFiss, profondeur, nbSegGenLong, nbSegGenBout, frac, ratio) - is_done = meshBoiteDefaut.Compute() - text = "meshBoiteDefaut.Compute" + algo1d = meshFacePeau.Segment(geom=edgePeauFiss) + hypo1d = algo1d.NumberOfSegments(nbSeg,list(),[ ]) + hypo1d.SetDistrType( 2 ) + hypo1d.SetConversionMode( 1 ) + hypo1d.SetTableFunction( [ 0, ratio, frac, 1, (1.-frac), 1, 1, ratio ] ) + putName(algo1d.GetSubMesh(), "edgePeauFiss", i_pref=nro_cas) + putName(hypo1d, "edgePeauFiss", i_pref=nro_cas) + # + algo1d = meshFacePeau.UseExisting1DElements(geom=groupEdgesBordPeau) + hypo1d = algo1d.SourceEdges([ bordsLibres ],0,0) + putName(algo1d.GetSubMesh(), "bordsLibres", i_pref=nro_cas) + putName(hypo1d, "bordsLibres", i_pref=nro_cas) + # + for i_aux in range(2): + algo1d = meshFacePeau.UseExisting1DElements(geom=groupsDemiCerclesPeau[i_aux]) + hypo1d = algo1d.SourceEdges([ groups_demiCercles[i_aux] ],0,0) + putName(algo1d.GetSubMesh(), "DemiCercles", i_aux, nro_cas) + putName(hypo1d, "groupDemiCercles", i_aux, nro_cas) + + _ = meshFacePeau.GroupOnGeom(verticesOutCercles[0], "THOR", SMESH.NODE) + _ = meshFacePeau.GroupOnGeom(verticesOutCercles[1], "THEX", SMESH.NODE) + + groupEdgesPeauFiss = meshFacePeau.GroupOnGeom(edgePeauFiss, "PeauFis", SMESH.EDGE) + + is_done = meshFacePeau.Compute() + text = "meshFacePeau.Compute" if is_done: logging.info(text+" OK") else: @@ -70,4 +101,7 @@ def insereFissureLongue_d (internalBoundary, meshFondFiss, meshFacePeau, meshFac logging.info(text) raise Exception(text) - return meshBoiteDefaut, group_faceFissInPipe, group_faceFissOutPipe + peauext_face = meshFacePeau.CreateEmptyGroup( SMESH.FACE, 'PEAUEXT' ) + _ = peauext_face.AddFrom( meshFacePeau.GetMesh() ) + + return meshFacePeau, groupEdgesPeauFiss