Add a settings flag to turn off/on delayed photon fission yield scaling

This commit is contained in:
Paul Romano 2020-01-08 16:34:34 -06:00
parent 8894696db1
commit a35d51202c
8 changed files with 59 additions and 5 deletions

View file

@ -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 <io_geometry>` file is present with
``dagmc`` set to ``true``, it will be ignored.
----------------------------
``<delayed_photon_scaling>``
----------------------------
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
--------------------------------
``<electron_treatment>`` Element
--------------------------------

View file

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

View file

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

View file

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

View file

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

View file

@ -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" ) }? &

View file

@ -82,6 +82,11 @@
</interleave>
</element>
</optional>
<optional>
<element name="delayed_photon_scaling">
<data type="boolean"/>
</element>
</optional>
<optional>
<element name="electron_treatment">
<choice>

View file

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