11. Decay Sources

Through the depletion capabilities in OpenMC, it is possible to simulate radiation emitted from the decay of activated materials. For fusion energy systems, this is commonly done using what is known as the rigorous 2-step (R2S) method. In this method, a neutron transport calculation is used to determine the neutron flux and reaction rates over a cell- or mesh-based spatial discretization of the model. Then, the neutron flux in each discrete region is used to predict the activated material composition using a depletion solver. Finally, a photon transport calculation with a source based on the activity and energy spectrum of the activated materials is used to determine a desired physical response (e.g., a dose rate) at one or more locations of interest.

Once a depletion simulation has been completed in OpenMC, the intrinsic decay source can be determined as follows. First the activated material composition can be determined using the openmc.deplete.Results object. Indexing an instance of this class with the timestep index returns a StepResult object, which itself has a get_material() method. Once the activated Material has been obtained, the get_decay_photon_energy() method will give the energy spectrum of the decay photon source. The integral of the spectrum also indicates the intensity of the source in units of [Bq]. Altogether, the workflow looks as follows:

results = openmc.deplete.Results("depletion_results.h5")

# Get results at last timestep
step = results[-1]

# Get activated material composition for ID=1
activated_mat = step.get_material('1')

# Determine photon source
photon_energy = activated_mat.get_decay_photon_energy()

By default, the get_decay_photon_energy() method will eliminate spectral lines with very low intensity, but this behavior can be configured with the clip_tolerance argument.

11.1. Direct 1-Step (D1S) Calculations

OpenMC also includes built-in capability for performing shutdown dose rate calculations using the direct 1-step (D1S) method. In this method, a single coupled neutron–photon transport calculation is used where the prompt photon production is replaced with photons produced from the decay of radionuclides in an activated material. To obtain properly scaled results, it is also necessary to apply time correction factors. A normal neutron transport calculation can be extended to a D1S calculation with a few helper functions. First, import the d1s submodule, which is part of openmc.deplete:

from openmc.deplete import d1s

First, you need to instruct OpenMC to use decay photon data instead of prompt photon data. This is done with an attribute on the Settings class:

model = openmc.Model()
...
model.settings.use_decay_photons = True

To prepare any tallies for use of the D1S method, you should call the prepare_tallies() function, which adds a openmc.ParentNuclideFilter (used later for assigning time correction factors) to any applicable tally and returns a list of possible radionuclides based on the chain file. Once the tallies are prepared, the model can be simulated:

output_path = model.run()

Finally, the time correction factors need to be computed and applied to the relevant tallies. This can be done with the aid of the time_correction_factors() and apply_time_correction() functions:

# Compute time correction factors based on irradiation schedule
factors = d1s.time_correction_factors(nuclides, timesteps, source_rates)

# Get tally from statepoint
with openmc.StatePoint(output_path) as sp:
    dose_tally = sp.get_tally(name='dose tally')

# Apply time correction factors
tally = d1s.apply_time_correction(tally, factors, time_index)