Convergence Issue During Time History Analysis

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

Moderators: silvia, selimgunay, Moderators

Post Reply
SUJOY
Posts: 4
Joined: Sun Dec 06, 2020 10:41 pm

Convergence Issue During Time History Analysis

Post by SUJOY » Mon Dec 07, 2020 12:12 am

I'm doing time-history analysis of Four-storied MRF frame structure. I've defined the several required parameters and successfully done several analyses such as modal analysis, static analysis, pushover analysis. But during this time history analysis, I've been facing convergence issue from past one month. I had done several ways to resolve the issue but none of them was successful. I've attached the image of the convergence criteria issue along with the analysis portion of written code.
Results:
OpenSees > source Run_Time_History.tcl
Gravity Analysis: 2D Frame Structure
Time History Analysis: 2D Frame Structure
Analysis_1 k 1 j 1 lambda 1 Dt 0.0002 Tol 2.0E-6 Algorithm NewtonLineSearch -type Bisection
WARNING: CTestNormDispIncr::test() - failed to converge
after: 50 iterations current Norm: 2.89397e-06 (max: 2e-06, Norm deltaR: 1.61815)
NewtonLineSearch::solveCurrentStep() -the ConvergenceTest object failed in test()
DirectIntegrationAnalysis::analyze() - the Algorithm failed at time 12.105
OpenSees > analyze failed, returned: -3 error flag
################################################
Analysis k 1 j 1 lambda 1 FAILED
Time in hours-min-sec: 0:0:28


code part:
################################################################################
# ANALYSIS PARAMETERS
################################################################################

# Define analysis options (Transient)
# Definition of the tolerance and of the maximum number of iteration
set Tol 2.0E-6
set maxIter 50
# Convergence Test
# test NormDispIncr $tol $iter
test NormDispIncr $Tol $maxIter 0 0
# Define load pattern
# pattern UniformExcitation $patternTag $dir -accel $tsTag <-vel0 $vel0> <-fact $cFactor>
pattern UniformExcitation 3 1 -accel $TimeSeries01
# Constraint Handler
constraints Transformation
# Integrator
# integrator Newmark $gamma $beta
integrator Newmark +5.000000E-001 +2.500000E-001
# Rayleigh Damping
# rayleigh $alphaM $betaK $betaKinit $betaKcomm
rayleigh $aR $bR +0.000000E+000 +0.000000E+000
# Solution Algorithm (default minEta=0.1 & maxEta=10, default tol=0.8 & maxIter=10)
# algorithm NewtonLineSearch <-type $typeSearch> <-tol $tol> -maxIter $maxIter <-minEta $minEta> <-maxEta $maxEta>
algorithm NewtonLineSearch -type Bisection -tol 0.8 -maxIter 100 -minEta +1.000000E-001 -maxEta +1.000000E+001
# DOF Numberer
numberer RCM
# System of Equations
system BandGeneral
# Analysis Type
analysis Transient
#############################################################################################################################
#if {$ok != 0} {
#algorithm Linear
#set ok [analyze 1 $DtAnalysis]
#algorithm EnergyIncr
#}
#if {$ok != 0} {
#algorithm Linear
#set ok [analyze 1 $DtAnalysis]
#algorithm RelativeNormDispIncr
#}
#if {$ok != 0} {
#algorithm BFGS
#set ok [analyze 1 $DtAnalysis]
#algorithm EnergyIncr
#}
##################################################################################################################################
set begin [clock clicks -milliseconds]

################################################################################
# ANALYSIS
################################################################################

# First Strategy based on test displacement and NewtonLineSearch algoritm (for m)
# Initial variables before starting dynamic analysis
set ok 0;
set t 0;
set startTime [clock clicks -milliseconds];
set finalt [expr [getTime]+[expr $numstep*$dt]];
set DtAnalysis [expr 0.01*$dt];
puts "Analysis_1 k $k j $j lambda $lambda Dt $DtAnalysis Tol $Tol Algorithm NewtonLineSearch -type Bisection"
while {$ok == 0 && $t <= $finalt} {
set ok [analyze 1 $DtAnalysis]
set t [getTime]
# Update the time
set currentTime [getTime]
}
set finishTime [clock clicks -milliseconds];
set timeSeconds [expr ($finishTime-$startTime)/1000];
set timeMinutes [expr ($timeSeconds/60)];
set timeHours [expr ($timeSeconds/3600)];
set timeMinutes [expr ($timeMinutes - $timeHours*60)];
set timeSeconds [expr ($timeSeconds - $timeMinutes*60 - $timeHours*3600)];
if {$ok == 0} {
puts "################################################"
puts " Analysis k $k j $j lambda $lambda completed SUCCESSFULLY";
puts "Time in hours-min-sec: $timeHours:$timeMinutes:$timeSeconds"
puts "################################################"
} else {
puts "################################################"
puts "Analysis k $k j $j lambda $lambda FAILED";
puts "Time in hours-min-sec: $timeHours:$timeMinutes:$timeSeconds"
puts "################################################"
}
# Final clean up
wipe



Can you please help me with this part...because without time history analysis I can't approach further.

selimgunay
Posts: 883
Joined: Mon Sep 09, 2013 8:50 pm
Location: University of California, Berkeley

Re: Convergence Issue During Time History Analysis

Post by selimgunay » Tue Dec 08, 2020 10:21 am

Here is an example of adaptive solution strategies that may help

set Tol 1.0e-8;
set maxNumIter 100;
set printFlag 0;
set NewmarkGamma 0.5;
set NewmarkBeta 0.25;
set TestType EnergyIncr;

set algorithmType NewtonLineSearch;
for {set ik 1} {$ik <= $Nsteps} {incr ik 1} {
puts "$ik"
# puts "$ik"
set ok [analyze 1 $dtForAnalysis]
# Convergence
if {$ok != 0} {
puts "Trying Bisection ...";
algorithm NewtonLineSearch <-type Bisection>;
set ok [analyze 1 $dtForAnalysis]
algorithm $algorithmType;
};
if {$ok != 0} {
puts "Trying Secant ...";
algorithm NewtonLineSearch <-type Secant>;
set ok [analyze 1 $dtForAnalysis]
algorithm $algorithmType;
};
if {$ok != 0} {
puts "Trying RegulaFalsi ...";
algorithm NewtonLineSearch <-type RegulaFalsi>;
set ok [analyze 1 $dtForAnalysis]
algorithm $algorithmType;
};
if {$ok != 0} {
puts "Trying KrylovNewton ...";
algorithm KrylovNewton;
set ok [analyze 1 $dtForAnalysis]
algorithm $algorithmType;
};
if {$ok != 0} {
puts "Trying Newton ...";
algorithm Newton;
set ok [analyze 1 $dtForAnalysis]
algorithm $algorithmType;
};
if {$ok != 0} {
puts "Trying BFGS ...";
algorithm BFGS;
set ok [analyze 1 $dtForAnalysis]
algorithm $algorithmType;
};
if {$ok != 0} {
puts "Trying Broyden ...";
algorithm Broyden;
set ok [analyze 1 $dtForAnalysis]
algorithm $algorithmType;
};
if {$ok != 0} {
puts "Trying HHT 0.9 ...";
integrator HHT 0.9;
set ok [analyze 1 $dtForAnalysis]
# integrator TRBDF2;
integrator Newmark $NewmarkGamma $NewmarkBeta;
};
if {$ok != 0} {
puts "Trying OS ...";
integrator AlphaOS 1.00;
algorithm Linear;
set ok [analyze 1 $dtForAnalysis]
# integrator TRBDF2;
integrator Newmark $NewmarkGamma $NewmarkBeta;
algorithm $algorithmType;
};
if {$ok != 0} {
puts "Trying OSG ...";
integrator AlphaOSGeneralized 1.00;
algorithm Linear;
set ok [analyze 1 $dtForAnalysis]
# integrator TRBDF2;
integrator Newmark $NewmarkGamma $NewmarkBeta;
algorithm $algorithmType;
};
if {$ok != 0} {
puts "Trying more iterations...";
test $TestType $Tol 1000 $printFlag;
set ok [analyze 1 $dtForAnalysis]
test $TestType $Tol $maxNumIter $printFlag;
};
if {$ok != 0} {
puts "Trying tolerance 1.0e-7 ...";
test $TestType 1.0e-7 $maxNumIter 0;
set ok [analyze 1 $dtForAnalysis]
test $TestType $Tol $maxNumIter $printFlag;
};
if {$ok != 0} {
puts "Trying tolerance 1.0e-6 ...";
test $TestType 1.0e-6 $maxNumIter 0;
set ok [analyze 1 $dtForAnalysis]
test $TestType $Tol $maxNumIter $printFlag;
};
if {$ok != 0} {
puts "Trying tolerance 1.0e-5 ...";
test $TestType 1.0e-5 $maxNumIter 0;
set ok [analyze 1 $dtForAnalysis]
test $TestType $Tol $maxNumIter $printFlag;
};
if {$ok != 0} {
puts "Trying tolerance 1.0e-3 ...";
test $TestType 1.0e-3 $maxNumIter 0;
set ok [analyze 1 $dtForAnalysis]
test $TestType $Tol $maxNumIter $printFlag;
};
if {$ok != 0} {
puts "Trying tolerance 1.0e-3 ...";
test $TestType 1.0e-3 $maxNumIter 0;
set ok [analyze 1 $dtForAnalysis/2.0]
test $TestType $Tol $maxNumIter $printFlag;
};
if {$ok != 0} {
puts "Trying tolerance 1.0e-3 ...";
test $TestType 1.0e-3 $maxNumIter 0;
set ok [analyze 1 $dtForAnalysis/4.0]
test $TestType $Tol $maxNumIter $printFlag;
};
if {$ok != 0} {
puts "Trying tolerance 1.0e-3 ...";
test $TestType 1.0e-3 $maxNumIter 0;
set ok [analyze 1 $dtForAnalysis/8.0]
test $TestType $Tol $maxNumIter $printFlag;
};
if {$ok != 0} {
puts "Trying tolerance 1.0e-3 ...";
test $TestType 1.0e-3 $maxNumIter 0;
set ok [analyze 1 $dtForAnalysis/16.0]
test $TestType $Tol $maxNumIter $printFlag;
};
if {$ok != 0} {
puts "Trying tolerance 1.0e-3 ...";
test $TestType 1.0e-3 $maxNumIter 0;
set ok [analyze 1 $dtForAnalysis/32.0]
test $TestType $Tol $maxNumIter $printFlag;
};
if {$ok != 0} {
puts "Trying tolerance 1.0e-3 ...";
test $TestType 1.0e-3 $maxNumIter 0;
set ok [analyze 1 $dtForAnalysis/64.0]
test $TestType $Tol $maxNumIter $printFlag;
};





if {$ok != 0} {
set Nstepsmax [expr $ik-1]
break;
}

}

if {[expr $ik-1] == $Nsteps} {

set AnalysisA [expr 1] } else {

set AnalysisA [expr 0] };

puts "Analysis completion=$AnalysisA"

set fileid10 [open "ConvergenceIndicator.txt" a];
puts $fileid10 "$AnalysisA"
close $fileid10

SUJOY
Posts: 4
Joined: Sun Dec 06, 2020 10:41 pm

Re: Convergence Issue During Time History Analysis

Post by SUJOY » Fri Dec 11, 2020 2:03 pm

Thanks a lot, @selimgunay

Post Reply