Add convergence-rate CI for WENO5/3/1 and MUSCL2 - #5
sbryngelson wants to merge 22 commits into
Conversation
…ns (MFlowCode#1382) Co-authored-by: Daniel J. Vickers <dnlvickers5@gmail.com> Co-authored-by: Spencer Bryngelson <sbryngelson@gmail.com>
Co-authored-by: Spencer Bryngelson <shb@gatech.edu>
Co-authored-by: Spencer Bryngelson <sbryngelson@gmail.com>
Co-authored-by: Spencer Bryngelson <sbryngelson@gmail.com>
Co-authored-by: Anand <anand@Anands-MacBook-Pro.local>
With eps=5 the prim->cons covariance error O(eps^3 h^2) swamps WENO5's O(eps^2 h^5) error at all practical resolutions, giving apparent rate 2. Using eps=0.01 shifts the crossover to h~0.22 so that N=16..64 (h=0.63..0.16) are firmly in the WENO5-dominated regime and show rate ~5, as in Johnsen & Colonius (2006) who similarly used a weak vortex. - hcid=283: vortex strength now read from patch_icpp(patch_id)%epsilon (defaults to 5 if not set, preserving backward compatibility) - case.py: eps_vortex=0.01, c_max updated accordingly - run_convergence.py: resolutions 16,32,64; WENO5 tolerance 4.0 (rate>=4) - convergence.yml: updated to 16 32 64
CFL=0.02 eliminates RK3 temporal error so WENO5 shows rate 5. WENO3 expected rate is 2 (not 3) on smooth-extremum problems per Henrick et al. 2005 — JS smoothness indicators degrade at f'=0. The 2D vortex job remains the authority on WENO3 rate 3.
1D runner now uses examples/1D_euler_convergence/case.py (single-fluid,
density sine wave, no non-conservative alpha equation) instead of the
two-fluid advection case. The five-equation model non-conservative alpha
transport degrades unlimited MUSCL to ~1st order on two-fluid problems
even with identical EOS; the single-fluid Euler case gives clean rates.
Add muscl_lim=0 (unlimited central-difference) to MUSCL reconstruction:
- src/simulation/m_muscl.fpp: central slope = 0.5*(slopeL+slopeR)
- toolchain/mfc/params/definitions.py: add 0 to choices
- toolchain/mfc/case_validator.py: allow muscl_lim in {0..5}
1D and 2D convergence cases default to muscl_lim=0 for smooth problems
where TVD limiters would stall at smooth extrema. Runner default CFL=0.02
so RK3 temporal error O(h^3) stays negligible for WENO5 rate-5 verification.
N=16 (m=n=15) is below the minimum grid size for WENO5's 5-point stencil and causes pre_process to abort. Start all 2D tests at N=32. WENO3 on the stationary isentropic vortex is pre-asymptotic at N=32-128: fitted rate ~2.02, local rate 1.83->2.21 (converging toward 3). Lower threshold from 2.2 to 1.8 (expected=3, tol=1.2). The rate still clearly exceeds the 1D result (1.77, Jiang-Shu smooth-extremum degradation), which is the distinction this test is designed to demonstrate.
…d to 0.95 Default and CI resolutions: 128 256 512 1024. WENO5 is capped at N=512 per-scheme (hits double-precision floor at N=1024 after 111k steps; error ~2.6e-12 vs 4.2e-12 at N=512, rate collapses to 0.69). N=128-512 gives fitted rate 4.99. WENO1 threshold tightened from 0.6 to 0.95 (tol 0.05): pairwise rates 0.95->0.97->0.99 at N=128-1024, fitted 0.97. MUSCL2 shows exact rate 2.00 at all doublings N=128-1024.
WENO5 capped at N=512 (machine-precision floor kills rate at N=1024, error ~2.6e-12, rate collapses to 0.69). WENO3 starts at N=256 to skip coarse pre-asymptotic points. WENO1 and MUSCL2 use full [128,1024] range. Thresholds: WENO5>=4.8, WENO3>=1.8, WENO1>=0.95, MUSCL2>=1.9.
Tests are too slow (~30-45 min each job) to run on every PR push. Manual trigger via workflow_dispatch lets you run them deliberately when verifying numerics, not on every commit.
Claude Code ReviewHead SHA: 3a069d2 Files changed:
Findings1. Convergence CI workflow lacks
on:
push:
workflow_dispatch:The workflow fires on every branch push but not on pull-request events. The plan in 2. AMD-path array in
#:if not MFC_CASE_OPTIMIZATION and USING_AMD
real(wp), dimension(3) :: alpha_rho, alpha ! changed from dimension(2)
#:else
real(wp), dimension(num_fluids) :: alpha_rho, alpha
#:endifThe loop immediately below indexes 3. Van Albada and Van Leer limiters lose their sum-of-slopes guard — golden files for lim=3/4 tests may be stale
|
Closes MFlowCode#305
Summary
.github/workflows/convergence.yml) that runs on push to any branch andworkflow_dispatchrho = 1 + 0.2 sin(2πx)), one period advection; per-scheme resolution ranges and pass thresholds:muscl_lim=0slope; TVD limiters stall at smooth extrema)hcid=283); N ∈ [32, 128]muscl_lim=0(unlimited central-difference slope) tom_muscl.fppand parameter definitionsexamples/1D_euler_convergence/single-fluid benchmark caseTest plan