diff --git a/docs/source/io_formats/settings.rst b/docs/source/io_formats/settings.rst index 6ec067a12..a371a3c39 100644 --- a/docs/source/io_formats/settings.rst +++ b/docs/source/io_formats/settings.rst @@ -96,6 +96,17 @@ When the DAGMC mode is enabled, the OpenMC geometry will be read from the file ``dagmc.h5m``. If a :ref:`geometry.xml ` file is present with ``dagmc`` set to ``true``, it will be ignored. +---------------------------- +```` +---------------------------- + +Determines whether to scale the fission photon yield to account for delayed +photon energy. The photon yields are scaled as (EGP + EGD)/EGP where EGP and EGD +are the prompt and delayed photon components of energy release, respectively, +from MF=1, MT=458 on an ENDF evaluation. + + *Default*: true + -------------------------------- ```` Element -------------------------------- diff --git a/include/openmc/settings.h b/include/openmc/settings.h index 6570a25f7..e8c1d218c 100644 --- a/include/openmc/settings.h +++ b/include/openmc/settings.h @@ -29,6 +29,7 @@ extern bool confidence_intervals; //!< use confidence intervals for results? extern bool create_fission_neutrons; //!< create fission neutrons (fixed source)? extern "C" bool cmfd_run; //!< is a CMFD run? extern "C" bool dagmc; //!< indicator of DAGMC geometry +extern bool delayed_photon_scaling; //!< Scale fission photon yield to include delayed extern "C" bool entropy_on; //!< calculate Shannon entropy? extern bool legendre_to_tabular; //!< convert Legendre distributions to tabular? extern bool material_cell_offsets; //!< create material cells offsets? diff --git a/openmc/settings.py b/openmc/settings.py index f25fd681d..27ca52a38 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -40,6 +40,10 @@ class Settings(object): below which particle type will be killed. dagmc : bool Indicate that a CAD-based DAGMC geometry will be used. + delayed_photon_scaling : bool + Indicate whether to scale the fission photon yield by (EGP + EGD)/EGP + where EGP is the energy release of prompt photons and EGD is the energy + release of delayed photons. electron_treatment : {'led', 'ttb'} Whether to deposit all energy from electrons locally ('led') or create secondary bremsstrahlung photons ('ttb'). @@ -219,6 +223,7 @@ class Settings(object): VolumeCalculation, 'volume calculations') self._create_fission_neutrons = None + self._delayed_photon_scaling = None self._material_cell_offsets = None self._log_grid_bins = None @@ -356,6 +361,10 @@ class Settings(object): def create_fission_neutrons(self): return self._create_fission_neutrons + @property + def delayed_photon_scaling(self): + return self._delayed_photon_scaling + @property def material_cell_offsets(self): return self._material_cell_offsets @@ -691,6 +700,11 @@ class Settings(object): create_fission_neutrons, bool) self._create_fission_neutrons = create_fission_neutrons + @delayed_photon_scaling.setter + def delayed_photon_scaling(self, value): + cv.check_type('delayed photon scaling', value, bool) + self._delayed_photon_scaling = value + @material_cell_offsets.setter def material_cell_offsets(self, value): cv.check_type('material cell offsets', value, bool) @@ -930,6 +944,11 @@ class Settings(object): elem = ET.SubElement(root, "create_fission_neutrons") elem.text = str(self._create_fission_neutrons).lower() + def _create_delayed_photon_scaling_subelement(self, root): + if self._delayed_photon_scaling is not None: + elem = ET.SubElement(root, "delayed_photon_scaling") + elem.text = str(self._delayed_photon_scaling).lower() + def _create_material_cell_offsets_subelement(self, root): if self._material_cell_offsets is not None: elem = ET.SubElement(root, "material_cell_offsets") @@ -1166,6 +1185,11 @@ class Settings(object): if text is not None: self.create_fission_neutrons = text in ('true', '1') + def _delayed_photon_scaling_from_xml_element(self, root): + text = get_text(root, 'delayed_photon_scaling') + if text is not None: + self.delayed_photon_scaling = text in ('true', '1') + def _material_cell_offsets_from_xml_element(self, root): text = get_text(root, 'material_cell_offsets') if text is not None: @@ -1225,6 +1249,7 @@ class Settings(object): self._create_resonance_scattering_subelement(root_element) self._create_volume_calcs_subelement(root_element) self._create_create_fission_neutrons_subelement(root_element) + self._create_delayed_photon_scaling_subelement(root_element) self._create_material_cell_offsets_subelement(root_element) self._create_log_grid_bins_subelement(root_element) self._create_dagmc_subelement(root_element) @@ -1291,6 +1316,7 @@ class Settings(object): settings._ufs_mesh_from_xml_element(root) settings._resonance_scattering_from_xml_element(root) settings._create_fission_neutrons_from_xml_element(root) + settings._delayed_photon_scaling_from_xml_element(root) settings._material_cell_offsets_from_xml_element(root) settings._log_grid_bins_from_xml_element(root) settings._dagmc_from_xml_element(root) diff --git a/src/finalize.cpp b/src/finalize.cpp index d359f3885..5bda587ac 100644 --- a/src/finalize.cpp +++ b/src/finalize.cpp @@ -69,6 +69,7 @@ int openmc_finalize() settings::check_overlaps = false; settings::confidence_intervals = false; settings::create_fission_neutrons = true; + settings::delayed_photon_scaling = true; settings::electron_treatment = ELECTRON_LED; settings::energy_cutoff = {0.0, 1000.0, 0.0, 0.0}; settings::entropy_on = false; diff --git a/src/nuclide.cpp b/src/nuclide.cpp index bffac7d2b..824eabb67 100644 --- a/src/nuclide.cpp +++ b/src/nuclide.cpp @@ -305,11 +305,13 @@ void Nuclide::create_derived(const Function1D* prompt_photons, const Function1D* // For fission, artificially increase the photon yield to account // for delayed photons double f = 1.0; - if (is_fission(rx->mt_)) { - if (prompt_photons && delayed_photons) { - double energy_prompt = (*prompt_photons)(E); - double energy_delayed = (*delayed_photons)(E); - f = (energy_prompt + energy_delayed)/(energy_prompt); + if (settings::delayed_photon_scaling) { + if (is_fission(rx->mt_)) { + if (prompt_photons && delayed_photons) { + double energy_prompt = (*prompt_photons)(E); + double energy_delayed = (*delayed_photons)(E); + f = (energy_prompt + energy_delayed)/(energy_prompt); + } } } diff --git a/src/relaxng/settings.rnc b/src/relaxng/settings.rnc index c69624c53..3bc95f352 100644 --- a/src/relaxng/settings.rnc +++ b/src/relaxng/settings.rnc @@ -14,6 +14,8 @@ element settings { (element energy_positron { xsd:double } | attribute energy_positron { xsd:double })? }? & + element delayed_photon_scaling { xsd:boolean }? & + element electron_treatment { ( "led" | "ttb" ) }? & element energy_grid { ( "nuclide" | "log" | "logarithm" | "logarithmic" | "material-union" | "union" ) }? & diff --git a/src/relaxng/settings.rng b/src/relaxng/settings.rng index 46845b094..4e795419d 100644 --- a/src/relaxng/settings.rng +++ b/src/relaxng/settings.rng @@ -82,6 +82,11 @@ + + + + + diff --git a/src/settings.cpp b/src/settings.cpp index 59d2479be..a4381d0f3 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -44,6 +44,7 @@ bool cmfd_run {false}; bool confidence_intervals {false}; bool create_fission_neutrons {true}; bool dagmc {false}; +bool delayed_photon_scaling {true}; bool entropy_on {false}; bool legendre_to_tabular {true}; bool material_cell_offsets {true}; @@ -778,6 +779,11 @@ void read_settings_xml() } } + // Check whether to scale fission photon yields + if (check_for_node(root, "delayed_photon_scaling")) { + delayed_photon_scaling = get_node_value_bool(root, "delayed_photon_scaling"); + } + // Check whether material cell offsets should be generated if (check_for_node(root, "material_cell_offsets")) { material_cell_offsets = get_node_value_bool(root, "material_cell_offsets");