69 lines
3.1 KiB
Text
69 lines
3.1 KiB
Text
|
|
# --------------------------------------------------------------------------------------------------
|
||
|
|
# Example4. 2D Portal Frame-- Static Pushover Analysis
|
||
|
|
# Silvia Mazzoni & Frank McKenna, 2006
|
||
|
|
# execute this file after you have built the model, and after you apply gravity
|
||
|
|
#
|
||
|
|
|
||
|
|
# we need to set up parameters that are particular to the model.
|
||
|
|
set IDctrlNode 3; # node where displacement is read for displacement control
|
||
|
|
set IDctrlDOF 1; # degree of freedom of displacement read for displacement contro
|
||
|
|
# characteristics of pushover analysis
|
||
|
|
set Dmax [expr 0.1*$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/2]; # 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
|
||
|
|
set iPushNode "3 4"; # define nodes where lateral load is applied in static lateral analysis
|
||
|
|
pattern Plain 200 Linear {; # define load pattern -- generalized
|
||
|
|
foreach PushNode $iPushNode {
|
||
|
|
load $PushNode $Hload 0.0 0.0 0.0 0.0 0.0
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# ----------- set up analysis parameters
|
||
|
|
source LibAnalysisStaticParameters.tcl; # constraintsHandler,DOFnumberer,system-ofequations,convergenceTest,solutionAlgorithm,integrator
|
||
|
|
|
||
|
|
# --------------------------------- 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
|
||
|
|
set fmt1 "%s Pushover analysis: CtrlNode %.3i, dof %.1i, Disp=%.4f %s"; # format for screen/file output of DONE/PROBLEM analysis
|
||
|
|
if {$ok != 0} {
|
||
|
|
# if analysis fails, we try some other stuff, performance is slower inside this loop
|
||
|
|
set Dstep 0.0;
|
||
|
|
set ok 0
|
||
|
|
while {$Dstep <= 1.0 && $ok == 0} {
|
||
|
|
set controlDisp [nodeDisp $IDctrlNode $IDctrlDOF ]
|
||
|
|
set Dstep [expr $controlDisp/$Dmax]
|
||
|
|
set ok [analyze 1 ]
|
||
|
|
# if analysis fails, we try some other stuff
|
||
|
|
# performance is slower inside this loop global maxNumIterStatic; # max no. of iterations performed before "failure to converge" is ret'd
|
||
|
|
if {$ok != 0} {
|
||
|
|
puts "Trying Newton with Initial Tangent .."
|
||
|
|
test NormDispIncr $Tol 2000 0
|
||
|
|
algorithm Newton -initial
|
||
|
|
set ok [analyze 1]
|
||
|
|
test $testTypeStatic $TolStatic $maxNumIterStatic 0
|
||
|
|
algorithm $algorithmTypeStatic
|
||
|
|
}
|
||
|
|
if {$ok != 0} {
|
||
|
|
puts "Trying Broyden .."
|
||
|
|
algorithm Broyden 8
|
||
|
|
set ok [analyze 1 ]
|
||
|
|
algorithm $algorithmTypeStatic
|
||
|
|
}
|
||
|
|
if {$ok != 0} {
|
||
|
|
puts "Trying NewtonWithLineSearch .."
|
||
|
|
algorithm NewtonLineSearch 0.8
|
||
|
|
set ok [analyze 1]
|
||
|
|
algorithm $algorithmTypeStatic
|
||
|
|
}
|
||
|
|
|
||
|
|
}; # end while loop
|
||
|
|
}; # end if ok !0
|
||
|
|
|
||
|
|
# -----------------------------------------------------------------------------------------------------
|
||
|
|
if {$ok != 0 } {
|
||
|
|
puts [format $fmt1 "PROBLEM" $IDctrlNode $IDctrlDOF [nodeDisp $IDctrlNode $IDctrlDOF] $LunitTXT]
|
||
|
|
} else {
|
||
|
|
puts [format $fmt1 "DONE" $IDctrlNode $IDctrlDOF [nodeDisp $IDctrlNode $IDctrlDOF] $LunitTXT]
|
||
|
|
}
|