Convergence error - Displacement control intergrator

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

Moderators: silvia, selimgunay, Moderators

Post Reply
polimeruvijay
Posts: 43
Joined: Fri Jan 29, 2016 10:20 pm

Convergence error - Displacement control intergrator

Post by polimeruvijay » Sun Sep 03, 2017 8:50 pm

Dear Opensees Community Members

I am analyzing a cantilever bridge column under reversed cyclic loading using displacement control integrator. I am facing convergence problem during displacement increments, Analysis is throwing garbage values in the output file. Whenever I am getting garbage values in the opensees output file, I am manually stopping the analysis and re-run analysis with a different step size.

Every-time I cannot do manually, since I am doing hundreds of simulations. Is there a way to overcome this convergence issues.

Thank you...

ismailqeshta
Posts: 115
Joined: Mon Feb 20, 2017 1:19 am
Location: RMIT University, Melbourne, Australia

Re: Convergence error - Displacement control intergrator

Post by ismailqeshta » Sun Sep 03, 2017 9:03 pm

I usually use the following code for displacement-control analysis. Check it out.

#Converge Quick & Easy
set Dmax 609.6; #Target Displacment
set Dincr 0.3048; #initial disp. increment
set Tol 1.0e-6; #initial tolerance criteria used to check for convergence
set IDctrlNode 222; # Set Monitor Node Tag, i.e Roof node Tag is 20)
set IDctrlDOF 3; # degree of freedom (1) of disp read for disp control
set Dstep 0.0;
set fmt1 "%s Pushover analysis: CtrlNode %.1i, dof %.1i, Disp=%.4f"; # format for screen/file output of DONE/PROBLEM analysis

system BandGeneral
numberer RCM
constraints Transformation
# test EnergyIncr $Tol 400
test NormDispIncr 1.0e-6 100
algorithm Newton
integrator DisplacementControl $IDctrlNode $IDctrlDOF $Dincr; #displacement control algorithm seking increment of $dincr at node $MNode at 1st dof.
analysis Static

for {set i 1} {$Dstep <= 1.0} {incr i 1} {
set ok [analyze 1]

set controlDisp [nodeDisp $IDctrlNode $IDctrlDOF ]
set Dstep [expr $controlDisp/$Dmax]

if {$ok != 0} {
# if analysis fails, we try some other stuff, performance is slower inside this loop
set ok 0
while {$Dstep <= 1.0 && $ok == 0} {
set controlDisp [nodeDisp $IDctrlNode $IDctrlDOF ]
set Dstep [expr $controlDisp/$Dmax]
set ok [analyze 1]; # this will return zero if no convergence problems were encountered
if {$ok != 0} {; # reduce step size if still fails to converge
set Nk 10; # reduce step size
set DincrReduced [expr $Dincr/$Nk];
integrator DisplacementControl $IDctrlNode $IDctrlDOF $DincrReduced
for {set ik 1} {$ik <=$Nk} {incr ik 1} {
set ok [analyze 1]; # this will return zero if no convergence problems were encountered
#---------------------------------------------------------------
# if {$ok != 0} {
# # if analysis fails, we try some other stuff
# # performance is slower inside this loop global maxNumIterStatic; # max no. of iterations performed before "failure to converge" is ret'd
# puts "Trying Newton with Initial Tangent .."
# test NormDispIncr $Tol 2000 0
# algorithm Newton -initial
# set ok [analyze 1]
# test EnergyIncr $Tol 400
# 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
# }
#------------------------------------------------------------
if {$ok != 0} {
test NormDispIncr 1.0e-6 1000 1
algorithm Newton -initial
set ok [analyze 1]
test NormDispIncr 1.0e-6 100
algorithm Newton
}
#--------------------------------------------------------------------

if {$ok != 0} {; # stop if still fails to converge
puts [format $fmt1 "PROBLEM" $IDctrlNode $IDctrlDOF [expr $controlDisp] %]
return -1
}; # end if
}; # end for
integrator DisplacementControl $IDctrlNode $IDctrlDOF $Dincr; # bring back to original increment
}; # end if
}; # end while loop
}; # end if ok !0
## -----------------------------------------------------------------------------------------------------

if {$ok != 0 } {
puts [format $fmt1 "PROBLEM" $IDctrlNode $IDctrlDOF [expr $controlDisp]]
} else {
puts [format $fmt1 "DONE" $IDctrlNode $IDctrlDOF [expr $controlDisp]]
}
}

polimeruvijay
Posts: 43
Joined: Fri Jan 29, 2016 10:20 pm

Re: Convergence error - Displacement control intergrator

Post by polimeruvijay » Mon Sep 04, 2017 8:32 am

Dear ismailqeshta

Thank you very much for replying. Below mentioned is the code, which I am using for the Reversed Cyclic Pushover analysis. Your code is for monotonic pushover i.e. only one target displacement. But my case is reversed cyclic pushover, Multiple target displacements (Target displacement = numSteps * increments ) as mentioned in the below code. In the displacement control Integrator, for multiple step size increments, How can I change a particular step size automatically in the code and analyse the column from that step, when ever there is divergence.

# -----------------------------------------------------------------------------------------------Code Begin--------------------------------------------------------------------------------
# perform the analysis
# analyze 17380
set numSteps { 100 400 300 400 600 800 1200 1600 2050 2500 2960 3470 1000 10}
set numIters { 100 0 0 0 0 100 0 0 0 0 0 0 0 0}
set increments {0.01 -0.005 0.01 -0.01 0.01 -0.01 0.01 -0.01 0.01 -0.01 0.01 -0.01 0.01 -0.01}

for {set i 0} {$i<14} {incr i 1} {
set numStep [lindex $numSteps $i]
set numIter [lindex $numIters $i]
set increment [lindex $increments $i]

integrator DisplacementControl 13 1 $increment
if {$numIter == 0} {
set numIter 1
}
test NormDispIncr 1e-2 $numIter 5
analyze $numStep
}

# Print out the state of elements, if wanted
# print ele 1 2 3 4 5 6 7 8 9

#-----------------------------------------------------------------------------Code End-------------------------------------------------------------------------------------------

Post Reply