mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-26 05:05:30 -04:00
205 lines
6.9 KiB
Python
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()
|