Snapshots the current development tree, headlined by proper load combinations (user request): a reusable LoadCombination entity of weighted completed static-case results (e.g. 1.2xDead + 1.6xLive). - core: LoadCombination/LoadCombinationItem entities, Project integration (lookup, unique ids, reference validation) - services: combinations.py (linear superposition + envelope), exported via services __init__ - commands: undoable Add/Delete/Update for combinations - GUI: Load Combinations manager dialog, Run-dialog evaluation, envelope display in Results panel, Combinations tab in Table dock - tests: unit coverage (validation, math, error paths) + integration superposition check vs a single factored run
119 lines
7.2 KiB
Text
119 lines
7.2 KiB
Text
# --------------------------------------------------------------------------------------------------
|
|
# 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
|
|
#
|
|
|
|
# characteristics of pushover analysis
|
|
set Dmax [expr 0.05*$LCol]; # maximum displacement of pushover. push to 10% drift.
|
|
set Dincr [expr 0.001*$LCol]; # displacement increment for pushover. you want this to be very small, but not too small to slow down the analysis
|
|
|
|
# create load pattern for lateral pushover load
|
|
set Hload [expr $Weight]; # define the lateral load as a proportion of the weight so that the pseudo time equals the lateral-load coefficient when using linear load pattern
|
|
pattern Plain 200 Linear {; # define load pattern -- generalized
|
|
load 2 $Hload 0.0 0.0 0.0 0.0 0.0
|
|
}
|
|
|
|
# STATIC-ANALYSIS parameters
|
|
# CONSTRAINTS handler -- Determines how the constraint equations are enforced in the analysis (http://opensees.berkeley.edu/OpenSees/manuals/usermanual/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/manuals/usermanual/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/manuals/usermanual/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/manuals/usermanual/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 1.e-8; # Convergence Test: tolerance
|
|
set maxNumIter 6; # 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/manuals/usermanual/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 Newton
|
|
algorithm $algorithmType;
|
|
|
|
# Static INTEGRATOR: -- determine the next time step for an analysis (http://opensees.berkeley.edu/OpenSees/manuals/usermanual/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
|
|
integrator DisplacementControl $IDctrlNode $IDctrlDOF $Dincr
|
|
|
|
# ANALYSIS -- defines what type of analysis is to be performed (http://opensees.berkeley.edu/OpenSees/manuals/usermanual/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
|
|
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 8
|
|
set ok [analyze 1 ]
|
|
algorithm $algorithmType
|
|
}
|
|
if {$ok != 0} {
|
|
puts "Trying NewtonWithLineSearch .."
|
|
algorithm NewtonLineSearch .8
|
|
set ok [analyze 1 ]
|
|
algorithm $algorithmType
|
|
}
|
|
}; # end while loop
|
|
}; # end if ok !0
|
|
|
|
puts "Pushover Done. Control Disp=[nodeDisp $IDctrlNode $IDctrlDOF]"
|