OpenMC/tests/unit_tests/test_torus.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

48 lines
1.6 KiB
Python
Raw Permalink Normal View History

from itertools import combinations
from random import uniform
import openmc
import pytest
def get_torus_keff(cls, R, r, center=(0, 0, 0)):
model = openmc.Model()
mat = openmc.Material()
mat.add_nuclide('U235', 1.0)
mat.set_density('g/cm3', 10.0)
x, y, z = center
torus = cls(x0=x, y0=y, z0=z, a=R, b=r, c=r)
sphere = openmc.Sphere(x0=x, y0=y, z0=z, r=R + r + 1, boundary_type="vacuum")
torus_cell = openmc.Cell(fill=mat, region=-torus)
outer_cell = openmc.Cell(region=+torus & -sphere)
model.geometry = openmc.Geometry([torus_cell, outer_cell])
model.settings.source = openmc.IndependentSource(space=openmc.stats.Point(center))
model.settings.batches = 10
model.settings.inactive = 5
model.settings.particles = 1000
sp_path = model.run()
with openmc.StatePoint(sp_path) as sp:
return sp.keff
@pytest.mark.parametrize("R,r", [(2.1, 2.0), (3.0, 1.0)])
def test_torus_keff(R, r, run_in_tmpdir):
random_point = lambda: (uniform(-5, 5), uniform(-5, 5), uniform(-5, 5))
keffs = [
get_torus_keff(openmc.XTorus, R, r),
get_torus_keff(openmc.XTorus, R, r, random_point()),
get_torus_keff(openmc.YTorus, R, r),
get_torus_keff(openmc.YTorus, R, r, random_point()),
get_torus_keff(openmc.ZTorus, R, r),
get_torus_keff(openmc.ZTorus, R, r, random_point())
]
# For each combination of keff values, their difference should be within
# uncertainty (3 std dev)
for k1, k2 in combinations(keffs, 2):
print(k1, k2)
diff = k1 - k2
assert abs(diff.n) < 3*diff.s