Skip to content

Commit 5aeb316

Browse files
committed
add properties file path to settings
with documentation and loading from c++ and python round trip test
1 parent c6ef84d commit 5aeb316

6 files changed

Lines changed: 50 additions & 0 deletions

File tree

docs/source/io_formats/settings.rst

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1340,6 +1340,16 @@ despite not being bounded on both sides.
13401340

13411341
*Default*: 10 K
13421342

1343+
.. _properties_file:
1344+
1345+
--------------------------------------
1346+
``<properties_file>`` Element
1347+
--------------------------------------
1348+
1349+
The ``properties_file`` element has no attributes and contains the path to
1350+
an HDF5 properties file to load during simulation initialization.
1351+
1352+
13431353
.. _trace:
13441354

13451355
-------------------

include/openmc/settings.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ extern std::string path_sourcepoint; //!< path to a source file
114114
extern std::string path_statepoint; //!< path to a statepoint file
115115
extern std::string weight_windows_file; //!< Location of weight window file to
116116
//!< load on simulation initialization
117+
extern std::string properties_file; //!< Location of properties file to
118+
//!< load on simulation initialization
117119

118120
// This is required because the c_str() may not be the first thing in
119121
// std::string. Sometimes it is, but it seems libc++ may not be like that

openmc/settings.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,9 @@ class Settings:
179179
Initial seed for randomly generated plot colors.
180180
ptables : bool
181181
Determine whether probability tables are used.
182+
properties_file : Pathlike
183+
Location of the properties file to load cell temperatures/densities
184+
and materials
182185
random_ray : dict
183186
Options for configuring the random ray solver. Acceptable keys are:
184187
@@ -392,6 +395,7 @@ def __init__(self, **kwargs):
392395
self._photon_transport = None
393396
self._plot_seed = None
394397
self._ptables = None
398+
self._properties_file = None
395399
self._uniform_source_sampling = None
396400
self._seed = None
397401
self._stride = None
@@ -1018,6 +1022,18 @@ def temperature(self, temperature: dict):
10181022

10191023
self._temperature = temperature
10201024

1025+
@property
1026+
def properties_file(self) -> PathLike | None:
1027+
return self._properties_file
1028+
1029+
@properties_file.setter
1030+
def properties_file(self, value: PathLike | None):
1031+
if value is None:
1032+
self._properties_file = None
1033+
else:
1034+
cv.check_type('weight windows file', value, PathLike)
1035+
self._properties_file = input_path(value)
1036+
10211037
@property
10221038
def trace(self) -> Iterable:
10231039
return self._trace
@@ -1708,6 +1724,12 @@ def _create_temperature_subelements(self, root):
17081724
else:
17091725
element.text = str(value)
17101726

1727+
def _create_properties_file_element(self, root):
1728+
if self.properties_file is not None:
1729+
element = ET.Element("properties_file")
1730+
element.text = str(self.properties_file)
1731+
root.append(element)
1732+
17111733
def _create_trace_subelement(self, root):
17121734
if self._trace is not None:
17131735
element = ET.SubElement(root, "trace")
@@ -2205,6 +2227,11 @@ def _temperature_from_xml_element(self, root):
22052227
if text is not None:
22062228
self.temperature['multipole'] = text in ('true', '1')
22072229

2230+
def _properties_file_from_xml_element(self, root):
2231+
text = get_text(root, 'properties_file')
2232+
if text is not None:
2233+
self.properties_file = text
2234+
22082235
def _trace_from_xml_element(self, root):
22092236
text = get_elem_list(root, "trace", int)
22102237
if text is not None:
@@ -2440,6 +2467,7 @@ def to_xml_element(self, mesh_memo=None):
24402467
self._create_ifp_n_generation_subelement(element)
24412468
self._create_tabular_legendre_subelements(element)
24422469
self._create_temperature_subelements(element)
2470+
self._create_properties_file_element(element)
24432471
self._create_trace_subelement(element)
24442472
self._create_track_subelement(element)
24452473
self._create_ufs_mesh_subelement(element, mesh_memo)
@@ -2554,6 +2582,7 @@ def from_xml_element(cls, elem, meshes=None):
25542582
settings._ifp_n_generation_from_xml_element(elem)
25552583
settings._tabular_legendre_from_xml_element(elem)
25562584
settings._temperature_from_xml_element(elem)
2585+
settings._properties_file_from_xml_element(elem)
25572586
settings._trace_from_xml_element(elem)
25582587
settings._track_from_xml_element(elem)
25592588
settings._ufs_mesh_from_xml_element(elem, meshes)

src/finalize.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ int openmc_finalize()
138138
settings::temperature_multipole = false;
139139
settings::temperature_range = {0.0, 0.0};
140140
settings::temperature_tolerance = 10.0;
141+
settings::properties_file.clear();
141142
settings::trigger_on = false;
142143
settings::trigger_predict = false;
143144
settings::trigger_batch_interval = 1;

src/settings.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ std::string path_sourcepoint;
9696
std::string path_statepoint;
9797
const char* path_statepoint_c {path_statepoint.c_str()};
9898
std::string weight_windows_file;
99+
std::string properties_file;
99100

100101
int32_t n_inactive {0};
101102
int32_t max_lost_particles {10};
@@ -733,6 +734,11 @@ void read_settings_xml(pugi::xml_node root)
733734
}
734735
}
735736

737+
// read properties from file
738+
if (check_for_node(root, "properties_file")) {
739+
properties_file = get_node_value(root, "properties_file");
740+
}
741+
736742
// Particle trace
737743
if (check_for_node(root, "trace")) {
738744
auto temp = get_node_array<int64_t>(root, "trace");

tests/unit_tests/test_settings.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ def test_export_to_xml(run_in_tmpdir):
4343
s.tabular_legendre = {'enable': True, 'num_points': 50}
4444
s.temperature = {'default': 293.6, 'method': 'interpolation',
4545
'multipole': True, 'range': (200., 1000.)}
46+
s.properties_file = 'properties_test.h5'
4647
s.trace = (10, 1, 20)
4748
s.track = [(1, 1, 1), (2, 1, 1)]
4849
s.ufs_mesh = mesh
@@ -129,6 +130,7 @@ def test_export_to_xml(run_in_tmpdir):
129130
assert s.tabular_legendre == {'enable': True, 'num_points': 50}
130131
assert s.temperature == {'default': 293.6, 'method': 'interpolation',
131132
'multipole': True, 'range': [200., 1000.]}
133+
assert s.properties_file = "properties_test.h5"
132134
assert s.trace == [10, 1, 20]
133135
assert s.track == [(1, 1, 1), (2, 1, 1)]
134136
assert isinstance(s.ufs_mesh, openmc.RegularMesh)

0 commit comments

Comments
 (0)