Skip to content

Commit bdb6d38

Browse files
authored
Merge pull request #2204 from paulromano/reference-uvw-fix
Fix reading reference direction from XML for angular distributions
2 parents df3765f + eb1dc01 commit bdb6d38

2 files changed

Lines changed: 46 additions & 9 deletions

File tree

‎openmc/stats/multivariate.py‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -148,9 +148,9 @@ def from_xml_element(cls, elem):
148148
149149
"""
150150
mu_phi = cls()
151-
params = get_text(elem, 'parameters')
152-
if params is not None:
153-
mu_phi.reference_uvw = [float(x) for x in params.split()]
151+
uvw = get_text(elem, 'reference_uvw')
152+
if uvw is not None:
153+
mu_phi.reference_uvw = [float(x) for x in uvw.split()]
154154
mu_phi.mu = Univariate.from_xml_element(elem.find('mu'))
155155
mu_phi.phi = Univariate.from_xml_element(elem.find('phi'))
156156
return mu_phi
@@ -242,9 +242,9 @@ def from_xml_element(cls, elem):
242242
243243
"""
244244
monodirectional = cls()
245-
params = get_text(elem, 'parameters')
246-
if params is not None:
247-
monodirectional.reference_uvw = [float(x) for x in params.split()]
245+
uvw = get_text(elem, 'reference_uvw')
246+
if uvw is not None:
247+
monodirectional.reference_uvw = [float(x) for x in uvw.split()]
248248
return monodirectional
249249

250250

‎tests/unit_tests/test_source.py‎

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1+
from math import pi
2+
13
import openmc
24
import openmc.stats
3-
from math import pi
5+
import numpy as np
6+
from pytest import approx
7+
48

59
def test_source():
610
space = openmc.stats.Point()
@@ -39,8 +43,8 @@ def test_spherical_uniform():
3943
phis,
4044
origin)
4145

42-
assert isinstance(sph_indep_function, openmc.stats.SphericalIndependent)
43-
46+
assert isinstance(sph_indep_function, openmc.stats.SphericalIndependent)
47+
4448

4549
def test_source_file():
4650
filename = 'source.h5'
@@ -59,3 +63,36 @@ def test_source_dlopen():
5963

6064
elem = src.to_xml_element()
6165
assert 'library' in elem.attrib
66+
67+
68+
def test_source_xml_roundtrip():
69+
# Create a source and write to an XML element
70+
space = openmc.stats.Box([-5., -5., -5.], [5., 5., 5.])
71+
energy = openmc.stats.Discrete([1.0e6, 2.0e6, 5.0e6], [0.3, 0.5, 0.2])
72+
angle = openmc.stats.PolarAzimuthal(
73+
mu=openmc.stats.Uniform(0., 1.),
74+
phi=openmc.stats.Uniform(0., 2*pi),
75+
reference_uvw=(0., 1., 0.)
76+
)
77+
src = openmc.Source(
78+
space=space, angle=angle, energy=energy,
79+
particle='photon', strength=100.0
80+
)
81+
elem = src.to_xml_element()
82+
83+
# Read from XML element and make sure data is preserved
84+
new_src = openmc.Source.from_xml_element(elem)
85+
assert isinstance(new_src.space, openmc.stats.Box)
86+
np.testing.assert_allclose(new_src.space.lower_left, src.space.lower_left)
87+
np.testing.assert_allclose(new_src.space.upper_right, src.space.upper_right)
88+
assert isinstance(new_src.energy, openmc.stats.Discrete)
89+
np.testing.assert_allclose(new_src.energy.x, src.energy.x)
90+
np.testing.assert_allclose(new_src.energy.p, src.energy.p)
91+
assert isinstance(new_src.angle, openmc.stats.PolarAzimuthal)
92+
assert new_src.angle.mu.a == src.angle.mu.a
93+
assert new_src.angle.mu.b == src.angle.mu.b
94+
assert new_src.angle.phi.a == src.angle.phi.a
95+
assert new_src.angle.phi.b == src.angle.phi.b
96+
np.testing.assert_allclose(new_src.angle.reference_uvw, src.angle.reference_uvw)
97+
assert new_src.particle == src.particle
98+
assert new_src.strength == approx(src.strength)

0 commit comments

Comments
 (0)