Pushover analysis: applying a displacement profile

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

Moderators: silvia, selimgunay, Moderators

Post Reply
amia
Posts: 19
Joined: Fri Dec 26, 2014 11:01 pm
Location: The University of Melbourne

Pushover analysis: applying a displacement profile

Post by amia » Mon Aug 17, 2015 8:43 pm

Hi
I am trying to conduct a displacement controlled pushover analysis on a 5-storey frame where the applied displacement (applied at 5 nodes along the height of the frame) corresponds to the 1st mode shape of a wall (calculated separately), however I seem to be having many convergence issues. I have tried many different ways to solve the convergence issues however they have been unsuccessful! Therefore, I am not sure if there is something wrong with my actual model in terms of the way I've applied the displacement profile as my model runs with no errors when I only apply a displacement to one single node (top storey/roof node).. I was wondering if someone is able to look at my code to see if there is a mistake (I should say I am new to OpenSees!) or provide any guidance on how I should be applying the displacement profile on the frame.

Below is my OpenSees script:

wipe all;

# Create ModelBuilder
model BasicBuilder -ndm 2 -ndf 3;

# ----------------------------------- Define Analysis Type ----------------------------------------- #
set analysisType "pushover";
if {$analysisType == "pushover"} {
set dataDir Results-Pushover-Analysis; # name of output folder
file mkdir $dataDir; # create output folder
}

# -------------------------------------- Materials ------------------------------------------------- #

# Long. Reinf. Bars
# Use "Steel02" Giuffre-manegotto-Pinto Model with Isotropic Strain Hardening
# Steel02: $matTag $Fy $E $b $R0 $cR1 $cR2 <$a1 $a2 $a3 $a4 $sigInit>

uniaxialMaterial Steel02 10 500 200000 0.005 20.0 0.925 0.15; #Beams and columns

# Concrete - use "Concrete01" which has zero tensile steel
# Cover
# Concrete01: $matTag $fpc = f'c $epsc0 = strain at fc' $fpcu (crushing) $epsU = ult. Strain
uniaxialMaterial Concrete01 20 -32.0 0.002 -10.0 0.004; #Beams (Unconfined)
uniaxialMaterial Concrete01 30 -40.0 0.002 -10.0 0.004; #Columns (unconfined)
# Core --> for now ignoring confinement provide by stirrups
uniaxialMaterial Concrete01 40 -32.0 0.002 -10.0 0.004; #Beams (confined --> Ignored for now)
uniaxialMaterial Concrete01 50 -40.0 0.002 -10.0 0.004; #Columns (confined --> Ignored for now)

# -------------------------------------- Sections ------------------------------------------------- #
# Fiber 10 = PIntbmSup (Perimeter Frame beam, interior span, near support)
# Fiber 11 = PIntbmMid (Perimeter Frame beam, interior span, near midspan)
# Fiber 12 = PIntbmCom (Perimeter Frame beam, interior span, between support and midspan)

# Fiber 20 = PEndbmSup (Perimeter Frame beam, end span, near support)
# Fiber 21 = PEndbmMid (Perimeter Frame beam, end span, near midspan)
# Fiber 22 = PEndbmCom (Perimeter Frame beam, end span, between support and midspan)

# Fiber 30 = PCol (Perimeter frame column)

# ------ Fiber 10 = PIntbmSup ------
# patch rect $matTag $numSubdivY $numSubdivZ $yI $zI $yJ $zJ
section Fiber 10 {
patch rect 40 8 14 -217 -142 217 142 # core
patch rect 20 3 14 -275 -142 -217 142 # left cover
patch rect 20 3 14 217 -142 275 142 # right cover
patch rect 20 22 3 -275 -200 275 -142 # bottom cover
patch rect 20 22 3 -275 142 275 200 # top cover

# layer straight $matTag $numFiber $areaFiber $yStart $zStart $yEnd $zEnd
layer straight 10 5 452.3893421 217 -142 217 142 # right (top) bars
layer straight 10 2 452.3893421 -217 -142 -217 142 # left (bottom) bars
}


# ------ Fiber 11 = PIntbmMid ------
# patch rect $matTag $numSubdivY $numSubdivZ $yI $zI $yJ $zJ
section Fiber 11 {
patch rect 40 8 14 -217 -142 217 142 # core
patch rect 20 3 14 -275 -142 -217 142 # left cover
patch rect 20 3 14 217 -142 275 142 # right cover
patch rect 20 22 3 -275 -200 275 -142 # bottom cover
patch rect 20 22 3 -275 142 275 200 # top cover

# layer straight $matTag $numFiber $areaFiber $yStart $zStart $yEnd $zEnd
layer straight 10 2 452.3893421 217 -142 217 142 # right (top) bars
layer straight 10 4 452.3893421 -217 -142 -217 142 # left (bottom) bars
}

# ------ Fiber 12 = PIntbmCom ------
# patch rect $matTag $numSubdivY $numSubdivZ $yI $zI $yJ $zJ
section Fiber 12 {
patch rect 40 8 14 -217 -142 217 142 # core
patch rect 20 3 14 -275 -142 -217 142 # left cover
patch rect 20 3 14 217 -142 275 142 # right cover
patch rect 20 22 3 -275 -200 275 -142 # bottom cover
patch rect 20 22 3 -275 142 275 200 # top cover

# layer straight $matTag $numFiber $areaFiber $yStart $zStart $yEnd $zEnd
layer straight 10 5 452.3893421 217 -142 217 142 # right (top) bars
layer straight 10 4 452.3893421 -217 -142 -217 142 # left (bottom) bars
}

# ------ Fiber 20 = PEndbmSup ------
# patch rect $matTag $numSubdivY $numSubdivZ $yI $zI $yJ $zJ
section Fiber 20 {
patch rect 40 8 14 -217 -142 217 142 # core
patch rect 20 3 14 -275 -142 -217 142 # left cover
patch rect 20 3 14 217 -142 275 142 # right cover
patch rect 20 22 3 -275 -200 275 -142 # bottom cover
patch rect 20 22 3 -275 142 275 200 # top cover

# layer straight $matTag $numFiber $areaFiber $yStart $zStart $yEnd $zEnd
layer straight 10 5 452.3893421 217 -142 217 142 # right (top) bars
layer straight 10 2 452.3893421 -217 -142 -217 142 # left (bottom) bars
}

# ------ Fiber 21 = PEndbmMid ------
# patch rect $matTag $numSubdivY $numSubdivZ $yI $zI $yJ $zJ
section Fiber 21 {
patch rect 40 8 14 -217 -142 217 142 # core
patch rect 20 3 14 -275 -142 -217 142 # left cover
patch rect 20 3 14 217 -142 275 142 # right cover
patch rect 20 22 3 -275 -200 275 -142 # bottom cover
patch rect 20 22 3 -275 142 275 200 # top cover

# layer straight $matTag $numFiber $areaFiber $yStart $zStart $yEnd $zEnd
layer straight 10 4 452.3893421 217 -142 217 142 # right (top) bars
layer straight 10 4 452.3893421 -217 -142 -217 142 # left (bottom) bars
}

# ------ Fiber 22 = PEndbmCom ------
# patch rect $matTag $numSubdivY $numSubdivZ $yI $zI $yJ $zJ
section Fiber 22 {
patch rect 40 8 14 -217 -142 217 142 # core
patch rect 20 3 14 -275 -142 -217 142 # left cover
patch rect 20 3 14 217 -142 275 142 # right cover
patch rect 20 22 3 -275 -200 275 -142 # bottom cover
patch rect 20 22 3 -275 142 275 200 # top cover

# layer straight $matTag $numFiber $areaFiber $yStart $zStart $yEnd $zEnd
layer straight 10 5 452.3893421 217 -142 217 142 # right (top) bars
layer straight 10 4 452.3893421 -217 -142 -217 142 # left (bottom) bars
layer straight 10 0 452.3893421 0 -142 0 142 # middle bars
}

# ------ Fiber 30 = PCol ------
# patch rect $matTag $numSubdivY $numSubdivZ $yI $zI $yJ $zJ
section Fiber 30 {
patch rect 50 20 10 -138 -88 138 88 # core
patch rect 30 2 16 -200 -88 -138 88 # left cover
patch rect 30 2 16 138 -88 200 88 # right cover
patch rect 30 20 2 -200 -150 200 -88 # bottom cover
patch rect 30 20 2 -200 88 200 150 # top cover

# layer straight $matTag $numFiber $areaFiber $yStart $zStart $yEnd $zEnd
layer straight 10 2 452.3893421 138 -88 138 88 # right (top) bars
layer straight 10 2 452.3893421 -138 -88 -138 88 # left (bottom) bars
}


# -------------------------------------- Element Classes ------------------------------------------------- #

set N 5; #Number of integration points

# Define multiple fiber sections for beams

# BmPerIntSpan = Perimeter Beam Interior Spans
set locations_BmPerIntSpan "0.0 0.2 0.5 0.8 1.0"
# 0.2 0.5 0.8 1.0”
set weights_BmPerIntSpan "0.1 0.2 0.4 0.2 0.1"
set secTags_BmPerIntSpan "10 11 12 11 10"
set integration_BmPerIntSpan "UserDefined $N $secTags_BmPerIntSpan $locations_BmPerIntSpan $weights_BmPerIntSpan"

# BmPerEndSpan = Perimeter Beam End Spans
set locations_BmPerEndSpan "0.0 0.2 0.5 0.8 1.0"
set weights_BmPerEndSpan "0.1 0.2 0.4 0.2 0.1"
set secTags_BmPerEndSpan "20 21 22 21 20"
set integration_BmPerEndSpan "UserDefined $N $secTags_BmPerEndSpan $locations_BmPerEndSpan $weights_BmPerEndSpan"

# Later use the following format to define "forceBeamColumn" elements
# element forceBeamColumn $tag $ndI $ndJ $transfTag $integration_...


# ------------------------------------------- Nodes ----------------------------------------------------- #

# Node $TagNumb $X-coord $Y-coord
node 11 0.0 0.0
node 12 8400.0 0.0
node 13 16800.0 0.0
node 14 24550.0 0.0
node 15 32950.0 0.0
node 16 41350.0 0.0
node 111 0.0 3500.0
node 112 8400.0 3500.0
node 113 16800.0 3500.0
node 114 24550.0 3500.0
node 115 32950.0 3500.0
node 116 41350.0 3500.0
node 211 0.0 7000.0
node 212 8400.0 7000.0
node 213 16800.0 7000.0
node 214 24550.0 7000.0
node 215 32950.0 7000.0
node 216 41350.0 7000.0
node 311 0.0 10500.0
node 312 8400.0 10500.0
node 313 16800.0 10500.0
node 314 24550.0 10500.0
node 315 32950.0 10500.0
node 316 41350.0 10500.0
node 411 0.0 14000.0
node 412 8400.0 14000.0
node 413 16800.0 14000.0
node 414 24550.0 14000.0
node 415 32950.0 14000.0
node 416 41350.0 14000.0
node 511 0.0 17500.0
node 512 8400.0 17500.0
node 513 16800.0 17500.0
node 514 24550.0 17500.0
node 515 32950.0 17500.0
node 516 41350.0 17500.0

# ------------------------------------------- Element Connectivity ----------------------------------------------------- #

geomTransf Linear 1111; # for beams
geomTransf Linear 2222; # for columns

## Beams ##
element forceBeamColumn 111 111 112 1111 $integration_BmPerEndSpan
element forceBeamColumn 112 112 113 1111 $integration_BmPerIntSpan
element forceBeamColumn 113 113 114 1111 $integration_BmPerIntSpan
element forceBeamColumn 114 114 115 1111 $integration_BmPerIntSpan
element forceBeamColumn 115 115 116 1111 $integration_BmPerEndSpan
element forceBeamColumn 211 211 212 1111 $integration_BmPerEndSpan
element forceBeamColumn 212 212 213 1111 $integration_BmPerIntSpan
element forceBeamColumn 213 213 214 1111 $integration_BmPerIntSpan
element forceBeamColumn 214 214 215 1111 $integration_BmPerIntSpan
element forceBeamColumn 215 215 216 1111 $integration_BmPerEndSpan
element forceBeamColumn 311 311 312 1111 $integration_BmPerEndSpan
element forceBeamColumn 312 312 313 1111 $integration_BmPerIntSpan
element forceBeamColumn 313 313 314 1111 $integration_BmPerIntSpan
element forceBeamColumn 314 314 315 1111 $integration_BmPerIntSpan
element forceBeamColumn 315 315 316 1111 $integration_BmPerEndSpan
element forceBeamColumn 411 411 412 1111 $integration_BmPerEndSpan
element forceBeamColumn 412 412 413 1111 $integration_BmPerIntSpan
element forceBeamColumn 413 413 414 1111 $integration_BmPerIntSpan
element forceBeamColumn 414 414 415 1111 $integration_BmPerIntSpan
element forceBeamColumn 415 415 416 1111 $integration_BmPerEndSpan
element forceBeamColumn 511 511 512 1111 $integration_BmPerEndSpan
element forceBeamColumn 512 512 513 1111 $integration_BmPerIntSpan
element forceBeamColumn 513 513 514 1111 $integration_BmPerIntSpan
element forceBeamColumn 514 514 515 1111 $integration_BmPerIntSpan
element forceBeamColumn 515 515 516 1111 $integration_BmPerIntSpan


## Columns ##
element forceBeamColumn 1011 11 111 $N 30 2222
element forceBeamColumn 1012 12 112 $N 30 2222
element forceBeamColumn 1013 13 113 $N 30 2222
element forceBeamColumn 1014 14 114 $N 30 2222
element forceBeamColumn 1015 15 115 $N 30 2222
element forceBeamColumn 1016 16 116 $N 30 2222
element forceBeamColumn 2011 111 211 $N 30 2222
element forceBeamColumn 2012 112 212 $N 30 2222
element forceBeamColumn 2013 113 213 $N 30 2222
element forceBeamColumn 2014 114 214 $N 30 2222
element forceBeamColumn 2015 115 215 $N 30 2222
element forceBeamColumn 2016 116 216 $N 30 2222
element forceBeamColumn 3011 211 311 $N 30 2222
element forceBeamColumn 3012 212 312 $N 30 2222
element forceBeamColumn 3013 213 313 $N 30 2222
element forceBeamColumn 3014 214 314 $N 30 2222
element forceBeamColumn 3015 215 315 $N 30 2222
element forceBeamColumn 3016 216 316 $N 30 2222
element forceBeamColumn 4011 311 411 $N 30 2222
element forceBeamColumn 4012 312 412 $N 30 2222
element forceBeamColumn 4013 313 413 $N 30 2222
element forceBeamColumn 4014 314 414 $N 30 2222
element forceBeamColumn 4015 315 415 $N 30 2222
element forceBeamColumn 4016 316 416 $N 30 2222
element forceBeamColumn 5011 411 511 $N 30 2222
element forceBeamColumn 5012 412 512 $N 30 2222
element forceBeamColumn 5013 413 513 $N 30 2222
element forceBeamColumn 5014 414 514 $N 30 2222
element forceBeamColumn 5015 415 515 $N 30 2222
element forceBeamColumn 5016 416 516 $N 30 2222

# ------------------------------------------- Constraints ---------------------------------------------------- #
# none required for this model

# ------------------------------------------- Restraints ----------------------------------------------------- #

# All ground nodes are fixed
# command: fix nodeID xResrnt? yRestrnt? MRestrnt? --> where 0= not restrained, 1=restrained
fix 11 1 1 1
fix 12 1 1 1
fix 13 1 1 1
fix 14 1 1 1
fix 15 1 1 1
fix 16 1 1 1


# ------------------------------------------- Applied Loads ----------------------------------------------------- #

# ------------------ Permanent Gravity Loading ----------------------- #

# need to apply permanent gravity loading: G + 0.3Q = -31 kN/m = -31 N/mm for the levels 1-4
# G + 0.3Q = -27 kN/m = -31 N/mm for the roof

# Applying uniformly distributed loads in OpenSees
# Command; eleLoad -ele $eleTag1 <$eleTag2 ....> -type -beamUniform $Wy <$Wx> WHERE; $eleTag = tag of PREVIOUSLY DEFINED element
# $Wy = mag of uniformily distributed ref load acting in local y direction of element

# 1st: apply gravity loading
pattern Plain 1 Linear {
eleLoad -ele 111 -type -beamUniform -31.0
eleLoad -ele 112 -type -beamUniform -31.0
eleLoad -ele 113 -type -beamUniform -31.0
eleLoad -ele 114 -type -beamUniform -31.0
eleLoad -ele 115 -type -beamUniform -31.0
eleLoad -ele 211 -type -beamUniform -31.0
eleLoad -ele 212 -type -beamUniform -31.0
eleLoad -ele 213 -type -beamUniform -31.0
eleLoad -ele 214 -type -beamUniform -31.0
eleLoad -ele 215 -type -beamUniform -31.0
eleLoad -ele 311 -type -beamUniform -31.0
eleLoad -ele 312 -type -beamUniform -31.0
eleLoad -ele 313 -type -beamUniform -31.0
eleLoad -ele 314 -type -beamUniform -31.0
eleLoad -ele 315 -type -beamUniform -31.0
eleLoad -ele 411 -type -beamUniform -31.0
eleLoad -ele 412 -type -beamUniform -31.0
eleLoad -ele 413 -type -beamUniform -31.0
eleLoad -ele 414 -type -beamUniform -31.0
eleLoad -ele 415 -type -beamUniform -31.0
eleLoad -ele 511 -type -beamUniform -27.0
eleLoad -ele 512 -type -beamUniform -27.0
eleLoad -ele 513 -type -beamUniform -27.0
eleLoad -ele 514 -type -beamUniform -27.0
eleLoad -ele 515 -type -beamUniform -27.0
}

# 2nd: Analysis command for gravity loading
######## The code below is COPIED from an example ########

set Tol 1.0e-5; # convergence tolerance for test
variable constraintsTypeGravity Plain; # default;
constraints $constraintsTypeGravity ; # how it handles boundary conditions
numberer RCM; # renumber dof's to minimize band-width (optimization)
system BandGeneral ; # how to store and solve the system of equations in the analysis (large model: try UmfPack)
test NormDispIncr $Tol 6 ; # determine if convergence has been achieved at the end of an iteration step
algorithm Newton; # use Newton's solution algorithm: updates tangent stiffness at every iteration
set NstepGravity 100; # apply gravity in 10 steps
set DGravity [expr 1.0/$NstepGravity]; # first load increment;
integrator LoadControl $DGravity; # determine the next time step for an analysis
analysis Static; # define type of analysis static or transient
analyze $NstepGravity; # apply gravity

# maintain constant gravity loads and reset time to zero
loadConst -time 0.0
puts "Gravity Load Analysis Completed"

# ------------------------------------------- Recorders ----------------------------------------------------- #
# NOTE: Recorder must be placed BEFORE the Analysis for which it records the required actions

recorder Node -file $dataDir/node511.out -time -node 511 -dof 1 2 3 disp
recorder Element -file $dataDir/GlobalForceCol5011.out -time -ele 5011 globalForce; # element forces -- column
recorder Node -file $dataDir/RectionNode11.out -time -node 11 -dof 1 2 3 reaction; # support reaction
recorder Node -file $dataDir/RectionNode11-16.out -time -node 11 12 13 14 15 16 -dof 1 reaction;
recorder EnvelopeElement -file $dataDir/EnvelopeBottomCol1.out -time -ele 1011 1012 1013 1015 1016 forces

# -------------------- Pushover Analysis - Loading --------------------- #

if {$analysisType == "pushover"} {
puts "Running Pushover..."

# 1st: assign lateral loads and create load pattern: use Mode Shape from Walls
set level1 0.064; # normalised mode shape factor at level 1
set level2 0.229; # normalised mode shape factor at level 2
set level3 0.460; # normalised mode shape factor at level 3
set level4 0.724; # normalised mode shape factor at level 4
set level5 1.000; # normalised mode shape factor at level 5

# pattern Plain $patternTag $tsTag <-fact $cFactor> { ... load ... }
# WHERE $patternTag = unique tag among load patterns
# $tsTAg = the tag of the time series to be used in the load pattern
# $cFactor = constant factor (optional, default=1.0)

# load $nodeTag (ndf $LoadValues)
# WHERE $nodeTag = tag of node to which load is applied
# $loadvalues = ndf reference load values
pattern Plain 2 Linear {
load 111 $level1 0.0 0.0
load 211 $level2 0.0 0.0
load 311 $level3 0.0 0.0
load 411 $level4 0.0 0.0
load 511 $level5 0.0 0.0
}


# 2nd: Set displacement parameters for Displacement-controlled Pushover
set IDctrlNode 511; # node where disp is read for disp control
set IDctrlDOF 1; # degree of freedom read for disp control (1 = x displacement)
set Dmax [expr 500]; # maximum displacement of pushover
set Dincr [expr 0.01]; # displacement increment (dU)


# 3rd: Analysis command for Displacement-controlled Pushover

# constraintsHandler,DOFnumberer,system-of equations,convergenceTest,solutionAlgorithm,integrator
constraints Plain; # how it handles boundary conditions
numberer RCM; # renumber dof's to minimize band-width (optimization)
system BandGeneral; # how to store and solve the system of equations in the analysis (large model: try UmfPack)
test NormDispIncr 1.0e-6 800; # tolerance, max iterations
algorithm Newton; # use Newton's solution algorithm: updates tangent stiffness at every iteration
integrator DisplacementControl $IDctrlNode $IDctrlDOF $Dincr; # use displacement-controlled analysis
analysis Static; # define type of analysis: static for pushover

set Nsteps [expr int($Dmax/$Dincr)]; # number of pushover analysis steps
set ok [analyze $Nsteps]; # this will return zero if no convergence problems were encountered

if {$ok != 0} {
# If the analysis fails, other things are tried whcih make the performance slower (and potentially accurate??)
set currentDisp 0.0;
set ok 0
while {$ok == 0 && $currentDisp < $Dmax} {
set controlDisp [nodeDisp $IDctrlNode $IDctrlDOF]
set Dstep [expr $controlDisp/$Dmax]
set ok [analyze 1]
# If analysis still fails, try:
if {$ok != 0} {
puts "regular newton failed .. lets try an initail stiffness for this step"
test NormDispIncr 1.0e-5 2000
algorithm ModifiedNewton -initial
set ok [analyze 1]
test NormDispIncr 1.0e-8 50
algorithm Newton
}
if {$ok != 0} {
puts "Trying Broyden..."
algorithm Broyden 8
set ok [analyze 1]
algorithm Newton
}
if {$ok != 0} {
puts "Trying NewtonWithLineSearch..."
algorithm NewtonLineSearch 0.8
set ok [analyze 1]
algorithm Newton
}
}; # End while loop
}; # End if ok != 0
}
if {$ok == 0} {
puts "Pushover analysis completed SUCCESSFULLY";
} else {
puts "Pushover analysis FAILED";
}

# ------------------------------------------- End of Script ----------------------------------------------------- #

wipe all;

Post Reply