diff --git a/smr/build-assembly-long.py b/smr/build-assembly-long.py index cca7640..79734c3 100644 --- a/smr/build-assembly-long.py +++ b/smr/build-assembly-long.py @@ -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')) diff --git a/smr/build-assembly.py b/smr/build-assembly.py index 327f3bc..392b114 100644 --- a/smr/build-assembly.py +++ b/smr/build-assembly.py @@ -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') diff --git a/smr/build-core-fresh.py b/smr/build-core-fresh.py index 1272f3b..4265056 100644 --- a/smr/build-core-fresh.py +++ b/smr/build-core-fresh.py @@ -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')) diff --git a/smr/build-core-long.py b/smr/build-core-long.py new file mode 100644 index 0000000..9fba0e5 --- /dev/null +++ b/smr/build-core-long.py @@ -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') diff --git a/smr/build-core-short.py b/smr/build-core-short.py new file mode 100644 index 0000000..317a8a0 --- /dev/null +++ b/smr/build-core-short.py @@ -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') diff --git a/smr/smr/assemblies.py b/smr/smr/assemblies.py index 2fffb51..6f10aaa 100644 --- a/smr/smr/assemblies.py +++ b/smr/smr/assemblies.py @@ -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 diff --git a/smr/smr/core.py b/smr/smr/core.py index c150e06..68f3275 100644 --- a/smr/smr/core.py +++ b/smr/smr/core.py @@ -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'] diff --git a/smr/smr/pins.py b/smr/smr/pins.py index d804951..3966997 100644 --- a/smr/smr/pins.py +++ b/smr/smr/pins.py @@ -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', diff --git a/smr/smr/surfaces.py b/smr/smr/surfaces.py index 0adf0d8..d91ec92 100644 --- a/smr/smr/surfaces.py +++ b/smr/smr/surfaces.py @@ -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(