mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-27 05:35:49 -04:00
152 lines
5.3 KiB
Python
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()
|