mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-29 06:35:48 -04:00
Random Ray Adjoint Mode (#3191)
Co-authored-by: Paul Romano <paul.k.romano@gmail.com>
This commit is contained in:
parent
fbb115921c
commit
172867b1df
21 changed files with 958 additions and 169 deletions
|
|
@ -542,7 +542,7 @@ in that cell for the iteration from Equation :eq:`phi_naive` to:
|
|||
.. math::
|
||||
:label: phi_missed_one
|
||||
|
||||
\phi_{i,g,n}^{missed} = \frac{Q_{i,g,n} }{\Sigma_{t,i,g}}
|
||||
\phi_{i,g,n}^{missed} = \frac{Q_{i,g,n} }{\Sigma_{t,i,g}}
|
||||
|
||||
as the streaming operator has gone to zero. While this is obviously innacurate
|
||||
as it ignores transport, for most problems where the region is only occasionally
|
||||
|
|
@ -1060,6 +1060,49 @@ random ray and Monte Carlo, however.
|
|||
develop the scattering source by way of inactive batches before beginning
|
||||
active batches.
|
||||
|
||||
------------------------
|
||||
Adjoint Flux Solver Mode
|
||||
------------------------
|
||||
|
||||
The random ray solver in OpenMC can also be used to solve for the adjoint flux,
|
||||
:math:`\psi^{\dagger}`. In combination with the regular (forward) flux solution,
|
||||
the adjoint flux is useful for perturbation methods as well as for computing
|
||||
weight windows for subsequent Monte Carlo simulations. The adjoint flux can be
|
||||
thought of as the "backwards" flux, representing the flux where a particle is
|
||||
born at an absoprtion point (and typical absorption energy), and then undergoes
|
||||
transport with a transposed scattering matrix. That is, instead of sampling a
|
||||
particle and seeing where it might go as in a standard forward solve, we will
|
||||
sample an absorption location and see where the particle that was absorbed there
|
||||
might have come from. Notably, for typical neutron absorption at low energy
|
||||
levels, this means that adjoint flux particles are typically sampled at a low
|
||||
energy and then upscatter (via a transposed scattering matrix) over their
|
||||
lifetimes.
|
||||
|
||||
In OpenMC, the random ray adjoint solver is implemented simply by transposing
|
||||
the scattering matrix, swapping :math:`\nu\Sigma_f` and :math:`\chi`, and then
|
||||
running a normal transport solve. When no external fixed source is present, no
|
||||
additional changes are needed in the transport process. However, if an external
|
||||
fixed forward source is present in the simulation problem, then an additional
|
||||
step is taken to compute the accompanying fixed adjoint source. In OpenMC, the
|
||||
adjoint flux does *not* represent a response function for a particular detector
|
||||
region. Rather, the adjoint flux is the global response, making it appropriate
|
||||
for use with weight window generation schemes for global variance reduction.
|
||||
Thus, if using a fixed source, the external source for the adjoint mode is
|
||||
simply computed as being :math:`1 / \phi`, where :math:`\phi` is the forward
|
||||
scalar flux that results from a normal forward solve (which OpenMC will run
|
||||
first automatically when in adjoint mode). The adjoint external source will be
|
||||
computed for each source region in the simulation mesh, independent of any
|
||||
tallies. The adjoint external source is always flat, even when a linear
|
||||
scattering and fission source shape is used. When in adjoint mode, all reported
|
||||
results (e.g., tallies, eigenvalues, etc.) are derived from the adjoint flux,
|
||||
even when the physical meaning is not necessarily obvious. These values are
|
||||
still reported, though we emphasize that the primary use case for adjoint mode
|
||||
is for producing adjoint flux tallies to support subsequent perturbation studies
|
||||
and weight window generation.
|
||||
|
||||
Note that the adjoint :math:`k_{eff}` is statistically the same as the forward
|
||||
:math:`k_{eff}`, despite the flux distributions taking different shapes.
|
||||
|
||||
---------------------------
|
||||
Fundamental Sources of Bias
|
||||
---------------------------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue