Damping issues when doing transient analysis

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

Moderators: silvia, selimgunay, Moderators

Post Reply
gooddaytogo
Posts: 23
Joined: Fri Mar 01, 2019 7:15 pm
Location: Texas Tech University

Damping issues when doing transient analysis

Post by gooddaytogo » Tue Aug 25, 2020 10:24 pm

Hello, everyone,

As described in the code below, before the transient analysis, the static analysis was carried out, the problem is when using rayleigh damping, everything goes well with the settings in the codes, but when switched to modal damping, the following WARNING will appear,

WARNING - ForceBeamColumn3d::update - failed to get compatible element forces & deformations for element: 1(dW: << 95.0218, dW0: 1.60825e+36)

so can anyone help solve this issue? Thanks.

Codes:
--------------------------------------------------------
analysis Static;
analyze 1;
loadConst -time 0.0
wipeAnalysis;

# Apply dynamics loads

source procDynamicLoad.tcl

set N 6;
eigen $N
modalDamping 0.01;

constraints Transformation;
numberer RCM;
system UmfPack -lvalueFact 50;
test NormDispIncr 1.0e-3 200;
algorithm NewtonLineSearch;
integrator Newmark 0.5 0.25;
analysis Transient;
analyze 10 0.04;
--------------------------------------------------------

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

Re: Damping issues when doing transient analysis

Post by mhscott » Wed Aug 26, 2020 5:38 am

It's kinda hard to tell what the issue is from the code you've provided. Try with dispBeamColumn and see if modal damping works. Your time step 0.04 is rather large. Also use FullGeneral solver with modal damping: https://wp.me/pbejzW-3

gooddaytogo
Posts: 23
Joined: Fri Mar 01, 2019 7:15 pm
Location: Texas Tech University

Re: Damping issues when doing transient analysis

Post by gooddaytogo » Wed Aug 26, 2020 6:46 am

dispBeamColumn needs more elements to make the results accurate enough, and FullGeneral costs more time, are there any better solutions for it? Thanks.

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

Re: Damping issues when doing transient analysis

Post by mhscott » Wed Aug 26, 2020 6:55 am

I know, but the intent is to see if there are similar convergence problems. If you're using modal damping, you will get convergence problems unless you use FullGeneral.

gooddaytogo
Posts: 23
Joined: Fri Mar 01, 2019 7:15 pm
Location: Texas Tech University

Re: Damping issues when doing transient analysis

Post by gooddaytogo » Wed Aug 26, 2020 7:32 am

Just tried FullGeneral, no WARNING. But it is really time-consuming.

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

Re: Damping issues when doing transient analysis

Post by mhscott » Wed Aug 26, 2020 8:09 am

You can try other solvers like BandSPD, but you will get varying levels of convergence problems when not using FullGeneral because modal damping creates a full damping matrix.

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

Re: Damping issues when doing transient analysis

Post by selimgunay » Wed Aug 26, 2020 4:51 pm

Withe other solvers, you can try adaptive solution strategies. Below is an example. To speed up your analysis in general, you can also use the OpenSees parallel version in Design Safe: https://www.designsafe-ci.org/rw/worksp ... Simulation

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

Post Reply