feat: named case-result load combinations with full GUI support
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
This commit is contained in:
commit
f361fee969
560 changed files with 178701 additions and 0 deletions
|
|
@ -0,0 +1,78 @@
|
|||
# --------------------------------------------------------------------------------------------------
|
||||
# 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]"
|
||||
Loading…
Reference in a new issue