Skip to content

Analysis Settings โ€‹

Collects every object OpenSees needs to define an analysis into one bundle, which Run Analysis then executes.

๐Ÿ”ง Grasshopper component โ€‹

Analysis SettingsAlpaca4d โ–ธ 07_Analysis
Analysis Settings component
Inputs
DampingDamping(none)Rayleigh damping, from Damping.
Leave empty for an undamped run.
ConstraintTextTransformationConstraint handler: Plain, Transformation.
NumbererTextRCMDOF numbering: RCM, AMD, Plain.
SystemTextAutoLinear system solver: Auto, Mumps, BandGen, BandSPD, ProfileSPD, SuperLU, UmfPack, SparseSYM, SparseSPD, SparseGeneral, FullGeneral.
TestTestConvergence test, from Test.
AlgorithmTextNewtonSolution algorithm: Linear, Newton, NewtonLineSearch, ModifiedNewton, KrylovNewton, SecantNewton, BFGS, Broyden.
IntegratorIntegratorFrom Integrator.
AnalysisTypeTextStaticStatic or Transient.
AnalysisStepsAnalysisStepFrom Analysis Step.

Attach a Value List to any of the text inputs and Alpaca4d fills it with the valid options.

Outputs
SettingsSettingsThe analysis definition, for Run Analysis.

Right-click menu โ€‹

Cores for Mumps sets how many cores Mumps solves on: All, the default, or a number from 1 up to the cores of the machine. It applies to System Mumps, and to Auto on an OpenSees that has Mumps; every other System solves on one core. The choice is saved with the component, so it stays with the definition.

๐Ÿ’ก Choosing the values โ€‹

Constraint handler. Leave it at Transformation. Plain cannot handle rigid diaphragms or rigid links, and gives a wrong answer rather than an error when it meets one.

Algorithm. Newton, the default, re-forms the tangent every iteration. On an elastic model it is about 20 % slower than Linear, and on a yielding one it is what lets the step converge at all. Linear does one solve with no iteration. On a non-linear model it still reports success, and returns the unconverged first guess. ModifiedNewton re-forms the tangent less often, and KrylovNewton often converges where Newton does not.

System. Leave it at Auto. It solves with Mumps when the OpenSees in use has it, and with BandSPD when it does not. The official OpenSees does not have Mumps, and on it Auto notes the switch in the log without raising a warning. Mumps asks for Mumps outright: on an OpenSees without it the log carries a warning, and BandSPD solves. Both Auto and Mumps assume a symmetric matrix, as BandSPD does. UmfPack and SparseGeneral assume nothing about it: reach for them if a model refuses to solve. UmfPack runs out of memory in OpenSees on a frame or a solid of about 100 000 DOF. FullGeneral is for small models and debugging only.

Analysis type. Static for anything where inertia does not matter, including a pushover. Transient whenever time is real: a ground motion, an impact, a machine.

โšก Solving on several cores โ€‹

Mumps is a sparse direct solver that factorises the stiffness matrix on several cores at once. It runs inside the one OpenSees process Alpaca4d already starts, and needs nothing else installed. It is only in an OpenSees built with it, which Alpaca4d uses when you point it at one, as Setup describes.

On a small model every solver takes a few milliseconds, and Mumps is as quick as BandSPD. On a large one Mumps is 2 to 18 times quicker, and needs less memory. Below is one static step with Newton, as Run Analysis solves it, on every core:

ModelDOFMac, BandSPDMac, MumpsWindows, BandSPDWindows, Mumps
Frame 15 ร— 15 ร— 15 bays23 0400.47 s0.20 s1.01 s0.45 s
Brick block 24 ร— 24 ร— 2445 00017.0 s0.92 s30.9 s2.4 s
Shell 120 ร— 12084 9664.07 s1.89 s11.6 s4.2 s
Frame 25 ร— 25 ร— 25 bays101 40013.1 s3.47 sโ€”โ€”
Shell 200 ร— 200237 60649.0 s5.40 sโ€”โ€”
Brick block 36 ร— 36 ร— 36147 852out of memory (> 6 GB)4.71 sโ€”โ€”

Mac: Apple M2 Pro, 10 cores. Windows: a GitHub Actions runner, 4 virtual cores. Each answer was checked against another solver's.

Most of the gain comes from Mumps itself, not from the extra cores. Going from one core to all of them takes off up to a further quarter. On a tiny model, starting the threads costs a few milliseconds, more than they save.

๐Ÿ“ˆ When to use it โ€‹

Use it when you are running anything through Run Analysis.

Do not use it when you only want modes โ†’ Natural Vibration needs no settings.

๐Ÿ”— Relation to OpenSees

The component writes the standard analysis block:

tcl
rayleigh    $alphaM $betaKcurr $betaKinit $betaKcomm
constraints $constraintType
numberer    $numbererType
system      $systemType
test        $testType $tol $iter $flag $norm $maxIncr
algorithm   $algorithmType
integrator  $integratorType ...
analysis    $analysisType
set alpacaAnalyzeOk [analyze $numIncr $dt $dtMin $dtMax $jd]

For Auto and Mumps the system line asks for Mumps, and falls back on BandSPD if OpenSees does not know it:

tcl
if {[catch {system Mumps -matrixType 1 -numThreads 0}]} {
    puts stderr "Alpaca4d: this OpenSees has no Mumps solver, so BandSPD solves, on one core"
    system BandSPD
}

-numThreads 0 takes every core. A number picked in Cores for Mumps takes its place.