Problems with eleLoad

Forum for asking and answering questions related to use of the OpenSeesPy module

Moderators: silvia, selimgunay, Moderators

Post Reply
jazzieman
Posts: 6
Joined: Thu Jul 09, 2020 4:18 pm
Location: Mayaguez, Puerto Rico

Problems with eleLoad

Post by jazzieman »

I'm currently working on a 3D RC frame model on openseespy. I'm having several problems which I've managed to resolve some of them. Now, while trying correct and error I became aware that when I use the command eleLoad to apply a load to a beam or column (with type 'beamUniform' for example) I get zeros on the nodes/elements responses. For the sake of verifying if the error is within my code, I used the example code 5 in of the structural examples (14.1.5. Reinforced Concrete Frame Gravity Analysis, https://openseespydoc.readthedocs.io/en ... avity.html) and changed the loads applied the nodes for a 'beamUniform' on it works. Now, if I change the 2D model to a 3D one, I get zero reactions or forces at nodes/elements.

Code: Select all

print("==========================")

from openseespy.opensees import *
import openseespy.postprocessing.Get_Rendering as opsplt
wipe()
print("Starting RCFrameGravity example")

# Create ModelBuilder (with two-dimensions and 3 DOF/node)
model('basic', '-ndm', 3, '-ndf', 6)

# Create nodes
# ------------

# Set parameters for overall model geometry
width = 360.0
height = 144.0

# Create nodes
#    tag, X, Y
node(1, 0.0, 0.0, 0.0)
node(2, width, 0.0, 0.0)
node(3, 0.0, height, 0.0)
node(4, width, height, 0.0)

# Fix supports at base of columns
#   tag, DX, DY, RZ
fix(1, 1, 1, 1, 1, 1, 1)
fix(2, 1, 1, 1, 1, 1, 1)

# Define materials for nonlinear columns
# ------------------------------------------
# CONCRETE                   tag  f'c    ec0    f'cu   ecu
# Core concrete (confined)
uniaxialMaterial('Concrete01', 1, -6.0, -0.004, -5.0, -0.014)

# Cover concrete (unconfined)
uniaxialMaterial('Concrete01', 2, -5.0, -0.002, 0.0, -0.006)

# STEEL
# Reinforcing steel
fy = 60.0;  # Yield stress
E = 30000.0;  # Young's modulus
#                         tag  fy E0    b
uniaxialMaterial('Steel01', 3, fy, E, 0.01)

# Define cross-section for nonlinear columns
# ------------------------------------------

#  some parameters
colWidth = 15
colDepth = 24

cover = 1.5
As = 0.60  # area of no. 7 bars

# some variables derived from the parameters
y1 = colDepth / 2.0
z1 = colWidth / 2.0

section('Fiber', 1, '-GJ', 1e100)

# Create the concrete core fibers
patch('rect', 1, 10, 1, cover - y1, cover - z1, y1 - cover, z1 - cover)

# Create the concrete cover fibers (top, bottom, left, right)
patch('rect', 2, 10, 1, -y1, z1 - cover, y1, z1)
patch('rect', 2, 10, 1, -y1, -z1, y1, cover - z1)
patch('rect', 2, 2, 1, -y1, cover - z1, cover - y1, z1 - cover)
patch('rect', 2, 2, 1, y1 - cover, cover - z1, y1, z1 - cover)

# Create the reinforcing fibers (left, middle, right)
layer('straight', 3, 3, As, y1 - cover, z1 - cover, y1 - cover, cover - z1)
layer('straight', 3, 2, As, 0.0, z1 - cover, 0.0, cover - z1)
layer('straight', 3, 3, As, cover - y1, z1 - cover, cover - y1, cover - z1)

# Define column elements
# ----------------------

# Geometry of column elements
#                tag

geomTransf('PDelta', 1, *[0,0,1])

# Number of integration points along length of element
np = 5

# Lobatto integratoin
beamIntegration('Lobatto', 1, 1, np)

# Create the coulumns using Beam-column elements
#               e            tag ndI ndJ transfTag integrationTag
eleType = 'forceBeamColumn'
element(eleType, 1, 1, 3, 1, 1)
element(eleType, 2, 2, 4, 1, 1)

# Define beam elment
# -----------------------------

# Geometry of column elements
#                tag
geomTransf('Linear', 2, *[0,0,1])


#  a parameter for the axial load
P = 180.0;  # 10% of axial capacity of columns  

# Create the beam element                       
#                           tag, ndI, ndJ, A,     E,      G,     J,    Iy,   Iz,   transfTag
element('elasticBeamColumn', 3,   3,   4, 360.0, 4030.0, 1733, 1e100, 8640, 8640.0, 2)


# Define gravity loads
# --------------------


# Create a Plain load pattern with a Linear TimeSeries
timeSeries('Linear', 1)
pattern('Plain', 1, 1)

eleLoad('ele', 3, '-type', '-beamUniform', 2*P/width, 0.)
# Create nodal loads at nodes 3 & 4
#    nd  FX,  FY, MZ
# load(3, 0.0, -P, 0.0)
# load(4, 0.0, -P, 0.0)

# ------------------------------
# End of model generation
# ------------------------------


# ------------------------------
# Start of analysis generation
# ------------------------------

# Create the system of equation, a sparse solver with partial pivoting
system('BandGeneral')

# Create the constraint handler, the transformation method
constraints('Transformation')

# Create the DOF numberer, the reverse Cuthill-McKee algorithm
numberer('RCM')

# Create the convergence test, the norm of the residual with a tolerance of
# 1e-12 and a max number of iterations of 10
test('NormDispIncr', 1.0e-12, 10, 3)

# Create the solution algorithm, a Newton-Raphson algorithm
algorithm('Newton')

# Create the integration scheme, the LoadControl scheme using steps of 0.1
integrator('LoadControl', 0.1)

# Create the analysis object
analysis('Static')

# ------------------------------
# End of analysis generation
# ------------------------------


# ------------------------------
# Finally perform the analysis
# ------------------------------

# perform the gravity load analysis, requires 10 steps to reach the load level
analyze(10)

# Print out the state of nodes 3 and 4
# print node 3 4

# Print out the state of element 1
# print ele 1
reactions()
u3 = nodeDisp(3, 2)
u4 = nodeDisp(4, 2)

results = open('results.out', 'a+')

if abs(u3 + 0.0183736) < 1e-6 and abs(u4 + 0.0183736) < 1e-6:
    results.write('PASSED : RCFrameGravity.py\n')
    print("Passed!")
else:
    results.write('FAILED : RCFrameGravity.py\n')
    print("Failed!")

results.close()

print("==========================")

# Display the active model with node tags only
opsplt.plot_model('nodes','elements')
Now, for the code to run (for the 3D version) I had to eliminate the hyphen before 'ele' at the eleLoad command, otherwise I get a singular matrix error (viewtopic.php?f=12&t=67585&p=116955#p116955). Don't know what I'm doing wrong. Any help would be appreciated.
Alan Rivera
Ph.D. Candidate Structural Engineering
University of Puerto Rico, Mayaguez Campus
mhscott
Posts: 880
Joined: Tue Jul 06, 2004 3:38 pm
Location: Corvallis, Oregon USA
Contact:

Re: Problems with eleLoad

Post by mhscott »

Please try a simply-supported elastic beam with distributed load and see if you can get that to work.
jazzieman
Posts: 6
Joined: Thu Jul 09, 2020 4:18 pm
Location: Mayaguez, Puerto Rico

Re: Problems with eleLoad

Post by jazzieman »

Professor, thanks for the reply. I tried a simply supported beam (in 3D) and still getting zero response.

Code: Select all

from openseespy.opensees import *
import openseespy.postprocessing.Get_Rendering as opsplt
wipe()


# Create ModelBuilder (with 3 dimensions and 6 DOF/node)
model('basic', '-ndm', 3, '-ndf', 6)

# Set parameters for overall model geometry
width = 360.0


# Create nodes
#    tag, X, Y, Z
node(1, 0.0, 0.0, 0.0)
node(2, width, 0.0, 0.0)


# Boundary Conditions
fix(1, 1, 1, 1, 0, 0, 0)
fix(2, 0, 1, 0, 0, 0, 0)

# Define materials for nonlinear columns
# ------------------------------------------
# CONCRETE                   tag  f'c    ec0    f'cu   ecu
# Core concrete (confined)
uniaxialMaterial('Concrete01', 1, -6.0, -0.004, -5.0, -0.014)

# Cover concrete (unconfined)
uniaxialMaterial('Concrete01', 2, -5.0, -0.002, 0.0, -0.006)

# STEEL
# Reinforcing steel
fy = 60.0;  # Yield stress
E = 30000.0;  # Young's modulus
#                         tag  fy E0    b
uniaxialMaterial('Steel01', 3, fy, E, 0.01)

# Define cross-section
# ------------------------------------------

#  some parameters
colWidth = 15
colDepth = 24

cover = 1.5
As = 0.60  # area of no. 7 bars

# some variables derived from the parameters
y1 = colDepth / 2.0
z1 = colWidth / 2.0

section('Fiber', 1, '-GJ', 1e10)

# Create the concrete core fibers
patch('rect', 1, 10, 1, cover - y1, cover - z1, y1 - cover, z1 - cover)

# Create the concrete cover fibers (top, bottom, left, right)
patch('rect', 2, 10, 1, -y1, z1 - cover, y1, z1)
patch('rect', 2, 10, 1, -y1, -z1, y1, cover - z1)
patch('rect', 2, 2, 1, -y1, cover - z1, cover - y1, z1 - cover)
patch('rect', 2, 2, 1, y1 - cover, cover - z1, y1, z1 - cover)

# Create the reinforcing fibers (left, middle, right)
layer('straight', 3, 3, As, y1 - cover, z1 - cover, y1 - cover, cover - z1)
layer('straight', 3, 2, As, 0.0, z1 - cover, 0.0, cover - z1)
layer('straight', 3, 3, As, cover - y1, z1 - cover, cover - y1, cover - z1)

# Transformation:
geomTransf('Linear', 1, *[0,0,1])

# Distributed load:
W = 180.0/width;

# Create the beam element                       
#                           tag, ndI, ndJ, A,     E,      G,     J,    Iy,   Iz,   transfTag
element('elasticBeamColumn', 1,   1,   2, 360.0, 4030.0, 1733, 1e10, 8640, 8640.0, 1)


# Create a Plain load pattern with a Linear TimeSeries
timeSeries('Linear', 1)
pattern('Plain', 1, 1)

# Define gravity loads
# --------------------
eleLoad('ele', 1, '-type', '-beamUniform', W, 0.)


# ------------------------------
# End of model generation
# ------------------------------


# ------------------------------
# Start of analysis generation
# ------------------------------

# Create the system of equation, a sparse solver with partial pivoting
system('BandGeneral')

# Create the constraint handler, the transformation method
constraints('Transformation')

# Create the DOF numberer, the reverse Cuthill-McKee algorithm
numberer('RCM')

# Create the convergence test, the norm of the residual with a tolerance of
# 1e-12 and a max number of iterations of 10
test('NormDispIncr', 1.0e-12, 10, 3)

# Create the solution algorithm, a Newton-Raphson algorithm
algorithm('Newton')

# Create the integration scheme, the LoadControl scheme using steps of 0.1
integrator('LoadControl', 0.1)

# Create the analysis object
analysis('Static')

# ------------------------------
# End of analysis generation
# ------------------------------


# ------------------------------
# Finally perform the analysis
# ------------------------------

# perform the gravity load analysis, requires 10 steps to reach the load level
analyze(10)

# Obtain reactions:
reactions()


# Display the active model with node tags only
opsplt.plot_model('nodes','elements')
Alan Rivera
Ph.D. Candidate Structural Engineering
University of Puerto Rico, Mayaguez Campus
mhscott
Posts: 880
Joined: Tue Jul 06, 2004 3:38 pm
Location: Corvallis, Oregon USA
Contact:

Re: Problems with eleLoad

Post by mhscott »

Thanks for the elastic beam.
  • You'll need to use -ele instead of ele
  • Your boundary conditions are not sufficient. You have node 1 as 1 1 1 0 0 0 and node 2 as 0 1 0 0 0 0 - you need to fix torsion at one and and also out of plane translation at node 2 - so for node 1 use 1 1 1 1 0 0 and for node 2 use 0 1 1 0 0 0
mhscott
Posts: 880
Joined: Tue Jul 06, 2004 3:38 pm
Location: Corvallis, Oregon USA
Contact:

Re: Problems with eleLoad

Post by mhscott »

In the RC frame script, GJ is set to 1e100 for the section and the elastic beam!!! Reduce that to something reasonable. Also, use -ele.
jazzieman
Posts: 6
Joined: Thu Jul 09, 2020 4:18 pm
Location: Mayaguez, Puerto Rico

Re: Problems with eleLoad

Post by jazzieman »

Thanks professor, that worked!! I'm still having problems with my 3D RC frame model, but they are related to another topic. Again, thanks!!
Alan Rivera
Ph.D. Candidate Structural Engineering
University of Puerto Rico, Mayaguez Campus
Post Reply