forked from 1b-agent/fieldcraft-upstream
solver, model, engine: linear buckling steps
Procedure::Buckle {modes, shift}: the step's loads as a linear preload, K_σ from its stresses,
and (K + λ K_σ) φ = 0 by block Lanczos in the K inner product: K⁻¹(−K_σ) on Cholesky without a
shift, the buckling transformation (K + σ K_σ)⁻¹ K on LDLᵀ with one, whose inertia counts the
load factors below σ (Grimes–Lewis–Simon 1994). Lanczos gains an operand and an eigenvalue map
(defaults keep frequency steps bit for bit) and reports converged negative eigenvalues. Results
are frequency results with a `buckling` part; modes display with their load factor.
solve.buckle (in the Static drop-down); Abaqus *BUCKLE, Nastran SOL 105 and LS-DYNA refuse it by
name. Euler columns of hex20 within 0.18 % of Engesser's load.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo
This commit is contained in:
1 parent
9a8ae50bca
commit
1b57e2e672
20 files changed
+511
-27
No files matched your search
+1
-1
@@ -123,7 +123,7 @@ the control channel and AI agents over MCP (docs/mcp.md) run the same commands.
|
||||
| Decks | Nastran Deck — Write Nastran bulk data (SOL 101, 103) | ready | `deck.write {"format":"nastran"}` |
|
||||
| Decks | LS-DYNA Deck — Write an LS-DYNA keyword file | ready | `deck.write {"format":"lsdyna"}` |
|
||||
| Decks | Read Deck — Read a deck, keeping keywords FieldCraft does not know | coming soon (M9) | |
|
||||
| Implicit | Static — Linear static (or coupled temperature–displacement) solve of a step with FieldCraft's own solver; nonlinear static and heat transfer in the drop-down | ready | `solve.static`, `solve.nonlinear`, `solve.heat` |
|
||||
| Implicit | Static — Linear static (or coupled temperature–displacement) solve of a step with FieldCraft's own solver; nonlinear static, buckling and heat transfer in the drop-down | ready | `solve.static`, `solve.nonlinear`, `solve.buckle`, `solve.heat` |
|
||||
| Implicit | Frequency — Natural frequencies and mode shapes of a frequency step | ready | `solve.frequency` |
|
||||
| Explicit | Explicit — Transient dynamics of an explicit step by central differences (contact and erosion coming in M10) | ready | `solve.explicit` |
|
||||
| Explicit | Blast & Impact — EOS-driven fluids with fluid–structure contact (ALE or SPH) | coming soon (M14) | |
|
||||
|
||||
+20
@@ -173,6 +173,26 @@ On a hex8 stiffness pattern of 140 000 equations (1.5 · 10⁸ entries) the LDL
|
||||
times the Cholesky factor, and 1.2 times on a shift with 10 600 negative eigenvalues and 7 700
|
||||
2 × 2 pivots (`ldlt::tests::speed_against_cholesky`).
|
||||
|
||||
## Linear buckling
|
||||
|
||||
A step `{"type": "buckle", "modes": 4}` (`Procedure::Buckle`, solved by `solve.buckle`,
|
||||
`fieldcraft_solver::buckle`) solves its loads and prescribed motions as a linear static preload,
|
||||
forms the initial-stress stiffness K_σ = ∫ (∇N_a · σ ∇N_b) I dV of every solid and 2D element
|
||||
from the preload's stresses at the stiffness points (`Solid::geometric_stiffness`,
|
||||
`Plane::geometric_stiffness`, with the axisymmetric hoop term), and finds the load factors λ
|
||||
with (K + λ K_σ) φ = 0 by block Lanczos in the K inner product (Grimes, Lewis & Simon 1994):
|
||||
without a shift on K⁻¹(−K_σ) (θ = 1/λ, Cholesky of K), the lowest positive λ; with `"shift": σ`
|
||||
on the buckling transformation (K + σ K_σ)⁻¹ K (θ = λ/(λ − σ), LDLᵀ), the λ above σ, and the
|
||||
LDLᵀ inertia counts the load factors between 0 and σ, reported. Negative load factors (the
|
||||
reversed load buckles) are reported, not returned. Modes are scaled to a largest component of 1
|
||||
and display and probe like frequency modes (their value is λ; `FrequencyResult::buckling`).
|
||||
Boundary conditions hold their directions at zero in the eigenproblem; pressures are dead loads
|
||||
(no load stiffness); trusses, shells and beams are refused (no K_σ yet). Decks: Abaqus
|
||||
`*BUCKLE, EIGENSOLVER=LANCZOS` (refused after a general step, whose loaded state Abaqus would
|
||||
buckle from, and with a shift); Nastran SOL 105 and LS-DYNA refuse it by name. Verified by Euler
|
||||
columns of hex20 (pinned and clamped–free, 0.18 % from Engesser's shear-corrected load) and the
|
||||
shifted form against the plain one.
|
||||
|
||||
## Nonlinear static analysis (finite strain)
|
||||
|
||||
A step `{"type": "nonlinear_static", …}` (`Procedure::NonlinearStatic`, solved by
|
||||
|
||||
@@ -1246,6 +1246,11 @@ update are written from (cited again in the module docs):
|
||||
34(1):82–109, 1992.
|
||||
- Iterative refinement: N. J. Higham, *Accuracy and Stability of Numerical Algorithms*, 2nd ed.,
|
||||
SIAM 2002, §12.2.
|
||||
- Linear buckling and the initial-stress stiffness: K.-J. Bathe, *Finite Element Procedures*,
|
||||
2nd ed., 2014, §6.8.2; the buckling spectral transformations in the K inner product: R. G.
|
||||
Grimes, J. G. Lewis, H. D. Simon, SIAM J. Matrix Anal. Appl. 15(1):228–272, 1994, §3; Euler's
|
||||
columns with Engesser's shear correction: S. P. Timoshenko, J. M. Gere, *Theory of Elastic
|
||||
Stability*, 2nd ed., McGraw-Hill 1961, §2.1, §2.17.
|
||||
|
||||
## Part Q: Contact and friction (explicit), as implemented
|
||||
|
||||
|
||||
Reference in new issue
Block a user