1 # -*- coding: utf-8 -*-
5 from geomsmesh import geompy
6 from geomsmesh import smesh
8 def construitMaillagePipe(gptsdisks, idisklim, nbsegCercle, nbsegRad):
10 maillage effectif du pipe
13 meshPipe = smesh.Mesh(None, "meshPipe")
14 fondFissGroup = meshPipe.CreateEmptyGroup(SMESH.EDGE, "FONDFISS")
15 nodesFondFissGroup = meshPipe.CreateEmptyGroup(SMESH.NODE, "nfondfis")
16 faceFissGroup = meshPipe.CreateEmptyGroup(SMESH.FACE, "fisInPi")
17 edgeFaceFissGroup = meshPipe.CreateEmptyGroup(SMESH.EDGE, "edgeFaceFiss")
18 edgeCircPipe0Group = meshPipe.CreateEmptyGroup(SMESH.EDGE, "edgeCircPipe0")
19 edgeCircPipe1Group = meshPipe.CreateEmptyGroup(SMESH.EDGE, "edgeCircPipe1")
20 faceCircPipe0Group = meshPipe.CreateEmptyGroup(SMESH.FACE, "faceCircPipe0")
21 faceCircPipe1Group = meshPipe.CreateEmptyGroup(SMESH.FACE, "faceCircPipe1")
23 mptsdisks = [] # vertices maillage de tous les disques
24 mEdges = [] # identifiants edges maillage fond de fissure
25 mEdgeFaces = [] # identifiants edges maillage edge face de fissure externe
26 mFaces = [] # identifiants faces maillage fissure
27 mVols = [] # identifiants volumes maillage pipe
30 for idisk in range(idisklim[0], idisklim[1]+1): # boucle sur les disques internes
32 # -----------------------------------------------------------------------
35 gptdsk = gptsdisks[idisk]
36 if idisk > idisklim[0]:
38 mptdsk = [] # vertices maillage d'un disque
39 for k in range(nbsegCercle):
42 for j, pt in enumerate(points):
46 coords = geompy.PointCoordinates(pt)
47 id = meshPipe.AddNode(coords[0], coords[1], coords[2])
50 mptsdisks.append(mptdsk)
52 # -----------------------------------------------------------------------
53 # --- groupes edges cercles debouchants
55 if idisk == idisklim[0]:
57 for k in range(nbsegCercle):
58 pts.append(mptdsk[k][-1])
60 for k in range(len(pts)):
62 idEdge = meshPipe.AddEdge([pts[k], pts[k1]])
64 edgeCircPipe0Group.Add(edges)
66 if idisk == idisklim[1]:
68 for k in range(nbsegCercle):
69 pts.append(mptdsk[k][-1])
71 for k in range(len(pts)):
73 idEdge = meshPipe.AddEdge([pts[k], pts[k1]])
75 edgeCircPipe1Group.Add(edges)
77 # -----------------------------------------------------------------------
78 # --- groupes faces debouchantes
80 if idisk == idisklim[0]:
82 for j in range(nbsegRad):
83 for k in range(nbsegCercle):
85 if k == nbsegCercle-1:
88 idf = meshPipe.AddFace([mptdsk[k][0], mptdsk[k][1], mptdsk[k1][1]]) # triangle
90 idf = meshPipe.AddFace([mptdsk[k][j], mptdsk[k][j+1], mptdsk[k1][j+1], mptdsk[k1][j]]) # quadrangle
92 faceCircPipe0Group.Add(faces)
94 if idisk == idisklim[1]:
96 for j in range(nbsegRad):
97 for k in range(nbsegCercle):
99 if k == nbsegCercle-1:
102 idf = meshPipe.AddFace([mptdsk[k][0], mptdsk[k][1], mptdsk[k1][1]]) # triangle
104 idf = meshPipe.AddFace([mptdsk[k][j], mptdsk[k][j+1], mptdsk[k1][j+1], mptdsk[k1][j]]) # quadrangle
106 faceCircPipe1Group.Add(faces)
108 # -----------------------------------------------------------------------
109 # --- mailles volumiques, groupes noeuds et edges de fond de fissure, groupe de face de fissure
111 if idisk == idisklim[0]:
116 nodesFondFissGroup.Add([mptdsk[0][0]])
118 ide = meshPipe.AddEdge([oldmpts[0][0], mptdsk[0][0]])
120 fondFissGroup.Add([ide])
121 nodesFondFissGroup.Add([mptdsk[0][0]])
122 ide2 = meshPipe.AddEdge([oldmpts[0][-1], mptdsk[0][-1]])
123 mEdgeFaces.append(ide2)
124 edgeFaceFissGroup.Add([ide2])
128 for j in range(nbsegRad):
129 idf = meshPipe.AddFace([oldmpts[0][j], mptdsk[0][j], mptdsk[0][j+1], oldmpts[0][j+1]])
130 faceFissGroup.Add([idf])
134 for k in range(nbsegCercle):
136 if k == nbsegCercle-1:
139 idv = meshPipe.AddVolume([mptdsk[k][j], mptdsk[k][j+1], mptdsk[k1][j+1],
140 oldmpts[k][j], oldmpts[k][j+1], oldmpts[k1][j+1]])
142 idv = meshPipe.AddVolume([mptdsk[k][j], mptdsk[k][j+1], mptdsk[k1][j+1], mptdsk[k1][j],
143 oldmpts[k][j], oldmpts[k][j+1], oldmpts[k1][j+1], oldmpts[k1][j]])
144 idVolCercle.append(idv)
145 idVols.append(idVolCercle)
147 mFaces.append(idFaces)
150 pipeFissGroup = meshPipe.CreateEmptyGroup( SMESH.VOLUME, 'PIPEFISS' )
151 nbAdd = pipeFissGroup.AddFrom( meshPipe.GetMesh() )
153 nb, new_mesh, new_group = meshPipe.MakeBoundaryElements(SMESH.BND_2DFROM3D, "pipeBoundaries")
154 edgesCircPipeGroup = [edgeCircPipe0Group, edgeCircPipe1Group]
156 meshPipeGroups = dict(fondFissGroup = fondFissGroup,
157 nodesFondFissGroup = nodesFondFissGroup,
158 faceFissGroup = faceFissGroup,
159 edgeFaceFissGroup = edgeFaceFissGroup,
160 edgeCircPipe0Group = edgeCircPipe0Group,
161 edgeCircPipe1Group = edgeCircPipe1Group,
162 faceCircPipe0Group = faceCircPipe0Group,
163 faceCircPipe1Group = faceCircPipe1Group,
164 pipeFissGroup = pipeFissGroup,
165 edgesCircPipeGroup = edgesCircPipeGroup
168 return (meshPipe, meshPipeGroups, edgesCircPipeGroup)