Fixing Convergence Error

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

Moderators: silvia, selimgunay, Moderators

Post Reply
maryammf
Posts: 47
Joined: Mon Oct 24, 2016 12:37 pm
Location: Istanbul Technical University

Fixing Convergence Error

Post by maryammf » Tue Sep 12, 2017 4:28 am

Dear All,

I was doing a dynamic analysis and I got this error at the end. It will be great to let me know how to fix it!

WARNING: CTestNormDispIncr::test() - failed to converge
after: 15 iterations current Norm: 0.153263 (max: 0.001, Norm deltaR: 315.903)
NewtnRaphson::solveCurrentStep() -the ConvergenceTest object failed in test()
DirectIntegrationAnalysis::analyze() - the Algorithm failed at time 0.015
OpenSees > analyze failed, returned: -3 error flag

These are my parameters for the transient analysis:

# analysis objects
constraints Transformation
test NormDispIncr 1e-3 15 1
algorithm Newton
numberer RCM
system ProfileSPD
integrator Newmark $gamma $beta
rayleigh $a0 $a1 0.0 0.0
analysis Transient
analyze $nSteps $dT

Many thanks!
Bests,

Jhno
Posts: 214
Joined: Sat May 05, 2012 2:55 pm
Location: Laval

Re: Fixing Convergence Error

Post by Jhno » Tue Sep 12, 2017 10:32 am

The error says that the test you used, failed.
WARNING: CTestNormDispIncr::test() - failed to converge

The maximum tolerant for the test was 1.e-3 (that you setted in the command) but the model attained a value of 0.153263, thus it stopped respecting the tolerance you gave.
after: 15 iterations current Norm: 0.153263 (max: 0.001, Norm deltaR: 315.903)

Now, there is no answer to your question "It will be great to let me know how to fix it!", cuz It all depends on your model and how you defined it.

You can try to lower your time step or incr. damping, but if the model isn't define correctly, it will still fails. Gl.

maryammf
Posts: 47
Joined: Mon Oct 24, 2016 12:37 pm
Location: Istanbul Technical University

Re: Fixing Convergence Error

Post by maryammf » Tue Sep 12, 2017 10:52 pm

Many thanks for your reply!

Actually I did the static analysis with the same model and it works with no problem. The gravity loading also works just for dynamic analysis by defining the time history loading gives this convergence error at the end! I will try the way you mentioned and hope it works!
Bests,

maryammf
Posts: 47
Joined: Mon Oct 24, 2016 12:37 pm
Location: Istanbul Technical University

Re: Fixing Convergence Error

Post by maryammf » Wed Sep 13, 2017 3:44 am

Hi again,

I tried the ways that you mentioned as decreasing the time step and the tolerance, increasing the gamma value in Newmark method and damping; the results got better and the last error is as follows! but still error!

WARNING: CTestNormDispIncr::test() - failed to converge
after: 15 iterations current Norm: 0.000115426 (max: 0.0001, Norm deltaR: 0.122051)
NewtnRaphson::solveCurrentStep() -the ConvergenceTest object failed in test()
DirectIntegrationAnalysis::analyze() - the Algorithm failed at time 0.0015
OpenSees > analyze failed, returned: -3 error flag
Finished with dynamic analysis...

Will appreciate any suggestion!
Many thanks,

EricsonEncinaZ
Posts: 108
Joined: Mon Sep 16, 2013 1:14 pm
Location: University of Auckland

Re: Fixing Convergence Error

Post by EricsonEncinaZ » Wed Sep 13, 2017 8:44 pm

Are you using adaptive solutions to overcome converging problems? or you are just selecting a fixed set of parameters?

maryammf
Posts: 47
Joined: Mon Oct 24, 2016 12:37 pm
Location: Istanbul Technical University

Re: Fixing Convergence Error

Post by maryammf » Thu Sep 14, 2017 11:10 am

These are my parameters defined for the transient analysis which gives me error! I decreased the tolerance. These parameters are fixed like the rayleigh coefficients,...
# analysis objects
constraints Transformation
test NormDispIncr 1e-4 15 1
algorithm Newton
numberer RCM
system ProfileSPD
integrator Newmark $gamma $beta
rayleigh $a0 $a1 0.0 0.0
analysis Transient
analyze $nSteps $dT

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

Re: Fixing Convergence Error

Post by selimgunay » Thu Sep 14, 2017 2:43 pm

You can use adaptive solution techniques, an example of which you can find below.

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

maryammf
Posts: 47
Joined: Mon Oct 24, 2016 12:37 pm
Location: Istanbul Technical University

Re: Fixing Convergence Error

Post by maryammf » Fri Sep 15, 2017 2:21 am

selimgunay wrote:
> You can use adaptive solution techniques, an example of which you can find below.
>
> 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


So many thanks for your kind cooperation. I tried and it works!
Bests,

Post Reply