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”
Trying nonlinear methods with integrator LoadControl
Moderators: silvia, selimgunay, Moderators
-
- Posts: 8
- Joined: Wed Aug 07, 2013 6:37 am
- Location: Logroño Spain
- Contact:
Re: Trying nonlinear methods with integrator LoadControl
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]
}
set cFactor 0.0
while {$cFactor < $targetFactor && $ok == 0} {
..
..
set cFactor [getTIme]
}