My pushover analysis (2D Frame) is not converging.

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

Moderators: silvia, selimgunay, Moderators

Post Reply
Danielaait
Posts: 8
Joined: Fri Apr 09, 2021 6:11 am

My pushover analysis (2D Frame) is not converging.

Post by Danielaait » Fri Apr 09, 2021 6:31 am

Dears, I have modeled a 2D elastic frame in OpenSees.

I want to get capacity curve with clear maximum value of force.
when I change the value Umax even to unrealistic large value, it gives me a result. It doesn't converge.

Could you please help me on how to make it fix. Thank you in advance.


Here is the code:

# units: N,m
wipe all;
# Define the model type
model BasicBuilder -ndm 2 -ndf 3
# Define frame properties
set columnheight 3.2
set basecolheight 2.9
set baywidth 5.2
set columndepth 0.6
set columnwidth 0.25
set beamdepth 0.6
set beamwidth 0.25
set AreaCol [expr $columndepth*$columnwidth]
set AreaBeam [expr $beamdepth*$beamwidth]
set Icol [expr $columnwidth*pow($columndepth,3)/12.]
set Ibeam [expr $beamwidth*pow($beamdepth,3)/12.]
set E 32000000000.0
set Nmode 5
# Create a folder for output data store
file mkdir ModalAnalysis;
# Define nodes of the frame
# node nodeId Xcord Ycord
node 1 0. 0.
node 2 $baywidth 0.
node 3 [expr 2*$baywidth] 0.
node 4 [expr 3*$baywidth] 0.
node 5 0. $basecolheight
node 6 $baywidth $basecolheight
node 7 [expr 2*$baywidth] $basecolheight
node 8 [expr 3*$baywidth] $basecolheight
node 9 0. [expr $basecolheight + $columnheight]
node 10 $baywidth [expr $basecolheight + $columnheight]
node 11 [expr 2*$baywidth] [expr $basecolheight + $columnheight]
node 12 [expr 3*$baywidth] [expr $basecolheight + $columnheight]
node 13 0. [expr $basecolheight + 2*$columnheight]
node 14 $baywidth [expr $basecolheight + 2*$columnheight]
node 15 [expr 2*$baywidth] [expr $basecolheight + 2*$columnheight]
node 16 [expr 3*$baywidth] [expr $basecolheight + 2*$columnheight]
node 17 0. [expr $basecolheight + 3*$columnheight]
node 18 $baywidth [expr $basecolheight + 3*$columnheight]
node 19 [expr 2*$baywidth] [expr $basecolheight + 3*$columnheight]
node 20 [expr 3*$baywidth] [expr $basecolheight + 3*$columnheight]
node 21 0. [expr $basecolheight + 4*$columnheight]
node 22 $baywidth [expr $basecolheight + 4*$columnheight]
node 23 [expr 2*$baywidth] [expr $basecolheight + 4*$columnheight]
node 24 [expr 3*$baywidth] [expr $basecolheight + 4*$columnheight]
# Define the behaviour of shear frame building.
equalDOF 5 6 2 3
equalDOF 5 7 2 3
equalDOF 5 8 2 3
equalDOF 9 10 2 3
equalDOF 9 11 2 3
equalDOF 9 12 2 3
equalDOF 13 14 2 3
equalDOF 13 15 2 3
equalDOF 13 16 2 3
equalDOF 17 18 2 3
equalDOF 17 19 2 3
equalDOF 17 20 2 3
equalDOF 21 22 2 3
equalDOF 21 23 2 3
equalDOF 21 24 2 3
# Specify the type of geometric transformation
geomTransf Linear 1; # For column element
geomTransf Linear 2; # For beam element
# Create the frame elements
# element elasticBeamColumn eleID firstnode secondnode A E Iz geomTransfTag
element elasticBeamColumn 1 1 5 $AreaCol $E $Icol 1
element elasticBeamColumn 2 5 9 $AreaCol $E $Icol 1
element elasticBeamColumn 3 9 13 $AreaCol $E $Icol 1
element elasticBeamColumn 4 13 17 $AreaCol $E $Icol 1
element elasticBeamColumn 5 17 21 $AreaCol $E $Icol 1
element elasticBeamColumn 6 2 6 $AreaCol $E $Icol 1
element elasticBeamColumn 7 6 10 $AreaCol $E $Icol 1
element elasticBeamColumn 8 10 14 $AreaCol $E $Icol 1
element elasticBeamColumn 9 14 18 $AreaCol $E $Icol 1
element elasticBeamColumn 10 18 22 $AreaCol $E $Icol 1
element elasticBeamColumn 11 3 7 $AreaCol $E $Icol 1
element elasticBeamColumn 12 7 11 $AreaCol $E $Icol 1
element elasticBeamColumn 13 11 15 $AreaCol $E $Icol 1
element elasticBeamColumn 14 15 19 $AreaCol $E $Icol 1
element elasticBeamColumn 15 19 23 $AreaCol $E $Icol 1
element elasticBeamColumn 16 4 8 $AreaCol $E $Icol 1
element elasticBeamColumn 17 8 12 $AreaCol $E $Icol 1
element elasticBeamColumn 18 12 16 $AreaCol $E $Icol 1
element elasticBeamColumn 19 16 20 $AreaCol $E $Icol 1
element elasticBeamColumn 20 20 24 $AreaCol $E $Icol 1
element elasticBeamColumn 21 5 6 $AreaBeam $E $Ibeam 2
element elasticBeamColumn 22 6 7 $AreaBeam $E $Ibeam 2
element elasticBeamColumn 23 7 8 $AreaBeam $E $Ibeam 2
element elasticBeamColumn 24 9 10 $AreaBeam $E $Ibeam 2
element elasticBeamColumn 25 10 11 $AreaBeam $E $Ibeam 2
element elasticBeamColumn 26 11 12 $AreaBeam $E $Ibeam 2
element elasticBeamColumn 27 13 14 $AreaBeam $E $Ibeam 2
element elasticBeamColumn 28 14 15 $AreaBeam $E $Ibeam 2
element elasticBeamColumn 29 15 16 $AreaBeam $E $Ibeam 2
element elasticBeamColumn 30 17 18 $AreaBeam $E $Ibeam 2
element elasticBeamColumn 31 18 19 $AreaBeam $E $Ibeam 2
element elasticBeamColumn 32 19 20 $AreaBeam $E $Ibeam 2
element elasticBeamColumn 33 21 22 $AreaBeam $E $Ibeam 2
element elasticBeamColumn 34 22 23 $AreaBeam $E $Ibeam 2
element elasticBeamColumn 35 23 24 $AreaBeam $E $Ibeam 2
# Assign mass into each node
set m1 24370.4; # total mass in story 1
set m2 90536.73; # total mass in story 2
set m3 90536.73; # total mass in story 3
set m4 90536.73; # total mass in story 4
set m5 10985.4; # total mass in story 5
# mass $nodeTag $massX $massY $massRz
mass 5 [expr $m1/4] 0. 0.
mass 6 [expr $m1/4] 0. 0.
mass 7 [expr $m1/4] 0. 0.
mass 8 [expr $m1/4] 0. 0.
mass 9 [expr $m2/4] 0. 0.
mass 10 [expr $m2/4] 0. 0.
mass 11 [expr $m2/4] 0. 0.
mass 12 [expr $m2/4] 0. 0.
mass 13 [expr $m3/4] 0. 0.
mass 14 [expr $m3/4] 0. 0.
mass 15 [expr $m3/4] 0. 0.
mass 16 [expr $m3/4] 0. 0.
mass 17 [expr $m4/4] 0. 0.
mass 18 [expr $m4/4] 0. 0.
mass 19 [expr $m4/4] 0. 0.
mass 20 [expr $m4/4] 0. 0.
mass 21 [expr $m5/4] 0. 0.
mass 22 [expr $m5/4] 0. 0.
mass 23 [expr $m5/4] 0. 0.
mass 24 [expr $m5/4] 0. 0.

# Fix the support of the structure

fix 1 1 1 1
fix 2 1 1 1
fix 3 1 1 1
fix 4 1 1 1


set omegasquared [eigen $Nmode];
set omega {}
set f {}
set T {}
set pi 3.141593

foreach os $omegasquared {
lappend omega [expr sqrt($os)]
lappend f [expr sqrt($os)/(2*$pi)]
lappend T [expr (2*$pi)/sqrt($os)]
}

set period "ModalAnalysis/Periods.txt"
set Periods [open $period "w"]
foreach t $T {
puts $Periods " $t"
}
close $Periods

set eigenvector "ModalAnalysis/Eigenvector.txt"
set Eigenvector [open $eigenvector "w"]
puts $Eigenvector " Modeshape 1: [nodeEigenvector 5 1 1] [nodeEigenvector 9 1 1] [nodeEigenvector 13 1 1] [nodeEigenvector 17 1 1] [nodeEigenvector 21 1 1]"
puts $Eigenvector " Modeshape 2: [nodeEigenvector 5 2 1] [nodeEigenvector 9 2 1] [nodeEigenvector 13 2 1] [nodeEigenvector 17 2 1] [nodeEigenvector 21 2 1]"
puts $Eigenvector " Modeshape 3: [nodeEigenvector 5 3 1] [nodeEigenvector 9 3 1] [nodeEigenvector 13 3 1] [nodeEigenvector 17 3 1] [nodeEigenvector 21 3 1]"
puts $Eigenvector " Modeshape 4: [nodeEigenvector 5 4 1] [nodeEigenvector 9 4 1] [nodeEigenvector 13 4 1] [nodeEigenvector 17 4 1] [nodeEigenvector 21 4 1]"
puts $Eigenvector " Modeshape 5: [nodeEigenvector 5 5 1] [nodeEigenvector 9 5 1] [nodeEigenvector 13 5 1] [nodeEigenvector 17 5 1] [nodeEigenvector 21 5 1]"
close $Eigenvector

# Recorder

recorder Node -time -file Roofdisp.dat -node 24 -dof 1 disp

recorder Element -file Elementforce1.dat -time -ele 1 globalForce
recorder Element -file Elementforce6.dat -time -ele 6 globalForce
recorder Element -file Elementforce11.dat -time -ele 11 globalForce
recorder Element -file Elementforce16.dat -time -ele 16 globalForce

# Perform gravity analysis
# Assign the timeseries type
timeSeries Linear 1
# Assign uniformly distributed dead load to each beam element
pattern Plain 1 1 {
eleLoad -ele 21 22 23 -type -beamUniform -9070
eleLoad -ele 24 25 26 -type -beamUniform -50520
eleLoad -ele 27 28 29 -type -beamUniform -50520
eleLoad -ele 30 31 32 -type -beamUniform -50520
eleLoad -ele 33 34 35 -type -beamUniform -2050
}
# system UmfPack, This command is used to construct a sparse system of equations which uses the UmfPack solver
system UmfPack
# constraints Plain ,this command is used to construct a Plain constraint handler
constraints Plain
# test NormDispIncr $tol $iter <$pFlag>, This command is used to construct a convergence test
test NormDispIncr 1.0e-8 40 0
# algorithm Newton , This command is used to construct a NewtonRaphson algorithm object
algorithm Newton
# numberer RCM, RCM degree-of-freedom numbering object provide the mapping between the DOF at nodes and equation numbers.
numberer RCM
# integrator LoadControl $lambda, $lambda = the load factor increment
integrator LoadControl 0.1
# Analyze the model (statical)
analysis Static
analyze 10; #use 10 analysis steps
################################### Perform Pushover Analysis ############################################
# At this point gravity loads = constant, time in domain = 0.0
loadConst -time 0.0
# Assign lateral loads
timeSeries Linear 2
pattern Plain 2 2 {
load 5 18414.2 0.0 0.0
load 9 171187.4 0.0 0.0
load 13 252321.4 0.0 0.0
load 17 317362.0 0.0 0.0
load 21 41320.5 0.0 0.0
}

# Define target displacement(maximum displacement)
set Umax 0.3925; # 2.5% of drift
set Uincr 0.01; #
set Nsteps [expr int($Umax/$Uincr)]
# create the displacement controller
integrator DisplacementControl 24 1 $Uincr
analyze $Nsteps

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

Re: My pushover analysis (2D Frame) is not converging.

Post by selimgunay » Mon Apr 12, 2021 5:17 pm

Instead of the analyze $Nsteps command, you can try other nonlinear solution algorithms, convergence tests and tolerances to overcome the convergence problems. Below is an example of this type of adaptive solution algorithm for nonlinear dynamic analysis. You can adapt it for the nonlinear static (pushover) case.

viewtopic.php?f=2&t=67951&p=118077#p118077

Danielaait
Posts: 8
Joined: Fri Apr 09, 2021 6:11 am

Re: My pushover analysis (2D Frame) is not converging.

Post by Danielaait » Fri Aug 27, 2021 8:30 am

Dear selimgunay,

Thank you very much!

Post Reply