## Pushover convergence solution

If you have a script you think might be useful to others post it
here. Hopefully we will be able to get the most useful of these incorporated in the manuals.

Moderators: silvia, selimgunay, Moderators

mmontazeri
Posts: 4
Joined: Wed Nov 10, 2010 11:47 pm
Location: Tehran

### Pushover convergence solution

Hi

to make opensees Faster during Pushover analysis and avoid Convergence problems I have developed some codes.
Please let me know if you find any bug by sending e-mail: s.m.montazeri@gmail.com

How Does it work? ---> Automaticly Modifies displacement increments during the RUN
in case of convergence it increases displacement increments ; if not converged it reduces displacement increments

#Converge Quick & Easy (PUSHOVER Analysis)
set crd 0.0; #Current Roof Displacement
set dmax 0.5; #Target Displacment
set dincr 0.005; #initial disp. increment
set maxincr 0.02; #maximum disp. increment size
set minincr 1.0e-20; #Minimum disp. increment Size
set tol 1.0e-6; #initial tolerance criteria used to check for convergence
set MNode 20; # Set Monitor Node Tag, i.e Roof node Tag is 20)

puts "\n\n\n\n\n.......................PUSHOVER Analysis Began........................... "
puts "\n\n initial Step size: \$dincr"
puts " initial Telorance:\$tol"
puts "\n.........................................................................\n"

for {set i 1} {\$crd<= \$dmax} {incr i 1} {
test NormDispIncr \$tol 100
integrator DisplacementControl \$MNode 1 \$dincr; #displacement control algorithm seking increment of \$dincr at node \$MNode at 1st dof.
set ok [analyze \$i]

#incase of Convergance:
if {\$ok>=0} {
set ntry [testIter] ; #returns Number of tries to achive convergance
set crd [nodeDisp \$MNode 1]; #returns Current Disp. of Monitor node in 1st dof
puts "*** Step:\$i Try:\$ntry Roof Disp:\$crd ***"

#Automatic Step Modifier (IF Conditions Approved then increase increment):
if {\$ntry<=2 && \$dincr<=\$maxincr} {

if {\$dincr<= 1.0e-9} {
set dincr [expr \$dincr*20]
set tol 1e-1
}
if {\$dincr<= 1.0e-6 && \$dincr> 1.0e-9 } {
set dincr [expr \$dincr*9]
set tol 1e-3
}
if {\$dincr<= 1.0e-3 && \$dincr> 1.0e-6 } {
set dincr [expr \$dincr*3]
set tol 1e-5
}
if {\$dincr> 1.0e-3 } {
set dincr [expr \$dincr*1.5]
set tol 1e-6
}
puts "\n\n\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
puts " Increase increment Size to: \$dincr"
puts " Telorance:\$tol"
puts "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"
}
}

###If Not Connverged:
if {\$ok<0} {
set i [expr \$i-1]; #Hold Analysis Step

#Automatic Step Modifier
if {\$dincr<= 1.0e-9} {
set dincr [expr \$dincr*0.1]
set tol 1
}
if {\$dincr<= 1.0e-6 && \$dincr> 1.0e-9 } {
set dincr [expr \$dincr*0.15]
set tol 1e-1
}
if {\$dincr<= 1.0e-3 && \$dincr> 1.0e-6 } {
set dincr [expr \$dincr*0.3]
set tol 1e-2
}
if {\$dincr> 1.0e-3 } {
set dincr [expr \$dincr*0.5]
set tol 1e-4
}
#if increment is lower than minimum Increment Exit
if {\$dincr< \$minincr } {
exit
}

puts "\n\n\n\n\n------------------------------------------------------------------------"
puts " Step:\$i"
puts " Step size reduced to : \$dincr"
puts " Telorance:\$tol"
puts " Roof Displacement:\$crd"
puts "------------------------------------------------------------------------\n"

}
}
___________________

___________________

MichaelDupuis
Posts: 20
Joined: Mon Apr 25, 2011 1:31 pm
Location: UBC

### Re: Pushover convergence solution

Thank you so much! Its working great!
Michael

mmontazeri
Posts: 4
Joined: Wed Nov 10, 2010 11:47 pm
Location: Tehran