Push analysis doesn't converge

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

Moderators: silvia, selimgunay, Moderators

geoStru
Posts: 37
Joined: Mon Aug 24, 2020 12:24 pm

Push analysis doesn't converge

Post by geoStru »

Hi Everyone, I am building a 3D model with the file example that I downloaded by the wiki. I followed the procedure but I set my units (mm,N,sec) and geometry and I changed $fc and $Ec of Concrete02. I din't change anything else.
I run the eigen analysis and the T1 is right.
When I run the static pushover analysis the analysis doesn't converge:
"CTestEnergyIncr::test() - failed to converge
after: 6 iterations
current EnergyIncr: 4.44305e-08 (max: 1e-08) Norm deltaX: 2.7625e+06, Norm deltaR: 2.79356e+06
NewtnRaphson::solveCurrentStep() -the ConvergenceTest object failed in test()
StaticAnalysis::analyze() - the Algorithm failed at iteration: 10 with domain at load factor 2.14295
OpenSees > analyze failed, returned: -3 error flag"

What could it to be?
selimgunay
Posts: 916
Joined: Mon Sep 09, 2013 8:50 pm
Location: University of California, Berkeley

Re: Push analysis doesn't converge

Post by selimgunay »

Does it have a convergence issue right at the beginning of pushover? If it is somewhere in the following steps, you need to try other adaptive solution strategies than those given. Here is an example

algorithm Newton -initial
set ok [analyze 1]
test $testTypeStatic $TolStatic $maxNumIterStatic 0
algorithm $algorithmTypeStatic
}
if {$ok != 0} {
puts "Trying Broyden .."
# algorithm Broyden 8

algorithm Broyden 500

set ok [analyze 1 ]
algorithm $algorithmTypeStatic
}
if {$ok != 0} {
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch 0.8
set ok [analyze 1]
algorithm $algorithmTypeStatic
}

# Convergence
if {$ok != 0} {
puts "Trying Bisection ...";
algorithm NewtonLineSearch <-type Bisection>;
set ok [analyze 1 ]
algorithm $algorithmTypeStatic;
};

if {$ok != 0} {
puts "Trying Secant ...";
algorithm NewtonLineSearch <-type Secant>;
set ok [analyze 1 ]
algorithm $algorithmTypeStatic;
};

if {$ok != 0} {
puts "Trying RegulaFalsi ...";
algorithm NewtonLineSearch <-type RegulaFalsi>;
set ok [analyze 1 ]
algorithm $algorithmTypeStatic;
};

if {$ok != 0} {
puts "Trying KrylovNewton ...";
algorithm KrylovNewton;
set ok [analyze 1 ]
algorithm $algorithmTypeStatic;
};

if {$ok != 0} {
puts "Trying Newton ...";
algorithm Newton;
set ok [analyze 1 ]
algorithm $algorithmTypeStatic;
};

if {$ok != 0} {
puts "Trying BFGS ...";
algorithm BFGS;
set ok [analyze 1 ]
algorithm $algorithmTypeStatic;
};

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;
};
mhscott
Posts: 880
Joined: Tue Jul 06, 2004 3:38 pm
Location: Corvallis, Oregon USA
Contact:

Re: Push analysis doesn't converge

Post by mhscott »

Does it work with Concrete01? Here are some steps you can run through to check things out: https://wp.me/pbejzW-1C
geoStru
Posts: 37
Joined: Mon Aug 24, 2020 12:24 pm

Re: Push analysis doesn't converge

Post by geoStru »

I tryed the other adaptive solution strategies but I am falling.
I wrote 2 identical file with the same 3D geometry and the same section properties.
I checked the gravity and eigen analysis for the 2 file: they are the same.

In the first file "in", "kip" and "sec" are fundamental units. SI derived "mm" and "N" and I put, for example:
set HCol [expr 500*$mm].
The ANALYSIS CONVERGE

In the second file I use "mm", "N" and "sec" which foundamental units.
I put, for example:
set HCol 500;
The ANALYSIS DOESN'T CONVERGE IN ALL CASE.

I tryed to apply the section elastic, it doesn't converge.
During the script I INVOC ONLY "BuildRCrectSection.tcl" THAT I DOWNLOADED BY THE WIKI and I didn't change it. Could it be this the problem?
mhscott
Posts: 880
Joined: Tue Jul 06, 2004 3:38 pm
Location: Corvallis, Oregon USA
Contact:

Re: Push analysis doesn't converge

Post by mhscott »

Check if there are any assumed units in BuildRCrectSection.tcl. Sounds like a units problem.
selimgunay
Posts: 916
Joined: Mon Sep 09, 2013 8:50 pm
Location: University of California, Berkeley

Re: Push analysis doesn't converge

Post by selimgunay »

When you do operations using two integers in tcl, the resulting number is an integer, for example 1/4=0, while 1.0/4=0.25. I see that you are using 500 in your example. In general, it is better to use floats (i.e. 500.0 instead of 500) to avoid any potential integer operation issues. Your problem could be because of that.
geoStru
Posts: 37
Joined: Mon Aug 24, 2020 12:24 pm

Re: Push analysis doesn't converge

Post by geoStru »

I tryed to change 500 to 500.0, but it isn't the problem.

With the section elastic the analysis converge. Then I think the probem is during I define the sections of my elements

The proc that I invoc is this:
proc BuildRCrectSection {id HSec BSec coverH coverB coreID coverID steelID numBarsTop barAreaTop numBarsBot barAreaBot numBarsIntTot barAreaInt nfCoreY nfCoreZ nfCoverY nfCoverZ} {

set coverY [expr $HSec/2.0];
set coverZ [expr $BSec/2.0];
set coreY [expr $coverY-$coverH];
set coreZ [expr $coverZ-$coverB];
set numBarsInt [expr $numBarsIntTot/2];
section fiberSec $id {
patch quadr $coreID $nfCoreZ $nfCoreY -$coreY $coreZ -$coreY -$coreZ $coreY -$coreZ $coreY $coreZ
patch quadr $coverID 2 $nfCoverY -$coverY $coverZ -$coreY $coreZ $coreY $coreZ $coverY $coverZ
patch quadr $coverID 2 $nfCoverY -$coreY -$coreZ -$coverY -$coverZ $coverY -$coverZ $coreY -$coreZ
patch quadr $coverID $nfCoverZ 2 -$coverY $coverZ -$coverY -$coverZ -$coreY -$coreZ -$coreY $coreZ
patch quadr $coverID $nfCoverZ 2 $coreY $coreZ $coreY -$coreZ $coverY -$coverZ $coverY $coverZ
layer straight $steelID $numBarsInt $barAreaInt -$coreY $coreZ $coreY $coreZ;
layer straight $steelID $numBarsInt $barAreaInt -$coreY -$coreZ $coreY -$coreZ;
layer straight $steelID $numBarsTop $barAreaTop $coreY $coreZ $coreY -$coreZ;
layer straight $steelID $numBarsBot $barAreaBot -$coreY $coreZ -$coreY -$coreZ;
}

I think you know this proc

Then, for example, for ColSec I put:
set ColSecTag 1
set ColSecTagFiber 4

# Section Properties:
set HCol 500.0;
set BCol 500.0;
set cover 40.0;
set numBarsTopCol 6.0;
set numBarsBotCol 6.0;
set numBarsIntCol 4.0;
set barAreaTopCol 400.0;
set barAreaBotCol 400.0;
set barAreaIntCol 400.0;
set nfCoreY 20;
set nfCoreZ 20;
set nfCoverY 20;
set nfCoverZ 20;

#Define section
BuildRCrectSection $ColSecTagFiber $HCol $BCol $cover $cover $IDconcCore $IDconcCover $IDSteel $numBarsTopCol $barAreaTopCol $numBarsBotCol $barAreaBotCol $numBarsIntCol $barAreaIntCol $nfCoreY $nfCoreZ $nfCoverY $nfCoverZ;
uniaxialMaterial Elastic $SecTagTorsion $Ubig
section Aggregator $ColSecTag $SecTagTorsion T -section $ColSecTagFiber
Last edited by geoStru on Tue Aug 25, 2020 12:45 pm, edited 1 time in total.
selimgunay
Posts: 916
Joined: Mon Sep 09, 2013 8:50 pm
Location: University of California, Berkeley

Re: Push analysis doesn't converge

Post by selimgunay »

It converges with the elastic elements because it is linear and there are no iterations.

Could you write down your issue step by step again and indicate what was working and after which change you started to experience nonconvergence.

One other thing that you can try is reduce the size of displacement increments that you use in the pushover analysis
geoStru
Posts: 37
Joined: Mon Aug 24, 2020 12:24 pm

Re: Push analysis doesn't converge

Post by geoStru »

I will try. Thank you
Anyway, isn't an unit problem or a proc that I invoc, right?
selimgunay
Posts: 916
Joined: Mon Sep 09, 2013 8:50 pm
Location: University of California, Berkeley

Re: Push analysis doesn't converge

Post by selimgunay »

If what you did is to take the example from the OpenSees website (which was working) and only changed the fc, then it is not a unit or function problem. Which example was it and which line did you change?
ankurjain
Posts: 55
Joined: Sun Aug 16, 2020 10:08 pm

Re: Push analysis doesn't converge

Post by ankurjain »

https://opensees.berkeley.edu/wiki/inde ... _W-Section

I have also downloaded the same example and did what @geoStru has done.... I am also facing the same issue.
geoStru
Posts: 37
Joined: Mon Aug 24, 2020 12:24 pm

Re: Push analysis doesn't converge

Post by geoStru »

ankurjain wrote: Thu Aug 27, 2020 9:46 pm https://opensees.berkeley.edu/wiki/inde ... _W-Section

I have also downloaded the same example and did what @geoStru has done.... I am also facing the same issue.
Now it seems converge. Which units are you using?
First I used "N" and "mm" but when I changed in "N" and "m" the analysis converged. I don't kwon why but I think that the problem is during buildRCrectSection:
set HCol [expr 5000*$mm] (basic units "N" and "mm") the analysis doesn't converge
set HCol [expr 0.50*$m] (basic units "N" and "m") the analysis converges
mhscott
Posts: 880
Joined: Tue Jul 06, 2004 3:38 pm
Location: Corvallis, Oregon USA
Contact:

Re: Push analysis doesn't converge

Post by mhscott »

5000mm and 0.5m are not the same :D
geoStru
Posts: 37
Joined: Mon Aug 24, 2020 12:24 pm

Re: Push analysis doesn't converge

Post by geoStru »

sorry I wanted to write
set HCol [expr 500*$mm]
set HCol [expr 0.50*$m]
mhscott
Posts: 880
Joined: Tue Jul 06, 2004 3:38 pm
Location: Corvallis, Oregon USA
Contact:

Re: Push analysis doesn't converge

Post by mhscott »

Can you try using integers for the num reinforcing bars variables:

Code: Select all

set numBarsTopCol 6;
set numBarsBotCol 6;
set numBarsIntCol 4;
Post Reply