78 lines
3.5 KiB
Text
78 lines
3.5 KiB
Text
|
|
# --------------------------------------------------------------------------------------------------
|
||
|
|
# Example4. 2D Portal Frame-- Dynamic sine-wave input analysis
|
||
|
|
# Silvia Mazzoni, 2006
|
||
|
|
# execute this file after you have built the model, and after you apply gravity
|
||
|
|
#
|
||
|
|
|
||
|
|
# Uniform Sine-Wave ground motion (uniform acceleration input at all support nodes)
|
||
|
|
set GMdirection 1; # ground-motion direction
|
||
|
|
set GMSineAccAmpl [expr 0.5*$g]; # sine ground-motion acceleration amplitude (this is the support motion, not the free-node motion)
|
||
|
|
set TPeriodSine [expr 0.35*$sec]; # period of input sine wave
|
||
|
|
set DurationSine [expr 3.*$sec]; # duration of input sine wave
|
||
|
|
|
||
|
|
# set up ground-motion-analysis parameters
|
||
|
|
set DtAnalysis [expr 0.01*$sec]; # time-step Dt for lateral analysis
|
||
|
|
set TmaxAnalysis [expr 10. *$sec]; # maximum duration of ground-motion analysis -- should be 50*$sec
|
||
|
|
|
||
|
|
# ----------- set up analysis parameters
|
||
|
|
source LibAnalysisDynamicParameters.tcl; # constraintsHandler,DOFnumberer,system-ofequations,convergenceTest,solutionAlgorithm,integrator
|
||
|
|
|
||
|
|
# define DAMPING--------------------------------------------------------------------------------------
|
||
|
|
# apply Rayleigh DAMPING from $xDamp
|
||
|
|
# D=$alphaM*M + $betaKcurr*Kcurrent + $betaKcomm*KlastCommit + $beatKinit*$Kinitial
|
||
|
|
set xDamp 0.02; # 2% damping ratio
|
||
|
|
set lambda [eigen 1]; # eigenvalue mode 1
|
||
|
|
set omega [expr pow($lambda,0.5)];
|
||
|
|
set alphaM 0.; # M-prop. damping; D = alphaM*M
|
||
|
|
set betaKcurr 0.; # K-proportional damping; +beatKcurr*KCurrent
|
||
|
|
set betaKcomm [expr 2.*$xDamp/($omega)]; # K-prop. damping parameter; +betaKcomm*KlastCommitt
|
||
|
|
set betaKinit 0.; # initial-stiffness proportional damping +beatKinit*Kini
|
||
|
|
rayleigh $alphaM $betaKcurr $betaKinit $betaKcomm; # RAYLEIGH damping
|
||
|
|
|
||
|
|
# --------------------------------- perform Dynamic Ground-Motion Analysis
|
||
|
|
# the following commands are unique to the Sine-Wave excitation
|
||
|
|
set IDloadTag 400; # for uniformSupport excitation
|
||
|
|
set DtGround [expr 0.005*$sec]; # time-step Dt for input grond motion
|
||
|
|
set omegaSine [expr 2*$PI/$TPeriodSine];
|
||
|
|
set vel0 [expr $GMSineAccAmpl*(-1)/$omegaSine];
|
||
|
|
set AccelSeries "Sine 0. $DurationSine $TPeriodSine -factor $GMSineAccAmpl "
|
||
|
|
pattern UniformExcitation $IDloadTag $GMdirection -accel $AccelSeries -vel0 $vel0
|
||
|
|
|
||
|
|
set Nsteps [expr int($TmaxAnalysis/$DtAnalysis)];
|
||
|
|
set ok [analyze $Nsteps $DtAnalysis]; # actually perform analysis; returns ok=0 if analysis was successful
|
||
|
|
|
||
|
|
if {$ok != 0} { ; # analysis was not successful.
|
||
|
|
# --------------------------------------------------------------------------------------------------
|
||
|
|
# change some analysis parameters to achieve convergence
|
||
|
|
# performance is slower inside this loop
|
||
|
|
# Time-controlled analysis
|
||
|
|
set ok 0;
|
||
|
|
set controlTime [getTime];
|
||
|
|
while {$controlTime < $TmaxAnalysis && $ok == 0} {
|
||
|
|
set controlTime [getTime]
|
||
|
|
set ok [analyze 1 $DtAnalysis]
|
||
|
|
if {$ok != 0} {
|
||
|
|
puts "Trying Newton with Initial Tangent .."
|
||
|
|
test NormDispIncr $Tol 1000 0
|
||
|
|
algorithm Newton -initial
|
||
|
|
set ok [analyze 1 $DtAnalysis]
|
||
|
|
test $testTypeDynamic $TolDynamic $maxNumIterDynamic 0
|
||
|
|
algorithm $algorithmTypeDynamic
|
||
|
|
}
|
||
|
|
if {$ok != 0} {
|
||
|
|
puts "Trying Broyden .."
|
||
|
|
algorithm Broyden 8
|
||
|
|
set ok [analyze 1 $DtAnalysis]
|
||
|
|
algorithm $algorithmTypeDynamic
|
||
|
|
}
|
||
|
|
if {$ok != 0} {
|
||
|
|
puts "Trying NewtonWithLineSearch .."
|
||
|
|
algorithm NewtonLineSearch .8
|
||
|
|
set ok [analyze 1 $DtAnalysis]
|
||
|
|
algorithm $algorithmTypeDynamic
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}; # end if ok !0
|
||
|
|
|
||
|
|
|
||
|
|
puts "Ground Motion Done. End Time: [getTime]"
|