Merge pull request #12 from mit-crpg/temps-and-mats

Updates to SMR model
This commit is contained in:
Paul Romano 2019-07-24 23:08:17 -05:00 committed by GitHub
commit 6ef892a510
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 69 additions and 100 deletions

View file

@ -12,6 +12,7 @@ from smr.materials import materials
from smr.surfaces import surfs, lattice_pitch, bottom_fuel_stack, top_active_core
from smr.assemblies import assembly_universes
from smr.plots import assembly_plots
from smr import inlet_temperature
# Define command-line options
@ -100,9 +101,14 @@ 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, 'tolerance': 1000}
settings.temperature['multipole'] = True
settings.temperature['tolerance'] = 1000
settings.export_to_xml(str(directory / 'settings.xml'))

View file

@ -13,6 +13,7 @@ from smr.materials import materials
from smr.plots import core_plots
from smr.surfaces import lattice_pitch, bottom_fuel_stack, top_active_core
from smr.core import core_geometry
from smr import inlet_temperature
def clone(mat):
@ -88,8 +89,14 @@ 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, 'tolerance': 1000}
settings.temperature['multipole'] = True
settings.temperature['tolerance'] = 1000
settings.export_to_xml(str(directory / 'settings.xml'))

View file

@ -0,0 +1,6 @@
_MPA_PER_PSIA = 0.0068947572931683625
# Values from ML17013A274, Table 4.1-1
inlet_temperature = (497 - 32)*5/9 + 273.15
core_average_temperature = (543 - 32)*5/9 + 273.15
system_pressure = 1850*_MPA_PER_PSIA

View file

@ -133,75 +133,10 @@ def core_geometry(num_rings, num_axial, depleted):
+surfs['lower bound'] & -surfs['upper bound'])
root_univ.add_cell(cell)
# Neutron shield panels
cell = openmc.Cell(name='neutron shield panel NW')
cell.fill = mats['SS']
cell.region = (+surfs['core barrel OR'] & -surfs['neutron shield OR'] &
+surfs['neutron shield NWbot SEtop'] &
-surfs['neutron shield NWtop SEbot'] &
+surfs['lower bound'] & -surfs['upper bound'])
root_univ.add_cell(cell)
cell = openmc.Cell(name='neutron shield panel N')
cell.fill = mats['H2O']
cell.region = (+surfs['core barrel OR'] & -surfs['neutron shield OR'] &
+surfs['neutron shield NWtop SEbot'] &
-surfs['neutron shield NEtop SWbot'] &
+surfs['lower bound'] & -surfs['upper bound'])
root_univ.add_cell(cell)
cell = openmc.Cell(name='neutron shield panel SE')
cell.fill = mats['SS']
cell.region = (+surfs['core barrel OR'] & -surfs['neutron shield OR'] &
-surfs['neutron shield NWbot SEtop'] &
+surfs['neutron shield NWtop SEbot'] &
+surfs['lower bound'] & -surfs['upper bound'])
root_univ.add_cell(cell)
cell = openmc.Cell(name='neutron shield panel E')
cell.fill = mats['H2O']
cell.region = (+surfs['core barrel OR'] & -surfs['neutron shield OR'] &
+surfs['neutron shield NWbot SEtop'] &
+surfs['neutron shield NEbot SWtop'] &
+surfs['lower bound'] & -surfs['upper bound'])
root_univ.add_cell(cell)
cell = openmc.Cell(name='neutron shield panel NE')
cell.fill = mats['SS']
cell.region = (+surfs['core barrel OR'] & -surfs['neutron shield OR'] &
+surfs['neutron shield NEbot SWtop'] &
-surfs['neutron shield NEtop SWbot'] &
+surfs['lower bound'] & -surfs['upper bound'])
root_univ.add_cell(cell)
cell = openmc.Cell(name='neutron shield panel S')
cell.fill = mats['H2O']
cell.region = (+surfs['core barrel OR'] & -surfs['neutron shield OR'] &
-surfs['neutron shield NWtop SEbot'] &
+surfs['neutron shield NEtop SWbot'] &
+surfs['lower bound'] & -surfs['upper bound'])
root_univ.add_cell(cell)
cell = openmc.Cell(name='neutron shield panel SW')
cell.fill = mats['SS']
cell.region = (+surfs['core barrel OR'] & -surfs['neutron shield OR'] &
-surfs['neutron shield NEbot SWtop'] &
+surfs['neutron shield NEtop SWbot'] &
+surfs['lower bound'] & -surfs['upper bound'])
root_univ.add_cell(cell)
cell = openmc.Cell(name='neutron shield panel W')
cell.fill = mats['H2O']
cell.region = (+surfs['core barrel OR'] & -surfs['neutron shield OR'] &
-surfs['neutron shield NWbot SEtop'] &
-surfs['neutron shield NEbot SWtop'] &
+surfs['lower bound'] & -surfs['upper bound'])
root_univ.add_cell(cell)
# Downcomer
cell = openmc.Cell(name='downcomer')
cell.fill = mats['H2O']
cell.region = (+surfs['neutron shield OR'] & -surfs['RPV IR'] &
cell.region = (+surfs['core barrel OR'] & -surfs['RPV IR'] &
+surfs['lower bound'] & -surfs['upper bound'])
root_univ.add_cell(cell)

View file

@ -1,7 +1,9 @@
"""Instantiate the OpenMC Materials needed by the core model."""
import openmc
from openmc.data import atomic_weight, atomic_mass
from openmc.data import atomic_weight, atomic_mass, water_density
from . import system_pressure, core_average_temperature
_DEPLETION_NUCLIDES = [
@ -41,13 +43,11 @@ mats = {}
# Create He gas material for fuel pin gap
mats['He'] = openmc.Material(name='Helium')
mats['He'].temperature = 300
mats['He'].set_density('g/cc', 0.0015981)
mats['He'].add_element('He', 1.0, 'ao')
# Create air material for instrument tubes
mats['Air'] = openmc.Material(name='Air')
mats['Air'].temperature = 300
mats['Air'].set_density('g/cc', 0.00616)
mats['Air'].add_element('O', 0.2095, 'ao')
mats['Air'].add_element('N', 0.7809, 'ao')
@ -56,7 +56,6 @@ mats['Air'].add_element('C', 0.00027, 'ao')
# Create inconel 718 material
mats['In'] = openmc.Material(name='Inconel')
mats['In'].temperature = 300
mats['In'].set_density('g/cc', 8.2)
mats['In'].add_element('Si', 0.0035, 'wo')
mats['In'].add_element('Cr', 0.1896, 'wo')
@ -64,9 +63,17 @@ mats['In'].add_element('Mn', 0.0087, 'wo')
mats['In'].add_element('Fe', 0.2863, 'wo')
mats['In'].add_element('Ni', 0.5119, 'wo')
# Create stainless steel 302
mats['SS302'] = openmc.Material(name='SS302')
mats['SS302'].set_density('g/cm3', 7.86)
mats['SS302'].add_element('Si', 0.01, 'wo')
mats['SS302'].add_element('Cr', 0.18, 'wo')
mats['SS302'].add_element('Mn', 0.02, 'wo')
mats['SS302'].add_element('Fe', 0.70, 'wo')
mats['SS302'].add_element('Ni', 0.09, 'wo')
# Create stainless steel material
mats['SS'] = openmc.Material(name='SS304')
mats['SS'].temperature = 300
mats['SS'].set_density('g/cc', 8.03)
mats['SS'].add_element('Si', 0.0060, 'wo')
mats['SS'].add_element('Cr', 0.1900, 'wo')
@ -76,7 +83,6 @@ mats['SS'].add_element('Ni', 0.1000, 'wo')
# Create carbon steel material
mats['CS'] = openmc.Material(name='Carbon Steel')
mats['CS'].temperature = 300
mats['CS'].set_density('g/cc', 7.8)
mats['CS'].add_element('C', 0.00270, 'wo')
mats['CS'].add_element('Mn', 0.00750, 'wo')
@ -97,7 +103,6 @@ mats['CS'].add_element('Fe', 0.96487, 'wo')
# Create zircaloy 4 material
mats['Zr'] = openmc.Material(name='Zircaloy-4')
mats['Zr'].temperature = 300
mats['Zr'].set_density('g/cc', 6.55)
mats['Zr'].add_element('O', 0.00125, 'wo')
mats['Zr'].add_element('Cr', 0.0010, 'wo')
@ -105,9 +110,18 @@ mats['Zr'].add_element('Fe', 0.0021, 'wo')
mats['Zr'].add_element('Zr', 0.98115, 'wo')
mats['Zr'].add_element('Sn', 0.0145, 'wo')
# Create M5 alloy material
m5_niobium = 0.01 # http://publications.jrc.ec.europa.eu/repository/bitstream/JRC100644/lcna28366enn.pdf
m5_oxygen = 0.00135 # http://publications.jrc.ec.europa.eu/repository/bitstream/JRC100644/lcna28366enn.pdf
m5_density = 6.494 # 10.1039/C5DT03403E
mats['M5'] = openmc.Material(name='M5')
mats['M5'].add_element('Zr', 1.0 - m5_niobium - m5_oxygen)
mats['M5'].add_element('Nb', m5_niobium)
mats['M5'].add_element('O', m5_oxygen)
mats['M5'].set_density('g/cm3', m5_density)
# Create Ag-In-Cd control rod material
mats['AIC'] = openmc.Material(name='Ag-In-Cd')
mats['AIC'].temperature = 300
mats['AIC'].set_density('g/cc', 10.16)
mats['AIC'].add_element('Ag', 0.80, 'wo')
mats['AIC'].add_element('In', 0.15, 'wo')
@ -116,10 +130,11 @@ mats['AIC'].add_element('Cd', 0.05, 'wo')
#### Borated Water
boron_ppm = 975
# Concentration of boron at beginning of equilibrium cycle
boron_ppm = 1240 # ML17013A274, Figure 4.3-17
# Density of clean water at 2250 psia T=560F NIST
h2o_dens = 0.73986
# Density of water
h2o_dens = water_density(core_average_temperature, system_pressure)
# Weight percent of natural boron in borated water
wB_Bh2o = boron_ppm * 1.0e-6
@ -146,7 +161,6 @@ aho_Bh2o = ah2o_Bh2o
# Create borated water for coolant / moderator
mats['H2O'] = openmc.Material(name='Borated Water')
mats['H2O'].temperature = 300
mats['H2O'].set_density('g/cc', rho_Bh2o)
mats['H2O'].add_element('B', aB_Bh2o, 'ao')
mats['H2O'].add_element('H', ah_Bh2o, 'ao')

View file

@ -674,16 +674,16 @@ def pin_universes(num_rings=10, num_axial=196, depleted=False):
univs['end plug'] = make_pin(
'end plug',
[surfs['clad OR']],
[mats['Zr'], mats['H2O']])
[mats['M5'], mats['H2O']])
univs['pin plenum'] = make_pin(
'pin plenum',
surfaces=[surfs['plenum spring OR'],
surfs['clad IR'],
surfs['clad OR']],
materials=[mats['In'],
materials=[mats['SS302'],
mats['He'],
mats['Zr'],
mats['M5'],
mats['H2O']])
univs['pin plenum grid (intermediate)'] = make_pin(
@ -743,7 +743,7 @@ def pin_universes(num_rings=10, num_axial=196, depleted=False):
fuel_fill = mats['UO2 1.6 {}'.format(fuel)]
outside_pin_surfaces = [surfs['clad IR'], surfs['clad OR']]
outside_pin_mats = [mats['He'], mats['Zr'], mats['H2O']]
outside_pin_mats = [mats['He'], mats['M5'], mats['H2O']]
univs['Outside pin'] = make_pin(
'Outside pin',

View file

@ -40,7 +40,7 @@ clad_OR = 0.374*INCHES/2 # ML17013A274, Table 4.1-2
active_fuel_length = 78.74*INCHES # ML17013A274, Figure 4.2-10
plenum_length = 5.311*INCHES # ML17013A274, Figure 4.2-10
fuel_rod_length = 85.00*INCHES # ML17013A274, Table 4.1-2
lower_end_cap = 0.575*INCHES # ML17007A001, Table 3-2
lower_end_cap_length = 0.575*INCHES # ML17007A001, Table 3-2
# pin cell parameters
guide_tube_IR = 0.450*INCHES/2 # ML17013A274, Table 4.1-2
@ -79,19 +79,20 @@ top_nozzle_width = 8.406*INCHES # ML17013A274, Figure 4.2-2
core_barrel_IR = 74*INCHES/2 # ML17013A274, Table 4.1-2
core_barrel_OR = 78*INCHES/2 # ML17013A274, Table 4.1-2
neutron_shield_OR = core_barrel_OR + 2.0
rpv_IR = 120.0 # Estimate?
rpv_OR = 135.0 # Estimate?
rpv_IR = 96.5*INCHES/2 # ML17013A274, Table 5.3-1
rpv_OR = 105*INCHES/2 # ML17013A274, Table 5.3-1
# axial parameters
lowest_extent = 0.000
bottom_support_plate = 20.000
top_support_plate = 25.000
bottom_lower_nozzle = 25.000
top_lower_nozzle = 35.160
bottom_fuel_rod = 35.160
top_lower_thimble = 36.007
bottom_fuel_stack = 36.007
bot_burn_abs = 41.087
reference_z = 0.0
lowest_extent = reference_z
bottom_support_plate = lowest_extent + 20.000
top_support_plate = bottom_support_plate + 5.000
bottom_lower_nozzle = bottom_support_plate + 5.000
top_lower_nozzle = bottom_lower_nozzle + 4.0*INCHES
bottom_fuel_rod = bottom_lower_nozzle + 4.0*INCHES
top_lower_thimble = bottom_fuel_rod + lower_end_cap_length
bottom_fuel_stack = bottom_fuel_rod + lower_end_cap_length
bot_burn_abs = bottom_fuel_stack + 2.0*INCHES
top_active_core = bottom_fuel_stack + active_fuel_length
top_plenum = top_active_core + plenum_length
top_fuel_rod = bottom_fuel_rod + fuel_rod_length
@ -170,13 +171,13 @@ surfs['IT OR'] = copy.deepcopy(surfs['BA IR 6'])
# Rectangular prisms for grid spacers
surfs['rod grid box'] = \
openmc.get_rectangular_prism(rod_grid_side, rod_grid_side)
openmc.rectangular_prism(rod_grid_side, rod_grid_side)
# Rectangular prisms for lattice grid sleeves
surfs['lat grid box inner'] = \
openmc.get_rectangular_prism(17.*pin_pitch, 17.*pin_pitch)
openmc.rectangular_prism(17.*pin_pitch, 17.*pin_pitch)
surfs['lat grid box outer'] = \
openmc.get_rectangular_prism(grid_strap_side, grid_strap_side)
openmc.rectangular_prism(grid_strap_side, grid_strap_side)
surfs['bot support plate'] = openmc.ZPlane(
z0=bottom_support_plate, name='bot support plate')