Skip to content

Commit ba116db

Browse files
committed
test: unify 2D convergence tests onto diagonal advection
Drop the 2D isentropic vortex case (eps=0.01 had a covariance floor that forced wide tolerances 0.4-1.2 just to pass) and route all 2D convergence schemes through the diagonal-advection case introduced for WENO7/TENO7. Linear primitives → no covariance floor → tight 1D-like tolerances and all 7 schemes (WENO1/3/5/7, MUSCL2, TENO5/7) on the same case. Measured 2D rates (CFL=0.02 except WENO7/TENO7 at 0.005, T=0.5): WENO5 4.99 (need >= 4.7) MUSCL2 2.01 (need >= 1.9) WENO3 1.74 (need >= 1.7) TENO5 4.99 (need >= 4.7) WENO1 0.84 (need >= 0.8) WENO7 6.86 (need >= 6.5) TENO7 6.86 (need >= 6.5) Suite wall time on 4 ranks: ~23 min (WENO7/TENO7 dominate at ~6/8 min). Per-scheme resolution lists replace the min_N/max_N filter pattern (cleaner when low-order schemes need different N than WENO7). Renames the runner key '2d_vortex' → '2d_advection'.
1 parent 5831468 commit ba116db

3 files changed

Lines changed: 20 additions & 146 deletions

File tree

examples/2D_isentropicvortex_convergence/case.py

Lines changed: 0 additions & 105 deletions
This file was deleted.

toolchain/mfc/test/cases.py

Lines changed: 19 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,22 @@
2929
("TENO7", ["--order", "7", "--teno", "--teno-ct", "1e-9", "--cfl", "0.005"], 7, 0.5, 64, 128),
3030
]
3131

32-
# 2D isentropic vortex (eps=0.01, hcid=283 Gauss-Legendre IC). WENO7/TENO7
33-
# excluded — covariance floor O(eps^3 h^2) dominates at N=32..128.
32+
# 2D diagonal advection (rho = 1 + 0.2 sin(2pi(x+y)), v=(1,1), period T=0.5):
33+
# linear primitives mean no covariance floor — clean asymptotic rates for all
34+
# WENO/MUSCL/TENO orders. WENO3 reduces to 2nd at smooth extrema (Henrick 2005).
35+
# 4 ranks (2x2 decomp): per-rank stencil constraint n+1 >= 5*weno_order/2.
36+
# WENO5/TENO5 use [64, 96, 128] (33>=25 at N=64). WENO7/TENO7 use [80, 96]
37+
# (41>=35 at N=80) and CFL=0.005 to push RK3 temporal error below O(h^7).
38+
# (label, extra_args, expected_order, tol, resolutions)
3439
_CONS_VARS_2D = [("density", 1), ("energy", 4)]
35-
_RES_2D_DEFAULT = [32, 64, 128]
3640
_CONVERGENCE_2D_SCHEMES = [
37-
("WENO5", ["--order", "5"], 5, 1.0, 64, None),
38-
("WENO3", ["--order", "3"], 3, 1.2, 32, None),
39-
("WENO1", ["--order", "1"], 1, 0.4, 32, None),
40-
("MUSCL2", ["--muscl"], 2, 0.5, 32, None),
41-
("TENO5", ["--order", "5", "--teno", "--teno-ct", "1e-6"], 5, 1.0, 64, None),
41+
("WENO5", ["--order", "5", "--cfl", "0.02"], 5, 0.3, [64, 96, 128]),
42+
("WENO3", ["--order", "3", "--cfl", "0.02"], 2, 0.3, [32, 64, 128]),
43+
("WENO1", ["--order", "1", "--cfl", "0.02"], 1, 0.2, [32, 64, 128]),
44+
("MUSCL2", ["--muscl", "--muscl-lim", "0", "--cfl", "0.02"], 2, 0.1, [32, 64, 128]),
45+
("TENO5", ["--order", "5", "--teno", "--teno-ct", "1e-6", "--cfl", "0.02"], 5, 0.3, [64, 96, 128]),
46+
("WENO7", ["--order", "7", "--cfl", "0.005"], 7, 0.5, [80, 96]),
47+
("TENO7", ["--order", "7", "--teno", "--teno-ct", "1e-9", "--cfl", "0.005"], 7, 0.5, [80, 96]),
4248
]
4349

4450
# Sod L1 self-convergence: any conservative monotone scheme converges at L1
@@ -104,21 +110,19 @@ def add_convergence_cases(cases):
104110
)
105111
)
106112

107-
for label, extra_args, expected, tol, min_N, max_N in _CONVERGENCE_2D_SCHEMES:
113+
for label, extra_args, expected, tol, resolutions in _CONVERGENCE_2D_SCHEMES:
108114
cases.append(
109115
define_convergence_case(
110116
f"Convergence -> 2D -> {label}",
111117
spec={
112-
"runner": "2d_vortex",
113-
"case_path": "examples/2D_isentropicvortex_convergence/case.py",
118+
"runner": "2d_advection",
119+
"case_path": "examples/2D_advection_convergence/case.py",
114120
"extra_args": extra_args,
115121
"expected_order": expected,
116122
"tol": tol,
117-
"resolutions": _RES_2D_DEFAULT,
118-
"min_N": min_N,
119-
"max_N": max_N,
123+
"resolutions": resolutions,
120124
"ndim": 2,
121-
"domain_len": 10.0,
125+
"domain_len": 1.0,
122126
"cons_vars": _CONS_VARS_2D,
123127
"primary_idx": 1,
124128
"num_ranks": num_ranks,
@@ -165,30 +169,6 @@ def add_convergence_cases(cases):
165169
)
166170
)
167171

168-
# 2D diagonal advection — same 4-rank decomposition as the rest of the suite.
169-
for label, extra_args, expected, tol, min_N, max_N in _CONVERGENCE_2D_ADV_SCHEMES:
170-
cases.append(
171-
define_convergence_case(
172-
f"Convergence -> 2D Adv -> {label}",
173-
spec={
174-
"runner": "2d_vortex",
175-
"case_path": "examples/2D_advection_convergence/case.py",
176-
"extra_args": extra_args,
177-
"expected_order": expected,
178-
"tol": tol,
179-
"resolutions": _RES_2D_ADV_DEFAULT,
180-
"min_N": min_N,
181-
"max_N": max_N,
182-
"ndim": 2,
183-
"domain_len": 1.0,
184-
"cons_vars": _CONS_VARS_2D,
185-
"primary_idx": 1,
186-
"num_ranks": num_ranks,
187-
},
188-
ppn=num_ranks,
189-
)
190-
)
191-
192172

193173
def get_bc_mods(bc: int, dimInfo):
194174
params = {}
@@ -1763,7 +1743,6 @@ def foreach_example():
17631743
"1D_titarevtorro_analytical",
17641744
"2D_acoustic_pulse_analytical",
17651745
"2D_isentropicvortex_analytical",
1766-
"2D_isentropicvortex_convergence",
17671746
"1D_euler_convergence",
17681747
"1D_advection_convergence",
17691748
"1D_sod_convergence",

toolchain/mfc/test/convergence.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ def _run_sod_l1(spec):
288288

289289
_RUNNERS = {
290290
"1d_advection": _run_resolution_sweep,
291-
"2d_vortex": _run_resolution_sweep,
291+
"2d_advection": _run_resolution_sweep,
292292
"temporal": _run_temporal,
293293
"sod_l1": _run_sod_l1,
294294
}

0 commit comments

Comments
 (0)