Skip to content

Step 5a: interactive Findley damage sphere computed with multifat (FIG. R02) - #49

Merged
andreachiocca merged 4 commits into
masterfrom
claude/step-5a-damage-sphere
Nov 4, 2026
Merged

andreachiocca merged 4 commits into
masterfrom
claude/step-5a-damage-sphere

Conversation

@andreachiocca

Copy link
Copy Markdown
Owner

Preview (once the preview check succeeds): https://pr-49.academic-website-preview.pages.dev/research/#critical-plane-explorer · IT: https://pr-49.academic-website-preview.pages.dev/it/research/#critical-plane-explorer

Prototype of Step 5a in docs/site-roadmap.md: the first figure generated from the original research code. Independent of #47 and #48.

What it shows

Each point of a sphere is a material plane, identified by its normal $\mathbf n$; $\mathbf n$ and $-\mathbf n$ are the same plane, so the data cover a hemisphere. The colour is the Findley damage parameter $D/\sigma_a$ for

$$\sigma_{xx}=\sigma_a\sin\omega t,\qquad \tau_{xy}=\lambda,\sigma_a\sin(\omega t-\Delta\varphi),\qquad \text{zero mean},$$

with $\lambda\in{0,0.25,0.5,0.75,1}$ and $\Delta\varphi\in{0,15,\dots,90^\circ}$. Planes within 1.5 % of the maximum are shown in amber, and the arrow marks one critical normal $\mathbf n^\ast$.

How it is computed

  • scripts/generate_damage_sphere.py calls multifat.models.cp_methods.fin_harmonic.evaluate_findley (MCC shear amplitude) once per plane. The plane frames come from multifat.planes.sampling.gentang, on a 3° grid (3720 planes × 35 cases, about 30 s). The library's own search over the same grid is asserted to give the same maximum.
  • Pinned at multiaxial-fatigue@5cd5124362c02fe83ec40ffa8bf93e4d12ccc782. The output is assets/data/figures/damage-sphere-findley.json (174 kB: uint8 field plus exact per-case maxima and normals), with provenance metadata and a SHA-256 of the payload.
  • The browser only draws the stored grid with bilinear interpolation; no fatigue criterion is reimplemented in JavaScript.
  • $k = 0.3$ is illustrative, and the caption says so.

Scientific checks (tests/test_damage_sphere.py)

  • Uniaxial: $D^\ast/\sigma_a=\tfrac12\left(k+\sqrt{1+k^2}\right)=0.6720$. The critical planes form a cone at $\tfrac12\arctan(1/k)=36.65^\circ$ from the load axis (grid: 36.4°).
  • In-phase: $D^\ast/\sigma_a=k/2+\sqrt{1/4+\lambda^2}\sqrt{1+k^2}$ for all $\lambda$, within 2·10⁻³.
  • $\Delta\varphi=90^\circ$: $D^\ast\ge(\lambda+k),\sigma_a$ (the plane normal to $x$), with equality for $\lambda\ge0.5$.
  • Payload integrity and provenance (the commit shown in the caption equals the data's).

Interaction and motion

  • Sliders for $\lambda$ and $\Delta\varphi$ with a 320 ms eased transition between cases.
  • Drag or arrow keys rotate the sphere.
  • A slow automatic spin can be paused with a button; it is off with prefers-reduced-motion and stops when the figure leaves the viewport.
  • Hover readout, live region with $D^\ast/\sigma_a$ and $\mathbf n^\ast$, and a bilingual caption with links to the data, the generator and the library commit.

Verification (local)

  • unittest: 63 tests passed.
  • Ruby checks: passed.
  • Jekyll production build: OK.
  • All page verifiers: passed.
  • Browser checks: same result as the master baseline in this sandbox.
  • Widget readouts match the generator (0.868 / 0.672 / 1.300 for the three cases tested).

Not in CI: regenerating the data needs multifat installed. CI checks the committed data instead.


Generated by Claude Code

Every plane value comes from multifat's evaluate_findley (MCC shear
amplitude) called on one plane at a time, on a 3 degree hemisphere grid,
for 5 amplitude ratios x 7 phase shifts; pinned at multiaxial-fatigue
5cd5124. Tests check integrity, provenance and three closed-form cases
(uniaxial cone, in-phase axial-torsional, 90 degree shift).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KzHgFgeEYmpqcsxvvbphUy
Canvas sphere of plane normals coloured by the precomputed Findley
parameter; sliders for lambda and phase shift with eased transitions,
near-maximum planes in amber, critical normal, hover readout, drag and
keyboard rotation, pausable slow spin (off with reduced motion), and a
provenance caption with links to the data, generator and library commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KzHgFgeEYmpqcsxvvbphUy
The theme colours every span and div with --global-text-color, which is
now the dark paper ink. Panel text inherits the panel colour instead,
with :where() so the panel's own muted colours still apply.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KzHgFgeEYmpqcsxvvbphUy
@andreachiocca
andreachiocca merged commit be8813a into master Nov 4, 2026
4 checks passed

This branch was previously deployed

1 inactive deployment
website-preview-AC — 8cb218e7 Deployed Nov 4, 2026 by andreachiocca via preview #109
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