Skip to content

Conversation

@marco-de-pietri
Copy link
Contributor

Description

Hello everyone, inspired by the discussion related to PR #3647 and the issue #3650, and as I think it is a major feature that could benefit openMC I tried to take a stab in implementing the gamma contact dose rate in the python API.

It is computed following the FISPACT-II methodology (see FISPACT manual appendix C.7.1 https://fispact.ukaea.uk/wp-content/uploads/2021/05/user_manual.pdf ).

In some way the implementation improves over that, as it is not constrained by the 22 energy groups of fispact. Instead, it sums the discrete contributions when the nuclide photon source is of the Discrete type and for Tabular sources it integrates their contribution.

To implement this feature It required the inclusion of methods for computing the material photon attenuation for discrete and tabular energy distributions and the tabulated data set of the photon mass-energy absorption factors in air. A set of test is included for most of the machinery required for the gamma contact dose rate method.

Some additional minor contributions to the gamma contact dose rates are not implemented as some underlying methods required to compute that are still missing. In particular:

  • computation of approximate gamma spectra for unstable nuclides with no photon source in the chain file: This could be implemented like in fispact if in chain file included the average energy of all light particles, and average energy of all electromagnetic radiation. This info is readily available in the ENDF file i believe?

  • computation of bremsstrahlung correction. This could be implemented if the python api included the analogous of data.decay_photon_energy for electron and positron source particle in the chain files.

  • In addition, the implementation of a method to compute the gamma dose rate from a point source as done in fispact (manual appendix C.7.2 ) is relatively straightforward.

Before including this missing things I think it makes sense to start a draft PR to get some feedback and see if there is interest for these features and also avoid huge PRs. Moreoveer at a certain point could be good to have methods for the 3 methods mentioned in the discussion (fispact style, from Gamma-Ray Dose Constants, or using photon-flux-to-dose coefficients )

Checklist

  • I have performed a self-review of my own code
  • I have run clang-format (version 15) on any C++ source files (if applicable)
  • I have followed the style guidelines for Python source files (if applicable)
  • I have made corresponding changes to the documentation (if applicable)
  • I have added tests that prove my fix is effective or that my feature works (if applicable)

Inclusion of the mass energy attenuation and mass energy-absorption
coefficients for tabulated photon energies for various material
compounds.

The database includes material from the Table 4 of the NIST database 126
(https://dx.doi.org/10.18434/T4D01F). Currently only the materials
(water, liquid) and (air, dry) is implemented. This data has been
included as it is required for Contact Dose Rates computations
Copy link
Contributor

@GuySten GuySten left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In general this is a nice feature but you should clean this PR.
There is alot of unnecessary code so this PR should be cleaned up significantly.

I suggest you remove all pieces of code that are not related to the calculation of contact dose rate.

@marco-de-pietri
Copy link
Contributor Author

@GuySten thanks for the comments! I implemented the suggestions.

I hope to get further comments/feedback on the CDR integration when Tabular radiation sources are involved and on how to proceed for the missing relevant features (approximate spectra when no source is present and bremsstrahlung correction).

@GuySten
Copy link
Contributor

GuySten commented Jan 3, 2026

Currently the tests do not pass.
You should check it out.

@vitmog
Copy link

vitmog commented Jan 5, 2026

Replacing the air-absorbed dose with a specified one chosen from the dose conversion factors library, as it was made in #3647, could make this PR compatible with the Monte Carlo part of OpenMC and avoid the air constants usage. Also, it could provide the ability for some inter-dose comparisons, although for gamma only. Of course, that all is not actual if the purpose of this PR is exactly calculation of the absorbed gamma dose in air near an semi-infinite source slab.

Append. I meant replacing the term $\mu_a(E) E$ with $f(E)$, where $E$ is the photon energy, $\mu_a(E)$ is the energy-absorption coefficient function, $f(E)$ is a fluence-to-dose conversion factor function from the library (effective dose, ambient dose equivalent, etc.).

@GuySten
Copy link
Contributor

GuySten commented Jan 7, 2026

I liked @vitmog suggestion.
I think we can add air kerma to be one of the options in openmc.data.dose_coefficients
and then use it here.
Air kerma can be the default response and we can let the user pass keywords to openmc.data.dose_coefficients to optionally use other response functions.

@marco-de-pietri, what do you think?

@vitmog
Copy link

vitmog commented Jan 7, 2026

Thank you for the correction, @GuySten: it is computed now kerma, but not absorbed dose as I wrote.
If it is left as is, the measure unit must be changed to Gy, because application of the unit Sv to the current quantity is not correct, strictly speaking.

@marco-de-pietri
Copy link
Contributor Author

As it is, the method computes the absorbed dose in air as it multiplies the energy fluence with the mass energy-absorption coefficient. To compute the kerma, the energy fluence should multiply the mass energy-transfer coefficient:

$$ \left(\frac{\mu}{\rho}\right)_{en} = \left(\frac{\mu}{\rho}\right)_{tr}(1-g) $$

(g is the fraction of the secondaries kinetic energy lost in radiative processes). Therefore absorbed dose is correct. In the fispact manual the units are Sv but as it is in air it should make sense to specify that the method returns Gy I think.

With respect to the modifcation suggestions:

  • modify the PR to compute the dose from a point source (like in PR Adding material decay gamma dose #3647). I think it still makes sense to have contact dose rate computation as it is done in fispact because it is an helpful indicator for irradiated materials. Still I'd like to introduce point source computation as suggested, but I think it is better to introduce it as an additional method. As the computation formula is different, I think code reuse is minimal and avoids confusion.

  • modify the PR to use openmc.data.dose_coefficients instead of $\mu_a(E)E$. Totally agree, this should be included in the PR within the computation of the dose rate from a point source.

Let me know what your thoughts are

@vitmog
Copy link

vitmog commented Jan 8, 2026

@marco-de-pietri, thank you. You implemented the air mass energy-absorption coefficient, so the dose is absorbed. To compute kerma, we should divide it on $(1-g)$ or use specific factors. I was confused with these units absolutely in the end of day.

About the point source. The both features are different, in my opinion, so I am agreed with @marco-de-pietri. Also, I cannot imagine any real demand for gamma-constant calculation from an user of a code like OpenMC. At the more so, they are always known for bare laboratory sources from its documentation or can be just taken from handbooks while gamma-sources of such the kind does not contain lots of emitting nuclides.

In contrast, the feature of this PR can be used for characterization of dose rates near an irradiated sample or spent fuel in some assumptions.

@GuySten
Copy link
Contributor

GuySten commented Jan 8, 2026

I've added PR #3713 to add air kerma to dose_coefficients.
Once that PR is merged you will be able to leverage it in this PR.

EDIT:
@vitmog convinced me to replace the response by one of the standard responses in openmc.data.dose_coefficients instead.

Copy link
Contributor

@GuySten GuySten left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to replace the air dose response with one of the standard dose responses in openmc.data.dose_coefficients to make this feature useful to general audience.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants