Skip to content

Commit e5348d3

Browse files
Avoid divide-by-zero in from_multigroup_flux when flux is zero (#3624)
Co-authored-by: Paul Romano <paul.k.romano@gmail.com>
1 parent 5c2bfe7 commit e5348d3

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

openmc/deplete/microxs.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -356,13 +356,17 @@ def from_multigroup_flux(
356356
reactions = chain.reactions
357357
mts = [REACTION_MT[name] for name in reactions]
358358

359-
# Normalize multigroup flux
360-
multigroup_flux = np.array(multigroup_flux)
361-
multigroup_flux /= multigroup_flux.sum()
362-
363359
# Create 3D array for microscopic cross sections
364360
microxs_arr = np.zeros((len(nuclides), len(mts), 1))
365361

362+
# If flux is zero, safely return zero cross sections
363+
multigroup_flux = np.array(multigroup_flux)
364+
if (flux_sum := multigroup_flux.sum()) == 0.0:
365+
return cls(microxs_arr, nuclides, reactions)
366+
367+
# Normalize multigroup flux
368+
multigroup_flux /= flux_sum
369+
366370
# Compute microscopic cross sections within a temporary session
367371
with openmc.lib.TemporarySession(**init_kwargs):
368372
# For each nuclide and reaction, compute the flux-averaged xs

tests/unit_tests/test_deplete_microxs.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,16 @@ def test_multigroup_flux_same():
111111
energies=energies, multigroup_flux=flux, chain_file=chain_file)
112112

113113
assert microxs_4g.data == pytest.approx(microxs_2g.data)
114+
115+
116+
def test_microxs_zero_flux():
117+
chain_file = Path(__file__).parents[1] / 'chain_simple.xml'
118+
119+
# Generate micro XS based on zero flux
120+
energies = [0., 6.25e-1, 5.53e3, 8.21e5, 2.e7]
121+
flux = [0.0, 0.0, 0.0, 0.0]
122+
microxs = MicroXS.from_multigroup_flux(
123+
energies=energies, multigroup_flux=flux, chain_file=chain_file)
124+
125+
# All microscopic cross sections should be zero
126+
assert np.all(microxs.data == 0.0)

0 commit comments

Comments
 (0)