Convergence issue in reversed cyclic load - Bridge column

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

Moderators: silvia, selimgunay, Moderators

Post Reply
polimeruvijay
Posts: 43
Joined: Fri Jan 29, 2016 10:20 pm

Convergence issue in reversed cyclic load - Bridge column

Post by polimeruvijay » Sun Oct 29, 2017 9:05 pm

Dear Opensees Community Members

I am writing this query regarding " Convergence issue in using the displacement control integrator for Analyzing Hollow rectangular bridge columns subjected to cyclic loads".

I have modeled the cross section of RC hollow rectangular bridge column as an equivalent I section (combination of nonlinear beam column elements and 2D RC Plane stress CSMM elements, element name "FAFourSteelRCPlaneStress" developed by Prof. Y. L. Mo and Prof. T. T. C Hsu research group, University of Houston ), and applied reversed cyclic loads, I am using "Displacement control Integrator and NormDispIncr test command". I am facing a problem with these integrator and test commands. I have attached the input file.

I have divided each displacement peak into number of steps (numstep) and corresponding increments (increment). I am using "set OK [analysis $i]" to know where the analysis stops, but the "OK" value is never non-zero, I mean the analysis never stops, it kept on returning garbage values. whenever the analysis throwing garbage values, I am manually stopping the analysis and trying with different number of steps and step sizes. I was unable to run the analysis upto full displacement for a given particular set of steps and increments. This trial and error process is very cumbersome. I was unable to get the full cyclic curve even after hundreds of trials.


But, When I model the cross section of bridge column as a cantilever with only nonlinear beam column elements and fiber section. Both displacement control and integrator and test commands are working fine without any problem. I was able to get full cyclic curve of the column.

Could you please suggest, how to overcome this divergence issue?

How can I modify my input file, such that I can overcome this trial and error process of changing number of steps and corresponding step sizes?

Note: Below code is perfectly working with only Nonlinear beam-column elements, But not for a combination of (Nonlinear beam-column and RC Plane stress CSMM elements)

### ----------------------------------------------------Input file -----------------------------------------------------------------------------------------------------------------------------------------

# --------------------------------------------------------------------------------------------------
# Example 3. 2D Cantilever -- Static Pushover
# Silvia Mazzoni & Frank McKenna, 2006
# execute this file after you have built the model, and after you apply gravity
#
set IDctrlNode [expr $nH*($nL+1)+1]
set IDctrlDOF 1
# characteristics of pushover analysis
set PeakVector "8 -8 8 -8 16 -16 16 -16 32 -32 32 -32 48 -48 48 -48 64 -64 64 -64 80 -80 0.1"; # maximum displacement of pushover. push to 10% drift.
# set Dincr 0.25; # displacement increment for pushover. you want this to be very small, but not too small to slow down the analysis


set P 1000.0;

# Create a Plain load pattern with a linear TimeSeries
pattern Plain 2 "Linear" {

# Create the nodal load - command: load nodeID xForce yForce

set i 0;

while {$i < [expr $nL+1]} {

load [expr $nH*($nL+1)+1+$i] [expr $P/($nL+1)] 0

set i [expr $i+1]
}

}

# STATIC-ANALYSIS parameters
# CONSTRAINTS handler -- Determines how the constraint equations are enforced in the analysis (http://opensees.berkeley.edu/OpenSees/m ... al/617.htm)
# Plain Constraints -- Removes constrained degrees of freedom from the system of equations (only for homogeneous equations)
# Lagrange Multipliers -- Uses the method of Lagrange multipliers to enforce constraints
# Penalty Method -- Uses penalty numbers to enforce constraints --good for static analysis with non-homogeneous eqns (rigidDiaphragm)
# Transformation Method -- Performs a condensation of constrained degrees of freedom
set constraintsType Plain; # default;
constraints $constraintsType

# DOF NUMBERER (number the degrees of freedom in the domain): (http://opensees.berkeley.edu/OpenSees/m ... al/366.htm)
# determines the mapping between equation numbers and degrees-of-freedom
# Plain -- Uses the numbering provided by the user
# RCM -- Renumbers the DOF to minimize the matrix band-width using the Reverse Cuthill-McKee algorithm
numberer Plain

# SYSTEM (http://opensees.berkeley.edu/OpenSees/m ... al/371.htm)
# Linear Equation Solvers (how to store and solve the system of equations in the analysis)
# -- provide the solution of the linear system of equations Ku = P. Each solver is tailored to a specific matrix topology.
# ProfileSPD -- Direct profile solver for symmetric positive definite matrices
# BandGeneral -- Direct solver for banded unsymmetric matrices
# BandSPD -- Direct solver for banded symmetric positive definite matrices
# SparseGeneral -- Direct solver for unsymmetric sparse matrices
# SparseSPD -- Direct solver for symmetric sparse matrices
# UmfPack -- Direct UmfPack solver for unsymmetric matrices
system BandGeneral

# TEST: # convergence test to
# Convergence TEST (http://opensees.berkeley.edu/OpenSees/m ... al/360.htm)
# -- Accept the current state of the domain as being on the converged solution path
# -- determine if convergence has been achieved at the end of an iteration step
# NormUnbalance -- Specifies a tolerance on the norm of the unbalanced load at the current iteration
# NormDispIncr -- Specifies a tolerance on the norm of the displacement increments at the current iteration
# EnergyIncr-- Specifies a tolerance on the inner product of the unbalanced load and displacement increments at the current iteration
set Tol 1e-3; # Convergence Test: tolerance
set maxNumIter 2000; # Convergence Test: maximum number of iterations that will be performed before "failure to converge" is returned
set printFlag 0; # Convergence Test: flag used to print information on convergence (optional) # 1: print information on each step;
set TestType EnergyIncr; # Convergence-test type
test $TestType $Tol $maxNumIter $printFlag;

# Solution ALGORITHM: -- Iterate from the last time step to the current (http://opensees.berkeley.edu/OpenSees/m ... al/682.htm)
# Linear -- Uses the solution at the first iteration and continues
# Newton -- Uses the tangent at the current iteration to iterate to convergence
# ModifiedNewton -- Uses the tangent at the first iteration to iterate to convergence
set algorithmType KrylovNewton
algorithm $algorithmType;

# Static INTEGRATOR: -- determine the next time step for an analysis (http://opensees.berkeley.edu/OpenSees/m ... al/689.htm)
# LoadControl -- Specifies the incremental load factor to be applied to the loads in the domain
# DisplacementControl -- Specifies the incremental displacement at a specified DOF in the domain
# Minimum Unbalanced Displacement Norm -- Specifies the incremental load factor such that the residual displacement norm in minimized
# Arc Length -- Specifies the incremental arc-length of the load-displacement path
# Transient INTEGRATOR: -- determine the next time step for an analysis including inertial effects
# Newmark -- The two parameter time-stepping method developed by Newmark
# HHT -- The three parameter Hilbert-Hughes-Taylor time-stepping method
# Central Difference -- Approximates velocity and acceleration by centered finite differences of displacement

foreach Dmax $PeakVector {

if {$Dmax > 0} {
set Dincr 0.01
}

if {$Dmax < 0} {
set Dincr [expr -0.01]
}

puts "-------------------------------------------------------------------------"
puts "Dmax = $Dmax"
puts "-------------------------------------------------------------------------"


integrator DisplacementControl $IDctrlNode $IDctrlDOF $Dincr

# ANALYSIS -- defines what type of analysis is to be performed (http://opensees.berkeley.edu/OpenSees/m ... al/324.htm)
# Static Analysis -- solves the KU=R problem, without the mass or damping matrices.
# Transient Analysis -- solves the time-dependent analysis. The time step in this type of analysis is constant. The time step in the output is also constant.
# variableTransient Analysis -- performs the same analysis type as the Transient Analysis object. The time step, however, is variable. This method is used when
# there are convergence problems with the Transient Analysis object at a peak or when the time step is too small. The time step in the output is also variable.
analysis Static



# --------------------------------- perform Static Pushover Analysis
# set Nsteps [expr int($Dmax/$Dincr)]; # number of pushover analysis steps

# puts "Nsteps = $Nsteps"
# set ok [analyze $Nsteps]; # this will return zero if no convergence problems were encountered



# if {$ok != 0} {
# if analysis fails, we try some other stuff, performance is slower inside this loop
set ok 0;
set controlDisp 0.0;
set D0 0.0; # analysis starts from zero
set Dstep [expr ($controlDisp-$D0)/($Dmax-$D0)]
while {$Dstep < 1.0 && $ok == 0} {
set controlDisp [nodeDisp $IDctrlNode $IDctrlDOF ]
set Dstep [expr ($controlDisp-$D0)/($Dmax-$D0)]
set ok [analyze 1 ]
if {$ok != 0} {
puts "Trying Newton with Initial Tangent .."
test NormDispIncr $Tol 2000 0
algorithm Newton -initial
set ok [analyze 1 ]
test $TestType $Tol $maxNumIter 0
algorithm $algorithmType
}
if {$ok != 0} {
puts "Trying Broyden .."
algorithm Broyden 20
set ok [analyze 1 ]
algorithm $algorithmType
}
if {$ok != 0} {
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch .8
set ok [analyze 1 ]
algorithm $algorithmType
}
if {$ok != 0} {
puts "Trying Krylov Newton"
algorithm KrylovNewton
set ok [analyze 1 ]
algorithm $algorithmType
}
}; # end while loop
# }; # end if ok !0

puts "Pushover Done. Control Disp=[nodeDisp $IDctrlNode $IDctrlDOF]"

}





### ----------------------------------------------------Input file -----------------------------------------------------------------------------------------------------------------------------------------


Thank you

Post Reply