1 # -*- coding: utf-8 -*-
5 from geomsmesh import geompy
6 from geomsmesh import geomPublish
7 from geomsmesh import geomPublishInFather
9 from geomsmesh import smesh
10 from salome.smesh import smeshBuilder
13 from putName import putName
15 def mailleFacesPeau(partitionsPeauFissFond, idFillingFromBout, facesDefaut,
16 facesPeaux, edCircPeau, ptCircPeau, gpedgeBord, gpedgeVifs, edFissPeau,
17 bordsLibres, grpEdgesPeauFissureExterne, grpAretesVives,
18 edgesCircPipeGroup, dmoyen, rayonPipe, nbsegRad):
20 maillage faces de peau
23 nbFacesFilling = len(partitionsPeauFissFond)
24 boutFromIfil = [None for i in range(nbFacesFilling)]
25 if idFillingFromBout[0] != idFillingFromBout[1]: # repérage des extremites du pipe quand elles débouchent sur des faces différentes
26 boutFromIfil[idFillingFromBout[0]] = 0
27 boutFromIfil[idFillingFromBout[1]] = 1
29 logging.debug("---------------------------- maillage faces de peau --------------")
31 for ifil in range(nbFacesFilling):
33 if partitionsPeauFissFond[ifil] is None: # face de peau maillage sain intacte
35 logging.debug("meshFacePeau %d intacte", ifil)
36 # --- edges de bord de la face de filling
37 filling = facesDefaut[ifil]
38 edgesFilling = geompy.ExtractShapes(filling, geompy.ShapeType["EDGE"], False)
39 groupEdgesBordPeau = geompy.CreateGroup(filling, geompy.ShapeType["EDGE"])
40 geompy.UnionList(groupEdgesBordPeau, edgesFilling)
41 geomPublishInFather(initLog.debug,filling, groupEdgesBordPeau , "EdgesBords")
43 meshFacePeau = smesh.Mesh(facesDefaut[ifil])
45 algo1d = meshFacePeau.UseExisting1DElements(geom=groupEdgesBordPeau)
46 hypo1d = algo1d.SourceEdges([ bordsLibres ],0,0)
47 putName(algo1d.GetSubMesh(), "bordsLibres", ifil)
48 putName(algo1d, "algo1d_bordsLibres", ifil)
49 putName(hypo1d, "hypo1d_bordsLibres", ifil)
53 logging.debug("meshFacePeau %d coupée par la fissure", ifil)
54 facePeau = facesPeaux[ifil] # pour chaque face : la face de peau finale a mailler (percée des faces débouchantes)
55 edgesCircPeau = edCircPeau[ifil] # pour chaque face de peau : [subshape edge circulaire aux débouchés du pipe]
56 verticesCircPeau = ptCircPeau[ifil] # pour chaque face de peau : [subshape point sur edge circulaire aux débouchés du pipe]
57 groupEdgesBordPeau = gpedgeBord[ifil] # pour chaque face de peau : groupe subshape des edges aux bords liés à la partie saine
58 bordsVifs = gpedgeVifs[ifil] # pour chaque face de peau : groupe subshape des edges aux bords correspondant à des arêtes vives
59 edgesFissurePeau = edFissPeau[ifil] # pour chaque face de peau : [subshape edge en peau des faces de fissure externes]
61 meshFacePeau = smesh.Mesh(facePeau)
63 algo1d = meshFacePeau.UseExisting1DElements(geom=groupEdgesBordPeau)
64 hypo1d = algo1d.SourceEdges([ bordsLibres ],0,0)
65 putName(algo1d.GetSubMesh(), "bordsLibres", ifil)
66 putName(algo1d, "algo1d_bordsLibres", ifil)
67 putName(hypo1d, "hypo1d_bordsLibres", ifil)
69 algo1d = meshFacePeau.UseExisting1DElements(geom=geompy.MakeCompound(edgesFissurePeau))
70 hypo1d = algo1d.SourceEdges([ grpEdgesPeauFissureExterne ],0,0)
71 putName(algo1d.GetSubMesh(), "edgePeauFiss", ifil)
72 putName(algo1d, "algo1d_edgePeauFiss", ifil)
73 putName(hypo1d, "hypo1d_edgePeauFiss", ifil)
75 if bordsVifs is not None:
76 algo1d = meshFacePeau.UseExisting1DElements(geom=bordsVifs)
77 hypo1d = algo1d.SourceEdges([ grpAretesVives ],0,0)
78 putName(algo1d.GetSubMesh(), "bordsVifs", ifil)
79 putName(algo1d, "algo1d_bordsVifs", ifil)
80 putName(hypo1d, "hypo1d_bordsVifs", ifil)
82 for i, edgeCirc in enumerate(edgesCircPeau):
83 if edgeCirc is not None:
84 algo1d = meshFacePeau.UseExisting1DElements(geom=edgeCirc)
85 if boutFromIfil[ifil] is None:
86 hypo1d = algo1d.SourceEdges([ edgesCircPipeGroup[i] ],0,0)
88 hypo1d = algo1d.SourceEdges([ edgesCircPipeGroup[boutFromIfil[ifil]] ],0,0)
90 putName(algo1d.GetSubMesh(), name, ifil)
91 putName(algo1d, "algo1d_" + name, ifil)
92 putName(hypo1d, "hypo1d_" + name, ifil)
94 algo2d = meshFacePeau.Triangle(algo=smeshBuilder.NETGEN_1D2D)
95 hypo2d = algo2d.Parameters()
96 hypo2d.SetMaxSize( dmoyen )
97 hypo2d.SetOptimize( 1 )
98 hypo2d.SetFineness( 2 )
99 hypo2d.SetMinSize( rayonPipe/float(nbsegRad) )
100 hypo2d.SetQuadAllowed( 0 )
101 putName(algo2d.GetSubMesh(), "facePeau", ifil)
102 putName(algo2d, "algo2d_facePeau", ifil)
103 putName(hypo2d, "hypo2d_facePeau", ifil)
105 isDone = meshFacePeau.Compute()
106 logging.info("meshFacePeau %d fini", ifil)
107 GroupFaces = meshFacePeau.CreateEmptyGroup( SMESH.FACE, "facePeau%d"%ifil )
108 nbAdd = GroupFaces.AddFrom( meshFacePeau.GetMesh() )
109 meshesFacesPeau.append(meshFacePeau)
111 return meshesFacesPeau