OpenMC/tests/regression_tests/lattice_hex_coincident/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

152 lines
5.3 KiB
Python

from math import sqrt
import openmc
from tests.testing_harness import PyAPITestHarness
class HexLatticeCoincidentTestHarness(PyAPITestHarness):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
materials = openmc.Materials()
fuel_mat = openmc.Material()
fuel_mat.add_nuclide('U235', 4.9817E-03, 'ao')
materials.append(fuel_mat)
matrix = openmc.Material()
matrix.set_density('atom/b-cm', 1.7742E-02)
matrix.add_element('C', 1.0, 'ao')
matrix.add_s_alpha_beta('c_Graphite')
materials.append(matrix)
lead = openmc.Material(name="Lead")
lead.set_density('g/cm3', 10.32)
lead.add_nuclide('Pb204', 0.014, 'ao')
lead.add_nuclide('Pb206', 0.241, 'ao')
lead.add_nuclide('Pb207', 0.221, 'ao')
lead.add_nuclide('Pb208', 0.524, 'ao')
materials.append(lead)
coolant = openmc.Material()
coolant.set_density('atom/b-cm', 5.4464E-04)
coolant.add_nuclide('He4', 1.0, 'ao')
materials.append(coolant)
zirc = openmc.Material(name="Zirc4")
zirc.add_nuclide('Zr90', 2.217E-02, 'ao')
zirc.add_nuclide('Zr91', 4.781E-03, 'ao')
zirc.add_nuclide('Zr92', 7.228E-03, 'ao')
zirc.add_nuclide('Zr94', 7.169E-03, 'ao')
zirc.add_nuclide('Zr96', 1.131E-03, 'ao')
materials.append(zirc)
self._model.materials = materials
### Geometry ###
pin_rad = 0.7 # cm
assembly_pitch = 1.4 # cm
cool_rad = 0.293 # cm
zirc_clad_thickness = 0.057 # cm
zirc_ir = cool_rad # cm
zirc_or = cool_rad + zirc_clad_thickness # cm
lead_thickness = 0.002 # cm
lead_ir = zirc_or # cm
lead_or = zirc_or + lead_thickness # cm
cyl = openmc.ZCylinder(x0=0., y0=0., r=pin_rad)
fuel_btm = openmc.ZPlane(z0=0.0, boundary_type = 'reflective')
fuel_top = openmc.ZPlane(z0=10.0, boundary_type = 'reflective')
region = -cyl & +fuel_btm & -fuel_top
container = openmc.Cell(region=region)
container.fill = fuel_mat
fuel_outside = openmc.Cell()
fuel_outside.region = +cyl
fuel_outside.fill = matrix
fuel_ch_univ = openmc.Universe(cells=[container, fuel_outside])
# Coolant Channel
cool_outer = openmc.ZCylinder(x0=0.0, y0=0.0, r=cool_rad)
zirc_outer = openmc.ZCylinder(x0=0.0, y0=0.0, r=zirc_or)
lead_outer = openmc.ZCylinder(x0=0.0, y0=0.0, r=lead_or)
coolant_ch = openmc.Cell(name="coolant")
coolant_ch.region = -cool_outer & +fuel_btm & -fuel_top
coolant_ch.fill = coolant
zirc_shell = openmc.Cell(name="zirconium_shell")
zirc_shell.region = +cool_outer & -zirc_outer & +fuel_btm & -fuel_top
zirc_shell.fill = zirc
lead_shell = openmc.Cell(name="lead_shell")
lead_shell.region = +zirc_outer & -lead_outer & +fuel_btm & -fuel_top
lead_shell.fill = lead
coolant_matrix = openmc.Cell(name="matrix coolant surround")
coolant_matrix.region = +lead_outer & +fuel_btm & -fuel_top
coolant_matrix.fill = matrix
coolant_channel = [coolant_ch, zirc_shell, lead_shell, coolant_matrix]
coolant_univ = openmc.Universe(name="coolant universe")
coolant_univ.add_cells(coolant_channel)
half_width = assembly_pitch # cm
edge_length = (2./sqrt(3.0)) * half_width
inf_mat = openmc.Cell()
inf_mat.fill = matrix
inf_mat_univ = openmc.Universe(cells=[inf_mat,])
# a hex surface for the core to go inside of
hexprism = openmc.model.HexagonalPrism(edge_length=edge_length,
origin=(0.0, 0.0),
boundary_type = 'reflective',
orientation='x')
pincell_only_lattice = openmc.HexLattice(name="regular fuel assembly")
pincell_only_lattice.center = (0., 0.)
pincell_only_lattice.pitch = (assembly_pitch,)
pincell_only_lattice.outer = inf_mat_univ
# setup hex rings
ring0 = [fuel_ch_univ]
ring1 = [coolant_univ] * 6
pincell_only_lattice.universes = [ring1, ring0]
pincell_only_cell = openmc.Cell(name="container cell")
pincell_only_cell.region = -hexprism & +fuel_btm & -fuel_top
pincell_only_cell.fill = pincell_only_lattice
root_univ = openmc.Universe(name="root universe", cells=[pincell_only_cell,])
self._model.geometry = openmc.Geometry(root_univ)
### Settings ###
settings = openmc.Settings()
settings.run_mode = 'eigenvalue'
source = openmc.IndependentSource()
corner_dist = sqrt(2) * pin_rad
ll = [-corner_dist, -corner_dist, 0.0]
ur = [corner_dist, corner_dist, 10.0]
source.space = openmc.stats.Box(ll, ur)
source.strength = 1.0
settings.source = source
settings.output = {'summary' : False}
settings.batches = 5
settings.inactive = 2
settings.particles = 1000
settings.seed = 22
self._model.settings = settings
def test_lattice_hex_coincident_surf():
harness = HexLatticeCoincidentTestHarness('statepoint.5.h5',
model=openmc.Model())
harness.main()