mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-28 14:15:42 -04:00
Add option in openmc.Settings for log_grid_bins (and remove DD)
This commit is contained in:
parent
6044edc24a
commit
bc4c7d9372
2 changed files with 20 additions and 139 deletions
|
|
@ -60,6 +60,8 @@ class Settings(object):
|
|||
type are 'variance', 'std_dev', and 'rel_err'. The threshold value
|
||||
should be a float indicating the variance, standard deviation, or
|
||||
relative error used.
|
||||
log_grid_bins : int
|
||||
Number of bins for logarithmic energy grid search
|
||||
max_order : None or int
|
||||
Maximum scattering order to apply globally when in multi-group mode.
|
||||
multipole_library : str
|
||||
|
|
@ -220,19 +222,12 @@ class Settings(object):
|
|||
# Uniform fission source subelement
|
||||
self._ufs_mesh = None
|
||||
|
||||
# Domain decomposition subelement
|
||||
self._dd_mesh_dimension = None
|
||||
self._dd_mesh_lower_left = None
|
||||
self._dd_mesh_upper_right = None
|
||||
self._dd_nodemap = None
|
||||
self._dd_allow_leakage = False
|
||||
self._dd_count_interactions = False
|
||||
|
||||
self._resonance_scattering = {}
|
||||
self._volume_calculations = cv.CheckedList(
|
||||
VolumeCalculation, 'volume calculations')
|
||||
|
||||
self._create_fission_neutrons = None
|
||||
self._log_grid_bins = None
|
||||
|
||||
@property
|
||||
def run_mode(self):
|
||||
|
|
@ -362,30 +357,6 @@ class Settings(object):
|
|||
def ufs_mesh(self):
|
||||
return self._ufs_mesh
|
||||
|
||||
@property
|
||||
def dd_mesh_dimension(self):
|
||||
return self._dd_mesh_dimension
|
||||
|
||||
@property
|
||||
def dd_mesh_lower_left(self):
|
||||
return self._dd_mesh_lower_left
|
||||
|
||||
@property
|
||||
def dd_mesh_upper_right(self):
|
||||
return self._dd_mesh_upper_right
|
||||
|
||||
@property
|
||||
def dd_nodemap(self):
|
||||
return self._dd_nodemap
|
||||
|
||||
@property
|
||||
def dd_allow_leakage(self):
|
||||
return self._dd_allow_leakage
|
||||
|
||||
@property
|
||||
def dd_count_interactions(self):
|
||||
return self._dd_count_interactions
|
||||
|
||||
@property
|
||||
def resonance_scattering(self):
|
||||
return self._resonance_scattering
|
||||
|
|
@ -398,6 +369,10 @@ class Settings(object):
|
|||
def create_fission_neutrons(self):
|
||||
return self._create_fission_neutrons
|
||||
|
||||
@property
|
||||
def log_grid_bins(self):
|
||||
return self._log_grid_bins
|
||||
|
||||
@run_mode.setter
|
||||
def run_mode(self, run_mode):
|
||||
cv.check_value('run mode', run_mode, _RUN_MODES)
|
||||
|
|
@ -696,85 +671,6 @@ class Settings(object):
|
|||
cv.check_length('UFS mesh upper-right corner', ufs_mesh.upper_right, 3)
|
||||
self._ufs_mesh = ufs_mesh
|
||||
|
||||
@dd_mesh_dimension.setter
|
||||
def dd_mesh_dimension(self, dimension):
|
||||
# TODO: remove this when domain decomposition is merged
|
||||
warnings.warn('This feature is not yet implemented in a release '
|
||||
'version of openmc')
|
||||
|
||||
cv.check_type('DD mesh dimension', dimension, Iterable, Integral)
|
||||
cv.check_length('DD mesh dimension', dimension, 3)
|
||||
|
||||
self._dd_mesh_dimension = dimension
|
||||
|
||||
@dd_mesh_lower_left.setter
|
||||
def dd_mesh_lower_left(self, lower_left):
|
||||
# TODO: remove this when domain decomposition is merged
|
||||
warnings.warn('This feature is not yet implemented in a release '
|
||||
'version of openmc')
|
||||
|
||||
cv.check_type('DD mesh lower left corner', lower_left, Iterable, Real)
|
||||
cv.check_length('DD mesh lower left corner', lower_left, 3)
|
||||
|
||||
self._dd_mesh_lower_left = lower_left
|
||||
|
||||
@dd_mesh_upper_right.setter
|
||||
def dd_mesh_upper_right(self, upper_right):
|
||||
# TODO: remove this when domain decomposition is merged
|
||||
warnings.warn('This feature is not yet implemented in a release '
|
||||
'version of openmc')
|
||||
|
||||
cv.check_type('DD mesh upper right corner', upper_right, Iterable, Real)
|
||||
cv.check_length('DD mesh upper right corner', upper_right, 3)
|
||||
|
||||
self._dd_mesh_upper_right = upper_right
|
||||
|
||||
@dd_nodemap.setter
|
||||
def dd_nodemap(self, nodemap):
|
||||
# TODO: remove this when domain decomposition is merged
|
||||
warnings.warn('This feature is not yet implemented in a release '
|
||||
'version of openmc')
|
||||
|
||||
cv.check_type('DD nodemap', nodemap, Iterable)
|
||||
|
||||
nodemap = np.array(nodemap).flatten()
|
||||
|
||||
if self._dd_mesh_dimension is None:
|
||||
msg = 'Must set DD mesh dimension before setting the nodemap'
|
||||
raise ValueError(msg)
|
||||
else:
|
||||
len_nodemap = np.prod(self._dd_mesh_dimension)
|
||||
|
||||
if len(nodemap) < len_nodemap or len(nodemap) > len_nodemap:
|
||||
msg = 'Unable to set DD nodemap with length "{0}" which ' \
|
||||
'does not have the same dimensionality as the domain ' \
|
||||
'mesh'.format(len(nodemap))
|
||||
raise ValueError(msg)
|
||||
|
||||
self._dd_nodemap = nodemap
|
||||
|
||||
@dd_allow_leakage.setter
|
||||
def dd_allow_leakage(self, allow):
|
||||
|
||||
# TODO: remove this when domain decomposition is merged
|
||||
warnings.warn('This feature is not yet implemented in a release '
|
||||
'version of openmc')
|
||||
|
||||
cv.check_type('DD allow leakage', allow, bool)
|
||||
|
||||
self._dd_allow_leakage = allow
|
||||
|
||||
@dd_count_interactions.setter
|
||||
def dd_count_interactions(self, interactions):
|
||||
|
||||
# TODO: remove this when domain decomposition is merged
|
||||
warnings.warn('This feature is not yet implemented in a release '
|
||||
'version of openmc')
|
||||
|
||||
cv.check_type('DD count interactions', interactions, bool)
|
||||
|
||||
self._dd_count_interactions = interactions
|
||||
|
||||
@resonance_scattering.setter
|
||||
def resonance_scattering(self, res):
|
||||
cv.check_type('resonance scattering settings', res, Mapping)
|
||||
|
|
@ -812,6 +708,12 @@ class Settings(object):
|
|||
create_fission_neutrons, bool)
|
||||
self._create_fission_neutrons = create_fission_neutrons
|
||||
|
||||
@log_grid_bins.setter
|
||||
def log_grid_bins(self, log_grid_bins):
|
||||
cv.check_type('log grid bins', log_grid_bins, Real)
|
||||
cv.check_greater_than('log grid bins', log_grid_bins, 0)
|
||||
self._log_grid_bins = log_grid_bins
|
||||
|
||||
def _create_run_mode_subelement(self, root):
|
||||
elem = ET.SubElement(root, "run_mode")
|
||||
elem.text = self._run_mode
|
||||
|
|
@ -1033,33 +935,6 @@ class Settings(object):
|
|||
subelement = ET.SubElement(root, "ufs_mesh")
|
||||
subelement.text = str(self.ufs_mesh.id)
|
||||
|
||||
def _create_dd_subelement(self, root):
|
||||
if self._dd_mesh_lower_left is not None and \
|
||||
self._dd_mesh_upper_right is not None and \
|
||||
self._dd_mesh_dimension is not None:
|
||||
|
||||
element = ET.SubElement(root, "domain_decomposition")
|
||||
|
||||
subelement = ET.SubElement(element, "mesh")
|
||||
subsubelement = ET.SubElement(subelement, "dimension")
|
||||
subsubelement.text = ' '.join(map(str, self._dd_mesh_dimension))
|
||||
|
||||
subsubelement = ET.SubElement(subelement, "lower_left")
|
||||
subsubelement.text = ' '.join(map(str, self._dd_mesh_lower_left))
|
||||
|
||||
subsubelement = ET.SubElement(subelement, "upper_right")
|
||||
subsubelement.text = ' '.join(map(str, self._dd_mesh_upper_right))
|
||||
|
||||
if self._dd_nodemap is not None:
|
||||
subelement = ET.SubElement(element, "nodemap")
|
||||
subelement.text = ' '.join(map(str, self._dd_nodemap))
|
||||
|
||||
subelement = ET.SubElement(element, "allow_leakage")
|
||||
subelement.text = str(self._dd_allow_leakage).lower()
|
||||
|
||||
subelement = ET.SubElement(element, "count_interactions")
|
||||
subelement.text = str(self._dd_count_interactions).lower()
|
||||
|
||||
def _create_resonance_scattering_subelement(self, root):
|
||||
res = self.resonance_scattering
|
||||
if res:
|
||||
|
|
@ -1085,6 +960,11 @@ class Settings(object):
|
|||
elem = ET.SubElement(root, "create_fission_neutrons")
|
||||
elem.text = str(self._create_fission_neutrons).lower()
|
||||
|
||||
def _create_log_grid_bins_subelement(self, root):
|
||||
if self._log_grid_bins is not None:
|
||||
elem = ET.SubElement(root, "log_grid_bins")
|
||||
elem.text = str(self._log_grid_bins)
|
||||
|
||||
def export_to_xml(self, path='settings.xml'):
|
||||
"""Export simulation settings to an XML file.
|
||||
|
||||
|
|
@ -1128,10 +1008,10 @@ class Settings(object):
|
|||
self._create_trace_subelement(root_element)
|
||||
self._create_track_subelement(root_element)
|
||||
self._create_ufs_mesh_subelement(root_element)
|
||||
self._create_dd_subelement(root_element)
|
||||
self._create_resonance_scattering_subelement(root_element)
|
||||
self._create_volume_calcs_subelement(root_element)
|
||||
self._create_create_fission_neutrons_subelement(root_element)
|
||||
self._create_log_grid_bins_subelement(root_element)
|
||||
|
||||
# Clean the indentation in the file to be user-readable
|
||||
clean_xml_indentation(root_element)
|
||||
|
|
|
|||
|
|
@ -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.log_grid_bins = 2000
|
||||
|
||||
# Make sure exporting XML works
|
||||
s.export_to_xml()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue