Pushover Curve

Forum for OpenSees users to post questions, comments, etc. on the use of the OpenSees interpreter, OpenSees.exe

Moderators: silvia, selimgunay, Moderators

Post Reply
ankurjain
Posts: 55
Joined: Sun Aug 16, 2020 10:08 pm

Pushover Curve

Post by ankurjain » Tue Sep 01, 2020 10:59 pm

I request you to kindly comment on the curve that I got from a Pushover analysis with a Lumped Plasticity approach for a 3D 1 storey frame. Is this Pushover Curve right ?
Kindly Comment.

If the curve is not right than kindly tell me what am i doing wrong ?

Thanks in advance

https://drive.google.com/file/d/1R-pDGo ... sp=sharing

# lumpedmodel.tcl
logFile "lumpedmodel.log"
set systemTime [clock seconds]

puts "\n########################"
puts "# Analysis-Sequence 1 #"
puts "########################"

# Start timing of this analysis sequence
# --------------------------------------
set tStart [clock clicks -milliseconds]

# Start of model generation
# =========================

# Create ModelBuilder
# -------------------
model BasicBuilder -ndm 3 -ndf 6

# Define geometry
# ---------------
# NodeCoord.tcl

# Node tag xCrd yCrd zCrd ndf
node 1 +0.000000E+00 +0.000000E+00 +0.000000E+00 -ndf 6
node 2 +3.000000E+03 +0.000000E+00 +0.000000E+00 -ndf 6
node 3 +3.000000E+03 +3.000000E+03 +0.000000E+00 -ndf 6
node 4 +0.000000E+00 +3.000000E+03 +0.000000E+00 -ndf 6
node 5 +0.000000E+00 +3.000000E+03 +3.000000E+03 -ndf 6
node 6 +3.000000E+03 +3.000000E+03 +3.000000E+03 -ndf 6
node 7 +3.000000E+03 +0.000000E+00 +3.000000E+03 -ndf 6
node 8 +0.000000E+00 +0.000000E+00 +3.000000E+03 -ndf 6
node 10 +0.000000E+00 +0.000000E+00 +0.000000E+00 -ndf 6
node 11 +0.000000E+00 +0.000000E+00 +3.000000E+03 -ndf 6
node 12 +0.000000E+00 +3.000000E+03 +0.000000E+00 -ndf 6
node 13 +0.000000E+00 +3.000000E+03 +3.000000E+03 -ndf 6
node 14 +3.000000E+03 +0.000000E+00 +0.000000E+00 -ndf 6
node 15 +3.000000E+03 +0.000000E+00 +3.000000E+03 -ndf 6
node 16 +3.000000E+03 +3.000000E+03 +0.000000E+00 -ndf 6
node 17 +3.000000E+03 +3.000000E+03 +3.000000E+03 -ndf 6
node 18 +0.000000E+00 +3.000000E+03 +3.000000E+03 -ndf 6
node 19 +0.000000E+00 +0.000000E+00 +3.000000E+03 -ndf 6
node 20 +0.000000E+00 +0.000000E+00 +3.000000E+03 -ndf 6
node 21 +3.000000E+03 +0.000000E+00 +3.000000E+03 -ndf 6
node 22 +3.000000E+03 +0.000000E+00 +3.000000E+03 -ndf 6
node 23 +3.000000E+03 +3.000000E+03 +3.000000E+03 -ndf 6
node 24 +3.000000E+03 +3.000000E+03 +3.000000E+03 -ndf 6
node 25 +0.000000E+00 +3.000000E+03 +3.000000E+03 -ndf 6


# Define single point constraints
# -------------------------------
# SPConstraint.tcl

# SPC tag Dx Dy Dz Rx Ry Rz
fix 1 1 1 1 1 1 1
fix 2 1 1 1 1 1 1
fix 3 1 1 1 1 1 1
fix 4 1 1 1 1 1 1



# Define multi point constraints
# ------------------------------

# Equal DOF: 5_6: mNodeTag sNodeTag dof
equalDOF 5 6 1 2
# Equal DOF: 8_7: mNodeTag sNodeTag dof
equalDOF 8 7 1 2


# Materials.tcl

# Material "ElasticDefault": matTag E <eta> <Eneg>
uniaxialMaterial Elastic 1 +2.000000E+11 +0.000000E+00

# Material "ModiMkPinchingMat": matTag K0 alpha_Pos alpha_Neg My_Pos My_Neg Mpr_Pos Mpr_Neg alpha_Pinch Lamda_S Lamda_C Lamda_A Lamda_K c_S c_C c_A c_K theta_p_Pos theta_p_Neg theta_pc_Pos theta_pc_Neg Res_Pos Res_Neg theta_u_Pos theta_u_Neg D_Pos D_Neg <nFactor>
uniaxialMaterial ModIMKPinching 2 +3.930000E+13 +1.890000E-04 +1.890000E-04 +3.000000E+07 -3.000000E+07 +4.000000E-01 +4.000000E-01 +1.000000E-01 +1.000000E+00 +1.000000E+00 +1.000000E+00 +0.000000E+00 +1.000000E+00 +1.000000E+00 +1.000000E+00 +1.000000E+00 +5.790000E-03 +5.790000E-03 +5.250000E-01 +5.250000E-01 +1.050000E+00 +1.050000E+00 +1.000000E+02 +1.000000E+02 +0.000000E+00 +0.000000E+00 +0.000000E+00

# Sections.tcl

# Section "ElasticDefault": secTag E A Iz Iy G J <alphaY> <alphaZ>
section Elastic 1 +2.738613E+04 +2.090318E+05 +3.641193E+09 +3.641193E+09 +1.141089E+04 +6.153615E+09 +8.333333E-01 +8.333333E-01



# GeoTran type tag vec_xz
geomTransf Linear 1 +0.000000E+00 +1.000000E+00 +0.000000E+00
# GeoTran type tag vec_xz
geomTransf Linear 2 +0.000000E+00 +0.000000E+00 +1.000000E+00
# GeoTran type tag vec_xz
geomTransf Linear 3 +0.000000E+00 +0.000000E+00 +1.000000E+00
# GeoTran type tag vec_xz
geomTransf Linear 4 +0.000000E+00 +0.000000E+00 +1.000000E+00
# GeoTran type tag vec_xz
geomTransf Linear 5 +0.000000E+00 +0.000000E+00 +1.000000E+00


# Elements.tcl

# Element "ForceBeamColumn": eleTag NodeI NodeJ NIP secTag geoTranTag <-mass massDens> <-iter maxIters tol>
element forceBeamColumn 1 10 11 5 1 1 -mass +5.327300E-04 -iter 10 +1.000000E-12 -integration Lobatto

# Element "ForceBeamColumn": eleTag NodeI NodeJ NIP secTag geoTranTag <-mass massDens> <-iter maxIters tol>
element forceBeamColumn 2 12 13 5 1 1 -mass +5.327300E-04 -iter 10 +1.000000E-12 -integration Lobatto

# Element "ForceBeamColumn": eleTag NodeI NodeJ NIP secTag geoTranTag <-mass massDens> <-iter maxIters tol>
element forceBeamColumn 3 14 15 5 1 1 -mass +5.327300E-04 -iter 10 +1.000000E-12 -integration Lobatto

# Element "ForceBeamColumn": eleTag NodeI NodeJ NIP secTag geoTranTag <-mass massDens> <-iter maxIters tol>
element forceBeamColumn 4 16 17 5 1 1 -mass +5.327300E-04 -iter 10 +1.000000E-12 -integration Lobatto

# Element "ForceBeamColumn": eleTag NodeI NodeJ NIP secTag geoTranTag <-mass massDens> <-iter maxIters tol>
element forceBeamColumn 5 18 19 5 1 2 -mass +5.327300E-04 -iter 10 +1.000000E-12 -integration Lobatto

# Element "ForceBeamColumn": eleTag NodeI NodeJ NIP secTag geoTranTag <-mass massDens> <-iter maxIters tol>
element forceBeamColumn 6 20 21 5 1 3 -mass +5.327300E-04 -iter 10 +1.000000E-12 -integration Lobatto

# Element "ForceBeamColumn": eleTag NodeI NodeJ NIP secTag geoTranTag <-mass massDens> <-iter maxIters tol>
element forceBeamColumn 7 22 23 5 1 4 -mass +5.327300E-04 -iter 10 +1.000000E-12 -integration Lobatto

# Element "ForceBeamColumn": eleTag NodeI NodeJ NIP secTag geoTranTag <-mass massDens> <-iter maxIters tol>
element forceBeamColumn 8 24 25 5 1 5 -mass +5.327300E-04 -iter 10 +1.000000E-12 -integration Lobatto

# Element "Zerolength4Column": eleTag NodeI NodeJ -mat matTag1 matTag2 ... -dir dir1 dir2 ... <-orient x1 x2 x3 y1 y2 y3> <-doRayleigh flag>
element zeroLength 9 1 10 -mat 1 1 1 1 2 2 -dir 1 2 3 4 5 6 -orient +0.000000E+00 +0.000000E+00 +1.000000E+00 +1.000000E+00 +0.000000E+00 +0.000000E+00

# Element "Zerolength4Column": eleTag NodeI NodeJ -mat matTag1 matTag2 ... -dir dir1 dir2 ... <-orient x1 x2 x3 y1 y2 y3> <-doRayleigh flag>
element zeroLength 10 11 8 -mat 1 1 1 1 2 2 -dir 1 2 3 4 5 6 -orient +0.000000E+00 +0.000000E+00 +1.000000E+00 +1.000000E+00 +0.000000E+00 +0.000000E+00

# Element "Zerolength4Column": eleTag NodeI NodeJ -mat matTag1 matTag2 ... -dir dir1 dir2 ... <-orient x1 x2 x3 y1 y2 y3> <-doRayleigh flag>
element zeroLength 11 4 12 -mat 1 1 1 1 2 2 -dir 1 2 3 4 5 6 -orient +0.000000E+00 +0.000000E+00 +1.000000E+00 +1.000000E+00 +0.000000E+00 +0.000000E+00

# Element "Zerolength4Column": eleTag NodeI NodeJ -mat matTag1 matTag2 ... -dir dir1 dir2 ... <-orient x1 x2 x3 y1 y2 y3> <-doRayleigh flag>
element zeroLength 12 13 5 -mat 1 1 1 1 2 2 -dir 1 2 3 4 5 6 -orient +0.000000E+00 +0.000000E+00 +1.000000E+00 +1.000000E+00 +0.000000E+00 +0.000000E+00

# Element "Zerolength4Column": eleTag NodeI NodeJ -mat matTag1 matTag2 ... -dir dir1 dir2 ... <-orient x1 x2 x3 y1 y2 y3> <-doRayleigh flag>
element zeroLength 13 2 14 -mat 1 1 1 1 2 2 -dir 1 2 3 4 5 6 -orient +0.000000E+00 +0.000000E+00 +1.000000E+00 +1.000000E+00 +0.000000E+00 +0.000000E+00

# Element "Zerolength4Column": eleTag NodeI NodeJ -mat matTag1 matTag2 ... -dir dir1 dir2 ... <-orient x1 x2 x3 y1 y2 y3> <-doRayleigh flag>
element zeroLength 14 15 7 -mat 1 1 1 1 2 2 -dir 1 2 3 4 5 6 -orient +0.000000E+00 +0.000000E+00 +1.000000E+00 +1.000000E+00 +0.000000E+00 +0.000000E+00

# Element "Zerolength4Column": eleTag NodeI NodeJ -mat matTag1 matTag2 ... -dir dir1 dir2 ... <-orient x1 x2 x3 y1 y2 y3> <-doRayleigh flag>
element zeroLength 15 3 16 -mat 1 1 1 1 2 2 -dir 1 2 3 4 5 6 -orient +0.000000E+00 +0.000000E+00 +1.000000E+00 +1.000000E+00 +0.000000E+00 +0.000000E+00

# Element "Zerolength4Column": eleTag NodeI NodeJ -mat matTag1 matTag2 ... -dir dir1 dir2 ... <-orient x1 x2 x3 y1 y2 y3> <-doRayleigh flag>
element zeroLength 16 17 6 -mat 1 1 1 1 2 2 -dir 1 2 3 4 5 6 -orient +0.000000E+00 +0.000000E+00 +1.000000E+00 +1.000000E+00 +0.000000E+00 +0.000000E+00

# Element "Zerolength4Beam": eleTag NodeI NodeJ -mat matTag1 matTag2 ... -dir dir1 dir2 ... <-orient x1 x2 x3 y1 y2 y3> <-doRayleigh flag>
element zeroLength 17 5 18 -mat 1 1 1 1 2 2 -dir 1 2 3 4 5 6 -orient +0.000000E+00 -1.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E+00

# Element "Zerolength4Beam": eleTag NodeI NodeJ -mat matTag1 matTag2 ... -dir dir1 dir2 ... <-orient x1 x2 x3 y1 y2 y3> <-doRayleigh flag>
element zeroLength 18 19 8 -mat 1 1 1 1 2 2 -dir 1 2 3 4 5 6 -orient +0.000000E+00 -1.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E+00

# Element "Zerolength4Beam": eleTag NodeI NodeJ -mat matTag1 matTag2 ... -dir dir1 dir2 ... <-orient x1 x2 x3 y1 y2 y3> <-doRayleigh flag>
element zeroLength 19 8 20 -mat 1 1 1 1 2 2 -dir 1 2 3 4 5 6 -orient +1.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E+00

# Element "Zerolength4Beam": eleTag NodeI NodeJ -mat matTag1 matTag2 ... -dir dir1 dir2 ... <-orient x1 x2 x3 y1 y2 y3> <-doRayleigh flag>
element zeroLength 20 21 7 -mat 1 1 1 1 2 2 -dir 1 2 3 4 5 6 -orient +1.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E+00

# Element "Zerolength4Beam": eleTag NodeI NodeJ -mat matTag1 matTag2 ... -dir dir1 dir2 ... <-orient x1 x2 x3 y1 y2 y3> <-doRayleigh flag>
element zeroLength 21 7 22 -mat 1 1 1 1 2 2 -dir 1 2 3 4 5 6 -orient +0.000000E+00 +1.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E+00

# Element "Zerolength4Beam": eleTag NodeI NodeJ -mat matTag1 matTag2 ... -dir dir1 dir2 ... <-orient x1 x2 x3 y1 y2 y3> <-doRayleigh flag>
element zeroLength 22 23 6 -mat 1 1 1 1 2 2 -dir 1 2 3 4 5 6 -orient +0.000000E+00 +1.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E+00

# Element "Zerolength4Beam": eleTag NodeI NodeJ -mat matTag1 matTag2 ... -dir dir1 dir2 ... <-orient x1 x2 x3 y1 y2 y3> <-doRayleigh flag>
element zeroLength 23 6 24 -mat 1 1 1 1 2 2 -dir 1 2 3 4 5 6 -orient -1.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E+00

# Element "Zerolength4Beam": eleTag NodeI NodeJ -mat matTag1 matTag2 ... -dir dir1 dir2 ... <-orient x1 x2 x3 y1 y2 y3> <-doRayleigh flag>
element zeroLength 24 25 5 -mat 1 1 1 1 2 2 -dir 1 2 3 4 5 6 -orient -1.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E+00



# Define damping parameters
# -------------------------

# TimeSeries.tcl

# TimeSeries "LinearDefault": tsTag cFactor
timeSeries Linear 1 -factor +1.000000E+00


# Start of analysis generation
# ============================

# Get initial stiffness
# ---------------------
initialize

puts "o Analysis: Push"
# ~~~~~~~~~~~~~~~~~~~~~

# LoadPattern_2.tcl

# LoadPattern "Push": patternTag tsTag factor
pattern Plain 1 1 -fact +1.000000E+00 {
# Load nodeTag LoadValues
load 5 +1.000000E+03 +0.000000E+00 -1.000000E+04 +0.000000E+00 +0.000000E+00 +0.000000E+00
load 6 +0.000000E+00 +0.000000E+00 -1.000000E+04 +0.000000E+00 +0.000000E+00 +0.000000E+00
load 7 +0.000000E+00 +0.000000E+00 -1.000000E+04 +0.000000E+00 +0.000000E+00 +0.000000E+00
load 8 +1.000000E+03 +0.000000E+00 -1.000000E+04 +0.000000E+00 +0.000000E+00 +0.000000E+00

# SP nodeTag dofTag DispValue

# eleLoad eleTags beamUniform Wy Wz <Wx>

# eleLoad eleTags beamPoint Py Pz xL <Px>

# eleLoad eleTags selfWeight xFactor yFactor zFactor
}


# Recorder_2.tcl

# Node Recorder "DefoShape": fileName <nodeTag> dof respType
recorder Node -file Push_Node_DefoShape_Dsp.out -time -node 5 -dof 1 2 3 4 5 6 disp

# Node Recorder "Reactions": fileName <nodeTag> dof respType
recorder Node -file Push_Node_Reactions_RFrc.out -time -node 1 -dof 1 2 3 4 5 6 reaction


# Define analysis options
# AnalysisOptn_2.tcl

# AnalysisOptn "Pushover": Type: Static
# -------------------------------------
# Constraint Handler
constraints Penalty +1.000000E+16 +1.000000E+16
# DOF Numberer
numberer Plain
# System of Equations
system UmfPack -lvalueFact 10
# Convergence Test
test NormDispIncr +1.000000E-03 200 0 2
# Solution Algorithm
algorithm KrylovNewton -maxDim 100
# Integrator
integrator DisplacementControl 5 1 +1.000000E-01
# Analysis Type
analysis Static

# Record initial state of model
# -----------------------------
record

# Source user defined analysis script
# -----------------------------------
set numSteps 10
set sequ 1
set case 1
# set default parameters
set controlNode 5;
set controlDir 1;
set maxU 9.5;

# set the test parameters
set testType NormDispIncr
set testTol 1.0e-8;
set testIter 25;
test $testType $testTol $testIter

# set the algorithm parameters
set algoType KrylovNewton
algorithm $algoType

set currentDisp [nodeDisp $controlNode $controlDir]
set ok 0;

while {$ok == 0 && $currentDisp < $maxU} {
set ok [analyze 1]
if {$ok != 0} {
puts " "
puts [format "KrylovNewton failed (disp = %1.3e, load = %1.3e), try Newton" $currentDisp [getTime]]
algorithm Newton
test $testType $testTol $testIter 0
set ok [analyze 1]
algorithm $algoType
}

if {$ok != 0} {
puts " "
puts [format "Newton failed (disp = %1.3e, load = %1.3e), try Newton w/ iniCurrent" $currentDisp [getTime]]
algorithm Newton -initialCurrent
test $testType $testTol $testIter 0
set ok [analyze 1]
algorithm $algoType
}

if {$ok != 0} {
puts " "
puts [format "Newton w/ iniCurrent failed (disp = %1.3e, load = %1.3e), try Newton w/ ini" $currentDisp [getTime]]
algorithm Newton -initial
test $testType $testTol [expr 500 * $testIter] 0
set ok [analyze 1]
algorithm $algoType
test $testType $testTol $testIter 0
}

if {$ok != 0} {
puts " "
puts [format "Newton w/ ini failed (disp = %1.3e, load = %1.3e), try Newton w/ EnergyIncr Test" $currentDisp [getTime]]
algorithm Newton
test EnergyIncr 1.0e-5 $testIter 0
set ok [analyze 1]
algorithm $algoType
test $testType $testTol $testIter 0
}

if {$ok != 0} {
puts " "
puts [format "Newton w/ EnergyIncr Test failed (disp = %1.3e, load = %1.3e), try Newton w/ initial and EnergyIncr Test" $currentDisp [getTime]]
algorithm Newton -initial
test EnergyIncr 1.0e-5 [expr 500 * $testIter] 0
set ok [analyze 1]
algorithm $algoType
test $testType $testTol $testIter 0
}
set currentDisp [nodeDisp $controlNode $controlDir]
}

if {$ok != 0} {
puts " "
puts "---------------------------------------------------------------------------"
puts [format "AnalysisCase(%i) failed (disp = %1.3e, load = %1.3e)" $case $currentDisp [getTime]]
puts "---------------------------------------------------------------------------"
puts " "
}

# Stop timing of this analysis sequence
# -------------------------------------
set tStop [clock clicks -milliseconds]
puts "o Time taken: [expr ($tStop-$tStart)/1000.0] sec"

# Clean up
# --------
wipe
set systemTime [clock seconds]
puts "\n==============================================================================="
puts "Finished OpenSees analysis: [clock format $systemTime -format "%d-%b-%Y %H:%M:%S"]"
puts "==============================================================================="
exit

selimgunay
Posts: 913
Joined: Mon Sep 09, 2013 8:50 pm
Location: University of California, Berkeley

Re: Pushover Curve

Post by selimgunay » Wed Sep 02, 2020 12:06 am

The shape looks reasonable.

ankurjain
Posts: 55
Joined: Sun Aug 16, 2020 10:08 pm

Re: Pushover Curve

Post by ankurjain » Wed Sep 02, 2020 3:31 am

selimgunay wrote:
Wed Sep 02, 2020 12:06 am
The shape looks reasonable.
But when I compared the same with the model that I made in SAP2000, it is totally different....

I may be doing something wrong in Pushover .... Kindly once see my code ...I will be thankful to you.

mhscott
Posts: 872
Joined: Tue Jul 06, 2004 3:38 pm
Location: Corvallis, Oregon USA
Contact:

Re: Pushover Curve

Post by mhscott » Wed Sep 02, 2020 7:24 am

You have to determine what is "right" or "reasonable" with your results from OpenSees and SAP. No one else can, or should, do that for you.

selimgunay
Posts: 913
Joined: Mon Sep 09, 2013 8:50 pm
Location: University of California, Berkeley

Re: Pushover Curve

Post by selimgunay » Wed Sep 02, 2020 11:54 pm

If you think the SAP2000 model is correct, you can start by comparing the initial stiffness of the pushover curves from OpenSees and SAP2000. If they are not matching, you should fix that first.

ankurjain
Posts: 55
Joined: Sun Aug 16, 2020 10:08 pm

Re: Pushover Curve

Post by ankurjain » Thu Sep 03, 2020 9:23 am

selimgunay wrote:
Wed Sep 02, 2020 11:54 pm
If you think the SAP2000 model is correct, you can start by comparing the initial stiffness of the pushover curves from OpenSees and SAP2000. If they are not matching, you should fix that first.
ok will try to do that .. Thanks

Post Reply