Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1037 commits
Select commit Hold shift + click to select a range
8066a41
Ledger (78): name the canary script and record that its first design …
sbryngelson Sep 5, 2026
d989c17
AMR: delete amr_rg_gather and its 35 unreachable sites -- a flag noth…
sbryngelson Sep 5, 2026
0b3529b
Ledger (80): per-block cost is ~13 ms/block/step across six phases, p…
sbryngelson Sep 5, 2026
9d2762b
Ledger (81): negative, pre-registered, falsifier fired -- pooling the…
sbryngelson Sep 5, 2026
d72f809
AMR instrument: five bracket-free host-time rows (h:slot/shell/own/un…
sbryngelson Sep 5, 2026
c23b697
AMD OpenMP lane: per-file opt-in defaultmap(present:allocatable) (MFC…
sbryngelson Sep 5, 2026
bcb4af8
Ledger (82): the per-block AMR cost is amdflang's per-launch re-map o…
sbryngelson Sep 5, 2026
0db0a43
Ledger (82) correction: unallocated module arrays abort under present…
sbryngelson Sep 5, 2026
1decefb
AMD OpenMP lane: m_amr_registers.fpp opts in to defaultmap(present:al…
sbryngelson Sep 5, 2026
6fa02b7
m_amr_registers opt-in header: fypp comments only (the formatter had …
sbryngelson Sep 5, 2026
fabc9cc
Ledger (83): m_amr_registers opted in -- at most 2% at cap 32, nothin…
sbryngelson Sep 5, 2026
509c765
AMR: one device-resident slab table + one GPU_UPDATE per launch for t…
sbryngelson Sep 5, 2026
2737f46
Ledger (84): one device slab table + one update per launch, pre-regis…
sbryngelson Sep 5, 2026
6a22dd2
AMR: amr_batched_gather (default F) -- pool the gathered coarse patch…
sbryngelson Sep 5, 2026
cc44aa3
AMR: amr_batched_gather -- wire the F2 parent-fill wave to the pooled…
sbryngelson Sep 5, 2026
c44314b
AMR: amr_batched_gather -- keep the per-member tables host-only so co…
sbryngelson Sep 5, 2026
4b24c75
AMR: amr_batched_gather -- the pooled unpack copies in only this wave…
sbryngelson Sep 5, 2026
60c1cce
amr_batched_gather rebase: restore the four preprocessor directives t…
sbryngelson Sep 6, 2026
3203472
Ledger (85): ledger 81 re-tested under the clause -- the pooled gathe…
sbryngelson Sep 6, 2026
982caf3
Ledger (86): scorecard item 2 re-measured on the pushed tip, two code…
sbryngelson Sep 6, 2026
926e978
Ledger (87): negative, pre-registered -- a per-block cost weight at K…
sbryngelson Sep 6, 2026
33ff8ab
Ledger (88): the per-block cost driver named from 66k batch records -…
sbryngelson Sep 6, 2026
b9af75a
AMR instrument: per-batch swap/rhs/restore/rk timing with member ids …
sbryngelson Sep 6, 2026
ce55c42
AMR batch instrument: open the per-rank log once (a logical flag; new…
sbryngelson Sep 6, 2026
9cade17
AMR batched advance: amr_bat_pad (default 0) lets a smaller block joi…
sbryngelson Sep 6, 2026
36168e3
amr_bat_pad: the batched capture reads member extents from amr_bat_me…
sbryngelson Sep 6, 2026
cba4202
amr_bat_pad: declare amr_bat_mext in m_global_parameters beside the o…
sbryngelson Sep 6, 2026
02b96b0
Ledger (89): the padded batch A/B -- batches -58%, summed rhs -16%, s…
sbryngelson Sep 6, 2026
333fa29
Ledger (90): amr_bat_pad at cap 96 (negative: wait up on every rank, …
sbryngelson Sep 6, 2026
f3c9f66
Ledger (91): amr_lb_block_cost K=2 on top of padded batching -- null …
sbryngelson Sep 6, 2026
1b47bc5
Ledger (92): the per-batch fixed cost named from a kernel+copy trace …
sbryngelson Sep 6, 2026
2b7453a
amdflang: opt m_rhs and m_weno into defaultmap(present:allocatable) (…
sbryngelson Sep 6, 2026
ea2cba5
Ledger (93): m_rhs and m_weno present:allocatable opt-in -- -0.09/-0.…
sbryngelson Sep 6, 2026
67bd074
AMR instruments: f_amr_wtime() wraps MPI_Wtime under MFC_MPI (the ser…
sbryngelson Sep 6, 2026
0c47d91
post_process: the AMR overlay no longer stores block-local mixture fi…
sbryngelson Sep 7, 2026
2351b20
test harness: post-process cases keep parallel_io = F on a no-MPI bui…
sbryngelson Sep 7, 2026
a3c7ff3
Grid minima over the filled range: dx/dy/dz are allocated to the _all…
sbryngelson Sep 6, 2026
3f1cde7
Ledger (94): the PR's CI read in full -- every Frontier lane's heap c…
sbryngelson Sep 7, 2026
b03255c
amdflang: opt m_riemann_solver_hllc into defaultmap(present:allocatab…
sbryngelson Sep 6, 2026
c0d5844
Ledger (95): m_riemann_solver_hllc present:allocatable opt-in behind …
sbryngelson Sep 7, 2026
538c390
Serial I/O: write bc_type.dat and bc_buffers.dat into every simulatio…
sbryngelson Sep 7, 2026
4e88da3
post_process: the save-index gap skip under cfl_dt now probes the ser…
sbryngelson Sep 7, 2026
7535c83
post_process: write the rectilinear-grid coordinates with the Silo da…
sbryngelson Sep 7, 2026
3daa84f
post_process: the Lagrangian-bubble and immersed-body point meshes an…
sbryngelson Sep 7, 2026
5cb485f
Ledger (96): the PR's CI closed out -- the three remaining failure cl…
sbryngelson Sep 7, 2026
759795d
Merge upstream/master into up/mega: the Phoenix single-job benchmark …
sbryngelson Sep 7, 2026
43a96c9
AMR batched stage: skip the restore-side device push of the grid stat…
sbryngelson Sep 7, 2026
d6a470e
Ledger (97): restore-side grid-state device push skipped between cons…
sbryngelson Sep 8, 2026
4b82e51
Ledger (98): two pre-registered negatives close the per-launch copy c…
sbryngelson Sep 8, 2026
ab09843
Ledger (99): cap 96 explained and re-measured -- amr_bat_pad is a sma…
sbryngelson Sep 8, 2026
5839036
Ledger (99) correction: the validator already prohibits batched advan…
sbryngelson Sep 8, 2026
789ef5c
AMR: the batched fine advance turns on by default where the case admi…
sbryngelson Sep 8, 2026
001744d
AMR batching default: amr_device_pack does not ride along (its cap-32…
sbryngelson Sep 8, 2026
95faf5b
Ledger (100): the batched fine advance on by default where the case a…
sbryngelson Sep 8, 2026
96430fa
test harness: 27 AMR goldens get amr_max_grid_size pinned at the valu…
sbryngelson Sep 8, 2026
83754c7
Ledger (101): 27 AMR goldens pin amr_max_grid_size at the derived val…
sbryngelson Sep 8, 2026
bdae5f7
AMR batched advance: apply the static-body immersed-boundary correcti…
sbryngelson Sep 8, 2026
e961a4d
AMR batched IB correction: hold amr_bat_n at 1 while the members are …
sbryngelson Sep 8, 2026
d6e4eba
Ledger (103): the batched advance skipped the post-RK hooks -- the st…
sbryngelson Sep 8, 2026
52e3c73
AMR fine RHS: zero body cells by the block's OWN fine markers (ib_mar…
sbryngelson Sep 8, 2026
3dc5fa0
AMR golden: static IBM circle -> dynamic regrid -> batched pair (two …
sbryngelson Sep 8, 2026
762c6b2
AMR IB goldens regenerated for the fine-marker RHS zeroing (6 cases: …
sbryngelson Sep 8, 2026
4d5fb4a
Ledger (104): the fine RHS zeroed body cells by the coarse marker pat…
sbryngelson Sep 8, 2026
6d5acc4
Ledger (102): item 4 scoped and measured -- the np=8 exchange is alre…
sbryngelson Sep 8, 2026
7b9d7b7
Toolchain default: amr_device_pack rides with the batching default wh…
sbryngelson Sep 8, 2026
99f7483
Ledger (106): amr_device_pack A/B at caps 32 and 96 closes GOAL v3 it…
sbryngelson Sep 8, 2026
4ef1d19
AMR regrid: the global box union is no longer truncated to amr_max_bl…
sbryngelson Sep 8, 2026
e359bb8
Ledger (105): the 2-node rung found a correctness cliff -- the global…
sbryngelson Sep 8, 2026
f5dab18
Ledger (107): scorecard item 2 re-measured on the shipped defaults, t…
sbryngelson Sep 8, 2026
df1b898
Ledger 107 same-session correction: the 'unbracketed sixth' was an ac…
sbryngelson Sep 8, 2026
9ab86a5
AMR migration: the wire buffers are device-resident and, under rdma_m…
sbryngelson Sep 8, 2026
5812975
Ledger (108): migration off the host (GOAL v4 item 1) -- the regrid's…
sbryngelson Sep 8, 2026
dfdd0cb
Ledger (110): halo width is not where MFC's AMR excess sits -- the S0…
sbryngelson Sep 8, 2026
e901eb4
AMR regrid hysteresis (amr_snap, default 0 = off): a new box within a…
sbryngelson Sep 8, 2026
00a169a
Ledger (109): regrid hysteresis (amr_snap, default off) -- a new box …
sbryngelson Sep 8, 2026
4930cf2
Toolchain default: amr_snap = min(2, amr_buf - 2) rides with the batc…
sbryngelson Sep 8, 2026
20f6db1
Ledger (111): scorecard item 2 with the regrid hysteresis on -- two c…
sbryngelson Sep 8, 2026
bedfb0a
Merge upstream master d2d8cac2 into up/mega: state-dependent equation…
sbryngelson Sep 8, 2026
1dac983
Ledger (112): upstream master d2d8cac2 merged (state-dependent equati…
sbryngelson Sep 9, 2026
6f3793f
Ledger (113): item 4's first read closed -- the two-node doubling cos…
sbryngelson Sep 9, 2026
18f9d7f
Ledger (115): the rep-to-rep climb is not node state and not intrinsi…
sbryngelson Sep 9, 2026
19b8783
Ledger (114): the two-node rung with the regrid hysteresis on -- 1.26…
sbryngelson Sep 9, 2026
8f7c394
Ledger (117): the clean 2x statement -- two codes, one node, one wind…
sbryngelson Sep 9, 2026
a343e6e
Ledger (118): the rung with all shipped defaults -- np8 5.14 -> 3.13 …
sbryngelson Sep 9, 2026
69f36a9
Docs: mark every 4.96 % noise-floor citation as superseded by the mea…
sbryngelson Sep 9, 2026
195570c
Ledger (120): the floor of the differenced protocol -- five back-to-b…
sbryngelson Sep 9, 2026
4a7ce9c
AMR migration: bound the device-resident wire pools (2 GiB); above th…
sbryngelson Sep 9, 2026
9d59073
Ledger (125) + AMR migration: bound the device-resident wire pools at…
sbryngelson Sep 9, 2026
7853c5e
AMR: hoist the coarse cons halo before the coarse RHS and convert ove…
sbryngelson Sep 9, 2026
e61bdb2
Ledger (122) + AMR: the coarse cons halo runs before the coarse RHS a…
sbryngelson Sep 9, 2026
ded843d
AMR fold: retire the last comments naming the deleted freg wave
sbryngelson Sep 9, 2026
67a4c97
Ledger (123) + AMR fold: the level>=2 freg faces ride the restrict-pa…
sbryngelson Sep 9, 2026
ff8a093
AMR rebuild: walk the boxes owner-interleaved per level (round-robin …
sbryngelson Sep 9, 2026
6b27f7c
Ledger (126) + AMR rebuild: walk the boxes owner-interleaved per leve…
sbryngelson Sep 9, 2026
af0fac8
AMR seam wave: post at the top of the stage (sends read stage-entry i…
sbryngelson Sep 9, 2026
8063d39
Ledger (129) + AMR seam wave: post at the top of the stage with priva…
sbryngelson Sep 9, 2026
0ff8a71
Ledger (119): the np16 rebuild-free window probe -- the two-node wait…
sbryngelson Sep 9, 2026
b77f3db
Ledger 127: ownership stickiness at rebuild does not reduce migration…
sbryngelson Sep 9, 2026
3971ba6
Ledger 130: clean-node np8 reads of the rendezvous cuts and the rebui…
sbryngelson Sep 9, 2026
e766ac9
Ledger 132: scorecard item 2 re-baselined on the fixed pin, one node,…
sbryngelson Sep 10, 2026
43c9a7b
Ledger 133: five np16 rungs on a healthy node pair (doublings 1.23-1.…
sbryngelson Sep 10, 2026
bcc3bbf
Ledger 134: the np32/np48 NaN of ledger 133 was a wrong pre_process b…
sbryngelson Sep 11, 2026
bd0570f
Ledger 135: the largest-first batch order halves the fine-advance ran…
sbryngelson Sep 11, 2026
ff9e55b
EOS: bake the state-dependent-EOS flag at build time and keep the HLL…
sbryngelson Sep 10, 2026
c7ea902
Ledger 131: the master merge cost the fine RHS +37 % through the stat…
sbryngelson Sep 11, 2026
124cc13
Ledger 136: one profiler for both codes -- MFC spends a smaller share…
sbryngelson Sep 11, 2026
6b8813d
amr: split the reflux-faces wave into post and drain and run the L0 c…
sbryngelson Sep 11, 2026
ebbed4c
Ledger 137: post the reflux-faces wave before the L0 coarse RHS and d…
sbryngelson Sep 11, 2026
d4a8e25
Revert the reflux-wave post/drain split: against its true parent it i…
sbryngelson Sep 11, 2026
c15f491
Ledger 138: retract ledger 137 -- its control pin and its uniform ter…
sbryngelson Sep 11, 2026
21c6cc0
Mark ledger 137 retracted in its own header (ledger 138 supersedes it)
sbryngelson Sep 11, 2026
b8d1a30
docs: table the per-step rendezvous count before and after the GOAL v…
sbryngelson Sep 11, 2026
68193f1
Ledger 139: the first pin-matched two-code reads of the current code …
sbryngelson Sep 11, 2026
e1b132a
Ledger 139: apply the six reviewer corrections lost from the landed t…
sbryngelson Sep 11, 2026
e690f53
Ledger 140: growing both uniform arms to the AMR arm's 200-step windo…
sbryngelson Sep 11, 2026
c79a594
Ledger 141: GOAL v8 item 2 is not built -- a nowait target region enc…
sbryngelson Sep 11, 2026
ed7cb3e
Ledger 128: the weak-scaling curve on the rung deck, np8 to np32 -- 1…
sbryngelson Sep 12, 2026
8d67032
Correct the restr phase-split comment: rs:wave is neither deleted nor…
sbryngelson Sep 12, 2026
c4e21f3
Move only the six face planes the level>=2 reflux apply touches, not …
sbryngelson Sep 12, 2026
bd46041
Ledger 151: statement 2 re-read case-optimized is 0.627 and 1.71x AMR…
sbryngelson Sep 12, 2026
1ca4fbb
Ledger 152: 56 percent of statement 2's excess is MPI wait with a 251…
sbryngelson Sep 12, 2026
3d5782a
Merge upstream master into up/mega: take upstream's continuum-damage …
sbryngelson Sep 13, 2026
84986ae
Merge upstream master again: adopt the AMD_NUM_SPECIES_MAX species bo…
sbryngelson Sep 13, 2026
8b5f564
Give eos_state_dependent a Fypp default in the CMake build (fixes doc…
sbryngelson Sep 13, 2026
05ec353
Ledger 150: five code-review leads taken to verdicts, with three meas…
sbryngelson Sep 13, 2026
e827542
Document that a generated-case Fypp variable also needs a CMake default
sbryngelson Sep 13, 2026
8f08a69
Quote file:line in the plan doc so Doxygen stops autolinking it (fixe…
sbryngelson Sep 13, 2026
ee9c434
Regenerate the AMR cont_damage golden for upstream's undamaged-modulu…
sbryngelson Sep 13, 2026
0f60ffa
Size HLLC star states by AMD_SYS_SIZE_MAX, the half of #1852 the merg…
sbryngelson Sep 13, 2026
107d480
Ledger 153: the master merge changed exactly one test, the AMR cont_d…
sbryngelson Sep 13, 2026
143b0e9
Reword file:line in the plan doc; Doxygen autolinks it even inside a …
sbryngelson Sep 13, 2026
518de44
Measure phase nesting at run time so the budget residual sums only to…
sbryngelson Sep 13, 2026
f481484
Ledger 154: the step budget measures its own nesting, and the measure…
sbryngelson Sep 13, 2026
302e7c9
Ledger 153: the full suite confirms the merge changed only the one re…
sbryngelson Sep 13, 2026
bd65b0f
Ledger 155: Phase 2 priced before it was built; the per-rank skew is …
sbryngelson Sep 13, 2026
c9c0ed0
Ledger 156: the amr_bat_pad probe; merging shapes saves ~3.3 ms per l…
sbryngelson Sep 13, 2026
8b494a8
Ledger 153: record the merge's conflict resolutions
sbryngelson Sep 13, 2026
90e8285
Add the amr_equal_tiles parameter: validator rules, docs, default off
sbryngelson Sep 13, 2026
df176bf
Add s_amr_equal_tile_extent: equal-tile extent within 2-cell-floored …
sbryngelson Sep 13, 2026
bcc1715
Add amr_equal_tiles call sites, [amr-tile] report, and a multi-level …
sbryngelson Sep 13, 2026
00cd5b6
Golden for the amr_equal_tiles sibling of the pinned-cap multi-level …
sbryngelson Sep 13, 2026
52d84c6
Name the [amr-tile] counters for what they count (all_dims, some_dims)
sbryngelson Sep 13, 2026
8fa8c97
Ledger 157: equal tiles stops at its eligibility gate; no level-2 box…
sbryngelson Sep 13, 2026
0198fb0
Ledger 158: the wait floor is imbalance, not transfer; statement 2 re…
sbryngelson Sep 13, 2026
6dfe641
Ledger 158: replace the withdrawn rendezvous design with the priced t…
sbryngelson Sep 13, 2026
b4a68e8
Add amr_lb_beta: time-feedback block weights in the regrid partition …
sbryngelson Sep 13, 2026
304e243
Golden for the amr_lb_beta sibling of the pinned-cap multi-level deck
sbryngelson Sep 13, 2026
8cdfb77
Ledger 159: time-feedback block weights equalise time by making it la…
sbryngelson Sep 13, 2026
b19826e
WENO5: reconstruct one cell in a device routine so its six work array…
sbryngelson Sep 14, 2026
7fc73f4
Move the HLLC per-face body into device routines (137 -> 23 kernel ar…
sbryngelson Sep 14, 2026
290ad09
GPU_INLINE_CALL: force-inline the per-cell device routines on amdflan…
sbryngelson Sep 14, 2026
6c387c9
Move the conservative-to-primitive kernel body into a device routine …
sbryngelson Sep 14, 2026
f96134a
HLLC face routine takes explicit-shape arrays; WENO cell results go t…
sbryngelson Sep 14, 2026
af5b4fc
Kernel work arrays go BLOCK-local instead of private: hllc 46.9 -> 5.…
sbryngelson Sep 14, 2026
29bb54e
WENO5: the block with the work arrays wraps the seq i-loop, not each …
sbryngelson Sep 14, 2026
5702ea8
Merge upstream master (aa4e4585) into up/mega
sbryngelson Sep 14, 2026
ab9de43
Ledger 160: the descriptor tax -- BLOCK-local work arrays take 42 of …
sbryngelson Sep 14, 2026
6c0d817
Ledger 161: the rendezvous timeline -- ~14 syncs/step, two carry the …
sbryngelson Sep 14, 2026
83f36d9
AMR fine-window wire pools live on the device under rdma_mpi; MPI sen…
sbryngelson Sep 14, 2026
09f2556
Ledger 162: device-resident wire pools -- wall -73 ms/step (5/5 predi…
sbryngelson Sep 14, 2026
ecf2ca4
Ledger 163: batched-advance launches are no longer the wall (leaders …
sbryngelson Sep 14, 2026
0a81b26
Phase report: every phase per rank
sbryngelson Sep 14, 2026
496c1cd
Fine-block reconstruction: clip the transverse window to the block in…
sbryngelson Sep 14, 2026
42d4891
Ledger 164: fine-block reconstruction window clipped to the interior …
sbryngelson Sep 15, 2026
9ad407f
Put the MFC_GPU preprocessor directives in s_convert_conservative_to_…
sbryngelson Sep 15, 2026
e48c045
Ledger 165: statement 2 re-read node-matched A-B-A-A on k004-005 -- 1…
sbryngelson Sep 15, 2026
fde50dd
Delete the AMR instruments the campaign rejected: amr_equal_tiles, am…
sbryngelson Sep 15, 2026
dac9ce4
amr_status: record the tier-1 cleanup and what remains a product deci…
sbryngelson Sep 15, 2026
e3d4531
Clean up the AMR record: campaign notebooks move to misc/amr_ledger w…
sbryngelson Sep 15, 2026
befcd96
case.md: cross-page anchors as Doxygen refs (fixes the docs link check)
sbryngelson Sep 15, 2026
839489a
Kernel work arrays back to private= (drop the BLOCK-in-kernel form: N…
sbryngelson Sep 15, 2026
dbd15cd
Migration pack/unpack kernels: drop the present= clause (map(present,…
sbryngelson Sep 15, 2026
e6247b0
Batched fine advance admits MHD, relativity, hypoelasticity, continuu…
sbryngelson Sep 15, 2026
59a2585
Batched fine advance admits chemistry and IGR: seed the whole tempera…
sbryngelson Sep 15, 2026
8b3fa79
Batched fine advance no longer needs a pinned amr_max_grid_size: the …
sbryngelson Sep 15, 2026
985ba78
Lock-step goldens for the 6-equation and moving-body AMR cases, gener…
sbryngelson Sep 15, 2026
005ca99
Batched fine advance admits the 6-equation model and moving bodies: t…
sbryngelson Sep 15, 2026
fc559ff
Remove the unused locals, one orphan module variable, one dead functi…
sbryngelson Sep 15, 2026
7939263
Drop the campaign's scaling counters: gather-byte, clustering-tree an…
sbryngelson Sep 15, 2026
912532e
Split m_amr into a chain of eight service modules plus the driver (pu…
sbryngelson Sep 16, 2026
a7091cd
Source lint rejects the per-executable preprocessor guards (MFC_PRE_P…
sbryngelson Sep 16, 2026
bcfbe13
Non-Newtonian IBM golden: absolute tolerance 1e-8 (its zero field rea…
sbryngelson Sep 16, 2026
1183b81
Ledger 166: subcycling priced against the batched default (1.20x slow…
sbryngelson Sep 16, 2026
4e22dd7
Flush stdout in s_mpi_abort before every abort: a prohibit's reason w…
sbryngelson Sep 16, 2026
79b3a91
Remove AMR subcycling: every level advances in lock-step at the case …
sbryngelson Sep 16, 2026
8e3fa15
Retire the per-block fine advance: the batched advance is the only pa…
sbryngelson Sep 16, 2026
3421db9
Ledger README: the per-block advance is retired to the amr-per-block …
sbryngelson Sep 16, 2026
e04a90c
Ledger 167: the per-block advance leaves the branch (amr-per-block); …
sbryngelson Sep 16, 2026
2dda563
Fix the CI red on 773a9028: rewrap the m_amr_registers Fypp header no…
sbryngelson Sep 16, 2026
4617244
Share the AMR restart file layout between the simulation and post_pro…
sbryngelson Sep 16, 2026
e9d47de
One exchange engine for the AMR waves (m_amr_wave): plan sides, pools…
sbryngelson Sep 16, 2026
f192b1b
Plain Fortran for the single-instance Fypp templates in m_amr_exchang…
sbryngelson Sep 16, 2026
cb66088
Instrumentation: one phase-budget module, twelve top-level phases
sbryngelson Sep 16, 2026
7faf302
Split the two largest AMR routines
sbryngelson Sep 17, 2026
abee9a7
Delete the dead batched cons->prim conversion; trim the AMR comments
sbryngelson Sep 17, 2026
b842d64
Merge upstream master (IB prescribed kinematics and force history) in…
sbryngelson Sep 17, 2026
89592cc
Move the RK-stage AMR hooks out of m_time_steppers into m_amr_stage
sbryngelson Sep 17, 2026
15c84f4
One gather mechanism: init and the regrid rebuild fill coarse patches…
sbryngelson Sep 17, 2026
b989e78
Merge remote-tracking branch 'upstream/master' into up/mega
sbryngelson Sep 17, 2026
78cb485
Stash migration on the wave engine
sbryngelson Sep 17, 2026
82823dd
Split the grid swap, the L0 tile init and the restart reader
sbryngelson Sep 17, 2026
80d6a55
Merge upstream master (#1887 num_gps device refresh, already present …
sbryngelson Sep 18, 2026
efcaa5e
Cleanup: one dimension mask, one clusterer module, one of each geomet…
sbryngelson Sep 18, 2026
3c16b30
Registers: one capture kernel for creg and freg, one zeroing routine,…
sbryngelson Sep 18, 2026
3709f07
L0 tiles: one box router for seed/scatter/reflux/restrict, one face-B…
sbryngelson Sep 18, 2026
96e14bc
Exchange/transfer: slab lists as (3,6) boxes, one restrict kernel bod…
sbryngelson Sep 18, 2026
fc19d04
Frame/store/state/L0: Fypp folds over the three coordinate axes, one …
sbryngelson Sep 18, 2026
acbcd75
Vectorize the per-dimension guards in regrid, distribution, transfer,…
sbryngelson Sep 18, 2026
9060da1
One IGR sigma seed loop for batched and single blocks; trim the store…
sbryngelson Sep 18, 2026
6bcafa2
Docs: describe the reflux exchange as the wave it now is
sbryngelson Sep 18, 2026
f13329b
One stable key sort for the SFC cut, the seam-pair build and the clus…
sbryngelson Sep 18, 2026
a856e82
One receive drain and one unpack kernel for the level-1 and parent fi…
sbryngelson Sep 18, 2026
47f8377
s_amr_copy_fine_fields takes the block slot and reads its own bounds
sbryngelson Sep 18, 2026
9b48441
Fix the coarse-ghost exchange test reading uninitialized locals
sbryngelson Sep 18, 2026
39e6e7d
Guard the five unchecked combinations review found, and make the AMR …
sbryngelson Sep 18, 2026
0a4d556
Make the three empty goldens real, and fail a golden case that produc…
sbryngelson Sep 18, 2026
065f485
Push restored AMR state to the device where the host copy is authorit…
sbryngelson Sep 18, 2026
563b4ab
Apply the post-RK sources on fine blocks too, or reject them
sbryngelson Sep 18, 2026
c8d39ac
Guard the jac_old seed kernel instead of cycling past it (nvfortran)
sbryngelson Sep 18, 2026
a286573
Carry a level>=2 block's own solution across a regrid, as level 1 alr…
sbryngelson Sep 18, 2026
3741c67
Read the serial AMR overlay by the file's own record flag, not by geo…
sbryngelson Sep 18, 2026
c1ae9e3
Restart a coexist case: read the L0 tile records instead of rejecting…
sbryngelson Sep 19, 2026
0a2d977
Second review round: a case-optimized build could not compile, and th…
sbryngelson Sep 19, 2026
1f57008
Test species diffusion across a rank seam, and correct two stale clai…
sbryngelson Sep 19, 2026
5aaf36f
Tighten the wording of the user-facing AMR doc
sbryngelson Sep 19, 2026
52c55ef
Tighten the AMR doc: shorter sentences, fewer of them
sbryngelson Sep 19, 2026
4d8db3a
Revert the level>=2 regrid carry-forward: its stash frame assumption …
sbryngelson Sep 19, 2026
2eef2ae
Keep the --single precision guard out of the honor_io_keys filter
sbryngelson Sep 19, 2026
335456c
Split the reflux apply per direction: CCE miscompiles two nests in on…
sbryngelson Sep 19, 2026
3ca4919
Hoist store kernel bounds and plane weights to scalars for the OpenAC…
sbryngelson Sep 19, 2026
f1f5aa9
Verify, rather than silently skip, required builds under --no-build
sbryngelson Sep 19, 2026
5373d76
ci(frontier_amd): build the eos_state_dependent variant too
sbryngelson Sep 19, 2026
98629dc
Assert the shared-target slug invariant the case-opt prebuild relies on
sbryngelson Sep 19, 2026
f8481cd
Stop tracking tests/failed_uuids.txt, a generated artifact
sbryngelson Sep 19, 2026
c773d1d
Merge branch 'master' into up/mega
sbryngelson Sep 20, 2026
097a5d7
Merge branch 'master' into up/mega
sbryngelson Sep 20, 2026
4aa2e65
Fix NVHPC GPU failures: multi-rank OpenMP fault, cylindrical viscous …
sbryngelson Sep 23, 2026
b0a5bee
CI: give Phoenix GPU jobs 8 MPI slots for the ppn=8 AMR test
sbryngelson Sep 24, 2026
1b8a6d5
Merge branch 'master' into up/mega
sbryngelson Sep 29, 2026
abf2085
test: stop testing 3D_reacting_mixing_layer
sbryngelson Sep 30, 2026
252900c
Copy num_gps to a local before the corrected-gps rebuild
sbryngelson Sep 30, 2026
4e20c1e
Merge master into up/mega
sbryngelson Sep 30, 2026
9f99637
Merge master into up/mega
sbryngelson Sep 30, 2026
e986c9b
Pass pb_in/mv_in to the fine-block IB correction
sbryngelson Sep 30, 2026
41a6aa0
Thread pb_in/mv_in through the fine-stage RK path too
sbryngelson Oct 1, 2026
8e5863e
Merge master into up/mega
sbryngelson Oct 1, 2026
4c44267
Merge branch 'master' into fix1628
sbryngelson Oct 5, 2026
79954cd
Merge origin/master into up/mega
sbryngelson Oct 9, 2026
2795c79
AMR: gate 2D STL IB and body geometries the block containment bbox ca…
sbryngelson Oct 9, 2026
41e3137
AMR: gate reacting-surface IB (thermal_bc, surface_reaction) pending …
sbryngelson Oct 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions .github/scripts/check_caseopt_shared_slugs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
#!/usr/bin/env python3
"""Assert the shared-target invariant that prebuild-case-optimization.sh relies on.

That script builds syscheck, pre_process and post_process once, from benchmarks[0], behind a
done-marker so concurrent shards skip them. That serialization only covers the benchmarks[0]
slug. It is correct while every benchmark case hashes those three targets to that same slug:
if two cases in *different* shards shared some other slug, both shards would build that
staging directory at the same time, with no marker to serialize them.

A target's slug covers Case.get_fpp, so it moves when the case changes any compile-time axis
baked into it -- _prepend() bakes chemistry and eos_state_dependent (a Mie-Gruneisen, JWL or
Vinet fluid flips the latter), and the pre_process half bakes analytic initial conditions.
None of the current benchmarks trip any of those, which is precisely the property this check
pins down so a future benchmark cannot quietly remove it.

Usage: check_caseopt_shared_slugs.py <acc|mp|no> <case.py> [<case.py> ...]
"""

import os
import sys

SHARED_TARGETS = ("syscheck", "pre_process", "post_process")


def main(argv):
if len(argv) < 3:
print(f"usage: {os.path.basename(argv[0])} <acc|mp|no> <case.py> [<case.py> ...]", file=sys.stderr)
return 2

interface, cases = argv[1], argv[2:]

sys.path.insert(0, os.path.join(os.getcwd(), "toolchain"))
from mfc import state
from mfc.state import MFCConfig

state.gCFG = MFCConfig(gpu=interface)
# Only the keys the loader and the case files actually read: load() forwards ARGS() to each
# case.py as its DICT, and the benchmarks read gpu/nodes/tasks_per_node from it.
state.gARG = {
"gpu": interface != "no",
"nodes": 1,
"tasks_per_node": 1,
"case_optimization": True,
"input": None,
"--": [],
"rdma_mpi": False,
}

from mfc.build import get_target
from mfc.run import input as mfc_input

slugs = {}
for case in cases:
state.gARG["input"] = case
ifile = mfc_input.load(case, [], {}, do_print=False)
slugs[case] = {name: get_target(name).get_slug(ifile) for name in SHARED_TARGETS}

reference = cases[0]
mismatches = []
for case in cases[1:]:
for name in SHARED_TARGETS:
if slugs[case][name] != slugs[reference][name]:
mismatches.append((name, case, slugs[case][name], slugs[reference][name]))

if mismatches:
print("ERROR: case-optimization benchmarks no longer share one slug per shared target.", file=sys.stderr)
print(f" Reference case (benchmarks[0]): {reference}", file=sys.stderr)
for name, case, got, want in mismatches:
print(f" {name}: {case}", file=sys.stderr)
print(f" got {got}", file=sys.stderr)
print(f" want {want}", file=sys.stderr)
print(
" prebuild-case-optimization.sh builds these three targets once, from the reference\n"
" case, and lets other shards skip them -- which serializes only the reference slug.\n"
" Give every shard its own shared-target build, or drop the offending case, before\n"
" relying on the marker.",
file=sys.stderr,
)
return 1

print(f"Shared-target slugs agree across {len(cases)} benchmark case(s):")
for name in SHARED_TARGETS:
print(f" {name}: {slugs[reference][name]}")
return 0


if __name__ == "__main__":
sys.exit(main(sys.argv))
14 changes: 14 additions & 0 deletions .github/scripts/prebuild-case-optimization.sh
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,20 @@ esac
# Concurrent shards must not build those shared staging dirs simultaneously:
# shard 1 builds them first and drops a done marker; other shards wait for it,
# after which their builds no-op in the shared dirs.
#
# That marker serializes only the benchmarks[0] slug, so the "hash identically"
# claim above is load-bearing: two cases in different shards sharing some *other*
# slug would build that staging dir concurrently, unserialized. The slug moves
# with any compile-time axis in Case.get_fpp -- chemistry and eos_state_dependent
# (a Mie-Gruneisen, JWL or Vinet fluid flips the latter) from _prepend(), analytic
# ICs from the pre_process half. Check it up front, in every shard so they all
# fail together, rather than leaving it to a future benchmark to discover.
(
. ./mfc.sh venv > /dev/null
python3 .github/scripts/check_caseopt_shared_slugs.py \
"$([ "$job_interface" = "omp" ] && echo mp || echo acc)" "${benchmarks[@]}"
)

if [ -n "$shard" ] && [ "$shard_count" -gt 1 ]; then
shared_marker_done="build/.prebuild-shared-targets-done"
shared_marker_failed="build/.prebuild-shared-targets-failed"
Expand Down
3 changes: 2 additions & 1 deletion .github/scripts/submit-slurm-job.sh
Original file line number Diff line number Diff line change
Expand Up @@ -153,11 +153,12 @@ elif [ "$device" = "gpu" ]; then

case "$cluster" in
phoenix)
# 8 tasks: the largest test (AMR 3D pinned-cap multi-level, ppn=8) needs 8 MPI slots.
# --exclude is rendered separately (see $node_exclude) so the
# preflight can add a node to it and resubmit.
sbatch_device_opts="\
#SBATCH -p $gpu_partition
#SBATCH --ntasks-per-node=4
#SBATCH --ntasks-per-node=8
#SBATCH -G${gpu_count}"
node_exclude="atl1-1-03-007-29-0,atl1-1-03-007-31-0,atl1-1-01-002-28-0"
;;
Expand Down
16 changes: 12 additions & 4 deletions .github/workflows/common/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -54,16 +54,24 @@ if [ "$job_cluster" = "phoenix" ]; then
fi

# --- Variant selection ---
# The suite needs two simulation binaries: the base one and a chemistry one (the
# mechanism is compiled in). On amdflang each device link is ~1 hour, so building
# both serially exceeds the 2 h walltime. $job_variant lets the caller split them
# The suite needs three simulation binaries, one per always-on compile-time axis in
# Case.get_fpp's _prepend(): the chemistry mechanism is compiled in, and so is
# eos_state_dependent. Each distinct fpp hashes to its own build slug, for every
# target including syscheck. On amdflang each device link is ~1 hour, so building
# them serially exceeds the 2 h walltime. $job_variant lets the caller split them
# into concurrent jobs that write to disjoint staging directories:
# base -> plain targets, what every non-chemistry test runs
# base -> the empty case, which bakes chemistry=False and eos_state_dependent=False
# chem -> the chemistry variant only
# eos -> the eos_state_dependent=True variant (Mie-Gruneisen, JWL, Vinet). All such
# cases share one slug per target, so any one of them builds it for all.
# Unset builds everything in this job (default for every other cluster).
#
# A variant missing from this list is now caught up front by the --no-build check in
# mfc/test/test.py rather than by srun failing to exec a path that was never built.
case "${job_variant:-}" in
base) build_cmd=(./mfc.sh build -j 8 $build_opts) ;;
chem) build_cmd=(./mfc.sh test -v --dry-run -a -j 8 -o Chemistry $build_opts) ;;
eos) build_cmd=(./mfc.sh test -v --dry-run -a -j 8 -o eos=mie_gruneisen $build_opts) ;;
"") build_cmd=(./mfc.sh test -v --dry-run -a -j 8 $build_opts) ;;
*) echo "ERROR: unknown job_variant '$job_variant'"; exit 1 ;;
esac
Expand Down
11 changes: 6 additions & 5 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -481,13 +481,14 @@ jobs:

- name: Build (concurrent variants)
if: matrix.cluster == 'frontier_amd' && matrix.device == 'gpu'
# The suite needs a base and a chemistry simulation binary, and on amdflang
# each device LTO link is ~1 h -- building both serially overruns the 2 h
# walltime. They touch disjoint staging directories, so submit one SLURM job
# per variant and wait on both (mirrors the case-optimization pre-build).
# The suite needs a base, a chemistry and an eos_state_dependent simulation
# binary (see the variant list in common/build.sh), and on amdflang each device
# LTO link is ~1 h -- building them serially overruns the 2 h walltime. They
# touch disjoint staging directories, so submit one SLURM job per variant and
# wait on all (mirrors the case-optimization pre-build).
run: |
pids=""
for v in base chem; do
for v in base chem eos; do
bash .github/scripts/submit-slurm-job.sh .github/workflows/common/build.sh ${{ matrix.device }} ${{ matrix.interface }} ${{ matrix.cluster }} "${{ matrix.shard }}" "$v" &
pids="$pids $!"
done
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ docs/documentation/parameters.md
/tests/*/**
!/tests/*/golden.txt
!/tests/*/golden-metadata.txt
# Written by ./mfc.sh test when cases fail and deleted again on a clean run, so a committed copy
# flips in and out of every working tree depending on the last run's outcome. The pattern above
# only covers tests/<uuid>/, not tests/ itself.
/tests/failed_uuids.txt

# NVIDIA Nsight Compute
*.nsys-rep
Expand Down
1 change: 1 addition & 0 deletions .lychee.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,5 +33,6 @@ exclude = [
"https://code\\.visualstudio\\.com/?$", # Root page returns 403 to automated requests
"https://stackoverflow\\.com", # Returns 403 to automated requests
"https://marketplace\\.visualstudio\\.com", # Returns 503 to automated requests
"_8md\\.html$", # Doxygen auto-links backticked *.md filenames in prose to per-file pages it never generates for markdown inputs; the real md_*.html page links are still checked
"https://web\\.eng\\.ucsd\\.edu", # San Diego mechanism page has an untrusted SSL cert
]
6 changes: 6 additions & 0 deletions .typos.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ extend-ignore-identifiers-re = [
AttributeIDSupressMenu = "AttributeIDSupressMenu"

[default.extend-words]
# Cray CCE spells it this way in the lib-4425 runtime error; quoted verbatim in the AMR ledger so the
# message stays greppable against what the machine actually prints.
Unitialized = "Unitialized"
INOUT = "INOUT"
WRONLY = "WRONLY"
nd = "nd"
Expand All @@ -22,6 +25,9 @@ TKE = "TKE"
HSA = "HSA"
infp = "infp"
Sur = "Sur"
thi = "thi" # AMR clustering local: tagged-box hi index (tlo/thi)
alo = "alo" # AMR clustering local: accepted-box lo array (alo/ahi)
thr = "thr" # AMR clustering local: min-separation merge threshold
equil = "equil" # abbreviation for "equilibrium" (flamelet chemistry)
chioces = "chioces" # typo for "choices" - tests constraint key validation
reqires = "reqires" # typo for "requires" - tests dependency key validation
Expand Down
1 change: 1 addition & 0 deletions cmake/Fypp.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ macro(HANDLE_SOURCES target useCommon)
-D MFC_COMPILER="${CMAKE_Fortran_COMPILER_ID}"
-D MFC_CASE_OPTIMIZATION=False
-D chemistry=False
-D eos_state_dependent=False
--line-numbering
--no-folding
--line-length=999
Expand Down
6 changes: 6 additions & 0 deletions cmake/GPU.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,15 @@ elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray")
add_link_options("SHELL:-hkeepfiles")

if (CMAKE_BUILD_TYPE STREQUAL "Debug")
# -h bounds: array-bounds and pointer checking, the Cray equivalent of gfortran's
# -fcheck=bounds,pointer / Intel's -check bounds / NVHPC's -Mbounds, all of which the
# debug branches above already set. Cray was the ONLY compiler whose debug build had no
# bounds checking, so an out-of-bounds write showed up here only as a later, unrelated
# allocation failing with an uninitialised descriptor.
add_compile_options(
"SHELL:-h acc_model=auto_async_none"
"SHELL: -h acc_model=no_fast_addr"
"SHELL: -h bounds"
"SHELL: -K trap=fp" "SHELL: -g" "SHELL: -O0"
)
add_link_options("SHELL: -K trap=fp" "SHELL: -g" "SHELL: -O0")
Expand Down
Loading
Loading