Damping cause divergence

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

Moderators: silvia, selimgunay, Moderators

Post Reply
Gholamreza
Posts: 84
Joined: Tue Nov 07, 2017 7:47 am
Location: University of Central Florida

Damping cause divergence

Post by Gholamreza » Sat Sep 19, 2020 7:55 am

Hello engineers,

I have a 20 story SAC building modeled in Opensees. My dynamic analysis is just fine but as soon as I add 2% rayleigh damping I get the following error :

WARNING: CTestNormDispIncr::test() - failed to converge
after: 100 iterations current Norm: 2.31217e-09 (max: 1e-09, Norm deltaR: 0.161635)
NewtonLineSearch::solveCurrentStep() -the ConvergenceTest object failed in test()
DirectIntegrationAnalysis::analyze() - the Algorithm failed at time 3.46
OpenSees > analyze failed, returned: -3 error flag
Dynamic analysis did not converge
The current time is: 3.455000

I can solve the problem by decreasing the time-step however that increases the running time tremendously!!
Can anyone help me by that error ??

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

Re: Damping cause divergence

Post by selimgunay » Sat Sep 19, 2020 10:18 am

Did you try the adaptive solution strategies using different integration methods, nonlinear solvers, tolerances, etc? Below is an example. Please try it and if you can resolve it with this and your only option is the reduced time step, you can consider using parallel versions of OpenSees in Design Safe for much faster computations.

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

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

Re: Damping cause divergence

Post by selimgunay » Sat Sep 19, 2020 10:20 am

Also for Rayleigh damping, which periods are using to compute the damping coefficients and which stiffness are you using? Committed tangent stiffness may be the best option from the perspectives of accuracy and numerical issues.

Gholamreza
Posts: 84
Joined: Tue Nov 07, 2017 7:47 am
Location: University of Central Florida

Re: Damping cause divergence

Post by Gholamreza » Sat Sep 19, 2020 10:44 am

I use the frequency of the first two modes (w1 and w2). I am not sure about the differences between current, initial, and committed stiffness. I assume these are related to opensees source codes and integration steps. let say damping matrix [C]=a[M]+b[K]. I use the frequency of the first two modes (w1 and w2) to calculate the damping coefficients (a and b). Can I use b as a coefficient for either of current, initial or committed stiffness? if I use that for committed tangent stiffness I don't get any error as you said but I want to make sure I am using it properly ??

usy
Posts: 2
Joined: Tue Jun 02, 2020 10:21 pm

Re: Damping cause divergence

Post by usy » Fri Oct 02, 2020 4:42 am

Dear Gholamreza
You can find useful information on on damping matrix/Rayleigh in the following topic:
-Rayleigh damping problems by user mtsonicc (Wed Jan 20, 2016 3:44 am)

mhscott
Posts: 874
Joined: Tue Jul 06, 2004 3:38 pm
Location: Corvallis, Oregon USA
Contact:

Re: Damping cause divergence

Post by mhscott » Sun Oct 04, 2020 3:24 pm

Committed stiffness is usually the best choice for stiffness proportional damping. Initial stiffness gives too much damping after yield while current stiffness can cause convergence problems because the damping changes as a function of the stiffness at each iteration in a time step.

Post Reply