OpenMC/tests/regression_tests/microxs/test.py
Paul Romano ac941f79e0
Add RectangularPrism and HexagonalPrism composite surfaces (#2739)
Co-authored-by: Patrick Shriwise <pshriwise@gmail.com>
2023-11-01 09:13:40 -05:00

67 lines
2.2 KiB
Python

"""Test one-group cross section generation"""
from pathlib import Path
import numpy as np
import pytest
import openmc
from openmc.deplete import MicroXS, get_microxs_and_flux
from tests.regression_tests import config
CHAIN_FILE = Path(__file__).parents[2] / "chain_simple.xml"
@pytest.fixture(scope="module")
def model():
fuel = openmc.Material(name="uo2")
fuel.add_element("U", 1, percent_type="ao", enrichment=4.25)
fuel.add_element("O", 2)
fuel.set_density("g/cc", 10.4)
clad = openmc.Material(name="clad")
clad.add_element("Zr", 1)
clad.set_density("g/cc", 6)
water = openmc.Material(name="water")
water.add_element("O", 1)
water.add_element("H", 2)
water.set_density("g/cc", 1.0)
water.add_s_alpha_beta("c_H_in_H2O")
radii = [0.42, 0.45]
fuel.volume = np.pi * radii[0] ** 2
materials = openmc.Materials([fuel, clad, water])
pin_surfaces = [openmc.ZCylinder(r=r) for r in radii]
pin_univ = openmc.model.pin(pin_surfaces, materials)
bound_box = openmc.model.RectangularPrism(1.24, 1.24, boundary_type="reflective")
root_cell = openmc.Cell(fill=pin_univ, region=-bound_box)
geometry = openmc.Geometry([root_cell])
settings = openmc.Settings()
settings.particles = 1000
settings.inactive = 5
settings.batches = 10
return openmc.Model(geometry, materials, settings)
@pytest.mark.parametrize("domain_type", ["materials", "mesh"])
def test_from_model(model, domain_type):
if domain_type == 'materials':
domains = model.materials[:1]
elif domain_type == 'mesh':
mesh = openmc.RegularMesh()
mesh.lower_left = (-0.62, -0.62)
mesh.upper_right = (0.62, 0.62)
mesh.dimension = (3, 3)
domains = mesh
nuclides = ['U234', 'U235', 'U238', 'U236', 'O16', 'O17', 'I135', 'Xe135',
'Xe136', 'Cs135', 'Gd157', 'Gd156']
_, test_xs = get_microxs_and_flux(model, domains, nuclides, chain_file=CHAIN_FILE)
if config['update']:
test_xs[0].to_csv(f'test_reference_{domain_type}.csv')
ref_xs = MicroXS.from_csv(f'test_reference_{domain_type}.csv')
np.testing.assert_allclose(test_xs[0].data, ref_xs.data, rtol=1e-11)