Skip to content

Keystone v14: continuum linear buckling & stability studio#672

Merged
github-actions[bot] merged 1 commit into
mainfrom
claude/hopeful-keller-4nm602
Jul 24, 2026
Merged

Keystone v14: continuum linear buckling & stability studio#672
github-actions[bot] merged 1 commit into
mainfrom
claude/hopeful-keller-4nm602

Conversation

@kkd16

@kkd16 kkd16 commented Jul 24, 2026

Copy link
Copy Markdown
Owner

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, where K_g = ∫ Gᵀ τ G dΩ is the geometric (initial-stress) stiffness built from a reference plane-stress field. The smallest positive load multiplier λ_cr is the buckling factor; φ is the buckled shape.

Implementation

  • src/engine/buckling.ts — assemble K, run the reference static solve for the pre-buckling stress field, recover Gauss-point stresses, assemble the stress stiffness S = −K_g, and solve for the lowest critical load factors + 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 (jacobiEig) and relative rank-revealing deflation — so the indefinite / rank-deficient stress stiffness never breaks the reduction. Plus eulerLoad = π²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.
  • Wired into 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:

Check Reference Rel. error
Fixed–free Euler column π²EI/(2L)² 0.05%
Fixed–pinned Euler column π²EI/(0.699L)² 0.5%
Cantilever mode ladder λ₂/λ₁ = 3²/1² = 9 0.25%

Verified 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

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

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Scope + lint + build passed.

@github-actions
github-actions Bot merged commit 031715b into main Jul 24, 2026
2 checks passed
@github-actions
github-actions Bot deleted the claude/hopeful-keller-4nm602 branch July 24, 2026 03:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants