Merge pull request #2348 from cfichtlscherer/prompt_neutrons

Prompt neutrons 2.0
This commit is contained in:
Paul Romano 2023-01-13 09:44:44 +07:00 committed by GitHub
commit 1cdb37a05c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 51 additions and 2 deletions

View file

@ -32,6 +32,17 @@ standard deviation.
*Default*: false
-------------------------------------
``<create_delayed_neutrons>`` Element
-------------------------------------
The ``<create_delayed_neutrons>`` 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
-------------------------------------
``<create_fission_neutrons>`` Element
-------------------------------------

View file

@ -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

View file

@ -225,6 +225,10 @@ class Settings:
Weight windows to use for variance reduction
.. versionadded:: 0.13
create_delayed_neutrons : bool
Whether delayed neutrons are created in fission.
.. versionadded:: 0.13.3
weight_windows_on : bool
Whether weight windows are enabled
@ -296,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
@ -459,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
@ -866,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)
@ -1207,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")
@ -1532,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:
@ -1630,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(element)
self._create_delayed_photon_scaling_subelement(element)
self._create_event_based_subelement(element)
self._create_max_particles_in_flight_subelement(element)
@ -1722,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(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)

View file

@ -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};

View file

@ -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);

View file

@ -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};
@ -873,6 +874,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")) {

View file

@ -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'