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

205 lines
6.9 KiB
Python

from tests.testing_harness import PyAPITestHarness
import openmc
import numpy as np
class HexLatticeOXTestHarness(PyAPITestHarness):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
materials = openmc.Materials()
fuel_mat = openmc.Material(material_id=1, name="UO2")
fuel_mat.set_density('sum')
fuel_mat.add_nuclide('U235', 0.87370e-03)
fuel_mat.add_nuclide('U238', 1.87440e-02)
fuel_mat.add_nuclide('O16', 3.92350e-02)
materials.append(fuel_mat)
coolant = openmc.Material(material_id=2, name="borated H2O")
coolant.set_density('sum')
coolant.add_nuclide('H1', 0.06694)
coolant.add_nuclide('O16', 0.03347)
coolant.add_nuclide('B10', 6.6262e-6)
coolant.add_nuclide('B11', 2.6839e-5)
materials.append(coolant)
absorber = openmc.Material(material_id=3, name="pellet B4C")
absorber.set_density('sum')
absorber.add_nuclide('C0', 0.01966)
absorber.add_nuclide('B11', 4.7344e-6)
absorber.add_nuclide('B10', 1.9177e-5)
materials.append(absorber)
zirc = openmc.Material(material_id=4, name="Zirc4")
zirc.set_density('sum')
zirc.add_element('Zr', 4.23e-2)
materials.append(zirc)
self._model.materials = materials
# Geometry #
pin_rad = 0.7 # cm
assembly_pitch = 1.235 # cm
hexagonal_pitch = 23.6 # cm
length = 10.0 # cm
# Fuel pin surfaces
cylfuelin = openmc.ZCylinder(surface_id=1, r=0.386)
cylfuelout = openmc.ZCylinder(surface_id=2, r=0.4582)
# Fuel cells
infcell = openmc.Cell(cell_id=1)
infcell.region = -cylfuelin
infcell.fill = fuel_mat
clfcell = openmc.Cell(cell_id=2)
clfcell.region = -cylfuelout & +cylfuelin
clfcell.fill = zirc
outfcell = openmc.Cell(cell_id=3)
outfcell.region = +cylfuelout
outfcell.fill = coolant
# Fuel universe
fuel_ch_univ = openmc.Universe(universe_id=1, name="Fuel channel",
cells=[infcell, clfcell, outfcell])
# Central tube surfaces
cyltubein = openmc.ZCylinder(surface_id=3, r=0.45)
cyltubeout = openmc.ZCylinder(surface_id=4, r=0.5177)
# Central tube cells
inctcell = openmc.Cell(cell_id=4)
inctcell.region = -cyltubein
inctcell.fill = coolant
clctcell = openmc.Cell(cell_id=5)
clctcell.region = -cyltubeout & +cyltubein
clctcell.fill = zirc
outctcell = openmc.Cell(cell_id=6)
outctcell.region = +cyltubeout
outctcell.fill = coolant
# Central tubel universe
tube_ch_univ = openmc.Universe(universe_id=2,
name="Central tube channel",
cells=[inctcell, clctcell, outctcell])
# Absorber tube surfaces
cylabsin = openmc.ZCylinder(surface_id=5, r=0.35)
cylabsout = openmc.ZCylinder(surface_id=6, r=0.41)
cylabsclin = openmc.ZCylinder(surface_id=7, r=0.545)
cylabsclout = openmc.ZCylinder(surface_id=8, r=0.6323)
# Absorber tube cells
inabscell = openmc.Cell(cell_id=7)
inabscell.region = -cylabsin
inabscell.fill = absorber
clabscell = openmc.Cell(cell_id=8)
clabscell.region = -cylabsout & +cylabsin
clabscell.fill = zirc
interabscell = openmc.Cell(cell_id=9)
interabscell.region = -cylabsclin & +cylabsout
interabscell.fill = coolant
clatcell = openmc.Cell(cell_id=10)
clatcell.region = -cylabsclout & +cylabsclin
clatcell.fill = zirc
outabscell = openmc.Cell(cell_id=11)
outabscell.region = +cylabsclout
outabscell.fill = coolant
# Absorber tube universe
abs_ch_univ = openmc.Universe(universe_id=3,
name="Central tube channel",
cells=[inabscell, clabscell,
interabscell,
clatcell, outabscell])
# Assembly surfaces
edge_length = (1./np.sqrt(3.0)) * hexagonal_pitch
fuel_bottom = openmc.ZPlane(surface_id=9, z0=0.0,
boundary_type='reflective')
fuel_top = openmc.ZPlane(surface_id=10, z0=length,
boundary_type='reflective')
# 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')
region = -hexprism & +fuel_bottom & -fuel_top
inf_mat = openmc.Cell(cell_id=12)
inf_mat.fill = coolant
inf_mat_univ = openmc.Universe(universe_id=4, cells=[inf_mat])
# Fill lattice by channels
nring = 11
universes = []
for ring in range(nring - 1, -1, -1):
arr = []
arr.append(fuel_ch_univ)
for cell in range(ring * 6 - 1):
arr.append(fuel_ch_univ)
universes.append(arr)
universes[-1] = [tube_ch_univ]
channels = [(7, 2), (7, 5), (7, 8), (7, 11), (7, 14), (7, 17), (5, 0),
(4, 3), (5, 5), (4, 9), (5, 10), (4, 15), (5, 15),
(4, 21), (5, 20), (4, 27), (5, 25), (4, 33)]
for i, j in channels:
universes[i][j] = abs_ch_univ
lattice = openmc.HexLattice(lattice_id=6, name="regular fuel assembly")
lattice.orientation = "x"
lattice.center = (0., 0., length/2.0)
lattice.pitch = (assembly_pitch, length/2.0)
lattice.universes = 2*[universes]
lattice.outer = inf_mat_univ
assembly_cell = openmc.Cell(cell_id=13,
name="container assembly cell")
assembly_cell.region = region
assembly_cell.fill = lattice
root_univ = openmc.Universe(universe_id=5, name="root universe",
cells=[assembly_cell])
self._model.geometry = openmc.Geometry(root_univ)
# Settings #
settings = openmc.Settings()
settings.run_mode = 'eigenvalue'
source = openmc.IndependentSource()
ll = [-edge_length, -edge_length, 0.0]
ur = [edge_length, edge_length, 10.0]
source.space = openmc.stats.Box(ll, ur)
source.strength = 1.0
settings.source = source
settings.batches = 10
settings.inactive = 5
settings.particles = 1000
settings.seed = 22
self._model.settings = settings
def test_lattice_hex_ox_surf():
harness = HexLatticeOXTestHarness('statepoint.10.h5', model=openmc.Model())
harness.main()