A strange problem in a 3D building model in OpenSees

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

Moderators: silvia, selimgunay, Moderators

Post Reply
ehsanomranimemphis
Posts: 22
Joined: Thu Jun 08, 2017 2:31 pm
Location: Babol Noshirvani University of Technology

A strange problem in a 3D building model in OpenSees

Post by ehsanomranimemphis »

I modeled a 3D-3Story RC building in Opensees. I applied a time history with dt=0.00447 and my run is completed. But when I changed dt for example when I was dt=0.002 model failed to converge. It is weird. because when dt is decreased we expect running complete specially with larger dt model was converged.
selimgunay
Posts: 916
Joined: Mon Sep 09, 2013 8:50 pm
Location: University of California, Berkeley

Re: A strange problem in a 3D building model in OpenSees

Post by selimgunay »

It is not that strange. An added input peak due to the finer time discretization may be triggering a non-convergence issue. For avoiding nonconvergence, it is generally recommended to use a comprehensive algorithm of switching between integrators, nonlinear solvers, convergence tolerances, time steps, etc. Below is an example. You can adapt it for your case.

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
ehsanomranimemphis
Posts: 22
Joined: Thu Jun 08, 2017 2:31 pm
Location: Babol Noshirvani University of Technology

Re: A strange problem in a 3D building model in OpenSees

Post by ehsanomranimemphis »

Thank you for reply. I used the code you sent, but again model failed to converge. Is there any solution for solving my problem?
selimgunay
Posts: 916
Joined: Mon Sep 09, 2013 8:50 pm
Location: University of California, Berkeley

Re: A strange problem in a 3D building model in OpenSees

Post by selimgunay »

Please try expanding the switching algorithms with more if statements to try other things. If your analysis works with dt=0.00447, you can just use it, reducing the time step from 0.00447 to 0.002 will not improve your results.
ehsanomranimemphis
Posts: 22
Joined: Thu Jun 08, 2017 2:31 pm
Location: Babol Noshirvani University of Technology

Re: A strange problem in a 3D building model in OpenSees

Post by ehsanomranimemphis »

Thank you selimgunay. That works. Also I used foreach. It works too. So we can say there are at least two ways to consider uncertainty:
1- By "list" command
2- By "foreach" command
Post Reply