mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-25 12:35:29 -04:00
97 lines
3.3 KiB
Python
97 lines
3.3 KiB
Python
import numpy as np
|
|
import openmc
|
|
import pytest
|
|
|
|
from tests.testing_harness import PyAPITestHarness
|
|
|
|
|
|
@pytest.fixture
|
|
def model():
|
|
model = openmc.model.Model()
|
|
|
|
fuel = openmc.Material(name='UO2')
|
|
fuel.set_density('g/cm3', 10.29769)
|
|
fuel.add_nuclide("U234", 4.4843e-6)
|
|
fuel.add_nuclide("U235", 5.5815e-4)
|
|
fuel.add_nuclide("U238", 2.2408e-2)
|
|
fuel.add_nuclide("O16", 4.5829e-2)
|
|
water = openmc.Material(name='light water')
|
|
water.add_nuclide('H1', 2.0)
|
|
water.add_nuclide('O16', 1.0)
|
|
water.set_density('g/cm3', 1.0)
|
|
water.add_s_alpha_beta('c_H_in_H2O')
|
|
model.materials.extend([fuel, water])
|
|
|
|
cyl = openmc.ZCylinder(r=0.4)
|
|
pin = openmc.model.pin([cyl], [fuel, water])
|
|
d = 1.2
|
|
lattice = openmc.RectLattice()
|
|
lattice.lower_left = (-d, -d)
|
|
lattice.pitch = (d, d)
|
|
lattice.outer = pin
|
|
lattice.universes = [
|
|
[pin, pin],
|
|
[pin, pin],
|
|
]
|
|
box = openmc.model.RectangularPrism(2*d, 2*d, boundary_type='reflective')
|
|
main_cell = openmc.Cell(fill=lattice, region=-box)
|
|
model.geometry = openmc.Geometry([main_cell])
|
|
|
|
model.settings.batches = 10
|
|
model.settings.inactive = 5
|
|
model.settings.particles = 1000
|
|
|
|
energy_filter = openmc.EnergyFilter([0.0, 0.253, 1.0e3, 1.0e6, 20.0e6])
|
|
distrib_filter = openmc.DistribcellFilter(pin.cells[1])
|
|
tally = openmc.Tally(name='distribcell tally')
|
|
tally.filters = [energy_filter, distrib_filter]
|
|
tally.scores = ['nu-fission', 'total']
|
|
tally.nuclides = ['U234', 'U235', 'U238']
|
|
model.tallies.append(tally)
|
|
|
|
return model
|
|
|
|
|
|
|
|
class TallyAggregationTestHarness(PyAPITestHarness):
|
|
def _get_results(self, hash_output=False):
|
|
"""Digest info in the statepoint and return as a string."""
|
|
|
|
# Read the statepoint file.
|
|
sp = openmc.StatePoint(self._sp_name)
|
|
|
|
# Extract the tally of interest
|
|
tally = sp.get_tally(name='distribcell tally')
|
|
|
|
# Perform tally aggregations across filter bins, nuclides and scores
|
|
outstr = ''
|
|
|
|
# This test occasionally fails in CI due to differences in the 8th
|
|
# significant digit. Lowering precision to 7 digits prevents failures
|
|
with np.printoptions(precision=7):
|
|
# Sum across all energy filter bins
|
|
tally_sum = tally.summation(filter_type=openmc.EnergyFilter)
|
|
outstr += ', '.join(map(str, tally_sum.mean))
|
|
outstr += ', '.join(map(str, tally_sum.std_dev))
|
|
|
|
# Sum across all distribcell filter bins
|
|
tally_sum = tally.summation(filter_type=openmc.DistribcellFilter)
|
|
outstr += ', '.join(map(str, tally_sum.mean))
|
|
outstr += ', '.join(map(str, tally_sum.std_dev))
|
|
|
|
# Sum across all nuclides
|
|
tally_sum = tally.summation(nuclides=['U234', 'U235', 'U238'])
|
|
outstr += ', '.join(map(str, tally_sum.mean))
|
|
outstr += ', '.join(map(str, tally_sum.std_dev))
|
|
|
|
# Sum across all scores
|
|
tally_sum = tally.summation(scores=['nu-fission', 'total'])
|
|
outstr += ', '.join(map(str, tally_sum.mean))
|
|
outstr += ', '.join(map(str, tally_sum.std_dev))
|
|
|
|
return outstr
|
|
|
|
|
|
def test_tally_aggregation(model):
|
|
harness = TallyAggregationTestHarness('statepoint.10.h5', model)
|
|
harness.main()
|