OpenMC/tests/regression_tests/source/test.py

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

91 lines
4.3 KiB
Python
Raw Permalink Normal View History

from math import pi, cos
import numpy as np
import openmc
from tests.testing_harness import PyAPITestHarness
class SourceTestHarness(PyAPITestHarness):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
mat1 = openmc.Material(material_id=1, temperature=294)
mat1.set_density('g/cm3', 4.5)
mat1.add_nuclide('U235', 1.0)
self._model.materials = openmc.Materials([mat1])
sphere = openmc.Sphere(surface_id=1, r=10.0, boundary_type='vacuum')
inside_sphere = openmc.Cell(cell_id=1)
inside_sphere.region = -sphere
inside_sphere.fill = mat1
root = openmc.Universe(universe_id=0)
root.add_cell(inside_sphere)
self._model.geometry = openmc.Geometry(root)
# Create an array of different sources
2016-01-14 06:46:32 -06:00
x_dist = openmc.stats.Uniform(-3., 3.)
y_dist = openmc.stats.Discrete([-4., -1., 3.], [0.2, 0.3, 0.5])
z_dist = openmc.stats.Tabular([-2., 0., 2.], [0.2, 0.3, 0.2])
r_dist = openmc.stats.Uniform(2., 3.)
2021-10-11 19:48:15 +00:00
r_dist1 = openmc.stats.PowerLaw(2., 3., 1.)
r_dist2 = openmc.stats.PowerLaw(2., 3., 2.)
cos_theta_dist = openmc.stats.Discrete([cos(pi/4), 0.0, cos(3*pi/4)],
[0.3, 0.4, 0.3])
phi_dist = openmc.stats.Uniform(0.0, 2*pi)
spatial1 = openmc.stats.CartesianIndependent(x_dist, y_dist, z_dist)
spatial2 = openmc.stats.Box([-4., -4., -4.], [4., 4., 4.])
spatial3 = openmc.stats.Point([1.2, -2.3, 0.781])
spatial4 = openmc.stats.SphericalIndependent(r_dist, cos_theta_dist,
phi_dist,
origin=(1., 1., 0.))
spatial5 = openmc.stats.CylindricalIndependent(r_dist, phi_dist,
z_dist,
origin=(1., 1., 0.))
spatial6 = openmc.stats.SphericalIndependent(r_dist2, cos_theta_dist,
phi_dist,
origin=(1., 1., 0.))
spatial7 = openmc.stats.CylindricalIndependent(r_dist1, phi_dist,
z_dist,
origin=(1., 1., 0.))
2016-01-14 06:46:32 -06:00
mu_dist = openmc.stats.Discrete([-1., 0., 1.], [0.5, 0.25, 0.25])
phi_dist = openmc.stats.Uniform(0., 6.28318530718)
angle1 = openmc.stats.PolarAzimuthal(mu_dist, phi_dist)
angle2 = openmc.stats.Monodirectional(reference_uvw=[0., 1., 0.])
angle3 = openmc.stats.Isotropic()
# Note that the definition for E is equivalent to logspace(0, 7) but we
# manually take powers because of last-digit differences that may cause
# test failures with different versions of numpy
E = np.array([10**x for x in np.linspace(0, 7)])
p = np.sin(np.linspace(0., pi))
p /= sum(np.diff(E)*p[:-1])
2016-10-28 10:04:47 -05:00
energy1 = openmc.stats.Maxwell(1.2895e6)
energy2 = openmc.stats.Watt(0.988e6, 2.249e-6)
2016-01-14 06:46:32 -06:00
energy3 = openmc.stats.Tabular(E, p, interpolation='histogram')
energy4 = openmc.stats.Mixture([1, 2, 3], [energy1, energy2, energy3])
time1 = openmc.stats.Uniform(2, 5)
source1 = openmc.IndependentSource(spatial1, angle1, energy1, strength=0.3)
source2 = openmc.IndependentSource(spatial2, angle2, energy2, strength=0.1)
source3 = openmc.IndependentSource(spatial3, angle3, energy3, strength=0.1)
source4 = openmc.IndependentSource(spatial4, angle3, energy3, strength=0.1)
source5 = openmc.IndependentSource(spatial5, angle3, energy3, strength=0.1)
source6 = openmc.IndependentSource(spatial5, angle3, energy4, strength=0.1)
source7 = openmc.IndependentSource(spatial6, angle3, energy4, time1, strength=0.1)
source8 = openmc.IndependentSource(spatial7, angle3, energy4, time1, strength=0.1)
settings = openmc.Settings()
settings.batches = 10
settings.inactive = 5
settings.particles = 1000
settings.source = [source1, source2, source3, source4, source5, source6, source7, source8]
self._model.settings = settings
def test_source():
harness = SourceTestHarness('statepoint.10.h5', model=openmc.Model())
harness.main()