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

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

Pushover convergence solution

Post by mmontazeri »

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"

}
}
___________________

Mohamad.Montazeri
___________________
MichaelDupuis
Posts: 20
Joined: Mon Apr 25, 2011 1:31 pm
Location: UBC

Re: Pushover convergence solution

Post by MichaelDupuis »

Thank you so much! Its working great!
Michael
mmontazeri
Posts: 4
Joined: Wed Nov 10, 2010 11:47 pm
Location: Tehran

Re: Pushover convergence solution

Post by mmontazeri »

Your welcome!

I suggest You to reduce values inside IF Arguments (for both $tol & $dincr) to Achieve more accurecy
___________________

Mohamad.Montazeri
___________________
Post Reply