From 50892c61b7865a92b27e289be88299ad2667343b Mon Sep 17 00:00:00 2001 From: Christopher Fichtlscherer Date: Wed, 11 Jan 2023 13:56:54 -0500 Subject: [PATCH 1/8] unit test and description --- tests/unit_tests/test_settings.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/unit_tests/test_settings.py b/tests/unit_tests/test_settings.py index 1ea66d1f6..15e86ca61 100644 --- a/tests/unit_tests/test_settings.py +++ b/tests/unit_tests/test_settings.py @@ -49,6 +49,7 @@ def test_export_to_xml(run_in_tmpdir): domains=[openmc.Cell()], samples=1000, lower_left=(-10., -10., -10.), upper_right = (10., 10., 10.)) s.create_fission_neutrons = True + s.create_delayed_neutrons = False s.log_grid_bins = 2000 s.photon_transport = False s.electron_treatment = 'led' @@ -107,6 +108,7 @@ def test_export_to_xml(run_in_tmpdir): 'energy_min': 1.0, 'energy_max': 1000.0, 'nuclides': ['U235', 'U238', 'Pu239']} assert s.create_fission_neutrons + assert not s.create_delayed_neutrons assert s.log_grid_bins == 2000 assert not s.photon_transport assert s.electron_treatment == 'led' From 9d86274fcc790e7ba05d030234ec099ef8c09d15 Mon Sep 17 00:00:00 2001 From: Christopher Fichtlscherer Date: Wed, 11 Jan 2023 14:17:29 -0500 Subject: [PATCH 2/8] merge conflict --- openmc/settings.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/openmc/settings.py b/openmc/settings.py index 6f3ef5ab4..6271e05dc 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -224,6 +224,10 @@ class Settings: weight_windows : WeightWindows iterable of WeightWindows Weight windows to use for variance reduction + .. versionadded:: 0.13.3 + create_delayed_neutrons : bool + Whether delayed neutrons are created in fission. + .. versionadded:: 0.13 weight_windows_on : bool Whether weight windows are enabled From e266bb15bfcbbdbaa77a0a30c2c9909f60612bb8 Mon Sep 17 00:00:00 2001 From: Christopher Fichtlscherer Date: Wed, 11 Jan 2023 14:50:06 -0500 Subject: [PATCH 3/8] old changes for delayed neutron feature --- docs/source/io_formats/settings.rst | 11 +++++++++++ include/openmc/settings.h | 1 + openmc/settings.py | 23 +++++++++++++++++++++++ src/finalize.cpp | 1 + src/nuclide.cpp | 4 ++-- src/settings.cpp | 7 +++++++ 6 files changed, 45 insertions(+), 2 deletions(-) diff --git a/docs/source/io_formats/settings.rst b/docs/source/io_formats/settings.rst index 71ca61d54..6dff76838 100644 --- a/docs/source/io_formats/settings.rst +++ b/docs/source/io_formats/settings.rst @@ -32,6 +32,17 @@ standard deviation. *Default*: false +------------------------------------- +```` Element +------------------------------------- + +The ```` element indicates whether delayed neutrons +are created in fission. If this element is set to "true", delayed neutrons +will be created in fission events; otherwise only prompt neutrons will be +created. + + *Default*: true + ------------------------------------- ```` Element ------------------------------------- diff --git a/include/openmc/settings.h b/include/openmc/settings.h index 90f1e8c29..806288efe 100644 --- a/include/openmc/settings.h +++ b/include/openmc/settings.h @@ -28,6 +28,7 @@ extern bool check_overlaps; //!< check overlaps in geometry? extern bool confidence_intervals; //!< use confidence intervals for results? extern bool create_fission_neutrons; //!< create fission neutrons (fixed source)? +extern bool create_delayed_neutrons; //!< create delayed fission neutrons? extern "C" bool cmfd_run; //!< is a CMFD run? extern bool delayed_photon_scaling; //!< Scale fission photon yield to include delayed diff --git a/openmc/settings.py b/openmc/settings.py index 6271e05dc..3f5873c0a 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -300,6 +300,7 @@ class Settings: VolumeCalculation, 'volume calculations') self._create_fission_neutrons = None + self._create_delayed_neutrons = None self._delayed_photon_scaling = None self._material_cell_offsets = None self._log_grid_bins = None @@ -463,6 +464,10 @@ class Settings: def create_fission_neutrons(self) -> bool: return self._create_fission_neutrons + @property + def create_delayed_neutrons(self) -> bool: + return self._create_delayed_neutrons + @property def delayed_photon_scaling(self) -> bool: return self._delayed_photon_scaling @@ -870,6 +875,12 @@ class Settings: create_fission_neutrons, bool) self._create_fission_neutrons = create_fission_neutrons + @create_delayed_neutrons.setter + def create_delayed_neutrons(self, create_delayed_neutrons: bool): + cv.check_type('Whether create only prompt neutrons', + create_delayed_neutrons, bool) + self._create_delayed_neutrons = create_delayed_neutrons + @delayed_photon_scaling.setter def delayed_photon_scaling(self, value: bool): cv.check_type('delayed photon scaling', value, bool) @@ -1211,6 +1222,11 @@ class Settings: elem = ET.SubElement(root, "create_fission_neutrons") elem.text = str(self._create_fission_neutrons).lower() + def _create_create_delayed_neutrons_subelement(self, root): + if self._create_delayed_neutrons is not None: + elem = ET.SubElement(root, "create_delayed_neutrons") + elem.text = str(self._create_delayed_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") @@ -1536,6 +1552,11 @@ class Settings: if text is not None: self.create_fission_neutrons = text in ('true', '1') + def _create_delayed_neutrons_from_xml_element(self, root): + text = get_text(root, 'create_delayed_neutrons') + if text is not None: + self.create_delayed_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: @@ -1634,6 +1655,7 @@ class Settings: self._create_resonance_scattering_subelement(element) self._create_volume_calcs_subelement(element) self._create_create_fission_neutrons_subelement(element) + self._create_create_delayed_neutrons_subelement(root_element) self._create_delayed_photon_scaling_subelement(element) self._create_event_based_subelement(element) self._create_max_particles_in_flight_subelement(element) @@ -1726,6 +1748,7 @@ class Settings: settings._ufs_mesh_from_xml_element(elem, meshes) settings._resonance_scattering_from_xml_element(elem) settings._create_fission_neutrons_from_xml_element(elem) + settings._create_delayed_neutrons_from_xml_element(root) settings._delayed_photon_scaling_from_xml_element(elem) settings._event_based_from_xml_element(elem) settings._max_particles_in_flight_from_xml_element(elem) diff --git a/src/finalize.cpp b/src/finalize.cpp index 0c2c62310..59294b28c 100644 --- a/src/finalize.cpp +++ b/src/finalize.cpp @@ -74,6 +74,7 @@ int openmc_finalize() settings::check_overlaps = false; settings::confidence_intervals = false; settings::create_fission_neutrons = true; + settings::create_delayed_neutrons = true; settings::electron_treatment = ElectronTreatment::LED; settings::delayed_photon_scaling = true; settings::energy_cutoff = {0.0, 1000.0, 0.0, 0.0}; diff --git a/src/nuclide.cpp b/src/nuclide.cpp index 134e2d6b9..99ed44b11 100644 --- a/src/nuclide.cpp +++ b/src/nuclide.cpp @@ -519,7 +519,7 @@ double Nuclide::nu(double E, EmissionMode mode, int group) const case EmissionMode::prompt: return (*fission_rx_[0]->products_[0].yield_)(E); case EmissionMode::delayed: - if (n_precursor_ > 0) { + if (n_precursor_ > 0 && settings::create_delayed_neutrons) { auto rx = fission_rx_[0]; if (group >= 1 && group < rx->products_.size()) { // If delayed group specified, determine yield immediately @@ -544,7 +544,7 @@ double Nuclide::nu(double E, EmissionMode mode, int group) const return 0.0; } case EmissionMode::total: - if (total_nu_) { + if (total_nu_ && settings::create_delayed_neutrons) { return (*total_nu_)(E); } else { return (*fission_rx_[0]->products_[0].yield_)(E); diff --git a/src/settings.cpp b/src/settings.cpp index 6386ce52b..1b822f3b9 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -44,6 +44,7 @@ bool assume_separate {false}; bool check_overlaps {false}; bool cmfd_run {false}; bool confidence_intervals {false}; +bool create_delayed_neutrons {true}; bool create_fission_neutrons {true}; bool delayed_photon_scaling {true}; bool entropy_on {false}; @@ -872,6 +873,12 @@ void read_settings_xml(pugi::xml_node root) } } + // Check whether create delayed neutrons in fission + if (check_for_node(root, "create_delayed_neutrons")) { + create_delayed_neutrons = + get_node_value_bool(root, "create_delayed_neutrons"); + } + // Check whether create fission sites if (run_mode == RunMode::FIXED_SOURCE) { if (check_for_node(root, "create_fission_neutrons")) { From 8b1ecaad09546901231dc0890e55fc57622b77bf Mon Sep 17 00:00:00 2001 From: Christopher Fichtlscherer Date: Wed, 11 Jan 2023 15:38:16 -0500 Subject: [PATCH 4/8] deleted white spaces --- openmc/settings.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openmc/settings.py b/openmc/settings.py index 3f5873c0a..2210b23a2 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -465,7 +465,7 @@ class Settings: return self._create_fission_neutrons @property - def create_delayed_neutrons(self) -> bool: + def create_delayed_neutrons(self) -> bool: return self._create_delayed_neutrons @property @@ -875,7 +875,7 @@ class Settings: create_fission_neutrons, bool) self._create_fission_neutrons = create_fission_neutrons - @create_delayed_neutrons.setter + @create_delayed_neutrons.setter def create_delayed_neutrons(self, create_delayed_neutrons: bool): cv.check_type('Whether create only prompt neutrons', create_delayed_neutrons, bool) @@ -1222,7 +1222,7 @@ class Settings: elem = ET.SubElement(root, "create_fission_neutrons") elem.text = str(self._create_fission_neutrons).lower() - def _create_create_delayed_neutrons_subelement(self, root): + def _create_create_delayed_neutrons_subelement(self, root): if self._create_delayed_neutrons is not None: elem = ET.SubElement(root, "create_delayed_neutrons") elem.text = str(self._create_delayed_neutrons).lower() @@ -1552,7 +1552,7 @@ class Settings: if text is not None: self.create_fission_neutrons = text in ('true', '1') - def _create_delayed_neutrons_from_xml_element(self, root): + def _create_delayed_neutrons_from_xml_element(self, root): text = get_text(root, 'create_delayed_neutrons') if text is not None: self.create_delayed_neutrons = text in ('true', '1') From 3ba117fcd95afa1f8aba745dd368db705a3a5102 Mon Sep 17 00:00:00 2001 From: Christopher Fichtlscherer Date: Wed, 11 Jan 2023 15:41:31 -0500 Subject: [PATCH 5/8] indentation level change --- openmc/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/settings.py b/openmc/settings.py index 2210b23a2..79d28c44b 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -1222,7 +1222,7 @@ class Settings: elem = ET.SubElement(root, "create_fission_neutrons") elem.text = str(self._create_fission_neutrons).lower() - def _create_create_delayed_neutrons_subelement(self, root): + def _create_create_delayed_neutrons_subelement(self, root): if self._create_delayed_neutrons is not None: elem = ET.SubElement(root, "create_delayed_neutrons") elem.text = str(self._create_delayed_neutrons).lower() From f7c1a57b15ba1fe5bb697db077bf4cd29d595f79 Mon Sep 17 00:00:00 2001 From: Christopher Fichtlscherer Date: Wed, 11 Jan 2023 16:55:27 -0500 Subject: [PATCH 6/8] settings change element --- openmc/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/settings.py b/openmc/settings.py index 79d28c44b..911131387 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -1655,7 +1655,7 @@ class Settings: self._create_resonance_scattering_subelement(element) self._create_volume_calcs_subelement(element) self._create_create_fission_neutrons_subelement(element) - self._create_create_delayed_neutrons_subelement(root_element) + self._create_create_delayed_neutrons_subelement(element) self._create_delayed_photon_scaling_subelement(element) self._create_event_based_subelement(element) self._create_max_particles_in_flight_subelement(element) From 36249d3742dabfe95ee50e2aac822caf72f1e1a9 Mon Sep 17 00:00:00 2001 From: Christopher Fichtlscherer <29277544+cfichtlscherer@users.noreply.github.com> Date: Thu, 12 Jan 2023 06:25:52 -0500 Subject: [PATCH 7/8] Update openmc/settings.py yes Co-authored-by: Paul Romano --- openmc/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/settings.py b/openmc/settings.py index 911131387..9330d99b6 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -1748,7 +1748,7 @@ class Settings: settings._ufs_mesh_from_xml_element(elem, meshes) settings._resonance_scattering_from_xml_element(elem) settings._create_fission_neutrons_from_xml_element(elem) - settings._create_delayed_neutrons_from_xml_element(root) + settings._create_delayed_neutrons_from_xml_element(elem) settings._delayed_photon_scaling_from_xml_element(elem) settings._event_based_from_xml_element(elem) settings._max_particles_in_flight_from_xml_element(elem) From a66d4da53f1ce87f6a14902636ab12eb765c895b Mon Sep 17 00:00:00 2001 From: Christopher Fichtlscherer <29277544+cfichtlscherer@users.noreply.github.com> Date: Thu, 12 Jan 2023 06:26:07 -0500 Subject: [PATCH 8/8] Update openmc/settings.py version number Co-authored-by: Paul Romano --- openmc/settings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openmc/settings.py b/openmc/settings.py index 9330d99b6..22a83509f 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -224,11 +224,11 @@ class Settings: weight_windows : WeightWindows iterable of WeightWindows Weight windows to use for variance reduction - .. versionadded:: 0.13.3 + .. versionadded:: 0.13 create_delayed_neutrons : bool Whether delayed neutrons are created in fission. - .. versionadded:: 0.13 + .. versionadded:: 0.13.3 weight_windows_on : bool Whether weight windows are enabled