Compare commits

...
Sign in to create a new pull request.

11 commits

Author SHA1 Message Date
Paul Romano
500da41c7b Add script for building full length core model 2021-08-25 07:39:01 -05:00
Paul Romano
7ae3941917 Change enrichment pattern to flatten power distribution 2021-08-09 15:13:03 -05:00
Paul Romano
d4a532ba93 Fix volume assignment to clad/gap, use proper assemblies 2021-08-09 12:40:55 -05:00
Paul Romano
246164ab93 Fix volumes in fullcore short model 2021-07-26 22:36:48 -05:00
Paul Romano
b97fc0a57f Add script for building short full core, manually change lattice_pitch 2021-06-21 11:58:42 +07:00
Paul Romano
8b6d1540d0 Remove unnecessary import in surfaces.py 2021-06-21 11:04:47 +07:00
Paul Romano
b9ec9eddf2 Only whitespace changes 2021-06-17 09:15:10 +07:00
Paul Romano
b770e98dc1 Merge branch 'remove-bas' 2021-06-16 17:08:36 +07:00
Paul Romano
33f4ccab52 Remove assemblies with burnable absorber pins 2019-12-19 15:00:03 -06:00
Paul Romano
9b06d74c04 Make sure model build doesn't fail if rings == 1 2019-12-19 14:59:44 -06:00
Paul Romano
dfb861f0b2 Remove tallies, don't clone materials unless needed 2019-12-19 14:32:07 -06:00
9 changed files with 385 additions and 601 deletions

View file

@ -22,9 +22,7 @@ parser.add_argument('--multipole', action='store_true',
help='Use multipole cross sections')
parser.add_argument('--no-multipole', action='store_false',
help='Do not use multipole cross sections')
parser.add_argument('-t', '--tallies', choices=('cell', 'mat'), default='mat',
help='Whether to use distribmats or distribcells for tallies')
parser.add_argument('-a', '--axial', type=int, default=92,
parser.add_argument('-a', '--axial', type=int, default=100,
help='Number of axial subdivisions in fuel')
parser.add_argument('-d', '--depleted', action='store_true',
help='Whether UO2 compositions should represent depleted fuel')
@ -99,40 +97,30 @@ for halfspace in surfs['lat grid box inner']:
# Define geometry with a single assembly
geometry = openmc.Geometry(root_universe)
def clone(material):
"""Perform copy of material but share nuclide densities"""
shared_mat = copy.copy(material)
shared_mat.id = None
return shared_mat
#### "Differentiate" the geometry if using distribmats
h = active_fuel_length / args.axial
if args.tallies == 'mat':
# Count the number of instances for each cell and material
geometry.determine_paths(instances_only=True)
for cell in tqdm(geometry.get_all_material_cells().values(),
desc='Differentiating materials'):
if cell.fill in materials:
# Fill cell with list of "differentiated" materials
cell.fill = [clone(cell.fill) for i in range(cell.num_instances)]
fuel_mats = {}
# Determine volume of each fuel material
if 'UO2 Fuel' in cell.fill[0].name:
upper_right = cell.region.bounding_box[1]
if isclose(upper_right[0], rings[0]):
ri, ro = 0.0, rings[0]
elif isclose(upper_right[0], rings[1]):
ri, ro = rings[0], rings[1]
else:
ri, ro = rings[1], pellet_OR
for mat in cell.fill:
mat.volume = pi * (ro*ro - ri*ri) * h
for cell in tqdm(geometry.get_all_material_cells().values(),
desc='Assigning volume'):
if cell.fill in materials:
# Determine volume of each fuel material
if 'UO2 Fuel' in cell.fill.name:
upper_right = cell.region.bounding_box[1]
if isclose(upper_right[0], rings[0]):
ri, ro = 0.0, rings[0]
elif isclose(upper_right[0], rings[1]):
ri, ro = rings[0], rings[1]
else:
for mat in cell.fill:
mat.volume = 1.0
ri, ro = rings[1], pellet_OR
if ri not in fuel_mats:
cell.fill = cell.fill.clone()
cell.fill.volume = pi * (ro*ro - ri*ri) * h
fuel_mats[ri] = cell.fill
else:
cell.fill = fuel_mats[ri]
else:
cell.fill.volume = 1.0
#### Create OpenMC "materials.xml" file
print('Getting materials...')
@ -173,34 +161,3 @@ if args.multipole:
}
settings.export_to_xml(str(directory / 'settings.xml'))
#### Create OpenMC "tallies.xml" file
tallies = openmc.Tallies()
# Extract all fuel materials
materials = geometry.get_materials_by_name(name='Fuel', matching=False)
# If using distribcells, create distribcell tally needed for depletion
if args.tallies == 'cell':
# Extract all cells filled by a fuel material
fuel_cells = []
for cell in geometry.get_all_cells().values():
if cell.fill in materials:
tally = openmc.Tally(name='depletion tally')
tally.scores = ['(n,p)', '(n,a)', '(n,gamma)',
'fission', '(n,2n)', '(n,3n)', '(n,4n)']
tally.nuclides = cell.fill.get_nuclides()
tally.filters.append(openmc.DistribcellFilter([cell]))
tallies.append(tally)
# If using distribmats, create material tally needed for depletion
elif args.tallies == 'mat':
tally = openmc.Tally(name='depletion tally')
tally.scores = ['(n,p)', '(n,a)', '(n,gamma)',
'fission', '(n,2n)', '(n,3n)', '(n,4n)']
tally.nuclides = materials[0].get_nuclides()
tally.filters = [openmc.MaterialFilter(materials)]
tallies.append(tally)
tallies.export_to_xml(str(directory / 'tallies.xml'))

View file

@ -44,7 +44,10 @@ else:
directory.mkdir(exist_ok=True)
# Define geometry with a single assembly
ring_radii = np.sqrt(np.arange(1, args.rings)*pellet_OR**2 / args.rings)
if args.rings > 1:
ring_radii = np.sqrt(np.arange(1, args.rings)*pellet_OR**2 / args.rings)
else:
ring_radii = None
assembly = assembly_universes(ring_radii, args.axial, args.depleted)
lattice_sides = openmc.model.get_rectangular_prism(lattice_pitch, lattice_pitch,
boundary_type='reflective')

View file

@ -4,6 +4,7 @@ import os
import shutil
import copy
import argparse
from math import pi
from pathlib import Path
import numpy as np
@ -11,26 +12,18 @@ import numpy as np
import openmc
from smr.materials import materials
from smr.plots import core_plots
from smr.surfaces import lattice_pitch, bottom_fuel_stack, top_active_core, pellet_OR
from smr.surfaces import lattice_pitch, bottom_fuel_stack, top_active_core, \
pellet_OR, active_fuel_length
from smr.core import core_geometry
from smr import inlet_temperature
def clone(mat):
"""Make a shallow copy of a material (sharing compositions)."""
mat_copy = copy.copy(mat)
mat_copy.id = None
return mat_copy
# Define command-line options
parser = argparse.ArgumentParser()
parser.add_argument('--multipole', action='store_true',
help='Use multipole cross sections')
parser.add_argument('--no-multipole', action='store_false',
help='Do not use multipole cross sections')
parser.add_argument('-t', '--tallies', choices=('cell', 'mat'), default='cell',
help='Whether to use distribmats or distribcells for tallies')
parser.add_argument('-r', '--rings', type=int, default=10,
help='Number of annular regions in fuel')
parser.add_argument('-a', '--axial', type=int, default=196,
@ -51,21 +44,30 @@ else:
directory = args.output_dir
directory.mkdir(exist_ok=True)
ring_radii = np.sqrt(np.arange(1, args.rings)*pellet_OR**2 / args.rings)
if args.rings > 1:
ring_radii = np.sqrt(np.arange(1, args.rings)*pellet_OR**2 / args.rings)
else:
ring_radii = None
geometry = core_geometry(ring_radii, args.axial, args.depleted)
#### "Differentiate" the geometry if using distribmats
if args.tallies == 'mat':
# Count the number of instances for each cell and material
geometry.determine_paths(instances_only=True)
h = active_fuel_length / args.axial
fuel_mats = {}
# Extract all cells filled by a fuel material
fuel_mats = {m for m in materials if 'UO2 Fuel' in m.name}
fuel_volume = pi * pellet_OR**2 * h / args.rings
for cell in geometry.get_all_cells().values():
if cell.fill in materials:
# Determine volume of each fuel material
if 'UO2 Fuel' in cell.fill.name:
r_o = cell.region.bounding_box[1][0]
if r_o not in fuel_mats:
cell.fill = cell.fill.clone()
cell.fill.volume = fuel_volume
fuel_mats[r_o] = cell.fill
else:
cell.fill = fuel_mats[r_o]
else:
cell.fill.volume = 1.0
for cell in geometry.get_all_cells().values():
if cell.fill in fuel_mats:
# Fill cell with list of "differentiated" materials
cell.fill = [clone(cell.fill) for i in range(cell.num_instances)]
#### Create OpenMC "materials.xml" file
all_materials = geometry.get_all_materials()
@ -104,38 +106,3 @@ if args.multipole:
settings.export_to_xml(str(directory / 'settings.xml'))
#### Create OpenMC "plots.xml" file
plots = core_plots()
plots.export_to_xml(str(directory / 'plots.xml'))
#### Create OpenMC "tallies.xml" file
tallies = openmc.Tallies()
# Extract all fuel materials
materials = geometry.get_materials_by_name(name='Fuel', matching=False)
# If using distribcells, create distribcell tally needed for depletion
if args.tallies == 'cell':
# Extract all cells filled by a fuel material
fuel_cells = []
for cell in geometry.get_all_cells().values():
if cell.fill in materials:
tally = openmc.Tally(name='depletion tally')
tally.scores = ['(n,p)', '(n,a)', '(n,gamma)',
'fission', '(n,2n)', '(n,3n)', '(n,4n)']
tally.nuclides = cell.fill.get_nuclides()
tally.filters.append(openmc.DistribcellFilter([cell]))
tallies.append(tally)
# If using distribmats, create material tally needed for depletion
elif args.tallies == 'mat':
tally = openmc.Tally(name='depletion tally')
tally.scores = ['(n,p)', '(n,a)', '(n,gamma)',
'fission', '(n,2n)', '(n,3n)', '(n,4n)']
tally.nuclides = materials[0].get_nuclides()
tally.filters = [openmc.MaterialFilter(materials)]
tallies.append(tally)
tallies.export_to_xml(str(directory / 'tallies.xml'))

116
smr/build-core-long.py Normal file
View file

@ -0,0 +1,116 @@
#!/usr/bin/env python3
import argparse
from math import pi, isclose
from pathlib import Path
import openmc
from smr.materials import materials
from smr.surfaces import lattice_pitch, bottom_fuel_stack, top_active_core, \
pellet_OR, pin_pitch, clad_IR, clad_OR, active_fuel_length
from smr.core import core_geometry
from smr import inlet_temperature
# Define command-line options
parser = argparse.ArgumentParser()
parser.add_argument('--multipole', action='store_true',
help='Use multipole cross sections')
parser.add_argument('--no-multipole', action='store_false',
help='Do not use multipole cross sections')
parser.add_argument('-a', '--axial', type=int, default=100,
help='Number of axial subdivisions in fuel')
parser.add_argument('-d', '--depleted', action='store_true',
help='Whether UO2 compositions should represent depleted fuel')
parser.add_argument('-o', '--output-dir', type=Path, default=None)
parser.set_defaults(multipole=True)
args = parser.parse_args()
# Make directory for inputs
if args.output_dir is None:
if args.depleted:
directory = Path('core-long-depleted')
else:
directory = Path('core-long-fresh')
else:
directory = args.output_dir
directory.mkdir(exist_ok=True)
ring_radii = [0.1*pin_pitch, 0.2*pin_pitch]
geometry = core_geometry(ring_radii, args.axial, args.depleted)
h = active_fuel_length / args.axial
fuel_mats = {}
for cell in geometry.get_all_cells().values():
if cell.fill in materials:
# Determine volume of each fuel material
name = cell.fill.name
if 'UO2 Fuel' in name:
upper_right = cell.region.bounding_box[1][0]
if isclose(upper_right, ring_radii[0]):
ri, ro = 0.0, ring_radii[0]
elif isclose(upper_right, ring_radii[1]):
ri, ro = ring_radii[0], ring_radii[1]
else:
ri, ro = ring_radii[1], pellet_OR
if (name, ri) not in fuel_mats:
cell.fill = cell.fill.clone()
cell.fill.volume = pi * (ro*ro - ri*ri) * h
fuel_mats[name, ri] = cell.fill
else:
cell.fill = fuel_mats[name, ri]
elif name == 'Helium':
cell.fill.volume = pi * (clad_IR**2 - pellet_OR**2) * h
elif name == 'M5':
# Clad is not subdivided
cell.fill.volume = pi * (clad_OR**2 - clad_IR**2) * active_fuel_length
else:
cell.fill.volume = 1.0
#### Create OpenMC "materials.xml" file
all_materials = geometry.get_all_materials()
materials = openmc.Materials(all_materials.values())
materials.export_to_xml(str(directory / 'materials.xml'))
#### Create OpenMC "geometry.xml" file
geometry.export_to_xml(str(directory / 'geometry.xml'))
#### Create OpenMC "settings.xml" file
# Construct uniform initial source distribution over fissionable zones
lower_left = [-7.*lattice_pitch/2., -7.*lattice_pitch/2., bottom_fuel_stack]
upper_right = [+7.*lattice_pitch/2., +7.*lattice_pitch/2., top_active_core]
source = openmc.source.Source(space=openmc.stats.Box(lower_left, upper_right))
source.space.only_fissionable = True
settings = openmc.Settings()
settings.batches = 200
settings.inactive = 100
settings.particles = 20_000_000
settings.output = {'tallies': False, 'summary': False}
settings.source = source
settings.sourcepoint_write = False
settings.temperature = {
'default': inlet_temperature,
'method': 'interpolation',
'range': (300.0, 1500.0),
}
if args.multipole:
settings.temperature['multipole'] = True
settings.temperature['tolerance'] = 1000
settings.export_to_xml(str(directory / 'settings.xml'))
# Check assembly power distribution
core_lattice = geometry.get_cells_by_fill_name('Main core')[0].fill
mesh = openmc.RegularMesh.from_rect_lattice(core_lattice)
assembly_power = openmc.Tally()
assembly_power.filters = [openmc.MeshFilter(mesh)]
assembly_power.scores = ['nu-fission']
tallies = openmc.Tallies([assembly_power])
tallies.export_to_xml(directory / 'tallies.xml')

136
smr/build-core-short.py Normal file
View file

@ -0,0 +1,136 @@
#!/usr/bin/env python3
import os
import shutil
import copy
import argparse
from math import pi, isclose
from pathlib import Path
import numpy as np
import openmc
from smr.materials import materials
from smr.plots import core_plots
from smr.surfaces import lattice_pitch, bottom_fuel_stack, top_active_core, \
pellet_OR, surfs, pin_pitch, clad_IR, clad_OR
import smr.surfaces
import smr.pins
from smr.core import core_geometry
from smr import inlet_temperature
# Define command-line options
parser = argparse.ArgumentParser()
parser.add_argument('--multipole', action='store_true',
help='Use multipole cross sections')
parser.add_argument('--no-multipole', action='store_false',
help='Do not use multipole cross sections')
parser.add_argument('-a', '--axial', type=int, default=3,
help='Number of axial subdivisions in fuel')
parser.add_argument('-d', '--depleted', action='store_true',
help='Whether UO2 compositions should represent depleted fuel')
parser.add_argument('-o', '--output-dir', type=Path, default=None)
parser.set_defaults(multipole=True)
args = parser.parse_args()
# Make directory for inputs
if args.output_dir is None:
if args.depleted:
directory = Path('core-short-depleted')
else:
directory = Path('core-short-fresh')
else:
directory = args.output_dir
directory.mkdir(exist_ok=True)
# Modify fuel length
length = 3. * pin_pitch
smr.surfaces.active_fuel_length = length
smr.pins.top_active_core = length
surfs['top active core'].z0 = length
# Change top and bottom of model to contain only fuel
surfs['lower bound'].z0 = 0.0
surfs['lower bound'].boundary_type = 'reflective'
surfs['upper bound'].z0 = length
surfs['upper bound'].boundary_type = 'reflective'
ring_radii = [0.1*pin_pitch, 0.2*pin_pitch]
geometry = core_geometry(ring_radii, args.axial, args.depleted)
h = length / args.axial
fuel_mats = {}
for cell in geometry.get_all_cells().values():
if cell.fill in materials:
# Determine volume of each fuel material
name = cell.fill.name
if 'UO2 Fuel' in name:
upper_right = cell.region.bounding_box[1][0]
if isclose(upper_right, ring_radii[0]):
ri, ro = 0.0, ring_radii[0]
elif isclose(upper_right, ring_radii[1]):
ri, ro = ring_radii[0], ring_radii[1]
else:
ri, ro = ring_radii[1], pellet_OR
if (name, ri) not in fuel_mats:
cell.fill = cell.fill.clone()
cell.fill.volume = pi * (ro*ro - ri*ri) * h
fuel_mats[name, ri] = cell.fill
else:
cell.fill = fuel_mats[name, ri]
elif name == 'Helium':
cell.fill.volume = pi * (clad_IR**2 - pellet_OR**2) * h
elif name == 'M5':
# Clad is not subdivided
cell.fill.volume = pi * (clad_OR**2 - clad_IR**2) * length
else:
cell.fill.volume = 1.0
#### Create OpenMC "materials.xml" file
all_materials = geometry.get_all_materials()
materials = openmc.Materials(all_materials.values())
materials.export_to_xml(str(directory / 'materials.xml'))
#### Create OpenMC "geometry.xml" file
geometry.export_to_xml(str(directory / 'geometry.xml'))
#### Create OpenMC "settings.xml" file
# Construct uniform initial source distribution over fissionable zones
lower_left = [-7.*lattice_pitch/2., -7.*lattice_pitch/2., bottom_fuel_stack]
upper_right = [+7.*lattice_pitch/2., +7.*lattice_pitch/2., top_active_core]
source = openmc.source.Source(space=openmc.stats.Box(lower_left, upper_right))
source.space.only_fissionable = True
settings = openmc.Settings()
settings.batches = 200
settings.inactive = 100
settings.particles = 10000
settings.output = {'tallies': False, 'summary': False}
settings.source = source
settings.sourcepoint_write = False
settings.temperature = {
'default': inlet_temperature,
'method': 'interpolation',
'range': (300.0, 1500.0),
}
if args.multipole:
settings.temperature['multipole'] = True
settings.temperature['tolerance'] = 1000
settings.export_to_xml(str(directory / 'settings.xml'))
# Check assembly power distribution
core_lattice = geometry.get_cells_by_fill_name('Main core')[0].fill
mesh = openmc.RegularMesh.from_rect_lattice(core_lattice)
assembly_power = openmc.Tally()
assembly_power.filters = [openmc.MeshFilter(mesh)]
assembly_power.scores = ['nu-fission']
tallies = openmc.Tallies([assembly_power])
tallies.export_to_xml(directory / 'tallies.xml')

View file

@ -147,7 +147,6 @@ def assembly_universes(ring_radii, num_axial, depleted):
# commonly needed universes
gtu = pins['GT empty stack']
gti = pins['GT empty instr']
bas = pins['BA stack']
ins = pins['IT stack']
crA = pins['GT CR bank A']
crB = pins['GT CR bank B']
@ -216,7 +215,7 @@ def assembly_universes(ring_radii, num_axial, depleted):
gtu, gtu, gtu, gtu, gtu,
gtu, gtu,
gtu, gtu, gtu ]
univs['Assembly (2.4%) no BAs' + comment] = \
univs['Assembly (2.4%)' + comment] = \
make_assembly('Assembly (2.4%) no BAs' + comment, universes)
# WITH CONTROL ROD D BANK
@ -232,33 +231,6 @@ def assembly_universes(ring_radii, num_axial, depleted):
univs['Assembly (2.4%) CR D' + comment] = \
make_assembly('Assembly (2.4%) CR D' + comment, universes)
# WITH 12 BURNABLE ABSORBERS
universes = np.empty((17,17), dtype=openmc.Universe)
universes[:,:] = pins['Fuel (2.4%) stack']
universes[nonfuel_y, nonfuel_x] = [ bas, gtu, bas,
bas, bas,
bas, gtu, gtu, gtu, bas,
gtu, gtu, cent, gtu, gtu,
bas, gtu, gtu, gtu, bas,
bas, bas,
bas, gtu, bas ]
univs['Assembly (2.4%) 12BA' + comment] = \
make_assembly('Assembly (2.4%) 12BA' + comment, universes)
# WITH 16 BURNABLE ABSORBERS
universes = np.empty((17,17), dtype=openmc.Universe)
universes[:,:] = pins['Fuel (2.4%) stack']
universes[nonfuel_y, nonfuel_x] = [ bas, bas, bas,
bas, bas,
bas, gtu, gtu, gtu, bas,
bas, gtu, cent, gtu, bas,
bas, gtu, gtu, gtu, bas,
bas, bas,
bas, bas, bas ]
univs['Assembly (2.4%) 16BA' + comment] = \
make_assembly('Assembly (2.4%) 16BA' + comment, universes)
#### 3.1% ENRICHED ASSEMBLIES
for cent, comment in [(gti, ''), (ins, ' instr')]:
@ -289,134 +261,5 @@ def assembly_universes(ring_radii, num_axial, depleted):
univs['Assembly (3.1%) CR SA' + comment] = \
make_assembly('Assembly (3.1%) CR SA' + comment, universes)
# WITH 20 BURNABLE ABSORBERS
universes = np.empty((17,17), dtype=openmc.Universe)
universes[:,:] = pins['Fuel (3.1%) stack']
universes[nonfuel_y, nonfuel_x] = [ bas, bas, bas,
bas, bas,
bas, bas, gtu, bas, bas,
bas, gtu, cent, gtu, bas,
bas, bas, gtu, bas, bas,
bas, bas,
bas, bas, bas ]
univs['Assembly (3.1%) 20BA' + comment] = \
make_assembly('Assembly (3.1%) 20BA' + comment, universes)
# WITH 16 BURNABLE ABSORBERS
universes = np.empty((17,17), dtype=openmc.Universe)
universes[:,:] = pins['Fuel (3.1%) stack']
universes[nonfuel_y, nonfuel_x] = [ bas, bas, bas,
bas, bas,
bas, gtu, gtu, gtu, bas,
bas, gtu, cent, gtu, bas,
bas, gtu, gtu, gtu, bas,
bas, bas,
bas, bas, bas ]
univs['Assembly (3.1%) 16BA' + comment] = \
make_assembly('Assembly (3.1%) 16BA' + comment, universes)
# WITH 15 BURNABLE ABSORBERS NW
universes = np.empty((17,17), dtype=openmc.Universe)
universes[:,:] = pins['Fuel (3.1%) stack']
universes[nonfuel_y, nonfuel_x] = [ gtu, gtu, gtu,
gtu, gtu,
gtu, bas, bas, bas, bas,
gtu, bas, cent, bas, bas,
gtu, bas, bas, bas, bas,
gtu, bas,
bas, bas, bas ]
univs['Assembly (3.1%) 15BANW' + comment] = \
make_assembly('Assembly (3.1%) 15BANW' + comment, universes)
# WITH 15 BURNABLE ABSORBERS NE
universes = np.empty((17,17), dtype=openmc.Universe)
universes[:,:] = pins['Fuel (3.1%) stack']
universes[nonfuel_y, nonfuel_x] = [ gtu, gtu, gtu,
gtu, gtu,
bas, bas, bas, bas, gtu,
bas, bas, cent, bas, gtu,
bas, bas, bas, bas, gtu,
bas, gtu,
bas, bas, bas ]
univs['Assembly (3.1%) 15BANE' + comment] = \
make_assembly('Assembly (3.1%) 15BANE' + comment, universes)
# WITH 15 BURNABLE ABSORBERS SW
universes = np.empty((17,17), dtype=openmc.Universe)
universes[:,:] = pins['Fuel (3.1%) stack']
universes[nonfuel_y, nonfuel_x] = [ bas, bas, bas,
gtu, bas,
gtu, bas, bas, bas, bas,
gtu, bas, cent, bas, bas,
gtu, bas, bas, bas, bas,
gtu, gtu,
gtu, gtu, gtu ]
univs['Assembly (3.1%) 15BASW' + comment] = \
make_assembly('Assembly (3.1%) 15BASW' + comment, universes)
# WITH 15 BURNABLE ABSORBERS SE
universes = np.empty((17,17), dtype=openmc.Universe)
universes[:,:] = pins['Fuel (3.1%) stack']
universes[nonfuel_y, nonfuel_x] = [ bas, bas, bas,
bas, gtu,
bas, bas, bas, bas, gtu,
bas, bas, cent, bas, gtu,
bas, bas, bas, bas, gtu,
gtu, gtu,
gtu, gtu, gtu ]
univs['Assembly (3.1%) 15BASE' + comment] = \
make_assembly('Assembly (3.1%) 15BASE' + comment, universes)
# WITH 6 BURNABLE ABSORBERS N
universes = np.empty((17,17), dtype=openmc.Universe)
universes[:,:] = pins['Fuel (3.1%) stack']
universes[nonfuel_y, nonfuel_x] = [ gtu, gtu, gtu,
gtu, gtu,
gtu, gtu, gtu, gtu, gtu,
gtu, gtu, cent, gtu, gtu,
bas, gtu, gtu, gtu, bas,
bas, bas,
bas, gtu, bas ]
univs['Assembly (3.1%) 6BAN' + comment] = \
make_assembly('Assembly (3.1%) 6BAN' + comment, universes)
# WITH 6 BURNABLE ABSORBERS S
universes = np.empty((17,17), dtype=openmc.Universe)
universes[:,:] = pins['Fuel (3.1%) stack']
universes[nonfuel_y, nonfuel_x] = [ bas, gtu, bas,
bas, bas,
bas, gtu, gtu, gtu, bas,
gtu, gtu, cent, gtu, gtu,
gtu, gtu, gtu, gtu, gtu,
gtu, gtu,
gtu, gtu, gtu ]
univs['Assembly (3.1%) 6BAS' + comment] = \
make_assembly('Assembly (3.1%) 6BAS' + comment, universes)
# WITH 6 BURNABLE ABSORBERS W
universes = np.empty((17,17), dtype=openmc.Universe)
universes[:,:] = pins['Fuel (3.1%) stack']
universes[nonfuel_y, nonfuel_x] = [ gtu, gtu, bas,
gtu, bas,
gtu, gtu, gtu, gtu, bas,
gtu, gtu, cent, gtu, gtu,
gtu, gtu, gtu, gtu, bas,
gtu, bas,
gtu, gtu, bas ]
univs['Assembly (3.1%) 6BAW' + comment] = \
make_assembly('Assembly (3.1%) 6BAW' + comment, universes)
# WITH 6 BURNABLE ABSORBERS E
universes = np.empty((17,17), dtype=openmc.Universe)
universes[:,:] = pins['Fuel (3.1%) stack']
universes[nonfuel_y, nonfuel_x] = [ bas, gtu, gtu,
bas, gtu,
bas, gtu, gtu, gtu, gtu,
gtu, gtu, cent, gtu, gtu,
bas, gtu, gtu, gtu, gtu,
bas, gtu,
bas, gtu, gtu ]
univs['Assembly (3.1%) 6BAE' + comment] = \
make_assembly('Assembly (3.1%) 6BAE' + comment, universes)
return univs

View file

@ -46,67 +46,67 @@ def core_geometry(ring_radii, num_axial, depleted):
universes[1, 1] = reflector['1,1']
universes[1, 2] = reflector['NW']
universes[1, 3] = assembly['Assembly (3.1%) instr']
universes[1, 4] = assembly['Assembly (2.4%) CR D']
universes[1, 5] = assembly['Assembly (3.1%) instr']
universes[1, 3] = assembly['Assembly (3.1%)']
universes[1, 4] = assembly['Assembly (3.1%)']
universes[1, 5] = assembly['Assembly (3.1%)']
universes[1, 6] = reflector['NE']
universes[1, 7] = reflector['1,7']
universes[2, 0] = reflector['2,0']
universes[2, 1] = reflector['NW']
universes[2, 2] = assembly['Assembly (3.1%) instr']
universes[2, 3] = assembly['Assembly (2.4%) CR D']
universes[2, 4] = assembly['Assembly (3.1%) 16BA']
universes[2, 5] = assembly['Assembly (2.4%) CR D']
universes[2, 6] = assembly['Assembly (3.1%) instr']
universes[2, 2] = assembly['Assembly (3.1%)']
universes[2, 3] = assembly['Assembly (2.4%)']
universes[2, 4] = assembly['Assembly (1.6%)']
universes[2, 5] = assembly['Assembly (2.4%)']
universes[2, 6] = assembly['Assembly (3.1%)']
universes[2, 7] = reflector['NE']
universes[2, 8] = reflector['2,8']
universes[3, 0] = reflector['3,0']
universes[3, 1] = assembly['Assembly (3.1%) instr']
universes[3, 2] = assembly['Assembly (2.4%) CR D']
universes[3, 3] = assembly['Assembly (3.1%) 16BA']
universes[3, 4] = assembly['Assembly (2.4%) CR D']
universes[3, 5] = assembly['Assembly (3.1%) 16BA']
universes[3, 6] = assembly['Assembly (2.4%) CR D']
universes[3, 7] = assembly['Assembly (3.1%) instr']
universes[3, 1] = assembly['Assembly (3.1%)']
universes[3, 2] = assembly['Assembly (2.4%)']
universes[3, 3] = assembly['Assembly (1.6%)']
universes[3, 4] = assembly['Assembly (1.6%)']
universes[3, 5] = assembly['Assembly (1.6%)']
universes[3, 6] = assembly['Assembly (2.4%)']
universes[3, 7] = assembly['Assembly (3.1%)']
universes[3, 8] = reflector['3,8']
universes[4, 0] = reflector['4,0']
universes[4, 1] = assembly['Assembly (2.4%) CR D']
universes[4, 2] = assembly['Assembly (3.1%) 16BA']
universes[4, 3] = assembly['Assembly (2.4%) CR D']
universes[4, 4] = assembly['Assembly (1.6%) instr']
universes[4, 5] = assembly['Assembly (2.4%) CR D']
universes[4, 6] = assembly['Assembly (3.1%) 16BA']
universes[4, 7] = assembly['Assembly (2.4%) CR D']
universes[4, 1] = assembly['Assembly (3.1%)']
universes[4, 2] = assembly['Assembly (1.6%)']
universes[4, 3] = assembly['Assembly (1.6%)']
universes[4, 4] = assembly['Assembly (2.4%)']
universes[4, 5] = assembly['Assembly (1.6%)']
universes[4, 6] = assembly['Assembly (1.6%)']
universes[4, 7] = assembly['Assembly (3.1%)']
universes[4, 8] = reflector['4,8']
universes[5, 0] = reflector['5,0']
universes[5, 1] = assembly['Assembly (3.1%) instr']
universes[5, 2] = assembly['Assembly (2.4%) CR D']
universes[5, 3] = assembly['Assembly (3.1%) 16BA']
universes[5, 4] = assembly['Assembly (2.4%) CR D']
universes[5, 5] = assembly['Assembly (3.1%) 16BA']
universes[5, 6] = assembly['Assembly (2.4%) CR D']
universes[5, 7] = assembly['Assembly (3.1%) instr']
universes[5, 1] = assembly['Assembly (3.1%)']
universes[5, 2] = assembly['Assembly (2.4%)']
universes[5, 3] = assembly['Assembly (1.6%)']
universes[5, 4] = assembly['Assembly (1.6%)']
universes[5, 5] = assembly['Assembly (1.6%)']
universes[5, 6] = assembly['Assembly (2.4%)']
universes[5, 7] = assembly['Assembly (3.1%)']
universes[5, 8] = reflector['5,8']
universes[6, 0] = reflector['6,0']
universes[6, 1] = reflector['SW']
universes[6, 2] = assembly['Assembly (3.1%) instr']
universes[6, 3] = assembly['Assembly (2.4%) CR D']
universes[6, 4] = assembly['Assembly (3.1%) 16BA']
universes[6, 5] = assembly['Assembly (2.4%) CR D']
universes[6, 6] = assembly['Assembly (3.1%) instr']
universes[6, 2] = assembly['Assembly (3.1%)']
universes[6, 3] = assembly['Assembly (2.4%)']
universes[6, 4] = assembly['Assembly (1.6%)']
universes[6, 5] = assembly['Assembly (2.4%)']
universes[6, 6] = assembly['Assembly (3.1%)']
universes[6, 7] = reflector['SE']
universes[6, 8] = reflector['6,8']
universes[7, 1] = reflector['7,1']
universes[7, 2] = reflector['SW']
universes[7, 3] = assembly['Assembly (3.1%) instr']
universes[7, 4] = assembly['Assembly (2.4%) CR D']
universes[7, 5] = assembly['Assembly (3.1%) instr']
universes[7, 3] = assembly['Assembly (3.1%)']
universes[7, 4] = assembly['Assembly (3.1%)']
universes[7, 5] = assembly['Assembly (3.1%)']
universes[7, 6] = reflector['SE']
universes[7, 7] = reflector['7,7']

View file

@ -473,199 +473,6 @@ def pin_universes(ring_radii=None, num_axial=196, depleted=False):
univs['GT CR bank {} dummy bare'.format(b)]])
#### BURNABLE ABSORBER PIN CELLS
univs['BA'] = make_pin(
'BA',
surfaces=[surfs['BA IR 1'],
surfs['BA IR 2'],
surfs['BA IR 3'],
surfs['BA IR 4'],
surfs['BA IR 5'],
surfs['BA IR 6'],
surfs['BA IR 7'],
surfs['BA IR 8']],
materials=[mats['Air'],
mats['SS'],
mats['Air'],
mats['BSG'],
mats['Air'],
mats['SS'],
mats['H2O'],
mats['Zr'],
mats['H2O']])
univs['BA grid (bottom)'] = make_pin(
'BA grid (bottom)',
surfaces=[surfs['BA IR 1'],
surfs['BA IR 2'],
surfs['BA IR 3'],
surfs['BA IR 4'],
surfs['BA IR 5'],
surfs['BA IR 6'],
surfs['BA IR 7'],
surfs['BA IR 8']],
materials=[mats['Air'],
mats['SS'],
mats['Air'],
mats['BSG'],
mats['Air'],
mats['SS'],
mats['H2O'],
mats['Zr'],
mats['H2O']],
grid='bottom')
univs['BA grid (intermediate)'] = make_pin(
'BA grid (intermediate)',
surfaces=[surfs['BA IR 1'],
surfs['BA IR 2'],
surfs['BA IR 3'],
surfs['BA IR 4'],
surfs['BA IR 5'],
surfs['BA IR 6'],
surfs['BA IR 7'],
surfs['BA IR 8']],
materials=[mats['Air'],
mats['SS'],
mats['Air'],
mats['BSG'],
mats['Air'],
mats['SS'],
mats['H2O'],
mats['Zr'],
mats['H2O']],
grid='intermediate')
univs['BA dashpot'] = make_pin(
'BA dashpot',
surfaces=[surfs['BA IR 1'],
surfs['BA IR 2'],
surfs['BA IR 3'],
surfs['BA IR 4'],
surfs['BA IR 5'],
surfs['BA IR 6'],
surfs['GT dashpot IR'],
surfs['GT dashpot OR']],
materials=[mats['Air'],
mats['SS'],
mats['Air'],
mats['BSG'],
mats['Air'],
mats['SS'],
mats['H2O'],
mats['Zr'],
mats['H2O']])
univs['BA dashpot grid (bottom)'] = make_pin(
'BA dashpot grid (bottom)',
surfaces=[surfs['BA IR 1'],
surfs['BA IR 2'],
surfs['BA IR 3'],
surfs['BA IR 4'],
surfs['BA IR 5'],
surfs['BA IR 6'],
surfs['GT dashpot IR'],
surfs['GT dashpot OR']],
materials=[mats['Air'],
mats['SS'],
mats['Air'],
mats['BSG'],
mats['Air'],
mats['SS'],
mats['H2O'],
mats['Zr'],
mats['H2O']],
grid='bottom')
univs['BA dashpot grid (intermediate)'] = make_pin(
'BA dashpot grid (intermediate)',
surfaces=[surfs['BA IR 1'],
surfs['BA IR 2'],
surfs['BA IR 3'],
surfs['BA IR 4'],
surfs['BA IR 5'],
surfs['BA IR 6'],
surfs['GT dashpot IR'],
surfs['GT dashpot OR']],
materials=[mats['Air'],
mats['SS'],
mats['Air'],
mats['BSG'],
mats['Air'],
mats['SS'],
mats['H2O'],
mats['Zr'],
mats['H2O']],
grid='intermediate')
univs['BA blank SS'] = make_pin(
'BA blank SS',
surfaces=[surfs['BA IR 6'],
surfs['BA IR 7'],
surfs['BA IR 8']],
materials=[mats['SS'],
mats['H2O'],
mats['Zr'],
mats['H2O']])
univs['BA blank SS bare'] = make_pin(
'BA blank SS bare',
surfaces=[surfs['BA IR 6']],
materials=[mats['SS'],
mats['H2O']])
stack_surfs_BA = [
surfs['bot support plate'],
surfs['top support plate'],
surfs['top lower nozzle'],
surfs['top lower thimble'],
surfs['grid1bot'],
surfs['BA bot'],
surfs['grid1top'],
surfs['dashpot top'],
surfs['grid2bot'],
surfs['grid2top'],
surfs['grid3bot'],
surfs['grid3top'],
surfs['grid4bot'],
surfs['grid4top'],
surfs['top active core'],
surfs['grid5bot'],
surfs['grid5top'],
surfs['top pin plenum'],
surfs['top FR'],
surfs['bot upper nozzle'],
surfs['top upper nozzle']]
# Stack all axial pieces of control rod tubes together for each bank
univs['BA stack'] = make_stack(
'BA stack', stack_surfs_BA,
universes=[univs['water pin'],
univs['water pin'],
univs['water pin'],
univs['GTd empty'],
univs['GTd empty'],
univs['GTd empty grid (bottom)'],
univs['BA dashpot grid (bottom)'],
univs['BA dashpot'],
univs['BA'],
univs['BA grid (intermediate)'],
univs['BA'],
univs['BA grid (intermediate)'],
univs['BA'],
univs['BA grid (intermediate)'],
univs['BA'],
univs['BA blank SS'],
univs['BA blank SS'],
univs['BA blank SS'],
univs['BA blank SS'],
univs['BA blank SS'],
univs['BA blank SS bare'],
univs['water pin']])
# Fuel pin cells
univs['SS pin'] = make_pin(
'SS pin',

View file

@ -13,7 +13,6 @@ NuScale DC application, chapter 4: https://www.nrc.gov/docs/ML1701/ML17013A274.p
"""
import copy
from math import tan, pi
import numpy as np
@ -70,7 +69,8 @@ spacer_height = 1.750*INCHES # ML17013A274, Figure 4.2-7
# assembly parameters
assembly_length = 95.89*INCHES # ML17013A274, Table 4.1-2
pin_pitch = 0.496*INCHES # ML17013A274, Table 4.1-2
lattice_pitch = 8.466*INCHES # ML17013A274, Table 4.1-2
#lattice_pitch = 8.466*INCHES # ML17013A274, Table 4.1-2
lattice_pitch = 17*pin_pitch
grid_strap_side = 21.47270
top_nozzle_height = 3.551*INCHES # ML17013A274, Figure 4.2-2
top_nozzle_width = 8.406*INCHES # ML17013A274, Figure 4.2-2
@ -128,74 +128,47 @@ neutron_shield_NEtop_SWbot = tan(-pi/6)
surfs = {}
surfs['pellet OR'] = openmc.ZCylinder(
r=pellet_OR, name='Pellet OR')
surfs['plenum spring OR'] = openmc.ZCylinder(
r=plenum_spring_OR, name='FR Plenum Spring OR')
surfs['clad IR'] = openmc.ZCylinder(
r=clad_IR, name='Clad IR')
surfs['clad OR'] = openmc.ZCylinder(
r=clad_OR, name='Clad OR')
surfs['GT IR'] = openmc.ZCylinder(
r=guide_tube_IR, name='GT IR (above dashpot)')
surfs['GT OR'] = openmc.ZCylinder(
r=guide_tube_OR, name='GT OR (above dashpot)')
surfs['GT dashpot IR'] = openmc.ZCylinder(
r=guide_tube_dash_IR, name='GT IR (at dashpot)')
surfs['GT dashpot OR'] = openmc.ZCylinder(
r=guide_tube_dash_OR, name='GT OR (at dashpot)')
surfs['CP OR'] = openmc.ZCylinder(
r=boron_carbide_OR, name='Control Poison OR')
surfs['CR IR'] = openmc.ZCylinder(
r=control_rod_IR, name='CR Clad IR')
surfs['CR OR'] = openmc.ZCylinder(
r=control_rod_OR, name='CR Clad OR')
surfs['BA IR 1'] = openmc.ZCylinder(
r=burn_abs_r1, name='BA IR 1')
surfs['BA IR 2'] = openmc.ZCylinder(
r=burn_abs_r2, name='BA IR 2')
surfs['BA IR 3'] = openmc.ZCylinder(
r=burn_abs_r3, name='BA IR 3')
surfs['BA IR 4'] = openmc.ZCylinder(
r=burn_abs_r4, name='BA IR 4')
surfs['BA IR 5'] = openmc.ZCylinder(
r=burn_abs_r5, name='BA IR 5')
surfs['BA IR 6'] = openmc.ZCylinder(
r=burn_abs_r6, name='BA IR 6')
surfs['BA IR 7'] = openmc.ZCylinder(
r=burn_abs_r7, name='BA IR 7')
surfs['BA IR 8'] = openmc.ZCylinder(
r=burn_abs_r8, name='BA IR 8')
surfs['pellet OR'] = openmc.ZCylinder(r=pellet_OR, name='Pellet OR')
surfs['plenum spring OR'] = openmc.ZCylinder(r=plenum_spring_OR, name='FR Plenum Spring OR')
surfs['clad IR'] = openmc.ZCylinder(r=clad_IR, name='Clad IR')
surfs['clad OR'] = openmc.ZCylinder(r=clad_OR, name='Clad OR')
surfs['GT IR'] = openmc.ZCylinder(r=guide_tube_IR, name='GT IR (above dashpot)')
surfs['GT OR'] = openmc.ZCylinder(r=guide_tube_OR, name='GT OR (above dashpot)')
surfs['GT dashpot IR'] = openmc.ZCylinder(r=guide_tube_dash_IR, name='GT IR (at dashpot)')
surfs['GT dashpot OR'] = openmc.ZCylinder(r=guide_tube_dash_OR, name='GT OR (at dashpot)')
surfs['CP OR'] = openmc.ZCylinder(r=boron_carbide_OR, name='Control Poison OR')
surfs['CR IR'] = openmc.ZCylinder(r=control_rod_IR, name='CR Clad IR')
surfs['CR OR'] = openmc.ZCylinder(r=control_rod_OR, name='CR Clad OR')
surfs['BA IR 1'] = openmc.ZCylinder(r=burn_abs_r1, name='BA IR 1')
surfs['BA IR 2'] = openmc.ZCylinder(r=burn_abs_r2, name='BA IR 2')
surfs['BA IR 3'] = openmc.ZCylinder(r=burn_abs_r3, name='BA IR 3')
surfs['BA IR 4'] = openmc.ZCylinder(r=burn_abs_r4, name='BA IR 4')
surfs['BA IR 5'] = openmc.ZCylinder(r=burn_abs_r5, name='BA IR 5')
surfs['BA IR 6'] = openmc.ZCylinder(r=burn_abs_r6, name='BA IR 6')
surfs['BA IR 7'] = openmc.ZCylinder(r=burn_abs_r7, name='BA IR 7')
surfs['BA IR 8'] = openmc.ZCylinder(r=burn_abs_r8, name='BA IR 8')
surfs['IT IR'] = surfs['BA IR 5']
surfs['IT OR'] = surfs['BA IR 6']
# Rectangular prisms for grid spacers
surfs['rod grid box'] = \
openmc.rectangular_prism(rod_grid_side, rod_grid_side)
surfs['rod grid box'] = openmc.rectangular_prism(rod_grid_side, rod_grid_side)
# Rectangular prisms for lattice grid sleeves
surfs['lat grid box inner'] = \
openmc.rectangular_prism(17.*pin_pitch, 17.*pin_pitch)
surfs['lat grid box outer'] = \
openmc.rectangular_prism(grid_strap_side, grid_strap_side)
surfs['lat grid box inner'] = openmc.rectangular_prism(17.*pin_pitch, 17.*pin_pitch)
surfs['lat grid box outer'] = openmc.rectangular_prism(grid_strap_side, grid_strap_side)
surfs['bot support plate'] = openmc.ZPlane(
z0=bottom_support_plate, name='bot support plate')
surfs['top support plate'] = openmc.ZPlane(
z0=top_support_plate, name='top support plate')
surfs['bot support plate'] = openmc.ZPlane(z0=bottom_support_plate, name='bot support plate')
surfs['top support plate'] = openmc.ZPlane(z0=top_support_plate, name='top support plate')
surfs['bottom FR'] = openmc.ZPlane(z0=bottom_fuel_rod, name='bottom FR')
surfs['top lower nozzle'] = surfs['bottom FR']
surfs['bot lower nozzle'] = surfs['top support plate']
# axial surfaces
surfs['bot active core'] = openmc.ZPlane(
z0=bottom_fuel_stack, name='bot active core')
surfs['top active core'] = openmc.ZPlane(
z0=top_active_core, name='top active core')
surfs['bot active core'] = openmc.ZPlane(z0=bottom_fuel_stack, name='bot active core')
surfs['top active core'] = openmc.ZPlane(z0=top_active_core, name='top active core')
surfs['top lower thimble'] = surfs['bot active core']
surfs['BA bot'] = openmc.ZPlane(
z0=bot_burn_abs, name='bottom of BA')
surfs['BA bot'] = openmc.ZPlane(z0=bot_burn_abs, name='bottom of BA')
for i, (bottom, top) in enumerate(zip(grid_bottom, grid_top)):
# Create plane for bottom of spacer grid
@ -208,17 +181,12 @@ for i, (bottom, top) in enumerate(zip(grid_bottom, grid_top)):
name = 'top of grid {}'.format(i + 1)
surfs[key] = openmc.ZPlane(z0=top, name=name)
surfs['dashpot top'] = openmc.ZPlane(
z0=step0H, name='top dashpot')
surfs['dashpot top'] = openmc.ZPlane(z0=step0H, name='top dashpot')
surfs['top pin plenum'] = openmc.ZPlane(
z0=top_plenum, name='top pin plenum')
surfs['top FR'] = openmc.ZPlane(
z0=top_fuel_rod, name='top FR')
surfs['bot upper nozzle'] = openmc.ZPlane(
z0=bottom_upper_nozzle, name='bottom upper nozzle')
surfs['top upper nozzle'] = openmc.ZPlane(
z0=top_upper_nozzle, name='top upper nozzle')
surfs['top pin plenum'] = openmc.ZPlane(z0=top_plenum, name='top pin plenum')
surfs['top FR'] = openmc.ZPlane(z0=top_fuel_rod, name='top FR')
surfs['bot upper nozzle'] = openmc.ZPlane(z0=bottom_upper_nozzle, name='bottom upper nozzle')
surfs['top upper nozzle'] = openmc.ZPlane(z0=top_upper_nozzle, name='top upper nozzle')
# Control rod bank surfaces for ARO configuration
for bank in ['A','B','C','D','E',]:
@ -227,30 +195,19 @@ for bank in ['A','B','C','D','E',]:
surfs['bankS{} bot'.format(bank)] = openmc.ZPlane(
z0=step248H, name='CR bankS{} bottom'.format(bank))
surfs['bankA top'] = openmc.ZPlane(
z0=bank_top, name='CR bank A top')
surfs['bankA bot'] = openmc.ZPlane(
z0=bank_bot, name='CR bank A bottom')
surfs['bankB top'] = openmc.ZPlane(
z0=bank_top, name='CR bank B top')
surfs['bankB bot'] = openmc.ZPlane(
z0=bank_bot, name='CR bank B bottom')
surfs['bankC top'] = openmc.ZPlane(
z0=bank_top, name='CR bank C top')
surfs['bankC bot'] = openmc.ZPlane(
z0=bank_bot, name='CR bank C bottom')
surfs['bankD top'] = openmc.ZPlane(
z0=bank_top, name='CR bank D top')
surfs['bankD bot'] = openmc.ZPlane(
z0=bank_bot, name='CR bank D bottom')
surfs['bankA top'] = openmc.ZPlane(z0=bank_top, name='CR bank A top')
surfs['bankA bot'] = openmc.ZPlane(z0=bank_bot, name='CR bank A bottom')
surfs['bankB top'] = openmc.ZPlane(z0=bank_top, name='CR bank B top')
surfs['bankB bot'] = openmc.ZPlane(z0=bank_bot, name='CR bank B bottom')
surfs['bankC top'] = openmc.ZPlane(z0=bank_top, name='CR bank C top')
surfs['bankC bot'] = openmc.ZPlane(z0=bank_bot, name='CR bank C bottom')
surfs['bankD top'] = openmc.ZPlane(z0=bank_top, name='CR bank D top')
surfs['bankD bot'] = openmc.ZPlane(z0=bank_bot, name='CR bank D bottom')
# outer radial surfaces
surfs['core barrel IR'] = openmc.ZCylinder(
r=core_barrel_IR, name='core barrel IR')
surfs['core barrel OR'] = openmc.ZCylinder(
r=core_barrel_OR, name='core barrel OR')
surfs['neutron shield OR'] = openmc.ZCylinder(
r=neutron_shield_OR, name='neutron shield OR')
surfs['core barrel IR'] = openmc.ZCylinder(r=core_barrel_IR, name='core barrel IR')
surfs['core barrel OR'] = openmc.ZCylinder(r=core_barrel_OR, name='core barrel OR')
surfs['neutron shield OR'] = openmc.ZCylinder(r=neutron_shield_OR, name='neutron shield OR')
# neutron shield planes
surfs['neutron shield NWbot SEtop'] = openmc.Plane(
@ -267,10 +224,8 @@ surfs['neutron shield NEtop SWbot'] = openmc.Plane(
name='neutron shield NEtop SWbot')
# outer radial surfaces
surfs['RPV IR'] = openmc.ZCylinder(
r=rpv_IR, name='RPV IR')
surfs['RPV OR'] = openmc.ZCylinder(
r=rpv_OR, name='RPV OR', boundary_type='vacuum')
surfs['RPV IR'] = openmc.ZCylinder(r=rpv_IR, name='RPV IR')
surfs['RPV OR'] = openmc.ZCylinder(r=rpv_OR, name='RPV OR', boundary_type='vacuum')
# outer axial surfaces
surfs['upper bound'] = openmc.ZPlane(