Salome HOME
arguments inutiles
[modules/smesh.git] / src / Tools / blocFissure / gmu / construitMaillagePipe.py
index fd85f592be7b24584f6bcbc8d97fcd6046510bdc..17b570594f6e898309df20f4b0213097e3ea2e22 100644 (file)
 
 import logging
 
-from .geomsmesh import geompy
-from .geomsmesh import smesh
 import SMESH
 
-def construitMaillagePipe(gptsdisks, idisklim, nbsegCercle, nbsegRad):
+from .geomsmesh import smesh
+from .putName import putName
+
+from .construitMaillagePipe_a import construitMaillagePipe_a
+from .construitMaillagePipe_b import construitMaillagePipe_b
+from .construitMaillagePipe_c import construitMaillagePipe_c
+from .construitMaillagePipe_d import construitMaillagePipe_d
+
+def construitMaillagePipe(gptsdisks, idisklim, nbsegCercle, nbsegRad, \
+                          nro_cas=None):
   """maillage effectif du pipe"""
   logging.info('start')
+  logging.info("nbsegCercle = %d, nbsegRad = %d", nbsegCercle, nbsegRad)
+  logging.info("idisklim[0] = %d, idisklim[1] = %d", idisklim[0], idisklim[1])
+
   meshPipe = smesh.Mesh(None, "meshPipe")
+  putName(meshPipe, "meshPipe", i_pref=nro_cas)
+
   fondFissGroup = meshPipe.CreateEmptyGroup(SMESH.EDGE, "FONDFISS")
   nodesFondFissGroup = meshPipe.CreateEmptyGroup(SMESH.NODE, "nfondfis")
   faceFissGroup = meshPipe.CreateEmptyGroup(SMESH.FACE, "fisInPi")
@@ -38,139 +50,56 @@ def construitMaillagePipe(gptsdisks, idisklim, nbsegCercle, nbsegRad):
   faceCircPipe0Group = meshPipe.CreateEmptyGroup(SMESH.FACE, "faceCircPipe0")
   faceCircPipe1Group = meshPipe.CreateEmptyGroup(SMESH.FACE, "faceCircPipe1")
 
+  mptdsk     = list() # vertices de chaque disque au fur et à mesure
   mptsdisks  = list() # vertices maillage de tous les disques
   mEdges     = list() # identifiants edges maillage fond de fissure
   mEdgeFaces = list() # identifiants edges maillage edge face de fissure externe
   mFaces     = list() # identifiants faces maillage fissure
   mVols      = list() # identifiants volumes maillage pipe
 
-  mptdsk = list()
   for idisk in range(idisklim[0], idisklim[1]+1): # boucle sur les disques internes
+    #logging.info(". Prise en compte du disque n°%d", idisk)
 
     # -----------------------------------------------------------------------
-    # --- points
-
-    gptdsk = gptsdisks[idisk]
-    if idisk > idisklim[0]:
-      oldmpts = mptdsk
-    mptdsk = list() # vertices maillage d'un disque
-    for k in range(nbsegCercle):
-      points = gptdsk[k]
-      mptids = list()
-      for j, pt in enumerate(points):
-        if j == 0 and k > 0:
-          id = mptdsk[0][0]
-        else:
-          coords = geompy.PointCoordinates(pt)
-          id = meshPipe.AddNode(coords[0], coords[1], coords[2])
-        mptids.append(id)
-      mptdsk.append(mptids)
-    mptsdisks.append(mptdsk)
+    # --- Les points
+
+    oldmpts = mptdsk
+    mptdsk = construitMaillagePipe_a(idisk, \
+                                      gptsdisks, nbsegCercle, \
+                                      meshPipe, mptsdisks)
 
     # -----------------------------------------------------------------------
-    # --- groupes edges cercles debouchants
-
-    if idisk == idisklim[0]:
-      pts = list()
-      for k in range(nbsegCercle):
-        pts.append(mptdsk[k][-1])
-      edges = list()
-      nb_pts = len(pts)
-      for k in range(nb_pts):
-        k1 = (k+1)%nb_pts
-        idEdge = meshPipe.AddEdge([pts[k], pts[k1]])
-        edges.append(idEdge)
-      edgeCircPipe0Group.Add(edges)
-
-    if idisk == idisklim[1]:
-      pts = list()
-      for k in range(nbsegCercle):
-        pts.append(mptdsk[k][-1])
-      edges = list()
-      nb_pts = len(pts)
-      for k in range(nb_pts):
-        k1 = (k+1)%nb_pts
-        idEdge = meshPipe.AddEdge([pts[k], pts[k1]])
-        edges.append(idEdge)
-      edgeCircPipe1Group.Add(edges)
+    # --- Les groupes des edges des cercles débouchants
+
+    if idisk in (idisklim[0],idisklim[1]):
+      construitMaillagePipe_b(idisk, \
+                              idisklim, nbsegCercle, \
+                              meshPipe, mptdsk, \
+                              edgeCircPipe0Group, edgeCircPipe1Group)
 
     # -----------------------------------------------------------------------
-    # --- groupes faces  debouchantes
-
-    if idisk == idisklim[0]:
-      faces = list()
-      for j in range(nbsegRad):
-        for k in range(nbsegCercle):
-          k1 = k+1
-          if k ==  nbsegCercle-1:
-            k1 = 0
-          if j == 0:
-            idf = meshPipe.AddFace([mptdsk[k][0], mptdsk[k][1], mptdsk[k1][1]]) # triangle
-          else:
-            idf = meshPipe.AddFace([mptdsk[k][j], mptdsk[k][j+1], mptdsk[k1][j+1], mptdsk[k1][j]]) # quadrangle
-          faces.append(idf)
-      faceCircPipe0Group.Add(faces)
-
-    if idisk == idisklim[1]:
-      faces = list()
-      for j in range(nbsegRad):
-        for k in range(nbsegCercle):
-          k1 = k+1
-          if k ==  nbsegCercle-1:
-            k1 = 0
-          if j == 0:
-            idf = meshPipe.AddFace([mptdsk[k][0], mptdsk[k][1], mptdsk[k1][1]]) # triangle
-          else:
-            idf = meshPipe.AddFace([mptdsk[k][j], mptdsk[k][j+1], mptdsk[k1][j+1], mptdsk[k1][j]]) # quadrangle
-          faces.append(idf)
-      faceCircPipe1Group.Add(faces)
+    # --- Les groupes des faces débouchantes
+
+    if idisk in (idisklim[0],idisklim[1]):
+      construitMaillagePipe_c(idisk, \
+                              idisklim, nbsegCercle, \
+                              meshPipe, mptdsk, nbsegRad, \
+                              faceCircPipe0Group, faceCircPipe1Group)
 
     # -----------------------------------------------------------------------
     # --- mailles volumiques, groupes noeuds et edges de fond de fissure, groupe de face de fissure
 
-    if idisk == idisklim[0]:
-      mEdges.append(0)
-      mEdgeFaces.append(0)
-      mFaces.append([0])
-      mVols.append([[0]])
-      nodesFondFissGroup.Add([mptdsk[0][0]])
-    else:
-      ide = meshPipe.AddEdge([oldmpts[0][0], mptdsk[0][0]])
-      mEdges.append(ide)
-      fondFissGroup.Add([ide])
-      nodesFondFissGroup.Add([mptdsk[0][0]])
-      ide2 = meshPipe.AddEdge([oldmpts[0][-1], mptdsk[0][-1]])
-      mEdgeFaces.append(ide2)
-      edgeFaceFissGroup.Add([ide2])
-      idFaces = list()
-      idVols = list()
-
-      for j in range(nbsegRad):
-        idf = meshPipe.AddFace([oldmpts[0][j], mptdsk[0][j], mptdsk[0][j+1], oldmpts[0][j+1]])
-        faceFissGroup.Add([idf])
-        idFaces.append(idf)
-
-        idVolCercle = list()
-        for k in range(nbsegCercle):
-          k1 = k+1
-          if k ==  nbsegCercle-1:
-            k1 = 0
-          if j == 0:
-            idv = meshPipe.AddVolume([mptdsk[k][j], mptdsk[k][j+1], mptdsk[k1][j+1], \
-                                      oldmpts[k][j], oldmpts[k][j+1], oldmpts[k1][j+1]])
-          else:
-            idv = meshPipe.AddVolume([mptdsk[k][j], mptdsk[k][j+1], mptdsk[k1][j+1], mptdsk[k1][j], \
-                                      oldmpts[k][j], oldmpts[k][j+1], oldmpts[k1][j+1], oldmpts[k1][j]])
-          idVolCercle.append(idv)
-        idVols.append(idVolCercle)
-
-      mFaces.append(idFaces)
-      mVols.append(idVols)
+    construitMaillagePipe_d(idisk, \
+                            idisklim, nbsegCercle, nbsegRad, \
+                            meshPipe, mptdsk, oldmpts, \
+                            fondFissGroup, edgeFaceFissGroup, faceFissGroup, \
+                            mEdges, mEdgeFaces, mFaces, mVols, nodesFondFissGroup)
+  # Bilan
 
   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]
 
   meshPipeGroups = dict(fondFissGroup = fondFissGroup, \
@@ -189,4 +118,5 @@ def construitMaillagePipe(gptsdisks, idisklim, nbsegCercle, nbsegRad):
     #text = "Arrêt rapide.\n"
     #logging.info(text)
     #raise Exception(text)
+
   return (meshPipe, meshPipeGroups, edgesCircPipeGroup)