Trying nonlinear methods with integrator LoadControl

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

Moderators: silvia, selimgunay, Moderators

Post Reply
luiscelorrio
Posts: 8
Joined: Wed Aug 07, 2013 6:37 am
Location: Logroño Spain
Contact:

Trying nonlinear methods with integrator LoadControl

Post by luiscelorrio »

How I can implement a code like this for the case of the integrator command is
Integrator LoadControl ?. That is, If I use integrator LoadControl, is possible to change the algorithm through the integration process?
I have some convergence problems and I would like to try several nonlinear methods.
Thanks on advance
Luis

set algorithmType Newton
algorithm $algorithmType;
integrator DisplacementControl $IDctrlNode $IDctrlDOF $Dincr
analysis Static

# --------------------------------- perform Static Pushover Analysis
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

# ---------------------------------- in case of convergence problems
if {$ok != 0} {
# change some analysis parameters to achieve convergence
# performance is slower inside this loop
set ok 0;
set controlDisp 0.0; # start from zero
set D0 0.0; # start from zero
set Dstep [expr ($controlDisp-$D0)/($Dmax-$D0)]
while {$Dstep < 1.0 && $ok == 0} {
set controlDisp [nodeDisp $IDctrlNode $IDctrlDOF ]
set Dstep [expr ($controlDisp-$D0)/($Dmax-$D0)]
set ok [analyze 1 ]
if {$ok != 0} {
puts "Trying Newton with Initial Tangent .."
test NormDispIncr $Tol 2000 0
algorithm Newton -initial
set ok [analyze 1 ]
test $TestType $Tol $maxNumIter 0
algorithm $algorithmType
}
if {$ok != 0} {
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 ]
algorithm $algorithmType
}
if {$ok != 0} {
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch .8
set ok [analyze 1 ]
algorithm $algorithmType
}
}
}; # end if ok !0

puts "DonePushover”
fmk
Site Admin
Posts: 5884
Joined: Fri Jun 11, 2004 2:33 pm
Location: UC Berkeley
Contact:

Re: Trying nonlinear methods with integrator LoadControl

Post by fmk »

just replace DisplacementControl with LoadControl on that 1 line .. if you want to stop when a displacement hits a limit use the above while condition, if you want to stop when the "pseudo-time" or load factor reaches a value modify it:

set cFactor 0.0
while {$cFactor < $targetFactor && $ok == 0} {
..
..
set cFactor [getTIme]
}
Post Reply