mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-21 14:35:27 -04:00
103 lines
3.1 KiB
Python
103 lines
3.1 KiB
Python
from __future__ import print_function
|
|
import subprocess
|
|
from numbers import Integral
|
|
import sys
|
|
|
|
if sys.version_info[0] >= 3:
|
|
basestring = str
|
|
|
|
|
|
def _run(command, output, cwd):
|
|
# Launch a subprocess
|
|
p = subprocess.Popen(command, shell=True, cwd=cwd, stdout=subprocess.PIPE,
|
|
universal_newlines=True)
|
|
|
|
# Capture and re-print OpenMC output in real-time
|
|
while True:
|
|
# If OpenMC is finished, break loop
|
|
line = p.stdout.readline()
|
|
if not line and p.poll() != None:
|
|
break
|
|
|
|
# If user requested output, print to screen
|
|
if output:
|
|
print(line, end='')
|
|
|
|
# Return the returncode (integer, zero if no problems encountered)
|
|
return p.returncode
|
|
|
|
|
|
def plot_geometry(output=True, openmc_exec='openmc', cwd='.'):
|
|
"""Run OpenMC in plotting mode
|
|
|
|
Parameters
|
|
----------
|
|
output : bool
|
|
Capture OpenMC output from standard out
|
|
openmc_exec : str
|
|
Path to OpenMC executable
|
|
cwd : str, optional
|
|
Path to working directory to run in. Defaults to the current working directory.
|
|
|
|
"""
|
|
|
|
return _run(openmc_exec + ' -p', output, cwd)
|
|
|
|
|
|
def run(particles=None, threads=None, geometry_debug=False,
|
|
restart_file=None, tracks=False, mpi_procs=1, output=True,
|
|
openmc_exec='openmc', mpi_exec='mpiexec', cwd='.'):
|
|
"""Run an OpenMC simulation.
|
|
|
|
Parameters
|
|
----------
|
|
particles : int, optional
|
|
Number of particles to simulate per generation.
|
|
threads : int, optional
|
|
Number of OpenMP threads. If OpenMC is compiled with OpenMP threading
|
|
enabled, the default is implementation-dependent but is usually equal to
|
|
the number of hardware threads available (or a value set by the
|
|
OMP_NUM_THREADS environment variable).
|
|
geometry_debug : bool, optional
|
|
Turn on geometry debugging during simulation. Defaults to False.
|
|
restart_file : str, optional
|
|
Path to restart file to use
|
|
tracks : bool, optional
|
|
Write tracks for all particles. Defaults to False.
|
|
mpi_procs : int, optional
|
|
Number of MPI processes.
|
|
output : bool, optional
|
|
Capture OpenMC output from standard out. Defaults to True.
|
|
openmc_exec : str, optional
|
|
Path to OpenMC executable. Defaults to 'openmc'.
|
|
mpi_exec : str, optional
|
|
MPI execute command. Defaults to 'mpiexec'.
|
|
cwd : str, optional
|
|
Path to working directory to run in. Defaults to the current working directory.
|
|
|
|
"""
|
|
|
|
post_args = ' '
|
|
pre_args = ''
|
|
|
|
if isinstance(particles, Integral) and particles > 0:
|
|
post_args += '-n {0} '.format(particles)
|
|
|
|
if isinstance(threads, Integral) and threads > 0:
|
|
post_args += '-s {0} '.format(threads)
|
|
|
|
if geometry_debug:
|
|
post_args += '-g '
|
|
|
|
if isinstance(restart_file, basestring):
|
|
post_args += '-r {0} '.format(restart_file)
|
|
|
|
if tracks:
|
|
post_args += '-t'
|
|
|
|
if isinstance(mpi_procs, Integral) and mpi_procs > 1:
|
|
pre_args += '{} -n {} '.format(mpi_exec, mpi_procs)
|
|
|
|
command = pre_args + openmc_exec + ' ' + post_args
|
|
|
|
return _run(command, output, cwd)
|