mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-28 22:26:08 -04:00
Changes to the model.run interface again for clarity and for test passing
This commit is contained in:
parent
f03b98ac0f
commit
d45af5a4ef
2 changed files with 35 additions and 28 deletions
|
|
@ -462,10 +462,12 @@ class Model:
|
|||
C_mat = openmc.lib.materials[mat_id]
|
||||
C_mat.set_density(atom_density, 'atom/b-cm')
|
||||
|
||||
def run(self, **kwargs):
|
||||
def run(self, particles=None, threads=None, geometry_debug=False,
|
||||
restart_file=None, tracks=False, output=True, cwd='.',
|
||||
openmc_exec='openmc', mpi_args=None, event_based=False):
|
||||
"""Runs OpenMC. If the C-API has been initialized, then the C-API is
|
||||
used, otherwise, this method creates the XML files and runs OpenMC via
|
||||
a system cal. In both cases this method returns the path to the last
|
||||
a system call. In both cases this method returns the path to the last
|
||||
statepoint file generated.
|
||||
|
||||
.. versionchanged:: 0.12
|
||||
|
|
@ -490,7 +492,7 @@ class Model:
|
|||
Path to restart file to use
|
||||
tracks : bool, optional
|
||||
Write tracks for all particles. Defaults to False.
|
||||
output : bool
|
||||
output : bool, optional
|
||||
Capture OpenMC output from standard out
|
||||
cwd : str, optional
|
||||
Path to working directory to run in. Defaults to the current
|
||||
|
|
@ -519,47 +521,44 @@ class Model:
|
|||
if self.C_init:
|
||||
# Handle the openmc.run kwargs
|
||||
# First dont allow ones that must be set via init
|
||||
via_args = ['threads', 'geometry_debug', 'restart_file', 'tracks',
|
||||
'cwd']
|
||||
provided_args = [k for k in kwargs.keys()]
|
||||
if any([key in via_args for key in provided_args]):
|
||||
msg = "Argument {} must be set via Model.c_init(...)"
|
||||
raise ValueError(msg)
|
||||
for arg_name, arg, default in zip(
|
||||
['threads', 'geometry_debug', 'restart_file', 'tracks', 'cwd'],
|
||||
[threads, geometry_debug, restart_file, tracks, cwd],
|
||||
[None, False, None, False, '.']):
|
||||
if arg != default:
|
||||
msg = "{} must be set via Model.c_init(...)".format(
|
||||
arg_name)
|
||||
raise ValueError(msg)
|
||||
|
||||
if 'particles' in kwargs:
|
||||
if particles is not None:
|
||||
init_particles = openmc.lib.settings.particles
|
||||
if isinstance(kwargs['particles'], Integral) and \
|
||||
kwargs['particles'] > 0:
|
||||
openmc.lib.settings.particles = kwargs['particles']
|
||||
if isinstance(particles, Integral) and particles > 0:
|
||||
openmc.lib.settings.particles = particles
|
||||
|
||||
# Now lets handle the ones we can handle
|
||||
if 'output' in kwargs:
|
||||
if not output:
|
||||
init_verbosity = openmc.lib.settings.verbosity
|
||||
if not kwargs['output']:
|
||||
if not output:
|
||||
openmc.lib.settings.verbosity = 1
|
||||
|
||||
# Event-based can be set at init-time or on a case-basis. Handle
|
||||
# the case-basis here.
|
||||
if 'event_based' in kwargs:
|
||||
# TODO: However, the event based flag isnt exposed in the C-API
|
||||
# yet. Support for actual handling will be added in future work
|
||||
msg = "Setting event-based mode directly via the C-API is " \
|
||||
"not yet implemented"
|
||||
raise NotImplementedError(msg)
|
||||
# TODO This will be dealt with in a future change to the C-API
|
||||
|
||||
# Then run using the C-API
|
||||
openmc.lib.run()
|
||||
|
||||
# Reset changes for the openmc.run kwargs handling
|
||||
if 'particles' in kwargs:
|
||||
if particles is not None:
|
||||
openmc.lib.settings.particles = init_particles
|
||||
if 'output' in kwargs:
|
||||
if output is not None:
|
||||
openmc.lib.settings.verbosity = init_verbosity
|
||||
|
||||
else:
|
||||
# Then run via the command line
|
||||
self.export_to_xml()
|
||||
openmc.run(**kwargs)
|
||||
openmc.run(particles, threads, geometry_debug, restart_file,
|
||||
tracks, output, cwd, openmc_exec, mpi_args, event_based)
|
||||
|
||||
# Get output directory and return the last statepoint written this run
|
||||
if self.settings.output and 'path' in self.settings.output:
|
||||
|
|
|
|||
|
|
@ -208,10 +208,18 @@ def test_run(run_in_tmpdir, pin_model_attributes, mpi_intracomm):
|
|||
assert (C_keff - cli_keff) < 1e-15
|
||||
assert (C_flux - cli_flux) < 1e-13
|
||||
|
||||
# Now we should make sure the event-based flag gives us our not implemented
|
||||
# error
|
||||
with pytest.raises(NotImplementedError):
|
||||
test_model.run(output=False, event_based=True)
|
||||
# Now we should make sure that the flags for items which should be handled
|
||||
# by init are properly set
|
||||
with pytest.raises(ValueError):
|
||||
test_model.run(threads=1)
|
||||
with pytest.raises(ValueError):
|
||||
test_model.run(geometry_debug=True)
|
||||
with pytest.raises(ValueError):
|
||||
test_model.run(restart_file='1.h5')
|
||||
with pytest.raises(ValueError):
|
||||
test_model.run(tracks=True)
|
||||
with pytest.raises(ValueError):
|
||||
test_model.run(cwd='hi')
|
||||
|
||||
test_model.clear_C_api()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue