Push analysis doesn't converge
Moderators: silvia, selimgunay, Moderators
Push analysis doesn't converge
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?
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?
-
- Posts: 916
- Joined: Mon Sep 09, 2013 8:50 pm
- Location: University of California, Berkeley
Re: Push analysis doesn't converge
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;
};
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;
};
Re: Push analysis doesn't converge
Does it work with Concrete01? Here are some steps you can run through to check things out: https://wp.me/pbejzW-1C
Re: Push analysis doesn't converge
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?
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?
Re: Push analysis doesn't converge
Check if there are any assumed units in BuildRCrectSection.tcl. Sounds like a units problem.
-
- Posts: 916
- Joined: Mon Sep 09, 2013 8:50 pm
- Location: University of California, Berkeley
Re: Push analysis doesn't converge
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.
Re: Push analysis doesn't converge
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
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.
-
- Posts: 916
- Joined: Mon Sep 09, 2013 8:50 pm
- Location: University of California, Berkeley
Re: Push analysis doesn't converge
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
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
Re: Push analysis doesn't converge
I will try. Thank you
Anyway, isn't an unit problem or a proc that I invoc, right?
Anyway, isn't an unit problem or a proc that I invoc, right?
-
- Posts: 916
- Joined: Mon Sep 09, 2013 8:50 pm
- Location: University of California, Berkeley
Re: Push analysis doesn't converge
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?
Re: Push analysis doesn't converge
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.
I have also downloaded the same example and did what @geoStru has done.... I am also facing the same issue.
Re: Push analysis doesn't converge
Now it seems converge. Which units are you using?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.
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
Re: Push analysis doesn't converge
5000mm and 0.5m are not the same
Re: Push analysis doesn't converge
sorry I wanted to write
set HCol [expr 500*$mm]
set HCol [expr 0.50*$m]
set HCol [expr 500*$mm]
set HCol [expr 0.50*$m]
Re: Push analysis doesn't converge
Can you try using integers for the num reinforcing bars variables:
Code: Select all
set numBarsTopCol 6;
set numBarsBotCol 6;
set numBarsIntCol 4;