mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-21 14:35:27 -04:00
47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
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
|