Hello,
I am setting up the geometry of a soil model using OpenSeesPy, defining consecutive layered rectangles for subsequent meshing and iteratively defining the vertices of the recatngles and node tags.
Running the code at the bottom of the post results in the error "Domain::addNode - node with tag 5 already exists in model" during iteration 2 (jj=1), though node coordinates for Node 5 seem to be correct and the node tag 5 does not seem to be assigned in the first iteration (jj=0) - please see screen text output below:
Iteration 1 (jj=0)
Node tags:
1 2 3 4
[1, -550, -25.0]
[2, -550, 0.0]
[3, -450.0, 0.0]
[4, -450.0, -25.0]
Iteration 2 (jj=1)
Node tags:
5 6 7 8
[5, -550, -50.0]
[6, -550, -25.0]
[7, -450.0, -25.0]
[8, -450.0, -50.0]
Could anyone help me understand what I am doing wrong?
Regards.
Code:
# ==============================================================================
# IMPORTS
# ==============================================================================
import openseespy.opensees as op
#from random import random
# ==============================================================================
# DEFINING GEOMETRIC PARAMETERS
# ==============================================================================
# Geometric parameters are expressed in [m]
H=300
# Width of left basin side
Lol=200
# Width of right basin side
Lor=500
# Internal semi-width
Li=150
# Defining height of elementary layer
Dz=25
# Defining depths of stratigraphic interfaces
n_int=int(H/Dz+1)
z_int=np.linspace(0,-H,n_int)
print(z_int)
# Defining number of layers in soil deposit
n_lay=len(z_int)-1
# # ==============================================================================
# # DEFINING GEOMETRY
# # ==============================================================================
op.wipe()
# nodes_dict = dict()
# For each layer, define the meshing rectangle
for ii in range(n_lay):
#print(ii)
# Part 1:
X11=-(Li+2*Lol)
X21=-(Li+2*Lol)
X31=-(Li+1.5*Lol)
X41=-(Li+1.5*Lol)
Y11=z_int[ii+1]
Y21=z_int[ii]
Y31=z_int[ii]
Y41=z_int[ii+1]
print(4*ii+1,4*ii+2,4*ii+3,4*ii+4)
# Defining nodes
if ii<1:
print('Layer ',ii+1)
print([4*ii+1,X11,Y11])
print([4*ii+2,X21,Y21])
print([4*ii+3,X31,Y31])
print([4*ii+4,X41,Y41])
print('')
op.node(4*ii+1,X11,Y11)
op.node(4*ii+2,X21,Y21)
op.node(4*ii+3,X31,Y31)
op.node(4*ii+4,X41,Y41)
else:
print('Layer ',ii+1)
print([4*ii+1,X11,Y11])
print([4*ii+2,X21,Y21])
print([4*ii+3,X31,Y31])
print([4*ii+4,X41,Y41])
print('')
op.node(4*ii+1,X11,Y11)
op.node(4*ii+4,X41,Y41)
# Defining mesh size
c = Dz/5
# Defining mesh
# tag Npts nodes type dof size
op.mesh('line',4*ii+1, 2, *[4*ii+1,4*ii+2], 0, 2, c)
op.mesh('line',4*ii+2, 2, *[4*ii+2,4*ii+3], 0, 2, c)
op.mesh('line',4*ii+3, 2, *[4*ii+3,4*ii+4], 0, 2, c)
op.mesh('line',4*ii+4, 2, *[4*ii+4,4*ii+1], 0, 2, c)
Meshing error during iterative definition of nodes
Moderators: silvia, selimgunay, Moderators
Re: Meshing error during iterative definition of nodes
The mesh command creates a node with tag 5
Re: Meshing error during iterative definition of nodes
Hello Michael, thanks for clarifying. If I understand correctly, I guess I should define all the container shapes (rectangles, rhombuses) defining the geometry recursively in a first step and subsequently perform the meshing. The challenging part seems to be figuring out how many nodes will be generated by meshing within each shape (these are variable in size) to assign tags to the meshing-generated nodes. Apologies if these issues are trivial but I am a newby and have not been able to find examples involving recursive mesh generation.
Re: Meshing error during iterative definition of nodes
Alternatively, I could implement the meshing algorithm for each of the boundary shapes and retrieve the set of nodes generated during meshing, then start with a new boundary by increasing the node tag by 1. I'll see if I am able to retrieve existing nodes (perhaps using a dictionary).