Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
923 commits
Select commit Hold shift + click to select a range
9fd9592
Revert "Iterate the recorded receive list instead of rescanning every…
sbryngelson Aug 29, 2026
89f1b94
Reapply "Iterate the recorded receive list instead of rescanning ever…
sbryngelson Aug 29, 2026
9e5bdea
Drop the churn tolerance override: the failure is a flipped tag, not …
sbryngelson Aug 29, 2026
8f5d950
Drop the GPU_DECLARE on the move_alloc'd AMR device arrays (fixes Fro…
sbryngelson Aug 30, 2026
97eff75
Bracket the base-grid halo exchange as its own phase
sbryngelson Aug 30, 2026
007dd8c
Add the halo, memory and grid-efficiency scaling probes
sbryngelson Aug 30, 2026
d2accee
Bound the churn test's amplification window instead of chasing the th…
sbryngelson Aug 30, 2026
06f32d8
Match the dual-pass flux teardown guard to its allocation guard
sbryngelson Aug 30, 2026
45ba759
Zero flux_gsrc_hatR_rsx_vf at allocation
sbryngelson Aug 30, 2026
bf3de26
Zero pc_iter_count on host and device at allocation
sbryngelson Aug 30, 2026
15f0ddf
Fail closed in post_process on v2 AMR restart files
sbryngelson Aug 30, 2026
c2f3213
Drop the dead v2 guard from the serial post reader
sbryngelson Aug 30, 2026
68bcaf1
Check post_process's exit code in the test suite
sbryngelson Aug 30, 2026
c64351a
Read v2 AMR restart files in post_process
sbryngelson Aug 30, 2026
441d844
Reduce the grid-efficiency numerator across ranks
sbryngelson Aug 30, 2026
358ac1c
Skip L0 tiles in the post_process AMR reader instead of aborting
sbryngelson Aug 30, 2026
d705abb
Add the post-pad footprint counter and warn on silent box-set truncation
sbryngelson Aug 30, 2026
1b56e95
Correct three stale subcycle claims
sbryngelson Aug 30, 2026
1afba26
Ledger (44): two expert reviews reorder the program
sbryngelson Aug 30, 2026
51778c6
Skip skipped save indices in post_process instead of aborting
sbryngelson Aug 30, 2026
e860a5f
Exempt the CCE-only tracer-bubble failure from --test-all, tracked in…
sbryngelson Aug 30, 2026
b5c7ee4
Bracket the subcycle advance path with the lock-step phase ids
sbryngelson Aug 31, 2026
1301a91
Ledger (45): the cadence result was a broken control; multi-node was …
sbryngelson Aug 31, 2026
abb8574
Ledger (46): subcycle parity at matched fidelity; binned merge in, bi…
sbryngelson Aug 31, 2026
4d5f6ee
Use single-precision post output on --single builds in the test suite
sbryngelson Aug 31, 2026
c881e4e
Binned candidate merge: O(1)-removal survivor list + spatial prune, b…
sbryngelson Aug 31, 2026
08a8f49
Budget the store-growth device transient in bytes, not columns
sbryngelson Aug 31, 2026
805f26e
Fix single-precision post output at the site the test path actually uses
sbryngelson Aug 31, 2026
1e57e79
Count amr_slots in the [amr-mem] replicated-footprint report; ledger …
sbryngelson Aug 31, 2026
2f401b0
SUM-reduce the migration counters globally; ledger (48): four scaling…
sbryngelson Aug 31, 2026
3eeb080
Dirty-box merge continuation: eliminate the per-fusion pass restart
sbryngelson Sep 1, 2026
5f57b03
Revert the private+map(alloc) clause overlap (fixes the NVHPC gpu-omp…
sbryngelson Sep 1, 2026
17db501
Replace the cluster sort's insertion sort with a stable bottom-up mer…
sbryngelson Sep 1, 2026
2c4b2f4
Keyed-tags M0: an always-on order oracle over the F5 wave exchanges
sbryngelson Sep 1, 2026
c8c4f2c
Ledger (49): four landings, the oracle, and the phase transition
sbryngelson Sep 1, 2026
acaae35
W1 batch 1: epoch-keyed level-1 receive list replaces the fill-wave r…
sbryngelson Sep 1, 2026
dcfce95
W1 batch 2: padded receive list + two owned-list conversions
sbryngelson Sep 1, 2026
75a1220
Ledger (50): W1 underway; P-prime interim and the misanchored bands
sbryngelson Sep 1, 2026
1212778
W1 batch 3: the last six per-stage scans, and the parent-index cache
sbryngelson Sep 1, 2026
2a57b32
Ledger (51): W1 batch 3 lands; np1024 postmortem memory-gates the rung
sbryngelson Sep 1, 2026
0f6e9f0
M1 on family F5: keyed wave tags with plan-derived sequences
sbryngelson Sep 1, 2026
025da79
Ledger (52): the proper two-code tax test; MFC AMR overhead below AMR…
sbryngelson Sep 2, 2026
9d0ec27
Ledger (53): np512 A/B closed at -5.0%; gain is the dirty-box merge, …
sbryngelson Sep 2, 2026
7a5fbd1
Ledger (53): probe verdict, k002-005 is the slow node
sbryngelson Sep 2, 2026
4bd1747
Ledger (53): the clean np512 rung closes the constant-density ladder …
sbryngelson Sep 2, 2026
3368b16
Ledger (53): name the 256->512 growth term (regrid rebuild)
sbryngelson Sep 2, 2026
fd9f242
Compile only the Riemann solver the case selects under case optimization
sbryngelson Sep 2, 2026
e9e80c9
Ledger (54): expert review overturns ledger 52's inference; regrid is…
sbryngelson Sep 2, 2026
948298e
Ledger (55): AMReX at its own GPU-sane grids taxes 7.7-8.5x, not 20.5x
sbryngelson Sep 2, 2026
1c1658f
AMR: abort at init when a refined block's fine extent exceeds the ran…
sbryngelson Sep 2, 2026
49473b0
Ledger (56): fixture pointers
sbryngelson Sep 2, 2026
52d2469
Regrid rebuild: print the xchg-flag arrival skew and collective time …
sbryngelson Sep 3, 2026
594fcaa
Ledger (57): tax replication 12.4x +/-2% on k004-003, w1 control 24.1…
sbryngelson Sep 3, 2026
7934718
Ledger (58): Task 3 review corrections + steady-state AMR-arm profile…
sbryngelson Sep 3, 2026
5651257
Ledger (58) correction: coarse phase is the level-0 rhs; exchanges 0.…
sbryngelson Sep 3, 2026
7bb359a
AMR: fill the WENO coefficient tail past the coarse subdomain (fixes …
sbryngelson Sep 3, 2026
6b8d631
AMR: size the dual-pass and NC-interface flux scratch to idwbuff_alloc
sbryngelson Sep 3, 2026
d6c73c9
AMR: delete the pinned-cap init guard; the widened scratch is now com…
sbryngelson Sep 3, 2026
3afefa3
AMR: 3D np=8 golden with the box cap pinned above a rank's coarse ext…
sbryngelson Sep 3, 2026
889b2d6
AMR: trim the WENO tail-fill comment
sbryngelson Sep 3, 2026
d4c50b8
Ledger (59): describe the committed 20-step golden
sbryngelson Sep 3, 2026
a94607d
W1 batch 4: reflux-to-parent walks the owned/foreign-child union, not…
sbryngelson Sep 3, 2026
1905d65
W1 batch 4: level>=2 relax loop walks the owned list
sbryngelson Sep 3, 2026
17706eb
W1 batch 4: level-1 relax loop walks the owned list
sbryngelson Sep 3, 2026
bb197c0
Ledger (60): rdma_mpi under OpenMP (-4%), device pools falsified, the…
sbryngelson Sep 3, 2026
03b6c27
Bracket-free MPI-wait instrument: [mpiwait] table under rank_time_wrt
sbryngelson Sep 4, 2026
f123623
Allow rdma_mpi under OpenMP offload: the checker gate predates the OM…
sbryngelson Sep 3, 2026
62e45e7
Ledger (61): the analytic-IC pre_process trap, the bracket-free MPI-w…
sbryngelson Sep 4, 2026
ffdfd18
Ledger (62): Task 4 concluded (regrid arrival skew 1.9x/doubling), th…
sbryngelson Sep 4, 2026
ed2d06f
Ledger (63): Task 9 count gate met (regrid doubling 1.94x -> 1.32x, r…
sbryngelson Sep 4, 2026
56138f8
Audit: MFC_XA_SEED_FAM aims the seeded fold at one family's first key…
sbryngelson Sep 4, 2026
feacbe3
M1 on family F2W: keyed parent-fill wave tags
sbryngelson Sep 4, 2026
11184f8
M1 on families F1W/F3W: keyed stage-fill wave tags (bands 3 and 4)
sbryngelson Sep 4, 2026
8731e19
M1 on family F6W: keyed fine-fine halo wave tags
sbryngelson Sep 4, 2026
bbd566c
M1 on family F7W: keyed level-1 restrict wave tags
sbryngelson Sep 4, 2026
d8633d8
M1 on family F7BW: keyed parent restrict wave tags
sbryngelson Sep 4, 2026
081ab44
M1 comments: amr_tag_base survives only for regrid migration; freg wa…
sbryngelson Sep 4, 2026
f0db26e
Ledger (64): np8 redone (5.69 s/step), the np16 rung never ran and it…
sbryngelson Sep 4, 2026
78c4b60
Merge upstream/master into up/mega: adopt the centralized Riemann EOS…
sbryngelson Sep 4, 2026
307b62a
Merge remote-tracking branch 'origin/merge/master-0904' into up/mega
sbryngelson Sep 4, 2026
f17a9aa
Merge remote-tracking branch 'upstream/master' into up/mega
sbryngelson Sep 4, 2026
43234ac
Ledger (65): master merged and gated on the combination; the batched …
sbryngelson Sep 4, 2026
c1f859b
Ledger (66): retract the restart-metadata padding finding; the compar…
sbryngelson Sep 4, 2026
ce37c52
AMR: the lock-step fine advance walks the owned-block list (W1 leftov…
sbryngelson Sep 4, 2026
8806561
AMR: batched fine advance behind amr_batched_advance (stacked bridge,…
sbryngelson Sep 4, 2026
525d4b7
AMR: L0 tile migration marks the owned-block list dirty after writing…
sbryngelson Sep 4, 2026
b0f601c
AMR: amr_batched_advance review fixes (abort on the coefficient-recom…
sbryngelson Sep 4, 2026
c60ce8a
Ledger (67): the batched fine advance is merged behind a default-off …
sbryngelson Sep 5, 2026
f1f8410
AMR: report the batched-advance batch population as [amr-bat] under r…
sbryngelson Sep 5, 2026
32e66e6
Ledger (68): the MI210 GPU ladder, its MPI-wait split, and the mechan…
sbryngelson Sep 5, 2026
4799a4c
Ledger (69): goal v2 -- gated increments are pushed the session they …
sbryngelson Sep 5, 2026
13a18f0
Merge branch 'task10/batchcount' into up/mega
sbryngelson Sep 5, 2026
704582d
Walk the rebuild box loop over this rank's participants, not every bo…
sbryngelson Sep 4, 2026
b188e75
Walk the rebuild's old-block loops over the stashes this rank holds
sbryngelson Sep 4, 2026
560f21c
Check seam topology from this rank's owned blocks, not all pairs
sbryngelson Sep 4, 2026
e2fc388
Print per-rank seconds for the regrid sub-phases in the phase-rank table
sbryngelson Sep 4, 2026
1a4344d
Drop the participant role array: the consumers' own predicates alread…
sbryngelson Sep 4, 2026
83e484a
Ledger (70): load balance replayed offline at zero cost -- do not imp…
sbryngelson Sep 5, 2026
082f65f
Merge branch 'task9/rebuild' into up/mega
sbryngelson Sep 5, 2026
5f2e184
Ledger (71): Task 9 merged -- the regrid rebuild's O(P) rows fall fro…
sbryngelson Sep 5, 2026
3ed5bae
Add the amr_device_pack case flag (default F): requires amr, excludes…
sbryngelson Sep 5, 2026
2f650c3
F1/F2 coarse-patch gather: one fused pack/unpack kernel per family pe…
sbryngelson Sep 5, 2026
f64fea7
Ledger (72): the controlled ladder and the MI250X A/B, reviewed -- ba…
sbryngelson Sep 5, 2026
5e0f5ea
Ledger (73): the steady AMR excess is 1.44 s/step (2.1x target) with …
sbryngelson Sep 5, 2026
80225d4
Ledger (74): the step is only ~26% MPI wait (a lower bound), and the …
sbryngelson Sep 5, 2026
d238236
Merge branch 'up/mega' into task10/fusedpack
sbryngelson Sep 5, 2026
b126ee8
Ledger (75, 76): the fused gather packs are worth 0.14 s/step with 12…
sbryngelson Sep 5, 2026
23800cf
AMR: correct the amr_device_pack description (sends fuse per family, …
sbryngelson Sep 5, 2026
a11b4fe
Merge task10/fusedpack: fused F1/F2 gather packs behind the default-o…
sbryngelson Sep 5, 2026
3e208d3
Ledger (75): record the gates the fused-pack merge passed, and the 3 …
sbryngelson Sep 5, 2026
2d3381c
Ledger (76): the 8-GPU/node first doubling is 1.30x -- the 21 percent…
sbryngelson Sep 5, 2026
a4618f6
Ledger (77): my own hypothesis falsified -- the allocator setting rec…
sbryngelson Sep 5, 2026
e36a680
Ledger (75): all 70 AMR goldens pass on the merged tree -- the 3 chem…
sbryngelson Sep 5, 2026
4b534eb
Ledger (78): this node's intra-node MPI wait degraded 4.4x during the…
sbryngelson Sep 5, 2026
cede444
Ledger (78): name the canary script and record that its first design …
sbryngelson Sep 5, 2026
7babe17
AMR: delete amr_rg_gather and its 35 unreachable sites -- a flag noth…
sbryngelson Sep 5, 2026
97eedbb
Ledger (80): per-block cost is ~13 ms/block/step across six phases, p…
sbryngelson Sep 5, 2026
04fb2f0
Ledger (81): negative, pre-registered, falsifier fired -- pooling the…
sbryngelson Sep 5, 2026
9002f3c
AMR instrument: five bracket-free host-time rows (h:slot/shell/own/un…
sbryngelson Sep 5, 2026
8dc669a
AMD OpenMP lane: per-file opt-in defaultmap(present:allocatable) (MFC…
sbryngelson Sep 5, 2026
00caa29
Ledger (82): the per-block AMR cost is amdflang's per-launch re-map o…
sbryngelson Sep 5, 2026
256355c
Ledger (82) correction: unallocated module arrays abort under present…
sbryngelson Sep 5, 2026
a235b5a
AMD OpenMP lane: m_amr_registers.fpp opts in to defaultmap(present:al…
sbryngelson Sep 5, 2026
22b4fba
m_amr_registers opt-in header: fypp comments only (the formatter had …
sbryngelson Sep 5, 2026
11f4a77
Ledger (83): m_amr_registers opted in -- at most 2% at cap 32, nothin…
sbryngelson Sep 5, 2026
b5b1782
AMR: one device-resident slab table + one GPU_UPDATE per launch for t…
sbryngelson Sep 5, 2026
daaa80c
Ledger (84): one device slab table + one update per launch, pre-regis…
sbryngelson Sep 5, 2026
55c735d
AMR: amr_batched_gather (default F) -- pool the gathered coarse patch…
sbryngelson Sep 5, 2026
5ee8e1d
AMR: amr_batched_gather -- wire the F2 parent-fill wave to the pooled…
sbryngelson Sep 5, 2026
f920995
AMR: amr_batched_gather -- keep the per-member tables host-only so co…
sbryngelson Sep 5, 2026
f1510c7
AMR: amr_batched_gather -- the pooled unpack copies in only this wave…
sbryngelson Sep 5, 2026
ab091b8
amr_batched_gather rebase: restore the four preprocessor directives t…
sbryngelson Sep 6, 2026
6ddd8f1
Ledger (85): ledger 81 re-tested under the clause -- the pooled gathe…
sbryngelson Sep 6, 2026
f04a2e4
Ledger (86): scorecard item 2 re-measured on the pushed tip, two code…
sbryngelson Sep 6, 2026
9395593
Ledger (87): negative, pre-registered -- a per-block cost weight at K…
sbryngelson Sep 6, 2026
b3f12b0
Ledger (88): the per-block cost driver named from 66k batch records -…
sbryngelson Sep 6, 2026
20cdd96
AMR instrument: per-batch swap/rhs/restore/rk timing with member ids …
sbryngelson Sep 6, 2026
5e816d6
AMR batch instrument: open the per-rank log once (a logical flag; new…
sbryngelson Sep 6, 2026
36071e2
AMR batched advance: amr_bat_pad (default 0) lets a smaller block joi…
sbryngelson Sep 6, 2026
f29f8d3
amr_bat_pad: the batched capture reads member extents from amr_bat_me…
sbryngelson Sep 6, 2026
cea4202
amr_bat_pad: declare amr_bat_mext in m_global_parameters beside the o…
sbryngelson Sep 6, 2026
6bfa859
Ledger (89): the padded batch A/B -- batches -58%, summed rhs -16%, s…
sbryngelson Sep 6, 2026
04d1c6f
Ledger (90): amr_bat_pad at cap 96 (negative: wait up on every rank, …
sbryngelson Sep 6, 2026
6f6febb
Ledger (91): amr_lb_block_cost K=2 on top of padded batching -- null …
sbryngelson Sep 6, 2026
516399a
Ledger (92): the per-batch fixed cost named from a kernel+copy trace …
sbryngelson Sep 6, 2026
8c81242
amdflang: opt m_rhs and m_weno into defaultmap(present:allocatable) (…
sbryngelson Sep 6, 2026
09f7a17
Ledger (93): m_rhs and m_weno present:allocatable opt-in -- -0.09/-0.…
sbryngelson Sep 6, 2026
4e44eb8
AMR instruments: f_amr_wtime() wraps MPI_Wtime under MFC_MPI (the ser…
sbryngelson Sep 6, 2026
fa972ef
post_process: the AMR overlay no longer stores block-local mixture fi…
sbryngelson Sep 7, 2026
a10128b
test harness: post-process cases keep parallel_io = F on a no-MPI bui…
sbryngelson Sep 7, 2026
ea54255
Grid minima over the filled range: dx/dy/dz are allocated to the _all…
sbryngelson Sep 6, 2026
50b4e47
Ledger (94): the PR's CI read in full -- every Frontier lane's heap c…
sbryngelson Sep 7, 2026
b0b2919
amdflang: opt m_riemann_solver_hllc into defaultmap(present:allocatab…
sbryngelson Sep 6, 2026
5c68785
Ledger (95): m_riemann_solver_hllc present:allocatable opt-in behind …
sbryngelson Sep 7, 2026
d02ca91
Serial I/O: write bc_type.dat and bc_buffers.dat into every simulatio…
sbryngelson Sep 7, 2026
05e0a9d
post_process: the save-index gap skip under cfl_dt now probes the ser…
sbryngelson Sep 7, 2026
45f5312
post_process: write the rectilinear-grid coordinates with the Silo da…
sbryngelson Sep 7, 2026
5717670
post_process: the Lagrangian-bubble and immersed-body point meshes an…
sbryngelson Sep 7, 2026
e934894
Ledger (96): the PR's CI closed out -- the three remaining failure cl…
sbryngelson Sep 7, 2026
5f3ccfa
Merge upstream/master into up/mega: the Phoenix single-job benchmark …
sbryngelson Sep 7, 2026
8644c8b
AMR batched stage: skip the restore-side device push of the grid stat…
sbryngelson Sep 7, 2026
4c519b8
Ledger (97): restore-side grid-state device push skipped between cons…
sbryngelson Sep 8, 2026
67b5480
Ledger (98): two pre-registered negatives close the per-launch copy c…
sbryngelson Sep 8, 2026
b52479a
Ledger (99): cap 96 explained and re-measured -- amr_bat_pad is a sma…
sbryngelson Sep 8, 2026
f5f5152
Ledger (99) correction: the validator already prohibits batched advan…
sbryngelson Sep 8, 2026
e8cecbd
AMR: the batched fine advance turns on by default where the case admi…
sbryngelson Sep 8, 2026
fbd72e6
AMR batching default: amr_device_pack does not ride along (its cap-32…
sbryngelson Sep 8, 2026
79c108f
Ledger (100): the batched fine advance on by default where the case a…
sbryngelson Sep 8, 2026
16751fd
test harness: 27 AMR goldens get amr_max_grid_size pinned at the valu…
sbryngelson Sep 8, 2026
84dbdd0
Ledger (101): 27 AMR goldens pin amr_max_grid_size at the derived val…
sbryngelson Sep 8, 2026
a984dab
AMR batched advance: apply the static-body immersed-boundary correcti…
sbryngelson Sep 8, 2026
efced0f
AMR batched IB correction: hold amr_bat_n at 1 while the members are …
sbryngelson Sep 8, 2026
90defe8
Ledger (103): the batched advance skipped the post-RK hooks -- the st…
sbryngelson Sep 8, 2026
43cfccc
AMR fine RHS: zero body cells by the block's OWN fine markers (ib_mar…
sbryngelson Sep 8, 2026
f849a13
AMR golden: static IBM circle -> dynamic regrid -> batched pair (two …
sbryngelson Sep 8, 2026
95d5f08
AMR IB goldens regenerated for the fine-marker RHS zeroing (6 cases: …
sbryngelson Sep 8, 2026
04c5d82
Ledger (104): the fine RHS zeroed body cells by the coarse marker pat…
sbryngelson Sep 8, 2026
99e62cf
Ledger (102): item 4 scoped and measured -- the np=8 exchange is alre…
sbryngelson Sep 8, 2026
d397293
Toolchain default: amr_device_pack rides with the batching default wh…
sbryngelson Sep 8, 2026
2dc132c
Ledger (106): amr_device_pack A/B at caps 32 and 96 closes GOAL v3 it…
sbryngelson Sep 8, 2026
8a059f9
AMR regrid: the global box union is no longer truncated to amr_max_bl…
sbryngelson Sep 8, 2026
5986d9b
Ledger (105): the 2-node rung found a correctness cliff -- the global…
sbryngelson Sep 8, 2026
18e16b7
Ledger (107): scorecard item 2 re-measured on the shipped defaults, t…
sbryngelson Sep 8, 2026
bbf39c8
Ledger 107 same-session correction: the 'unbracketed sixth' was an ac…
sbryngelson Sep 8, 2026
b9b0039
AMR migration: the wire buffers are device-resident and, under rdma_m…
sbryngelson Sep 8, 2026
796f2fa
Ledger (108): migration off the host (GOAL v4 item 1) -- the regrid's…
sbryngelson Sep 8, 2026
62bd10e
Ledger (110): halo width is not where MFC's AMR excess sits -- the S0…
sbryngelson Sep 8, 2026
7e0d3ac
AMR regrid hysteresis (amr_snap, default 0 = off): a new box within a…
sbryngelson Sep 8, 2026
343470c
Ledger (109): regrid hysteresis (amr_snap, default off) -- a new box …
sbryngelson Sep 8, 2026
74bec70
Toolchain default: amr_snap = min(2, amr_buf - 2) rides with the batc…
sbryngelson Sep 8, 2026
2c23b6c
Ledger (111): scorecard item 2 with the regrid hysteresis on -- two c…
sbryngelson Sep 8, 2026
601e25a
Merge upstream master d2d8cac2 into up/mega: state-dependent equation…
sbryngelson Sep 8, 2026
4ac310f
Ledger (112): upstream master d2d8cac2 merged (state-dependent equati…
sbryngelson Sep 9, 2026
a79369e
Ledger (113): item 4's first read closed -- the two-node doubling cos…
sbryngelson Sep 9, 2026
343d57c
Ledger (115): the rep-to-rep climb is not node state and not intrinsi…
sbryngelson Sep 9, 2026
bde8fb1
Ledger (114): the two-node rung with the regrid hysteresis on -- 1.26…
sbryngelson Sep 9, 2026
08ae3e2
Ledger (117): the clean 2x statement -- two codes, one node, one wind…
sbryngelson Sep 9, 2026
2d84e7c
Ledger (118): the rung with all shipped defaults -- np8 5.14 -> 3.13 …
sbryngelson Sep 9, 2026
9cb243a
Docs: mark every 4.96 % noise-floor citation as superseded by the mea…
sbryngelson Sep 9, 2026
6c9c2d5
Ledger (120): the floor of the differenced protocol -- five back-to-b…
sbryngelson Sep 9, 2026
4f71ca4
AMR migration: bound the device-resident wire pools (2 GiB); above th…
sbryngelson Sep 9, 2026
503244c
Ledger (125) + AMR migration: bound the device-resident wire pools at…
sbryngelson Sep 9, 2026
7e958f1
AMR: hoist the coarse cons halo before the coarse RHS and convert ove…
sbryngelson Sep 9, 2026
c529bc5
Ledger (122) + AMR: the coarse cons halo runs before the coarse RHS a…
sbryngelson Sep 9, 2026
f20dbeb
AMR fold: retire the last comments naming the deleted freg wave
sbryngelson Sep 9, 2026
f4d8b7a
Ledger (123) + AMR fold: the level>=2 freg faces ride the restrict-pa…
sbryngelson Sep 9, 2026
3e79085
AMR rebuild: walk the boxes owner-interleaved per level (round-robin …
sbryngelson Sep 9, 2026
b4ae46b
Ledger (126) + AMR rebuild: walk the boxes owner-interleaved per leve…
sbryngelson Sep 9, 2026
85bb4a1
AMR seam wave: post at the top of the stage (sends read stage-entry i…
sbryngelson Sep 9, 2026
0e6805e
Ledger (129) + AMR seam wave: post at the top of the stage with priva…
sbryngelson Sep 9, 2026
1ddedac
Ledger (119): the np16 rebuild-free window probe -- the two-node wait…
sbryngelson Sep 9, 2026
7cb0e3f
Ledger 127: ownership stickiness at rebuild does not reduce migration…
sbryngelson Sep 9, 2026
a35a8ad
Ledger 130: clean-node np8 reads of the rendezvous cuts and the rebui…
sbryngelson Sep 9, 2026
f93fd33
Ledger 132: scorecard item 2 re-baselined on the fixed pin, one node,…
sbryngelson Sep 10, 2026
40173b2
Ledger 133: five np16 rungs on a healthy node pair (doublings 1.23-1.…
sbryngelson Sep 10, 2026
9607583
Ledger 134: the np32/np48 NaN of ledger 133 was a wrong pre_process b…
sbryngelson Sep 11, 2026
e93c7ce
Ledger 135: the largest-first batch order halves the fine-advance ran…
sbryngelson Sep 11, 2026
5146bc6
EOS: bake the state-dependent-EOS flag at build time and keep the HLL…
sbryngelson Sep 10, 2026
2cad101
Ledger 131: the master merge cost the fine RHS +37 % through the stat…
sbryngelson Sep 11, 2026
d94b349
Ledger 136: one profiler for both codes -- MFC spends a smaller share…
sbryngelson Sep 11, 2026
c6f41b7
amr: split the reflux-faces wave into post and drain and run the L0 c…
sbryngelson Sep 11, 2026
9cc07b0
Ledger 137: post the reflux-faces wave before the L0 coarse RHS and d…
sbryngelson Sep 11, 2026
11f63a0
Revert the reflux-wave post/drain split: against its true parent it i…
sbryngelson Sep 11, 2026
6169032
Ledger 138: retract ledger 137 -- its control pin and its uniform ter…
sbryngelson Sep 11, 2026
9345b39
Mark ledger 137 retracted in its own header (ledger 138 supersedes it)
sbryngelson Sep 11, 2026
875d2cb
docs: table the per-step rendezvous count before and after the GOAL v…
sbryngelson Sep 11, 2026
2ec578b
Ledger 139: the first pin-matched two-code reads of the current code …
sbryngelson Sep 11, 2026
39e0225
Ledger 139: apply the six reviewer corrections lost from the landed t…
sbryngelson Sep 11, 2026
c0fbe7b
Ledger 140: growing both uniform arms to the AMR arm's 200-step windo…
sbryngelson Sep 11, 2026
4b8ec25
Ledger 141: GOAL v8 item 2 is not built -- a nowait target region enc…
sbryngelson Sep 11, 2026
4ad4ca6
Ledger 128: the weak-scaling curve on the rung deck, np8 to np32 -- 1…
sbryngelson Sep 12, 2026
b2be495
Correct the restr phase-split comment: rs:wave is neither deleted nor…
sbryngelson Sep 12, 2026
cb8ded1
Move only the six face planes the level>=2 reflux apply touches, not …
sbryngelson Sep 12, 2026
ade997c
Ledger 151: statement 2 re-read case-optimized is 0.627 and 1.71x AMR…
sbryngelson Sep 12, 2026
e6ea130
Ledger 152: 56 percent of statement 2's excess is MPI wait with a 251…
sbryngelson Sep 12, 2026
9f7c41e
Merge upstream master into up/mega: take upstream's continuum-damage …
sbryngelson Sep 13, 2026
3d82e94
Merge upstream master again: adopt the AMD_NUM_SPECIES_MAX species bo…
sbryngelson Sep 13, 2026
36e80f2
Give eos_state_dependent a Fypp default in the CMake build (fixes doc…
sbryngelson Sep 13, 2026
9121920
Ledger 150: five code-review leads taken to verdicts, with three meas…
sbryngelson Sep 13, 2026
25a3c31
Document that a generated-case Fypp variable also needs a CMake default
sbryngelson Sep 13, 2026
ee642c5
Quote file:line in the plan doc so Doxygen stops autolinking it (fixe…
sbryngelson Sep 13, 2026
fdd49c5
Regenerate the AMR cont_damage golden for upstream's undamaged-modulu…
sbryngelson Sep 13, 2026
aa6a589
Size HLLC star states by AMD_SYS_SIZE_MAX, the half of #1852 the merg…
sbryngelson Sep 13, 2026
001a945
Ledger 153: the master merge changed exactly one test, the AMR cont_d…
sbryngelson Sep 13, 2026
13788bc
Reword file:line in the plan doc; Doxygen autolinks it even inside a …
sbryngelson Sep 13, 2026
a544996
Measure phase nesting at run time so the budget residual sums only to…
sbryngelson Sep 13, 2026
4e7da65
Ledger 154: the step budget measures its own nesting, and the measure…
sbryngelson Sep 13, 2026
b994bc0
Ledger 153: the full suite confirms the merge changed only the one re…
sbryngelson Sep 13, 2026
c1eea07
Ledger 155: Phase 2 priced before it was built; the per-rank skew is …
sbryngelson Sep 13, 2026
561a9da
Ledger 156: the amr_bat_pad probe; merging shapes saves ~3.3 ms per l…
sbryngelson Sep 13, 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
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 @@ -119,6 +119,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
371 changes: 371 additions & 0 deletions docs/documentation/amr.md

Large diffs are not rendered by default.

8,731 changes: 8,731 additions & 0 deletions docs/documentation/amr_action_plan.md

Large diffs are not rendered by default.

2,169 changes: 2,169 additions & 0 deletions docs/documentation/amr_block_batching.md

Large diffs are not rendered by default.

274 changes: 274 additions & 0 deletions docs/documentation/amr_endstate.md

Large diffs are not rendered by default.

172 changes: 172 additions & 0 deletions docs/documentation/amr_fine_distribution.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
@page amr_fine_distribution AMR fine-level distribution

# AMR fine-level distribution (design note)

> **Design record / implementation note.** This documents the internal design and development of AMR
> fine-block distribution across MPI ranks. For user-facing behavior and parameters, see @ref amr.

## Problem

MFC's AMR uses a **mirror decomposition**: the fine level reuses the coarse rank
decomposition, so each rank owns exactly the fine cells over its coarse subdomain's
intersection with the blocks (`s_amr_compute_isect` → `amr_rank_owns_block`). This makes
coarse↔fine coupling entirely rank-local (zero communication) but leaves fine work
**unbalanced**: if refinement concentrates in a sub-region, only the ranks owning that
region do the fine advance while the rest idle. At scale this caps AMR speedup.

## Target

Give the fine level its **own distribution**, decoupled from the coarse decomposition, so
fine blocks spread across all ranks by measured work — the AMReX per-level
`DistributionMapping` idea. MFC already enforces an invariant that makes this far simpler
than the general case: **blocks are kept ≥ `buff_size` apart** (regrid merge), so with
**whole-block-per-rank** assignment there is *no fine–fine halo at all*
(`s_mpi_sendrecv_amr_fine_halo` disappears). The only coupling that becomes communication
is coarse↔fine, block-granular.

## Coupling changes (whole-block-per-rank)

| Step | Today (mirror, local) | Decoupled |
|---|---|---|
| Ownership | intersection, multi-owner (`amr_rank_owns_block`) | single owner (`amr_block_owner(k) == proc_rank`) |
| Ghost fill / prolong (coarse→fine) | read local coarse `q_cons` | **gather** coarse patch (block + `buff_size` halo) from coarse owner(s) to block owner |
| Reflux + restriction (fine→coarse) | write local coarse cells | **scatter** corrections from block owner back to coarse owner(s) |
| Fine–fine halo | coarse Cartesian neighbors | none (blocks separated) |
| Regrid | cluster (global) → mirror | cluster → **assign** (`amr_block_owner`) → **migrate** fine state |

The gather/scatter is the only new communication surface. SFC-ordered assignment keeps a
block's coarse patch on an SFC-nearby rank, bounding the cost. Conservation exactness is
preserved because the scatter applies the *same* reflux add / restrict overwrite the
mirror model applied locally — a pure data-movement change, not a numerics change.

## Reuse

`m_load_weight` (per-cell cost field) and `m_sfc_partition` (Morton order + chains-on-chains
balanced partition) already exist as an init-time diagnostic. They become the fine-level
distributor: feed the block list + per-block fine-work weight, return `amr_block_owner(:)`.

## Phasing (each independently mergeable)

1. **Distribution map, computed but not applied** (behavior-preserving). Add
`amr_block_owner(:)` + SFC assignment + an imbalance diagnostic; mirror ownership and all
coupling unchanged. Goldens bit-identical. *(this note's first increment)*
2. **Apply the map**: switch `amr_rank_owns_block` to single-owner, add the coarse↔fine
gather/scatter, drop the fine–fine halo. Validate conservation + assignment-independence.
3. **Dynamic rebalance each regrid**; optionally drop the fixed max-size slot pool for
right-sized boxes.

Phase 2 carries the correctness risk (gather/scatter exactness) and is the checkpoint gate.

## Phase 2 implementation status (branch `amr-fine-dist-wip`)

Done and np=1 bit-identical (the gather reduces to the local read when the owner is the sole rank):

- **Gather** (`s_amr_gather_coarse_patch`): per-block coarse patch `[region_lo-nmar : region_hi+nmar]`
assembled by a sentinel-MAX allreduce into `amr_cg` (a drop-in `scalar_field`). Contribution rule
`f_amr_own_coarse` claims interior cells + physical-boundary ghosts only (never inter-rank ghosts), so
there is one authoritative contributor per cell and no coarse-ghost halo dependence. `pull_host` flag
stages device-resident coarse to host for the runtime callers.
- **Read side rerouted**: init/regrid host prolongation (`s_interpolate_coarse_to_fine`) and the runtime
device ghost-fill (`s_amr_fill_fine_ghosts`, stage + subcycle) now prolong from `amr_cg`.
- **Restriction scatter** (`s_restrict_fine_to_coarse`): owner restricts on host into the `amr_cg_wp`
scratch (sole contributor), sentinel-MAX assembles, each rank overwrites the covered coarse cells it
owns. `s_restrict_all_vars` (old local device kernel) deleted.
- **Fine–fine halo dropped**: `s_mpi_sendrecv_amr_fine_halo` calls removed (whole-block owner has no
continuation faces; blocks ≥ buff_size apart). Routine in `m_mpi_proxy` now dead — remove with the
reflux rework.

Remaining (the conservation crux — reflux is NOT yet decoupling-correct):

- **Reflux redesign.** `s_amr_reflux_face_flags` derives transverse participation `tv` from `amr_isect`,
which is owner-only in the decoupled model, so `own_lo/own_hi` (gating BOTH `creg` capture and the
reflux apply) is true only on the block owner — which does not own the outside coarse cells. Fix:
(1) recompute `tv` from the replicated block range (`amr_region_lo/hi(t)` overlap with `sidx:sidx+ext`),
so any coarse-outside-owner participates; (2) the owner captures `freg` (already correct) and BROADCASTS
it (allreduce, replacing the cart-neighbor `s_mpi_sendrecv_amr_reflux_faces`); (3) coarse-outside-owners
capture `creg` locally and apply `(freg-creg)` to their owned outside cells — verify the apply's
block-relative transverse indexing maps onto each receiver's local coarse slice. Conservation-critical.
- **QBMM pb/mv** gather/scatter for np≥2 (currently local; non-polytropic QBMM+AMR now **gated fail-closed** at np≥2 in
`m_checker` — see "Known open" for the scatter follow-up).
- np=2 conservation + assignment-independence validation once reflux lands (acceptance goldens:
BD21A5C0, 5EFB3277, 79B334C7 — they pass on `up/mega` via the mirror).

## Phase 2 status: DONE and validated (reflux + scalability)

The reflux redesign above landed (block-relative frame, participation from the replicated block range), and the
whole coupling is now **point-to-point + right-sized** — the fine level distributes with no global collective per
stage and per-rank memory that scales with the decomposition.

- **Reflux**: `s_amr_reflux_face_flags` derives `tv`/`tlo`/`thi` from the replicated block range; `creg` capture +
both applies index block-relative; the owner's `freg` is delivered to the applying coarse-outside-owners.
- **Point-to-point coupling** (replaced the correctness-first global collectives): a replicated coarse-decomposition
table `amr_decomp` (allgathered once at init) lets any rank compute which ranks hold a coarse-cell range.
- gather: owner `Irecv`s patch slices from the coarse-owners (`f_amr_rank_coarse_range`).
- restriction: owner `Isend`s each coarse-owner its covered slice (`f_amr_rank_interior`).
- reflux: owner `Isend`s `freg` only to participants (`f_amr_reflux_participates` = `own_lo/hi` parameterized by
rank via `amr_decomp`); `s_amr_p2p_reflux_faces` in `m_amr`.
Non-participants exchange nothing.
- **Right-sized memory**: fine/coord/register arrays sized to `amr_maxc_fit` (min-over-ranks local half-extent = the
max block a rank can own, enforced by the scratch-constraint abort), not the global half-domain `amr_maxc` — about
`1/num_procs` (and `1/num_procs^(d-1)` for the face registers) the memory at scale.
- **Coordinate fix**: `s_amr_swap_to_fine` extends fine ghost coords from the global boundaries `amr_g?cb` (the owner
need not hold the block's local coarse coord slice).

Validated: np=1 1D/2D/3D goldens bit-identical; np=2 conservation exact in 1D (energy 1.9e-16) and 2D with
transverse-face appliers (mass 1.4e-14), bounds-clean. `s_mpi_allreduce_array_max` remains only for the
once-at-init coordinate assembly.

## Phase 3

1. **Block-splitting / tiling** (the coverage gap) — DONE.
- **Tiling**: `s_amr_tile_box` splits any box > `amr_maxc_fit` into contiguous ≤`amr_maxc_fit` sub-blocks, wired into
the initial-block setup and the regrid pipeline (non-IB); `s_populate_amr_fine` loops over all blocks refreshing
per-block mirrors via `s_amr_select_slot`.
- **Block-to-block fine-fine halo**: the fine advance is three driver phases — **fill all** (gather + coarse
ghost-fill), **`s_amr_fine_fine_halo`** (overwrite each seam ghost with the neighbour's *stage-entry* interior,
buff_size-deep, `MPI_Sendrecv` between owners or a local copy when one rank owns both; adjacency from the
replicated `amr_region_*_all` via `f_amr_seam`), **advance all** (RHS + RK). `s_advance_amr_fine_stage` split into
`s_amr_fine_stage_fill` / `s_amr_fine_stage_advance`.
- **Reflux seam-exclusion**: `f_amr_face_is_seam` drops a sub-block face shared with another fine sub-block from
`s_amr_reflux_face_flags` `own_lo/own_hi` (fine-fine, not c/f).
- **Owner-ordering fix**: `s_amr_assign_block_owners` runs BEFORE the owner-dependent `s_set_amr_fine_geometry` in
init, regrid, AND restart — the stale default (rank-0) owner map otherwise sized multi-block owners wrong (only
surfaces once tiling makes several blocks). Restart (`s_read_amr_restart`) is a two-pass read (regions → assign →
place data) for both the parallel_io and non-parallel_io paths.
2. **Regrid cross-rank fine-state migration** — DONE (the stretched-np≥2 correctness fix). The regrid overlap-copy
preserves a covering old block's fine detail by reading `amr_slots(kk)%%q_cons_stor`, but that was local-only
(`if (.not. old_owns(kk)) cycle`). Under fine-level distribution an old block can be owned by a rank *other* than the
one now owning a covering new block, so the copy was silently skipped and the new block kept only its
coarse-prolonged values — **exact on uniform grids** (prolongation reproduces the fine field) but **~O(1e-4) wrong on
stretched grids** (prolongation is not exact). Fix: broadcast every old block's stashed fine state from its owner
into the replicated slot's `q_cons_stor` on all ranks (`num_procs>1`; no-op at np=1), copy the overlap from *every*
covering old block regardless of ownership, and take `old_ilo`/`old_ext` from the global replicated region (not the
owner-only isect). Correctness-first collective; a per-block P2P version mirroring `s_amr_gather_coarse_patch` is
future work. Validated (`-b mpirun`): 79B334C7 (1D stretched dynamic-regrid, 2 ranks) passes; F0DDE1B4 (np=1 twin),
5EFB3277 + BD21A5C0 (uniform np=2 tiled + restart), and the np=1 AMR batch all pass.

## Golden regeneration note (tiling refines more at np=1)

At np=1, tiling adds a capability the mirror never had: refining a tagged region **larger than `amr_maxc`** (half the
domain per dim). The old regrid **clamped** any box to `amr_maxc_fit` (`hi = lo + amr_maxc_fit - 1`), so a big tag was
only partially refined; block-splitting **tiles** it and refines the whole tag. Any np=1 AMR golden whose tag exceeds
`amr_maxc(dim)` therefore changes (more cells refined) and must be regenerated with the tiled binary — an *intended*
solution change, not a regression (the tiled advance is bit-identical to the mirror where footprints match, conservation
is exact, and the seam is exact). Example: **B7704247** (2D stretched-y regrid) — the mirror refined `y4:23` (20 cells,
clamped); tiling refines the full `y4:35` (`y4:19` + `y20:35`). Golden regenerated. np≥2 goldens are unaffected: the
mirror splits a block across ranks there, so its footprint already matches tiling.

## Known open

- **QBMM pb/mv** gather/scatter for np≥2 — the pb/mv side-state coarse↔fine coupling (`s_amr_prolong_pbmv` /
`s_restrict_pbmv`) and the regrid QBMM overlap-copy are still LOCAL-only (same bug class as the q_cons migration
above). Now **gated fail-closed**: `m_checker` PROHIBITs `qbmm .and. .not. polytropic .and. num_procs > 1` for `amr`,
so np≥2 non-polytropic QBMM+AMR aborts at case load instead of silently coupling to the wrong coarse side-state.
Distributing pb/mv (gather/scatter/migration, mirroring q_cons) is future work for when np≥2 QBMM+AMR is needed and
testable. Polytropic QBMM+AMR at np≥2 is unaffected (its moments ride q_cons, which is already distributed).
- **`amr_g?cb` lacks physical-boundary ghost coords** (sized `-1:m_glb`; the base grid's `x/y/z_cb` carry BC-aware ghosts
via `s_populate_grid_variables_buffers`). A near-domain-edge **whole** (untiled) block can drive the fine ghost-coord
build out of `amr_gycb` bounds — surfaced only by artificially disabling tiling; tiled blocks stay in bounds. Fix if
untiled near-edge whole blocks ever become reachable.
- Minor: the P2P routines scan all `num_procs` to find participants (integer-only, O(P) per block per stage); the regrid
migration broadcasts (correctness-first, → P2P); patch-only device transfers instead of whole-field host round-trips
(GPU only); own-only slot allocation.
Loading
Loading