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
69
examples/data/Ex4.Portal2D.analyze.Static.Push.tcl.txt
Normal file
69
examples/data/Ex4.Portal2D.analyze.Static.Push.tcl.txt
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
# --------------------------------------------------------------------------------------------------
|
||||
# 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]
|
||||
}
|
||||
Loading…
Reference in a new issue