Appearance
#78 is the reflux, not the restricted ghosts
| ID | Group | Milestone | Backends | Figure | Regression |
|---|---|---|---|---|---|
| G3a | Seam studies | M6 (#68), #78 | FNL only | yes | — |
Case and scope
A2 traced EGLM's 70-fold
Models and numerics
| Item | Choice | Code |
|---|---|---|
| Equations | ideal MHD, glm_ch 4.0, glm_alpha 0.18, glm_damping_length 1.0 | GLM, EGLM; add_eglm_sources, adam_flume_cpu_mhd_eglm_kernels.F90; add_eglm_sources_dev, adam_flume_fnl_mhd_eglm_kernels.F90 |
| Space, time | WENO5 flux splitting on characteristic variables; SSP Runge–Kutta 5 stages, CFL 0.4 | as in AD |
| Seam operators | default (mean + tricubic) or lagrange6 + quintic | C1, D1 |
| Reflux | on (always), troubled (flags no face of this smooth loop, so it equals the reflux off bit for bit), or off | apply_reflux_to_stage_forest, flag_troubled_seam_cells, adam_flume_fnl_object.F90 |
Initial and boundary conditions
| Item | Value |
|---|---|
| Case | the A2 field loop of AD: |
| Initial condition | field loop, radius 0.3, |
| Grid | refined |
| Boundaries | periodic in extrapolation in |
| Final time | |
| Ranks | 2, FNL |
Input files
| File | Role |
|---|---|
src/tests/flume/verification/amr-divb/make_amr_divb.py loop | the field loop inputs (--cleaning glm or eglm, --seam-ghost-fill, --seam-restriction, --reflux-policy, --no-reflux) |
src/tests/flume/verification/amr-divb/amr_divb_oracle.py loop | the |
src/tests/flume/verification/make_doc_runs.sh <runs> divb (FNL), make_doc_figures.py --only field-loop-seams | re-runs the six field loops with a checkpoint every 20 steps |
Results

FNL, today's code (after G3b): the A2 field loop under GLM and EGLM, refined
| Seam operators, reflux | EGLM | GLM (× uniform) |
|---|---|---|
| uniform N = 128 | ||
default, always | ||
default, off (= troubled) | ||
lagrange6 + quintic, always | ||
lagrange6 + quintic, off (= troubled) | troubled) |
Related cases: AD is the A2 attribution this corrects; G3b is the fix; the uniform-grid EGLM is EGLM cleaning; the loop itself is field loop.
Findings
- The reflux causes #78. With the default operators and no reflux, EGLM's
is 3.4 times its uniform level instead of 70; higher-order ghosts do not help (106 with the reflux, 11.5 without). GLM does not care (1.6 to 2.3 times in every row). The A2 attribution to the restricted ghosts is wrong. - Mechanism (inferred, not measured directly): EGLM's Derigs source
cancels, on a uniform grid, the that the flux divergence generates. The reflux corrects a coarse skin cell's state by the flux mismatch after the step, but the source that step used saw the coarse fluxes' divergence: the correction changes the discrete divergence the fluxes imply without the matching source term, so the cancellation fails exactly at the refluxed cells. - Workaround before G3b: EGLM with
reflux_policy = troubledkeeps #78 at 3.4 times on smooth fields (the reflux is applied only where a shock or the limiter flags a face), at the conservation price measured in E2. - The fix: G3b: the EGLM reflux leaves
alone (3.3 times).