OpenMC/tests/regression_tests/dagmc/legacy/test.py
Zoe Prieto 9686851e7a
Write surface source files per batch (#3124)
Co-authored-by: Patrick Shriwise <pshriwise@gmail.com>
Co-authored-by: Paul Romano <paul.k.romano@gmail.com>
2024-10-03 22:32:03 +00:00

107 lines
No EOL
3 KiB
Python

from pathlib import Path
import openmc
import openmc.lib
import h5py
import numpy as np
import pytest
from tests.testing_harness import PyAPITestHarness, config
pytestmark = pytest.mark.skipif(
not openmc.lib._dagmc_enabled(),
reason="DAGMC CAD geometry is not enabled.")
@pytest.fixture
def model():
openmc.reset_auto_ids()
model = openmc.Model()
# settings
model.settings.batches = 5
model.settings.inactive = 0
model.settings.particles = 100
source_box = openmc.stats.Box([-4, -4, -4],
[ 4, 4, 4])
source = openmc.IndependentSource(space=source_box)
model.settings.source = source
# geometry
dag_univ = openmc.DAGMCUniverse(Path("dagmc.h5m"))
model.geometry = openmc.Geometry(dag_univ)
# tally
tally = openmc.Tally()
tally.scores = ['total']
tally.filters = [openmc.CellFilter(1)]
model.tallies = [tally]
# materials
u235 = openmc.Material(name="no-void fuel")
u235.add_nuclide('U235', 1.0, 'ao')
u235.set_density('g/cc', 11)
u235.id = 40
water = openmc.Material(name="water")
water.add_nuclide('H1', 2.0, 'ao')
water.add_nuclide('O16', 1.0, 'ao')
water.set_density('g/cc', 1.0)
water.add_s_alpha_beta('c_H_in_H2O')
water.id = 41
mats = openmc.Materials([u235, water])
model.materials = mats
return model
def test_missing_material_id(model):
# remove the last material, which is identified by ID in the DAGMC file
model.materials = model.materials[:-1]
with pytest.raises(RuntimeError) as exec_info:
model.run()
exp_error_msg = "Material with name/ID '41' not found for volume (cell) 3"
assert exp_error_msg in str(exec_info.value)
def test_missing_material_name(model):
# remove the first material, which is identified by name in the DAGMC file
model.materials = model.materials[1:]
with pytest.raises(RuntimeError) as exec_info:
model.run()
exp_error_msg = "Material with name/ID 'no-void fuel' not found for volume (cell) 1"
assert exp_error_msg in str(exec_info.value)
def test_surf_source(model):
# create a surface source read on this model to ensure
# particles are being generated correctly
n = 100
model.settings.surf_source_write = {'surface_ids': [1], 'max_particles': n}
# If running in MPI mode, setup proper keyword arguments for run()
kwargs = {'openmc_exec': config['exe']}
if config['mpi']:
kwargs['mpi_args'] = [config['mpiexec'], '-n', config['mpi_np']]
model.run(**kwargs)
with h5py.File('surface_source.h5') as fh:
assert fh.attrs['filetype'] == b'source'
arr = fh['source_bank'][...]
expected_size = n * int(config['mpi_np']) if config['mpi'] else n
assert arr.size == expected_size
# check that all particles are on surface 1 (radius = 7)
xs = arr[:]['r']['x']
ys = arr[:]['r']['y']
rad = np.sqrt(xs**2 + ys**2)
assert np.allclose(rad, 7.0)
def test_dagmc(model):
harness = PyAPITestHarness('statepoint.5.h5', model)
harness.main()