OpenMC/tests/unit_tests/test_deplete_coupled_operator.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

123 lines
3.6 KiB
Python
Raw Permalink Normal View History

"""Basic unit tests for openmc.deplete.CoupledOperator instantiation
"""
from pathlib import Path
import pytest
from openmc.deplete import CoupledOperator, Chain
import openmc
import numpy as np
CHAIN_PATH = Path(__file__).parents[1] / "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
clad.volume = np.pi * (radii[1]**2 - radii[0]**2)
water.volume = 1.24**2 - (np.pi * radii[1]**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 = 10
settings.batches = 50
return openmc.Model(geometry, materials, settings)
@pytest.fixture()
def model_with_volumes():
mat1 = openmc.Material()
mat1.add_element("Ag", 1, percent_type="ao")
mat1.set_density("g/cm3", 10.49)
mat1.depletable = True
mat1.volume = 102
mat2 = openmc.Material()
mat2.add_element("Ag", 1, percent_type="ao")
mat2.set_density("g/cm3", 10.49)
sph1 = openmc.Sphere(r=1.0)
sph2 = openmc.Sphere(r=2.0, x0=3)
sph3 = openmc.Sphere(r=5.0, boundary_type="vacuum")
cell1 = openmc.Cell(region=-sph1, fill=mat1)
cell1.volume = 4.19
cell2 = openmc.Cell(region=-sph2, fill=mat1)
cell2.volume = 33.51
cell3 = openmc.Cell(region=-sph3 & +sph1 & +sph2, fill=mat2)
cell3.volume = 485.9
geometry = openmc.Geometry([cell1, cell2, cell3])
return openmc.Model(geometry)
def test_operator_init(model):
"""The test uses a temporary dummy chain. This file will be removed
at the end of the test, and only contains a depletion_chain node."""
CoupledOperator(model, CHAIN_PATH)
def test_diff_volume_method_match_cell(model_with_volumes):
"""Tests the volumes assigned to the materials match the cell volumes"""
operator = openmc.deplete.CoupledOperator(
model=model_with_volumes,
diff_burnable_mats=True,
diff_volume_method='match cell',
chain_file=CHAIN_PATH
)
all_cells = list(operator.model.geometry.get_all_cells().values())
assert all_cells[0].fill.volume == 4.19
assert all_cells[1].fill.volume == 33.51
# mat2 is not depletable
assert all_cells[2].fill.volume is None
def test_diff_volume_method_divide_equally(model_with_volumes):
"""Tests the volumes assigned to the materials are divided equally"""
chain = Chain.from_xml(CHAIN_PATH)
operator = openmc.deplete.CoupledOperator(
model=model_with_volumes,
diff_burnable_mats=True,
diff_volume_method='divide equally',
chain_file=chain
)
all_cells = list(operator.model.geometry.get_all_cells().values())
assert all_cells[0].fill.volume == 51
assert all_cells[1].fill.volume == 51
# mat2 is not depletable
assert all_cells[2].fill.volume is None