Best Solution Algorithm for Convergence Problems in IDA

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

Moderators: silvia, selimgunay, Moderators

Post Reply
afshina
Posts: 15
Joined: Sat Aug 23, 2014 4:55 am

Best Solution Algorithm for Convergence Problems in IDA

Post by afshina »

Hello
thank you for your useful responses
It goes without saying that incremental dynamic analysis in sophisticated models causes convergence problems and we need to add a solution algorithm, to eliminate these problems.
I prepared an incremental dynamic analysis code using a for-each loop like this:
……………………………………………………………………………………………
foreach {Name dt dtana PGA T Sa} {chuetsuoki0909g 0.01 0.001 0.909 69.99 1.186 elmayorcucapahriito039g 0.005 0.001 0.39 129.995 0.296 …….} { ;
for {set i 2} {$i<=30} {incr i 2} {
…………………………………………………………………………………….

as you seen in the first line, I defined two time steps for my model; Record time step (dt) and analysis time step (dtana). a substantially important point is that the analysis time step is smaller than the Record time step.

There are two solution algorithms to eliminate convergence problems which state below:
……………………………………………………………………………………………
Algorithms Number-1 which is based on changing time step of analysis.
# create the analysis
source LibAnalysisDynamicParameters.tcl
set TmaxAnalysis 69.99
set DtAnalysis 0.01
set CurrentTime [getTime] ;
set CurrentStep 1;
while { $CurrentTime < [expr $TmaxAnalysis] } { ;
set ok [analyze 1 $DtAnalysis] ;
set CurrentTime [getTime] ;
if { $ok == 0 } { ;
set CurrentStep [expr $CurrentStep+1.0] ;
set CurrentTime [getTime] ;
puts " + SUCCESSFULL ANALYSIS: Step: [format %0.0f $CurrentStep], Time:[format %0.5f $CurrentTime]" ;
} else {
set divVal {1 2 4 5 1e1 1e3 1e4 1e6 1e7 1e10 1e12} ;
set div 2 ;
set divCnt 0 ;
while { ($ok != 0) && ( $divCnt < [llength ($divVal)]) } { ;
set div [lindex $divVal $divCnt] ;
set CurrentTime [getTime] ;
puts " ============================================================================= " ;
puts " *** CONVERGANCE PROBLEM *** " ;
puts " ----------------------------------------------------------------------------- " ;
puts " Reducing the timestep by $div " ;
set PassSubStep [analyze 1 [expr $DtAnalysis/$div]] ;
if { $PassSubStep == 0 } { ;
set CurrentTime [getTime] ;
puts " PROBLEM SOLVED: Converganced Successfully at the Substep. " ;
puts " ----------------------------------------------------------------------------- " ;
puts " + SUCCESSFULL ANALYSIS: Step: [format %0.0f $CurrentStep], Time:[format %0.5f $CurrentTime]" ;
puts " ============================================================================= " ;
puts " " ;
set ok 0 ;
set divCnt 1e1000 ;
} else {
puts " ----------------------------------------------------------------------------- " ;
puts " + RESULT: " ;
puts " PROBLEM NOT SOLVED: Convergance PROBLEM at the Substep !!! " ;
puts " ============================================================================= " ;
puts " " ;
set ok 1 ;
set divCnt [expr $divCnt+1] ;
} ;
} ;
} ;
} ;
puts "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
puts "groundmotion Sa=[expr 0.05*$i.] done,pga=[expr $i.*0.09384]!---.End Time: [getTime]"
puts "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
}
......................................................................................................................................................................................
......................................................................................................................................................................................

Algorithms Number-2 which is based on change of some analysis parameters including Solution methods of equations and .. , to achieve convergence.

# create the analysis
wipeAnalysis; # clear previously-define analysis parameters
puts "groundmotion start!.Time: [getTime]"
constraints Transformation; # how it handles boundary conditions
numberer Plain; # renumber dof's to minimize band-width (optimization), if you want to
system SparseGeneral -piv; # how to store and solve the system of equations in the analysis
set Tol 1.e-5;
set maxNumIter 35;
set TestType EnergyIncr;
test $TestType $Tol $maxNumIter 5;
set algorithmType ModifiedNewton
algorithm $algorithmType;
set NewmarkGamma 0.5;
set NewmarkBeta 0.25;
integrator Newmark $NewmarkGamma $NewmarkBeta
analysis Transient;
set xDamp 0.02;
set lambda [eigen 1];
set omega [expr pow($lambda,0.5)];
set alphaM 0.0;
set betaKcomm [expr 2.*$xDamp/($omega)];
set betaKinit 0.0;

rayleigh $alphaM 0 0 $betaKcomm;

set IDloadTag 400;
set dt 0.01
set GMfatt 1.0;
set Nsteps [expr int($T/$dtana)];
set ok [analyze $Nsteps $dtana]; # actually perform analysis; returns ok=0 if analysis was successful
if {$ok != 0} { ; # analysis was not successful.
# --------------------------------------------------------------------------------------------------
# change some analysis parameters to achieve convergence
# performance is slower inside this loop
# Time-controlled analysis
set ok 0;
set controlTime [getTime];
while {$controlTime < $T && $ok == 0} {
set controlTime [getTime]
set ok [analyze 1 $dtana]
if {$ok != 0} {
puts "Trying Newton with Initial Tangent .."
test NormDispIncr $Tol 1000 0
algorithm Newton -initial
set ok [analyze 1 $dtana]
test EnergyIncr 1.e-8 10 0
algorithm ModifiedNewton
}
if {$ok != 0} {
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 $dtana]
algorithm ModifiedNewton
}
if {$ok != 0} {
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch .8
set ok [analyze 1 $dtana]
algorithm ModifiedNewton
}
}
}; # end if ok !0


puts "groundmotion [expr $i./20]Sa done!. End Time: [getTime]"

wipe
}
}
......................................................................................................................................................................................
......................................................................................................................................................................................

Which Algorithm do you prefer and why? I personally find the latter Algorithm more logical. Because of (dtana) is smaller than (dt), it doesn’t need to add an Algorithm based on time step of analysis.

Thanks a lot.
Post Reply