OpenMC/tests/regression_tests/weightwindows/generators/test.py
John Tramm 4cce6ee6c0
Fix for Weight Window Scaling Bug (#3511)
Co-authored-by: Paul Romano <paul.k.romano@gmail.com>
2025-07-29 10:15:40 +00:00

61 lines
1.9 KiB
Python

import os
import numpy as np
import openmc
import pytest
def test_ww_generator(run_in_tmpdir):
# create a simple spherical shield model
model = openmc.Model()
water = openmc.Material()
water.set_density('g/cc', 1.0)
water.add_nuclide('H1', 0.66)
water.add_nuclide('O16', 0.34)
s = openmc.Sphere(r=50, boundary_type='vacuum')
c = openmc.Cell(fill=water, region=-s)
model.geometry = openmc.Geometry([c])
model.settings.particles = 500
model.settings.batches = 5
model.settings.run_mode = 'fixed source'
model.settings.max_history_splits = 100
mesh = openmc.RegularMesh.from_domain(model.geometry.root_universe)
energy_bounds = np.linspace(0.0, 1e6, 70)
particle = 'neutron'
# include another tally to make sure user-specified tallies and those automaticaly
# created by weight window generators can coexist
tally = openmc.Tally()
ef = openmc.EnergyFilter(energy_bounds)
tally.filters = [ef]
tally.scores = ['flux']
model.tallies = [tally]
wwg = openmc.WeightWindowGenerator(mesh, energy_bounds, particle)
wwg.update_parameters = {'ratio': 5.0, 'threshold': 0.8, 'value': 'mean'}
model.settings.weight_window_generators = wwg
model.run()
# we test the effectiveness of the update method elsewhere, so
# just test that the generation happens successfully here
assert os.path.exists('weight_windows.h5')
wws_mean = openmc.WeightWindowsList.from_hdf5()
assert len(wws_mean) == 1
# check that generation using the relative error works too
wwg.update_parameters['value'] = 'rel_err'
model.run()
wws_rel_err = openmc.WeightWindowsList.from_hdf5()
assert len(wws_rel_err) == 1
# we should not get the same set of weight windows when switching to use of
# rel. err.
assert (wws_mean[0].lower_ww_bounds != wws_rel_err[0].lower_ww_bounds).any()