Deterministic transport pre-pass for inter-material cross-talk (MGXS) - #114
Conversation
Branches from convert-to-multigroup-transport-free. Will add an optional, fully-deterministic (no Monte Carlo) transport pre-pass that computes a cross-talk-aware weighting flux over all model materials, then collapses each material against its local flux -- the noise-free analog of stochastic_slab. Plan in the PR.
Plan: deterministic transport pre-pass for inter-material cross-talkThis branch builds on Why this branch exists — the one residual gapThe single place the base method loses to Root cause, established conclusively on the base branch:
So the gap is a genuine transport effect. The base method deliberately avoids transport; this branch adds it back — deterministically (the user's constraint is no Monte Carlo, not no transport). GoalAn optional, fully deterministic transport pre-pass that computes a cross-talk-aware weighting flux over all the model's materials (the noise-free analog of Approach (SCALE CENTRM/PMC-style)
Design constraints (carried from the base method)
Phases
Open questions
|
Proof of concept — deterministic 1D transport cracks Fe-56 (beats stochastic_slab, noise-free)A working prototype of the planned deterministic transport pre-pass is validated. It closes the one gap the pure transport-free method had (resonant metals in a deep stack) and does so deterministically — no Monte Carlo. Method (prototype)1D slab Sₙ (S8) slowing-down transport along the cross-talk path (source → upstream shells → target material), on the fine pointwise energy grid:
Result — total XS, % error vs material_wise
Fe-56 is cracked: det-transport beats slab by ~2× and lands at the material_wise noise floor — i.e. as accurate as the MC reference can be measured — with zero stochastic noise. Steel/SiC tie or improve (already within reference noise). The cross-talk hypothesis is confirmed: every isolated weighting (NR, IR, exact 0-D slowing-down, tilt, homogenized-mix) failed because none carries the upstream imprint; a real (deterministic) transport solve does. Performance & knobs
Honest caveats / next steps
|
Proof-of-concept for the cross-talk pre-pass: 1D slab Sn (S8) slowing-down transport on the fine energy grid -> local flux -> collapse. Fe-56 total XS vs material_wise: 0.60% (CCFE-709) / 0.35% (UKAEA-1102), beating stochastic_slab (1.39 / 0.81) and at the MC reference noise floor, deterministically. ~7 s/material. Depends on the scratchpad test harness (mats.py, scatref refs) -- to be refactored into a self-contained module routine next.
… scatter too) Total AND scatter matrix now via the 1D Sn transport local flux. Scatter matrix built the SCALE/AMPX way: kernel SHAPE (weighting-insensitive) renormalised to the transport-flux scatter XS (direct group collapse). Fe-56 vs material_wise: total 0.60% (CCFE-709) / 0.35% (UKAEA-1102) -- slab 1.39 / 0.81 scatter rowsum 1.04 / 0.60 -- slab 1.45 / 0.86 scatter shape 0.011 / 0.008 -- slab 0.010 / 0.008 det-TRANSPORT beats stochastic_slab on total and scatter, deterministically. The scatter_matrix phi_ext path has a separate normalisation bug (direct collapse is correct, 1.04%); using the shape x rowsum recipe sidesteps it -- to fix at module integration.
Update — deterministic transport now cracks the SCATTER MATRIX too (commit bc779b5)RR needs the group-to-group scatter matrix, not just the vector total. Extended the prototype: the scatter matrix is built the SCALE/AMPX way — kernel shape (weighting-insensitive) renormalised to the transport-flux scatter cross section (direct group collapse of the 1D-transport local flux). Fe-56 vs material_wise:
det-TRANSPORT beats Note: a separate
|
…er flux) det-TRANSPORT vs material_wise/slab, CCFE-709. Big wins on the deep/cross-talk materials (Fe-56 total 0.32 vs slab 1.39; Helium scatter rowsum 0.05 vs 9.66; Li4SiO4 0.14 vs 3.26; concrete/H2O also win on all 3 metrics). Near-source metals (tungsten/steel/CuCrZr) lose -- slab over-softens innermost shells (slab vs sphere backscatter); confirmed by a spherical-volume-weight test. NR already excellent there. Uniform fix = 1D spherical Sn.
Full 10-material sweep — one full-stack 1D Sₙ solve, each material collapsed against its own layer fluxReplaced the per-target truncated path with a single transport solve through the whole stack (source → all shells → outer vacuum), so every layer has its real upstream and downstream. CCFE-709, total + scatter row-sum + scatter shape, det-TRANSPORT vs material_wise vs stochastic_slab:
Verdict
Why this is fine, and the fix
|
phi_X = q_mix/Sigma_t,X reproduces NR, not slab, because the mix slowing-down source is ~1/E asymptotically. Slab's edge over NR is the sigma0-dilution of its finite mixed cells (equivalence-theory artifact), not a spectral effect. The order-free/geometry-free improvement over NR is impossible; the physical version is real-geometry transport (#114).
…ivity open) sphere_sn.py: weighted-diamond curvilinear Sn, central point source, VALIDATED vs analytic point-source-in-absorber (0.9% mean). det_realgeom.py: uses it for the real concentric-sphere geometry. OPEN: diamond negativity on the resonant problem (steel 7.37; naive clamp breaks conservation) -> needs positivity-preserving curvilinear scheme (step characteristic). Deep materials already won by the slab transport (#114); spherical only needed for near-source shells where NR is already excellent. See FINDING_realgeom.md.
Root cause of the scatter-matrix "phi_ext bug": there isn't one — it was a cross-section-definition mismatch + invalid thermal fluxNo The "4.68 vs 1.04" was me comparing two different cross sections. Why the correct number (4.63 %) looked worse than NR — the thermal flux. Per incoming-energy decade vs material_wise:
The transport flux is better than NR in every decade above 1 eV (the cross-talk win: epithermal 13.7 %→2.2 %), but the 1D transport flux is invalid in the thermal range (no thermal scattering treatment; this single-target path also lacks the downstream moderators), corrupting 75 thermal rows at 23.9 % and dragging the naive average to 4.63 %. Fix — thermal-NR fallback. Weight the scatter collapse by the transport flux above the thermal cutoff and by NR below (NR is exact in the thermal). Result for Fe-56 scatter row-sum:
So the transport beats slab on both total (0.60) and scatter row-sum (0.69) for Fe-56, once the thermal range falls back to NR. The recipe: transport flux for fast/epithermal, NR (or proper thermal) below the free-gas threshold. |
Set-to-zero & re-solve; validated best on smooth (0.74% vs diamond 0.89, step 1.17), positive flux. BUT on the resonant stack the set-to-zero clamp accumulates more error than step (Fe-56 2.06 vs step 1.08) -- many resonance negativities. Conclusion: no spherical scheme beats the robust 1D-slab transport (#114, Fe-56 0.60) on deep resonant materials; spherical only helps near-source. Recommend the #113+#114+NR-near-source hybrid. See FINDING_realgeom.md.
…vectorized downscatter, full-stack sweep)
Builds on #113 (pure transport-free MGXS). Adds an optional, fully deterministic (no Monte Carlo) transport pre-pass to capture inter-material cross-talk — the one place the per-material transport-free collapse loses to
stochastic_slab(resonant metals in a deep stack, e.g. Fe-56).The full plan is in the first comment below.