# Duplicate nodes or/and elements import salome salome.salome_init_without_session() import SMESH from salome.geom import geomBuilder from salome.smesh import smeshBuilder geom_builder = geomBuilder.New() smesh_builder = smeshBuilder.New() # Create a box box = geom_builder.MakeBox(0., 0., 0., 100., 200., 300.) # Define hexa mesh on a box mesh = smesh_builder.Mesh(box, "Mesh") mesh.Segment().NumberOfSegments(7) mesh.Quadrangle() mesh.Hexahedron() # Compute mesh if not mesh.Compute(): raise Exception("Error when computing Mesh") # Duplicate nodes only # Nodes to duplicate nodes1 = mesh.CreateEmptyGroup( SMESH.NODE, 'nodes1' ) nodes1.Add( [ 119, 125, 131, 137 ] ) # Group of faces to replace nodes with new ones faces1 = mesh.CreateEmptyGroup( SMESH.FACE, 'faces1' ) faces1.Add( [ 144, 151, 158 ] ) # Duplicate nodes print("\nMesh before the first nodes duplication:") print("Nodes : ", mesh.NbNodes()) print("Edges : ", mesh.NbEdges()) print("Quadrangles : ", mesh.NbQuadrangles()) groupOfCreatedNodes = mesh.DoubleNodeGroup(nodes1, faces1, theMakeGroup=True) print("New nodes:", groupOfCreatedNodes.GetIDs()) print("\nMesh after the first nodes duplication:") print("Nodes : ", mesh.NbNodes()) print("Edges : ", mesh.NbEdges()) print("Quadrangles : ", mesh.NbQuadrangles()) # Duplicate nodes and border elements # Edges to duplicate edges = mesh.CreateEmptyGroup( SMESH.EDGE, 'edges' ) edges.Add( [ 32, 33, 34 ] ) # Nodes not to duplicate nodes2 = mesh.CreateEmptyGroup( SMESH.NODE, 'nodes2' ) nodes2.Add( [ 35, 38 ] ) # Group of faces to replace nodes with new ones faces2 = mesh.CreateEmptyGroup( SMESH.FACE, 'faces2' ) faces2.Add( [ 141, 148, 155 ] ) # Duplicate nodes print("\nMesh before the second nodes duplication:") print("Nodes : ", mesh.NbNodes()) print("Edges : ", mesh.NbEdges()) print("Quadrangles : ", mesh.NbQuadrangles()) groupOfNewEdges = mesh.DoubleNodeElemGroup( edges, nodes2, faces2, theMakeGroup=True ) print("New edges:", groupOfNewEdges.GetIDs()) print("\nMesh after the second nodes duplication:") print("Nodes : ", mesh.NbNodes()) print("Edges : ", mesh.NbEdges()) print("Quadrangles : ", mesh.NbQuadrangles()) # Duplicate elements only # Duplicate all faces and make a group of new faces. # If a mesh is given to DoubleElements(), all elements of the greatest dimension are duplicated newFacesGroup = mesh.DoubleElements( mesh, "newFacesGroup" ) # Duplicate edges contained in the group "edges" and add new edges to this group mesh.DoubleElements( edges, edges.GetName() ) # Duplicate two first edges of the mesh mesh.DoubleElements([ 1, 2 ])