Don't break up fuel region over multiple universes in z direction

This commit is contained in:
Paul Romano 2017-11-14 14:54:14 -06:00
parent 7e735bec85
commit 46e379e169
4 changed files with 51363 additions and 4439 deletions

View file

@ -30,40 +30,16 @@ if distrib not in ['cell', 'mat']:
#### "Differentiate" the geometry if using distribmats
if distrib == 'mat':
# Count the number of instances for each cell and material
geometry.determine_paths()
geometry.determine_paths(instances_only=True)
# Extract all cells filled by a fuel material
fuel_cells = geometry.get_cells_by_name(
name='(1.6%) (0)', case_sensitive=True)
fuel_cells.extend(geometry.get_cells_by_name(
name='(1.6%) grid (bottom) (0)', case_sensitive=True))
fuel_cells.extend(geometry.get_cells_by_name(
name='(1.6%) grid (intermediate) (0)', case_sensitive=True))
fuel_cells.extend(geometry.get_cells_by_name(
name='(2.4%) (0)', case_sensitive=True))
fuel_cells.extend(geometry.get_cells_by_name(
name='(2.4%) grid (bottom) (0)', case_sensitive=True))
fuel_cells.extend(geometry.get_cells_by_name(
name='(2.4%) grid (intermediate) (0)', case_sensitive=True))
fuel_cells.extend(geometry.get_cells_by_name(
name='(3.1%) (0)', case_sensitive=True))
fuel_cells.extend(geometry.get_cells_by_name(
name='(3.1%) grid (bottom) (0)', case_sensitive=True))
fuel_cells.extend(geometry.get_cells_by_name(
name='(3.1%) grid (intermediate) (0)', case_sensitive=True))
# Assign distribmats for each material
for cell in fuel_cells:
new_materials = []
for i in range(cell.num_instances):
new_materials.append(cell.fill.clone())
# Fill cell with list of "differentiated" materials
cell.fill = new_materials
fuel_mats = {m for m in materials if 'UO2 Fuel' in m.name}
for cell in geometry.get_all_cells().values():
if cell.fill in fuel_mats:
# Fill cell with list of "differentiated" materials
cell.fill = [cell.fill.clone() for i in range(cell.num_instances)]
#### Create OpenMC "materials.xml" file
all_materials = geometry.get_all_materials()
@ -109,34 +85,16 @@ materials = geometry.get_materials_by_name(name='Fuel', matching=False)
# If using distribcells, create distribcell tally needed for depletion
if distrib == 'cell':
# Extract all cells filled by a fuel material
fuel_cells = geometry.get_cells_by_name(
name='(1.6%) (0)', case_sensitive=True)
fuel_cells.extend(geometry.get_cells_by_name(
name='(1.6%) grid (bottom) (0)', case_sensitive=True))
fuel_cells.extend(geometry.get_cells_by_name(
name='(1.6%) grid (intermediate) (0)', case_sensitive=True))
fuel_cells.extend(geometry.get_cells_by_name(
name='(2.4%) (0)', case_sensitive=True))
fuel_cells.extend(geometry.get_cells_by_name(
name='(2.4%) grid (bottom) (0)', case_sensitive=True))
fuel_cells.extend(geometry.get_cells_by_name(
name='(2.4%) grid (intermediate) (0)', case_sensitive=True))
fuel_cells.extend(geometry.get_cells_by_name(
name='(3.1%) (0)', case_sensitive=True))
fuel_cells.extend(geometry.get_cells_by_name(
name='(3.1%) grid (bottom) (0)', case_sensitive=True))
fuel_cells.extend(geometry.get_cells_by_name(
name='(3.1%) grid (intermediate) (0)', case_sensitive=True))
for cell in fuel_cells:
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.id]))
tallies.append(tally)
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 distrib == 'mat':
@ -144,8 +102,7 @@ elif distrib == 'mat':
tally.scores = ['(n,p)', '(n,a)', '(n,gamma)',
'fission', '(n,2n)', '(n,3n)', '(n,4n)']
tally.nuclides = materials[0].get_nuclides()
material_ids = [material.id for material in materials]
tally.filters.append(openmc.MaterialFilter(material_ids))
tally.filters = [openmc.MaterialFilter(materials)]
tallies.append(tally)
tallies.export_to_xml()
@ -155,7 +112,7 @@ tallies.export_to_xml()
if not os.path.exists('fresh'):
os.makedirs('fresh')
shutil.move('materials.xml', 'fresh/materials.xml')
shutil.move('geometry.xml', 'fresh/geometry.xml')
shutil.move('settings.xml', 'fresh/settings.xml')

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -2,32 +2,12 @@
import numpy as np
import openmc
from openmc.model import subdivide
from .materials import mats
from .surfaces import surfs, n_rings, bottom_fuel_rod, top_active_core
def subdivide(surfaces):
"""Create regions separate by a series of surfaces.
Parameters
----------
surfaces : iterable of openmc.Surface
Surfaces separating regions
Returns
-------
list of openmc.Region
Regions formed by the given surfaces
"""
regions = [-surfaces[0]]
for s0, s1 in zip(surfaces[:-1], surfaces[1:]):
regions.append(+s0 & -s1)
regions.append(+surfaces[-1])
return regions
def make_pin(name, surfaces, materials, grid=None):
"""Construct a pin cell Universes with radially layered Cells.
@ -110,22 +90,51 @@ def make_stack(name, surfaces, universes):
universe = openmc.Universe(name=name)
# Create cell for region below lowest ZPlane
cell_name = name + ' (0)'
cell = openmc.Cell(name=cell_name, fill=universes[0], region=-surfaces[0])
universe.add_cell(cell)
# Create cells between two ZPlanes
for i, (univ, surf) in enumerate(zip(universes[1:-1], surfaces[:-1])):
cell_name = name + ' ({})'.format(i+1)
cell = openmc.Cell(name=cell_name, fill=univ,
region=+surf & -surfaces[i+1])
# Create cells for each axial segment
for i, (univ, region) in enumerate(zip(universes, subdivide(surfaces))):
cell_name = '{} ({})'.format(name, i)
cell = openmc.Cell(name=cell_name, fill=univ, region=region)
universe.add_cell(cell)
# Create cell for region above highest ZPlane
cell_name = name + ' (last)'
cell = openmc.Cell(name=cell_name, fill=universes[-1],
region=+surfaces[-1])
return universe
def make_pin_stack(name, zsurfaces, universes, boundary, pin_universe):
"""Construct a Universe of axially stacked universes with a single inner fuel
pin universe.
Parameters
----------
name: str
The string name to assign to the Universe and each of its Cells
zsurfaces: Iterable of openmc.ZPlane
A collection of axial surfaces between which pin cells are
filled to comprise an axially stacked pin cell
universes: Iterable of openmc.Universe
The Universes used within each axial layer. This collection
must be one unit longer than the collection of surfaces.
boundary : openmc.Surface
Boundary between the fuel pin itself and everything outside (gap, clad,
moderator)
pin_universe : openmc.Universe
Universe containing (subdivided) fuel pin
Returns
-------
universe: openmc.Universe
The pin cell Universe
"""
universe = openmc.Universe(name=name)
for i, (univ, r) in enumerate(zip(universes, subdivide(zsurfaces))):
cell_name = '{} (o{})'.format(name, i)
cell = openmc.Cell(name=cell_name, fill=univ, region=r & +boundary)
universe.add_cell(cell)
cell_name = '{} (i)'.format(name)
cell = openmc.Cell(name=cell_name, fill=pin_universe, region=-boundary)
universe.add_cell(cell)
return universe
@ -686,45 +695,80 @@ for axial_region in subdivide(axial_surfs):
))
univs['Subdivided Fuel (1.6%)'] = openmc.Universe(cells=uo2_cells)
fuel_surfaces = [surfs['pellet OR'], surfs['clad IR'], surfs['clad OR']]
fuel_mats = [univs['Subdivided Fuel (1.6%)'], mats['He'], mats['Zr'], mats['H2O']]
outside_pin_surfaces = [surfs['clad IR'], surfs['clad OR']]
outside_pin_mats = [mats['He'], mats['Zr'], mats['H2O']]
univs['Fuel (1.6%)'] = make_pin(
'Fuel (1.6%)',
surfaces=fuel_surfaces,
materials=fuel_mats)
univs['Outside pin'] = make_pin(
'Outside pin',
surfaces=outside_pin_surfaces,
materials=outside_pin_mats)
univs['Fuel (1.6%) grid (bottom)'] = make_pin(
'Fuel (1.6%) grid (bottom)',
surfaces=fuel_surfaces,
materials=fuel_mats,
univs['Outside pin grid (bottom)'] = make_pin(
'Outside pin grid (bottom)',
surfaces=outside_pin_surfaces,
materials=outside_pin_mats,
grid='bottom')
univs['Fuel (1.6%) grid (intermediate)'] = make_pin(
'Fuel (1.6%) grid (intermediate)',
surfaces=fuel_surfaces,
materials=fuel_mats,
univs['Outside pin grid (intermediate)'] = make_pin(
'Outside pin grid (intermediate)',
surfaces=outside_pin_surfaces,
materials=outside_pin_mats,
grid='intermediate')
# Stack all axial pieces of 1.6% enriched fuel pin cell
within_fuel_surfs = [
surfs['grid1bot'],
surfs['grid1top'],
surfs['dashpot top'],
surfs['grid2bot'],
surfs['grid2top'],
surfs['grid3bot'],
surfs['grid3top'],
surfs['grid4bot'],
surfs['grid4top']
]
univs['Fuel pin (1.6%) stack'] = make_pin_stack(
'Fuel pin (1.6%) stack',
zsurfaces=within_fuel_surfs,
universes=[
univs['Outside pin'],
univs['Outside pin grid (bottom)'],
univs['Outside pin'],
univs['Outside pin'],
univs['Outside pin grid (intermediate)'],
univs['Outside pin'],
univs['Outside pin grid (intermediate)'],
univs['Outside pin'],
univs['Outside pin grid (intermediate)'],
univs['Outside pin']
],
boundary=surfs['pellet OR'],
pin_universe=univs['Subdivided Fuel (1.6%)'])
fuel_stack_surfs = [
surfs['bot support plate'],
surfs['top support plate'],
surfs['top lower nozzle'],
surfs['top lower thimble'],
surfs['top active core'],
surfs['grid5bot'],
surfs['grid5top'],
surfs['top pin plenum'],
surfs['top FR'],
surfs['bot upper nozzle'],
surfs['top upper nozzle']
]
univs['Fuel (1.6%) stack'] = make_stack(
'Fuel (1.6%) stack',
surfaces=stack_surfs,
surfaces=fuel_stack_surfs,
universes=[univs['water pin'],
univs['SS pin'],
univs['SS pin'],
univs['end plug'],
univs['Fuel (1.6%)'],
univs['Fuel (1.6%) grid (bottom)'],
univs['Fuel (1.6%)'],
univs['Fuel (1.6%)'],
univs['Fuel (1.6%) grid (intermediate)'],
univs['Fuel (1.6%)'],
univs['Fuel (1.6%) grid (intermediate)'],
univs['Fuel (1.6%)'],
univs['Fuel (1.6%) grid (intermediate)'],
univs['Fuel (1.6%)'],
univs['Fuel pin (1.6%) stack'],
univs['pin plenum'],
univs['pin plenum grid (intermediate)'],
univs['pin plenum'],
@ -746,44 +790,34 @@ for axial_region in subdivide(axial_surfs):
))
univs['Subdivided Fuel (2.4%)'] = openmc.Universe(cells=uo2_cells)
fuel_mats = [univs['Subdivided Fuel (2.4%)'], mats['He'], mats['Zr'], mats['H2O']]
univs['Fuel (2.4%)'] = make_pin(
'Fuel (2.4%)',
surfaces=fuel_surfaces,
materials=fuel_mats)
univs['Fuel (2.4%) grid (bottom)'] = make_pin(
'Fuel (2.4%) grid (bottom)',
surfaces=fuel_surfaces,
materials=fuel_mats,
grid='bottom')
univs['Fuel (2.4%) grid (intermediate)'] = make_pin(
'Fuel (2.4%) grid (intermediate)',
surfaces=fuel_surfaces,
materials=fuel_mats,
grid='intermediate')
# Stack all axial pieces of 2.4% enriched fuel pin cell
univs['Fuel pin (2.4%) stack'] = make_pin_stack(
'Fuel pin (2.4%) stack',
zsurfaces=within_fuel_surfs,
universes=[
univs['Outside pin'],
univs['Outside pin grid (bottom)'],
univs['Outside pin'],
univs['Outside pin'],
univs['Outside pin grid (intermediate)'],
univs['Outside pin'],
univs['Outside pin grid (intermediate)'],
univs['Outside pin'],
univs['Outside pin grid (intermediate)'],
univs['Outside pin']
],
boundary=surfs['pellet OR'],
pin_universe=univs['Subdivided Fuel (2.4%)'])
univs['Fuel (2.4%) stack'] = make_stack(
'Fuel (2.4%) stack',
surfaces=stack_surfs,
surfaces=fuel_stack_surfs,
universes=[univs['water pin'],
univs['SS pin'],
univs['SS pin'],
univs['end plug'],
univs['Fuel (2.4%)'],
univs['Fuel (2.4%) grid (bottom)'],
univs['Fuel (2.4%)'],
univs['Fuel (2.4%)'],
univs['Fuel (2.4%) grid (intermediate)'],
univs['Fuel (2.4%)'],
univs['Fuel (2.4%) grid (intermediate)'],
univs['Fuel (2.4%)'],
univs['Fuel (2.4%) grid (intermediate)'],
univs['Fuel (2.4%)'],
univs['Fuel pin (2.4%) stack'],
univs['pin plenum'],
univs['pin plenum grid (intermediate)'],
univs['pin plenum'],
@ -805,44 +839,34 @@ for axial_region in subdivide(axial_surfs):
))
univs['Subdivided Fuel (3.1%)'] = openmc.Universe(cells=uo2_cells)
fuel_mats = [univs['Subdivided Fuel (3.1%)'], mats['He'], mats['Zr'], mats['H2O']]
univs['Fuel (3.1%)'] = make_pin(
'Fuel (3.1%)',
surfaces=fuel_surfaces,
materials=fuel_mats)
univs['Fuel (3.1%) grid (bottom)'] = make_pin(
'Fuel (3.1%) grid (bottom)',
surfaces=fuel_surfaces,
materials=fuel_mats,
grid='bottom')
univs['Fuel (3.1%) grid (intermediate)'] = make_pin(
'Fuel (3.1%) grid (intermediate)',
surfaces=fuel_surfaces,
materials=fuel_mats,
grid='intermediate')
# Stack all axial pieces of 3.1% enriched fuel pin cell
univs['Fuel pin (3.1%) stack'] = make_pin_stack(
'Fuel pin (3.1%) stack',
zsurfaces=within_fuel_surfs,
universes=[
univs['Outside pin'],
univs['Outside pin grid (bottom)'],
univs['Outside pin'],
univs['Outside pin'],
univs['Outside pin grid (intermediate)'],
univs['Outside pin'],
univs['Outside pin grid (intermediate)'],
univs['Outside pin'],
univs['Outside pin grid (intermediate)'],
univs['Outside pin']
],
boundary=surfs['pellet OR'],
pin_universe=univs['Subdivided Fuel (3.1%)'])
univs['Fuel (3.1%) stack'] = make_stack(
'Fuel (3.1%) stack',
surfaces=stack_surfs,
surfaces=fuel_stack_surfs,
universes=[univs['water pin'],
univs['SS pin'],
univs['SS pin'],
univs['end plug'],
univs['Fuel (3.1%)'],
univs['Fuel (3.1%) grid (bottom)'],
univs['Fuel (3.1%)'],
univs['Fuel (3.1%)'],
univs['Fuel (3.1%) grid (intermediate)'],
univs['Fuel (3.1%)'],
univs['Fuel (3.1%) grid (intermediate)'],
univs['Fuel (3.1%)'],
univs['Fuel (3.1%) grid (intermediate)'],
univs['Fuel (3.1%)'],
univs['Fuel pin (3.1%) stack'],
univs['pin plenum'],
univs['pin plenum grid (intermediate)'],
univs['pin plenum'],