Skip to content

Stable-TC defaults: spline_order=3, dt-scaled wind-sea floor on by default#66

Merged
mochell merged 1 commit into
mainfrom
feat/stable-tc-defaults
Jun 25, 2026
Merged

Stable-TC defaults: spline_order=3, dt-scaled wind-sea floor on by default#66
mochell merged 1 commit into
mainfrom
feat/stable-tc-defaults

Conversation

@mochell

@mochell mochell commented Jun 24, 2026

Copy link
Copy Markdown
Owner

Summary

Make the validated stable tropical-cyclone configuration the default, so a stationary symmetric TC eye is both steady in time and axisymmetric in space out of the box. Derived from a 900+ run eyewall/discontinuity stability sweep (analysis/stability in the parent repo).

Changes

  1. WaveGrowth2D: spline_order default 1 → 3 (cubic deposition). Order 1 (CIC) / 2 (TSC) imprint a 4-fold grid-axis "cross" on a symmetric eye (#59); cubic restores axisymmetry. Tripolar grids auto-fall-back to order 1 with a warning (previously a hard error), so the new default is safe on any grid.

  2. ODESettings.windsea_alpha default 0.0 → 0.005 — the wind-sea-scaled reconstruction floor that damps the remesh limit cycle at wind/calm interfaces and the rotating eyewall (energy-conserving for a resolved eyewall).

  3. mapping_2D: the floor is now automatically dt-scaled, α_eff = windsea_alpha · min(1, dt/10min). Erosion per unit time ∝ α/dt, so a constant α drains the field at small dt; the dt-scaling bounds erosion and prevents the small-dt collapse, making the floor safe to leave on by default.

Recommended regime (now in docstrings)

  • Resolve the eyewall: dx ≲ Rmax/20 (≥40 ideal).
  • Pick dt so the wave Courant C_cg = c_g·dt/dx ≈ 2–5 (advective C_U = U·dt/dx ≈ 10–20) — the eyewall stability sweet spot (both temporal pulsing and spatial asymmetry minimize at C_cg ≈ 3). Typical dt ≈ 5–10 min.
  • Caution: on an under-resolved eyewall the floor can still collapse the storm — resolve first.

Validation

With these defaults (order 3, windsea_alpha=0.005 dt-scaled, dx ≲ Rmax/20, C_cg ≈ 3), a CAT3–5 storm eyewall reaches cv ~ 1e-3 (temporal) and asym ~ 1e-3 (axisymmetry); wind/calm discontinuities are fully steady. Full write-up: analysis/stability/FINDINGS_eyewall_stability_courant.{md,pdf}.

⚠️ Compatibility

This changes default numerics. Existing test/regression baselines will shift and need re-blessing. Downstream code that omits spline_order/windsea_alpha will get the new behavior; pass explicit values to keep the old behavior.

🤖 Generated with Claude Code

…fault

Default the validated stable tropical-cyclone configuration so a symmetric TC eye
is steady and axisymmetric out of the box.

- WaveGrowth2D: spline_order default 1 -> 3 (cubic deposition). Order 1 (CIC) and 2
  (TSC) imprint a 4-fold grid-axis "cross" on a symmetric TC eye (issue #59); cubic
  restores axisymmetry. Tripolar grids auto-fall-back to order 1 with a warning
  (was a hard error), so the new default works on any grid.

- ODESettings.windsea_alpha default 0.0 -> 0.005 (wind-sea-scaled reconstruction
  floor). Damps the remesh limit cycle at wind/calm interfaces and the rotating
  eyewall, energy-conserving for a resolved eyewall.

- mapping_2D: the floor is now automatically dt-scaled, alpha_eff =
  windsea_alpha * min(1, dt/10min). Erosion per unit time scales as alpha/dt, so a
  constant alpha drains the field at small dt; the dt-scaling bounds erosion and
  prevents the small-dt collapse, making the floor safe to leave on by default.

Guidance (docstrings): resolve the eyewall (dx <~ Rmax/20), pick dt so the wave
Courant C_cg = c_g*dt/dx ~ 2-5 (advective C_U = U*dt/dx ~ 10-20) — the eyewall
stability sweet spot. On an under-resolved eyewall the floor can still collapse the
storm; resolve first. Full analysis: analysis/stability FINDINGS_eyewall_stability.

NB: changes default numerics — existing test/regression baselines will shift and
need re-blessing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@mochell
mochell merged commit ab85c40 into main Jun 25, 2026
3 checks passed
@mochell
mochell deleted the feat/stable-tc-defaults branch June 25, 2026 23:21
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.

1 participant