Keystone v14: continuum linear buckling & stability studio#672
Merged
Conversation
Adds the elastic-instability chapter to the Q4/Q8 continuum. A new from-scratch engine assembles the geometric (initial-stress) stiffness K_g from a reference plane-stress field and solves the generalized eigenproblem (K + λK_g)φ = 0 for the lowest critical load factors and buckled mode shapes. Because K_g is indefinite, the v9 SPD-mass subspace solver can't be reused; the eigensolver runs a K-orthonormal subspace iteration on A = K⁻¹(−K_g) (self-adjoint in the K-inner-product) with a standard symmetric Rayleigh–Ritz reduction and relative rank-revealing deflation that never trips on the indefinite/rank-deficient stress stiffness. - engine/buckling.ts: K, reference solve, stress stiffness, eigensolver, Euler reference load - engine/bucklingpresets.ts: materials + fixed-free / fixed-pinned / panel scenarios with section properties for the column curve - ui/BucklingStudio.tsx: sixth studio tab — animated buckled shape over axial load-path shading, and the Euler column curve (σ_cr=π²E/λ² with yield cut-off + FE design point); Q8/Q4 shear-locking toggle - 3 new live benchmarks (81 → 84): fixed-free Euler column to 0.05%, fixed-pinned to 0.5%, cantilever mode ladder λ₂/λ₁ = 9 to 0.25% Scope + conformance + lint + build all green; verified end-to-end in headless Chromium with 84/84 benchmarks and zero runtime errors. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RGnTxnxKH7Fmj125T54jqg
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this adds
A sixth studio tab for Keystone (
projects/keystone-fea-b3k9/): continuum linear (Euler) buckling — the elastic-instability failure mode the static Q4/Q8 solver was blind to. A slender 2-D part under compression snaps sideways far below its yield stress; this is the eigenvalue problem that catches it.The physics is the generalized eigenproblem
(K + λ K_g) φ = 0, whereK_g = ∫ Gᵀ τ G dΩis the geometric (initial-stress) stiffness built from a reference plane-stress field. The smallest positive load multiplierλ_cris the buckling factor;φis the buckled shape.Implementation
src/engine/buckling.ts— assembleK, run the reference static solve for the pre-buckling stress field, recover Gauss-point stresses, assemble the stress stiffnessS = −K_g, and solve for the lowest critical load factors + mode shapes. BecauseK_gis indefinite, the v9 SPD-mass subspace solver can't be reused: the eigensolver runs a K-orthonormal subspace iteration onA = K⁻¹(−K_g)(self-adjoint in the K-inner-product) with a standard symmetric Rayleigh–Ritz reduction (jacobiEig) and relative rank-revealing deflation — so the indefinite / rank-deficient stress stiffness never breaks the reduction. PluseulerLoad = π²EI/(KL)².src/engine/bucklingpresets.ts— material table (steel / Al 6061 / Ti-6Al-4V, with σ_y), three scenarios (fixed–free flagpole K=2, fixed–pinned braced strut K≈0.699, compression panel), and a builder returning section properties (I, r, Euler load, slenderness KL/r) for the analytical column.src/ui/BucklingStudio.tsx— the new tab. Two views on one solve: the buckled shape (breathing lateral bow over axial load-path shading, base hatching + load arrows) and the column curve (FE critical stress dropped onto the Euler hyperbolaσ_cr = π²E/λ²with its yield cut-off + transition slenderness). Mode-pill selector, a Q8/Q4 toggle that visibly shows shear locking, and a debounced slenderness slider.App.tsx(tab + segmented option),state.ts(persisted tab type),validate.ts+components.tsx(badge category), plus CSS.Validation
Three new closed-form benchmarks, badge 81 → 84, all green:
π²EI/(2L)²π²EI/(0.699L)²λ₂/λ₁ = 3²/1² = 9Verified end-to-end in headless Chromium — all six studio tabs render, the flagpole reproduces Euler to 0.08% with the 1 : 8.97 : 24.79 mode ladder, the braced strut shows the fixed–pinned half-wave, the panel buckles into a 2-D bulge, and the column curve seats the design point on the hyperbola. Scope + conformance + lint + build all pass the exact CI gate; zero runtime errors.
🤖 Generated with Claude Code
https://claude.ai/code/session_01RGnTxnxKH7Fmj125T54jqg
Generated by Claude Code