Adaptive pushover script

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

Moderators: silvia, selimgunay, Moderators

Post Reply
sumitanand
Posts: 6
Joined: Thu Jan 13, 2011 1:39 pm
Location: Beca Ltd

Adaptive pushover script

Post by sumitanand »

Hello,

I am trying to conduct an adaptive pushover on a simple three storey, reinforced concrete frame. The upper two storey are modeled as elastic and the bottom storey as inelastic. Can you please review the following script and comment if I have it right? I am not very confident, as the plot of roof disp vs. base shear shows the curve go horizontal at 200mm roof displacement (i.e. no increase in load factor)! I am pushing the frame to a total of 400mm roof displacement.

Other question:
- Is it ok to use the 'linear' algorithm to solve a nonlinear model? The 'Newton' or 'ModifiedNewton' were not converging. So I tried 'Linear' and obtained full convergence with results being exactly the same up to the point of convergence for other nonlinear algorithms. Perhaps you can point me to some theory, as I am not sure where the 'Linear' algorithm would be appropriate.

SCRIPT

#Units N,m
model BasicBuilder -ndm 2 -ndf 3

# Node tag xCrd yCrd
node 1 +0.000000E+000 +0.000000E+000
node 2 +0.000000E+000 +4.000000E+000
node 3 +6.000000E+000 +0.000000E+000
node 4 +6.000000E+000 +4.000000E+000
node 5 +0.000000E+000 +7.000000E+000
node 6 +6.000000E+000 +7.000000E+000
node 7 +0.000000E+000 +1.000000E+001
node 8 +6.000000E+000 +1.000000E+001

# SPC tag Dx Dy Rz
fix 1 1 1 1
fix 3 1 1 1

# Mass tag mx my mIz
mass 2 +7.200000E+003 +0.000000E+000 +0.000000E+000
mass 4 +7.200000E+003 +0.000000E+000 +0.000000E+000
mass 5 +7.200000E+003 +0.000000E+000 +0.000000E+000
mass 6 +7.200000E+003 +0.000000E+000 +0.000000E+000
mass 7 +5.000000E+003 +0.000000E+000 +0.000000E+000
mass 8 +5.000000E+003 +0.000000E+000 +0.000000E+000


# Material "ElasticDefault": matTag E eta
uniaxialMaterial Elastic 1 +2.900000E+004 +0.000000E+000
# Material "cover": matTag fc' epsc0 fcu' epsu lambda ft Ets
uniaxialMaterial Concrete02 2 -3.500000E+007 -2.366000E-003 -7.000000E+006 -2.920000E-003 +1.000000E-001 +0.000000E+000 +0.000000E+000
# Material "core": matTag fc' epsc0 fcu' epsu lambda ft Ets
uniaxialMaterial Concrete02 3 -3.500000E+007 -2.366000E-003 -7.000000E+006 -3.810000E-002 +1.000000E-001 +0.000000E+000 +0.000000E+000
# Material "rebar": matTag Fy E b R0 cR1 cR2 <a1 a2 a3 a4> <sig0>
uniaxialMaterial Steel02 4 +4.500000E+008 +2.100000E+011 +4.200000E-003 +1.800000E+001 +9.250000E-001 +1.500000E-001 +0.000000E+000 +1.000000E+000 +0.000000E+000 +1.000000E+000 +0.000000E+000


# Section "ElasticDefault": secTag E A Iz
section Elastic 1 +2.900000E+004 +1.800000E+002 +4.860000E+003
# Section "beam": secTag
section Fiber 2 {
# PatchQuad "beamcore": matTag NSIJ NSJK Iy Iz Jy Jz Ky Kz Ly Lz
patch quad 3 1 20 -2.500000E-001 +3.000000E-001 -2.500000E-001 -3.000000E-001 +2.500000E-001 -3.000000E-001 +2.500000E-001 +3.000000E-001
# PatchQuad "beamtopcover": matTag NSIJ NSJK Iy Iz Jy Jz Ky Kz Ly Lz
patch quad 2 1 12 +2.500000E-001 +3.000000E-001 +2.500000E-001 -3.000000E-001 +3.000000E-001 -3.000000E-001 +3.000000E-001 +3.000000E-001
# PatchQuad "beambottomcover": matTag NSIJ NSJK Iy Iz Jy Jz Ky Kz Ly Lz
patch quad 2 1 12 -3.000000E-001 +3.000000E-001 -3.000000E-001 -3.000000E-001 -2.500000E-001 -3.000000E-001 -2.500000E-001 +3.000000E-001
# LayerStraight "top": matTag numBar areaBar yStart zStart yEnd zEnd
layer straight 4 4 +4.908700E-004 +2.500000E-001 +2.500000E-001 +2.500000E-001 -2.500000E-001
# LayerStraight "middle": matTag numBar areaBar yStart zStart yEnd zEnd
layer straight 4 2 +4.908700E-004 +0.000000E+000 +2.500000E-001 +0.000000E+000 -2.500000E-001
# LayerStraight "bottom": matTag numBar areaBar yStart zStart yEnd zEnd
layer straight 4 4 +4.908700E-004 -2.500000E-001 +2.500000E-001 -2.500000E-001 -2.500000E-001
}
# Section "column": secTag
section Fiber 3 {
# PatchQuad "columntopcover": matTag NSIJ NSJK Iy Iz Jy Jz Ky Kz Ly Lz
patch quad 2 1 16 +3.500000E-001 +4.000000E-001 +3.500000E-001 -4.000000E-001 +4.000000E-001 -4.000000E-001 +4.000000E-001 +4.000000E-001
# PatchQuad "columnbottomcover": matTag NSIJ NSJK Iy Iz Jy Jz Ky Kz Ly Lz
patch quad 2 1 16 -4.000000E-001 +4.000000E-001 -4.000000E-001 -4.000000E-001 -3.500000E-001 -4.000000E-001 -3.500000E-001 +4.000000E-001
# PatchQuad "columncore": matTag NSIJ NSJK Iy Iz Jy Jz Ky Kz Ly Lz
patch quad 3 1 20 -3.500000E-001 +4.000000E-001 -3.500000E-001 -4.000000E-001 +3.500000E-001 -4.000000E-001 +3.500000E-001 +4.000000E-001
# LayerStraight "top": matTag numBar areaBar yStart zStart yEnd zEnd
layer straight 4 4 +4.908700E-004 +3.500000E-001 +3.500000E-001 +3.500000E-001 -3.500000E-001
# LayerStraight "middle": matTag numBar areaBar yStart zStart yEnd zEnd
layer straight 4 2 +4.908700E-004 +0.000000E+000 +3.500000E-001 +0.000000E+000 -3.500000E-001
# LayerStraight "bottom": matTag numBar areaBar yStart zStart yEnd zEnd
layer straight 4 4 +4.908700E-004 -3.500000E-001 +3.500000E-001 -3.500000E-001 -3.500000E-001
}

# GeoTran type tag
geomTransf Corotational 1


# Element "column": eleTag NodeI NodeJ NIP secTag geoTranTag <-mass massDens> <-iter maxIters tol>
element nonlinearBeamColumn 1 1 2 5 3 1 -mass +1.536000E+003 -iter 25 +1.000000E+001
# Element "column": eleTag NodeI NodeJ NIP secTag geoTranTag <-mass massDens> <-iter maxIters tol>
element nonlinearBeamColumn 2 3 4 5 3 1 -mass +1.536000E+003 -iter 25 +1.000000E+001
# Element "beam": eleTag NodeI NodeJ NIP secTag geoTranTag <-mass massDens> <-iter maxIters tol>
element nonlinearBeamColumn 3 2 4 5 2 1 -mass +8.650000E+002 -iter 25 +1.000000E+001
# Element "800x800column": eleTag NodeI NodeJ A E Iz geoTranTag <alpha d> <-mass massDens>
element elasticBeamColumn 4 2 5 +6.400000E-001 +2.958000E+010 +3.410000E-002 1 +0.000000E+000 +8.000000E-001 -mass +1.536000E+003
# Element "600x600beam": eleTag NodeI NodeJ A E Iz geoTranTag <alpha d> <-mass massDens>
element elasticBeamColumn 5 5 6 +3.600000E-001 +2.958000E+010 +1.080000E-002 1 +0.000000E+000 +6.000000E-001 -mass +8.640000E+002
# Element "800x800column": eleTag NodeI NodeJ A E Iz geoTranTag <alpha d> <-mass massDens>
element elasticBeamColumn 6 4 6 +6.400000E-001 +2.958000E+010 +3.410000E-002 1 +0.000000E+000 +8.000000E-001 -mass +1.536000E+003
# Element "800x800column": eleTag NodeI NodeJ A E Iz geoTranTag <alpha d> <-mass massDens>
element elasticBeamColumn 7 5 7 +6.400000E-001 +2.958000E+010 +3.410000E-002 1 +0.000000E+000 +8.000000E-001 -mass +1.536000E+003
# Element "600x600beam": eleTag NodeI NodeJ A E Iz geoTranTag <alpha d> <-mass massDens>
element elasticBeamColumn 8 7 8 +3.600000E-001 +2.958000E+010 +1.080000E-002 1 +0.000000E+000 +6.000000E-001 -mass +8.640000E+002
# Element "800x800column": eleTag NodeI NodeJ A E Iz geoTranTag <alpha d> <-mass massDens>
element elasticBeamColumn 9 6 8 +6.400000E-001 +2.958000E+010 +3.410000E-002 1 +0.000000E+000 +8.000000E-001 -mass +1.536000E+003


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

initialize

# LoadPattern "gravity": patternTag tsTag
pattern Plain 1 1 {
# Load nodeTag LoadValues
load 2 +0.000000E+000 -7.063200E+004 +0.000000E+000
load 4 +0.000000E+000 -7.063200E+004 +0.000000E+000
load 5 +0.000000E+000 -7.063200E+004 +0.000000E+000
load 6 +0.000000E+000 -7.063200E+004 +0.000000E+000
load 7 +0.000000E+000 -4.905000E+004 +0.000000E+000
load 8 +0.000000E+000 -4.905000E+004 +0.000000E+000
}


# Node Recorder "DefoShape": fileName <nodeTag> dof respType
recorder Node -file gravityanalysiscase_Node_DefoShape_Dsp.out -time -nodeRange 1 8 -dof 1 2 3 disp
# BeamColumn Recorder "Elementsectionresponse": fileName <eleTag> arguments
recorder Element -file gravityanalysiscase_BeamColumn_Elementsectionresponse_GlbForc.out -time -ele 1 2 3 4 5 6 7 8 9 force
recorder Element -file gravityanalysiscase_BeamColumn_Elementsectionresponse_LocForc.out -time -ele 1 2 3 4 5 6 7 8 9 localForce
# Node Recorder "Reactions": fileName <nodeTag> dof respType
recorder Node -file gravityanalysiscase_Node_Reactions_RFrc.out -time -nodeRange 1 8 -dof 1 2 3 reaction


# AnalysisOptn "gravityanalysisoptions": Type: Static
# ---------------------------------------------------
# Constraint Handler
constraints Plain
# Convergence Test
test NormDispIncr +1.000000E-006 25 0 2
# Integrator
integrator LoadControl +1.000000E-001 1 +1.000000E-001 +1.000000E-001
# Solution Algorithm
algorithm Newton
# DOF Numberer
numberer Plain
# System of Equations
system BandGeneral
# Analysis Type
analysis Static

set numSteps 10
analyze $numSteps

loadConst -time 0.0
remove recorders
wipeAnalysis

# Set pushover recorders

# Node Recorder "DefoShape": fileName <nodeTag> dof respType
recorder Node -file pushoveranalysiscase_Node_DefoShape_Dsp.out -time -nodeRange 1 8 -dof 1 2 3 disp
# BeamColumn Recorder "Elementsectionresponse": fileName <eleTag> arguments
recorder Element -file pushoveranalysiscase_BeamColumn_Elementsectionresponse_GlbForc.out -time -ele 1 2 3 4 5 6 7 8 9 force
recorder Element -file pushoveranalysiscase_BeamColumn_Elementsectionresponse_LocForc.out -time -ele 1 2 3 4 5 6 7 8 9 localForce
# Node Recorder "Reactions": fileName <nodeTag> dof respType
recorder Node -file pushoveranalysiscase_Node_Reactions_RFrc.out -time -nodeRange 1 8 -dof 1 2 3 reaction


# Start adaptive pushover loop
#----------------------------------------------------------------------------------------------------------------

for {set i 1} {$i <= 4} {incr i} {

# Carry out eigen analysis and establish load pattern

# AnalysisOptn "Eigen": Type: Eigen
constraints Plain
test NormDispIncr +1.000000E-012 25 0 2
integrator Newmark +5.000000E-001 +2.500000E-001
algorithm Newton
numberer RCM
system BandGeneral
analysis Transient

# Period
set lambda [eigen 1]
set omega [expr sqrt($lambda)]
set T [expr (2*3.141593)/$omega]

#Eigen Vector
eigen 1
set x [nodeEigenvector 2 1 1]
set y [nodeEigenvector 5 1 1]
set z [nodeEigenvector 7 1 1]
#Normalized Eigen Vector
set x [expr $x/$z]
set y [expr $y/$z]
set z [expr $z/$z]
puts "Period = $T, Eigenvector = $z $y $x"
#Force vector ~ proportional to interstorey displacement
set z [expr $z-$y]
set y [expr $y-$x]
set x [expr $x-0]
puts "Forcevector = $z $y $x"

# LoadPattern "pushover": patternTag tsTag
set tag [expr $i+1]
pattern Plain $tag 1 {
# Load nodeTag LoadValues
load 2 $x +0.000000E+000 +0.000000E+000
load 4 $x +0.000000E+000 +0.000000E+000
load 5 $y +0.000000E+000 +0.000000E+000
load 6 $y +0.000000E+000 +0.000000E+000
load 7 $z +0.000000E+000 +0.000000E+000
load 8 $z +0.000000E+000 +0.000000E+000
}

wipeAnalysis
# AnalysisOptn "pushoveranalysisoptions": Type: Static
constraints Plain
test EnergyIncr +1.000000E-006 50 0 2
integrator DisplacementControl 8 1 +4.000000E-003 1 +4.000000E-003 +4.000000E-003
algorithm Linear
numberer Plain
system BandGeneral
analysis Static


analyze 25


loadConst -time 0.0
wipeAnalysis

}

#------------------------------------------------------------------------------------------------------------------

wipe
exit



Your input will be extremely helpful.

Regards

Sumit
phamgiahau
Posts: 8
Joined: Wed Apr 01, 2015 10:46 pm
Location: open university

Re: Adaptive pushover script

Post by phamgiahau »

thank you so much
Post Reply