Trying to get responsive control rods. Currently not working, but framework is in place
This commit is contained in:
parent
e9c4ec0104
commit
2ee5cdbe17
12 changed files with 530 additions and 359 deletions
|
|
@ -6,7 +6,6 @@ Provides a container class of all BEAVRS lattices
|
|||
|
||||
import openmc
|
||||
|
||||
import beavrs.constants as c
|
||||
from beavrs.corebuilder import TemplatedLattice
|
||||
from beavrs.corebuilder import InfinitePinCell
|
||||
|
||||
|
|
@ -32,11 +31,12 @@ class Assemblies(object):
|
|||
['fuel', 'fuel', 'fuel', 'fuel', 'fuel', 'fuel', 'fuel', 'fuel', ' fuel', 'fuel', 'fuel', 'fuel', 'fuel', 'fuel', 'fuel', 'fuel', 'fuel']
|
||||
]
|
||||
|
||||
def __init__(self, pincells, mats):
|
||||
def __init__(self, pincells, mats, c):
|
||||
""" Creates BEAVRS pincell universes """
|
||||
|
||||
self.pins = pincells
|
||||
self.mats = mats
|
||||
self.c = c
|
||||
|
||||
self._add_lattice_surfs()
|
||||
self._add_assembly_surfs()
|
||||
|
|
@ -50,7 +50,7 @@ class Assemblies(object):
|
|||
|
||||
# Rectangular prism around the edge of the pinlattice
|
||||
self.lattice_surfs = \
|
||||
openmc.rectangular_prism(17*c.pinPitch, 17*c.pinPitch)
|
||||
openmc.rectangular_prism(17*self.c.pinPitch, 17*self.c.pinPitch)
|
||||
|
||||
|
||||
def _add_assembly_surfs(self):
|
||||
|
|
@ -58,7 +58,7 @@ class Assemblies(object):
|
|||
|
||||
# Rectangular prism around the edge of the pinlattice
|
||||
self.assem_surfs = \
|
||||
openmc.rectangular_prism(c.latticePitch, c.latticePitch)
|
||||
openmc.rectangular_prism(self.c.latticePitch, self.c.latticePitch)
|
||||
|
||||
|
||||
def _add_bpra_layouts(self):
|
||||
|
|
@ -256,8 +256,8 @@ class Assemblies(object):
|
|||
# Make the pin lattice
|
||||
lattice = TemplatedLattice(name=name)
|
||||
lattice.setTemplate(self.pin_lattice_template)
|
||||
lattice.pitch = [c.pinPitch, c.pinPitch]
|
||||
lattice.lower_left = [-17.*c.pinPitch/2., -17.*c.pinPitch/2.]
|
||||
lattice.pitch = [self.c.pinPitch, self.c.pinPitch]
|
||||
lattice.lower_left = [-17.*self.c.pinPitch/2., -17.*self.c.pinPitch/2.]
|
||||
lattice.setPosition('center', u_c)
|
||||
lattice.setPosition('fuel', self.pins.u_fuel_p[enr])
|
||||
lattice.updatePositions(gt_spec)
|
||||
|
|
|
|||
|
|
@ -9,17 +9,16 @@ assemblies
|
|||
|
||||
import openmc
|
||||
|
||||
import beavrs.constants as c
|
||||
from beavrs.corebuilder import InfinitePinCell
|
||||
|
||||
|
||||
class Baffle(object):
|
||||
|
||||
def __init__(self, assemblies, mats):
|
||||
def __init__(self, assemblies, mats, c):
|
||||
""" Creates BEAVRS baffle universes """
|
||||
|
||||
self.assem = assemblies
|
||||
self.mats = mats
|
||||
self.c = c
|
||||
|
||||
self._add_baffle_universes()
|
||||
|
||||
|
|
@ -31,10 +30,10 @@ class Baffle(object):
|
|||
# North Baffle
|
||||
self.u_baffle_N = openmc.Universe(name='Baffle North')
|
||||
self.s_baffle_N_gap = openmc.YPlane(name='North Baffle Water Gap Surface',
|
||||
y0=c.latticePitch/2-c.baffleWaterGap)
|
||||
y0=self.c.latticePitch/2-self.c.baffleWaterGap)
|
||||
self.s_baffle_N = openmc.YPlane(name='North Baffle Surface',
|
||||
y0=c.latticePitch/2 - c.baffleWaterGap
|
||||
- c.baffleWidth)
|
||||
y0=self.c.latticePitch/2 - self.c.baffleWaterGap
|
||||
- self.c.baffleWidth)
|
||||
self.c_baffle_N1 = openmc.Cell(name='North Baffle Water Gap',
|
||||
fill=self.mats['Borated Water'])
|
||||
self.c_baffle_N1.region = +self.s_baffle_N_gap
|
||||
|
|
@ -68,10 +67,10 @@ class Baffle(object):
|
|||
# North West Corner Baffle
|
||||
self.u_baffle_NW = openmc.Universe(name='Baffle North West Corner')
|
||||
self.s_baffle_W_gap = openmc.XPlane(name='West Baffle Water Gap Surface',
|
||||
x0=c.baffleWaterGap-c.latticePitch/2)
|
||||
x0=self.c.baffleWaterGap-self.c.latticePitch/2)
|
||||
self.s_baffle_W = openmc.XPlane(name='West Baffle Surface',
|
||||
x0=c.baffleWaterGap + c.baffleWidth
|
||||
- c.latticePitch/2)
|
||||
x0=self.c.baffleWaterGap + self.c.baffleWidth
|
||||
- self.c.latticePitch/2)
|
||||
self.c_baffle_C1 = openmc.Cell(name='Corner Baffle Water Gap N',
|
||||
fill=self.mats['Borated Water'])
|
||||
self.c_baffle_C1.region = +self.s_baffle_N_gap
|
||||
|
|
|
|||
|
|
@ -6,10 +6,11 @@ the BEAVRS geometry.
|
|||
"""
|
||||
|
||||
import warnings
|
||||
import numpy as np
|
||||
|
||||
import openmc
|
||||
|
||||
import beavrs.constants as c
|
||||
from beavrs.constants import Constants
|
||||
from beavrs.materials import openmc_materials
|
||||
from beavrs.pincells import Pincells
|
||||
from beavrs.assemblies import Assemblies
|
||||
|
|
@ -24,32 +25,42 @@ warnings.simplefilter('once', DeprecationWarning)
|
|||
class BEAVRS(object):
|
||||
""" Main BEAVRS class"""
|
||||
|
||||
def __init__(self, boron_ppm=c.nominalBoronPPM, is_symmetric=False, is_2d=False):
|
||||
def __init__(self, boron_ppm=None, is_symmetric=False, is_2d=False, S=None, SS=None):
|
||||
""" We build the entire geometry in memory in the constructor """
|
||||
|
||||
# TODO: make the control rod bank insertion heights attributes
|
||||
self.c = Constants(S,SS)
|
||||
|
||||
if boron_ppm is not None:
|
||||
self.boron_ppm = boron_ppm
|
||||
else:
|
||||
self.boron_ppm = self.c.nominalBoronPPM
|
||||
|
||||
|
||||
self.is_symmetric = is_symmetric
|
||||
self.is_2d = is_2d
|
||||
|
||||
# Setup the materials
|
||||
self.mats = openmc_materials(ppm=boron_ppm)
|
||||
self.mats = openmc_materials(self.c, ppm=self.boron_ppm)
|
||||
|
||||
self.pincells = Pincells(self.mats)
|
||||
self.assemblies = Assemblies(self.pincells, self.mats)
|
||||
self.baffle = Baffle(self.assemblies, self.mats)
|
||||
self.core = Core(self.pincells, self.assemblies, self.baffle, is_symmetric=is_symmetric)
|
||||
self.main_universe = UniverseZero(self.core, self.mats, is_2d=is_2d)
|
||||
self.pincells = Pincells(self.mats, self.c)
|
||||
self.assemblies = Assemblies(self.pincells, self.mats, self.c)
|
||||
self.baffle = Baffle(self.assemblies, self.mats, self.c)
|
||||
self.core = Core(self.pincells, self.assemblies, self.baffle, self.c, is_symmetric=self.is_symmetric)
|
||||
self.main_universe = UniverseZero(self.core, self.mats, self.c, is_2d=self.is_2d)
|
||||
|
||||
self.openmc_geometry = openmc.Geometry(self.main_universe)
|
||||
|
||||
self.settings_batches = 10
|
||||
self.settings_inactive = 5
|
||||
self.settings_particles = 1000
|
||||
baffle_flat = 7.5*c.latticePitch
|
||||
baffle_flat = 7.5*self.c.latticePitch
|
||||
if is_2d:
|
||||
self.settings_sourcebox = [-baffle_flat, -baffle_flat, c.struct_LowestExtent_2d,
|
||||
baffle_flat, baffle_flat, c.struct_HighestExtent_2d]
|
||||
self.settings_sourcebox = [-baffle_flat, -baffle_flat, self.c.struct_LowestExtent_2d,
|
||||
baffle_flat, baffle_flat, self.c.struct_HighestExtent_2d]
|
||||
else:
|
||||
self.settings_sourcebox = [-baffle_flat, -baffle_flat, c.fuel_Rod_bot,
|
||||
baffle_flat, baffle_flat, c.fuel_Rod_top]
|
||||
self.settings_sourcebox = [-baffle_flat, -baffle_flat, self.c.fuel_Rod_bot,
|
||||
baffle_flat, baffle_flat, self.c.fuel_Rod_top]
|
||||
self.settings_output_tallies = False
|
||||
self.settings_summary = True
|
||||
self.settings_output_distribmats = False
|
||||
|
|
@ -109,6 +120,7 @@ class BEAVRS(object):
|
|||
self.depletion_nuclides = nuclides
|
||||
|
||||
def set_boron_ppm(self, ppm):
|
||||
self.ppm = ppm
|
||||
self.mats = openmc_materials(ppm=ppm)
|
||||
|
||||
def write_openmc_geometry(self):
|
||||
|
|
@ -123,7 +135,7 @@ class BEAVRS(object):
|
|||
|
||||
@property
|
||||
def plots(self):
|
||||
plots = Plots(self.mats)
|
||||
plots = Plots(self.mats, self.c)
|
||||
plot_file = openmc.Plots(plots.plots)
|
||||
return plot_file
|
||||
|
||||
|
|
@ -152,6 +164,8 @@ class BEAVRS(object):
|
|||
output = {'tallies': self.settings_output_tallies,
|
||||
'summary': self.settings_summary}
|
||||
settings_file.output = output
|
||||
settings_file.confidence_intervals = False
|
||||
settings_file.seed = np.random.randint(1e14, dtype=np.uint64)
|
||||
return settings_file
|
||||
|
||||
def write_openmc_settings(self):
|
||||
|
|
@ -170,10 +184,48 @@ class BEAVRS(object):
|
|||
def write_openmc_tallies(self):
|
||||
self.common_tallies.export_to_xml()
|
||||
|
||||
def set_volumes(self, samples=100000):
|
||||
def set_S(self,val):
|
||||
|
||||
self.c.S = val
|
||||
|
||||
self.pincells = Pincells(self.mats, self.c)
|
||||
self.assemblies = Assemblies(self.pincells, self.mats, self.c)
|
||||
self.baffle = Baffle(self.assemblies, self.mats, self.c)
|
||||
self.core = Core(self.pincells, self.assemblies, self.baffle, self.c, is_symmetric=self.is_symmetric)
|
||||
self.main_universe = UniverseZero(self.core, self.mats, self.c, is_2d=self.is_2d)
|
||||
|
||||
self.openmc_geometry = openmc.Geometry(self.main_universe)
|
||||
|
||||
def set_SS(self,val):
|
||||
|
||||
self.c.SS = val
|
||||
|
||||
self.pincells = Pincells(self.mats, self.c)
|
||||
self.assemblies = Assemblies(self.pincells, self.mats, self.c)
|
||||
self.baffle = Baffle(self.assemblies, self.mats, self.c)
|
||||
self.core = Core(self.pincells, self.assemblies, self.baffle, self.c, is_symmetric=self.is_symmetric)
|
||||
self.main_universe = UniverseZero(self.core, self.mats, self.c, is_2d=self.is_2d)
|
||||
|
||||
self.openmc_geometry = openmc.Geometry(self.main_universe)
|
||||
|
||||
def export_model(self) -> openmc.Model:
|
||||
model = openmc.Model(geometry=self.openmc_geometry, materials=self.materials,
|
||||
settings=self.settings, tallies=self.common_tallies, plots=self.plots)
|
||||
|
||||
model.settings.seed = np.random.randint(1e14, dtype=np.uint64)
|
||||
|
||||
return model
|
||||
|
||||
def export_xml(self,as_model:bool=False):
|
||||
if as_model:
|
||||
self.export_model().export_to_model_xml()
|
||||
else:
|
||||
self.export_model().export_to_xml()
|
||||
|
||||
def set_volumes(self, samples:int=100000) -> None:
|
||||
self.settings_volumes = openmc.VolumeCalculation(domains=[self.main_universe], samples=samples, lower_left=(-170, -170, 0), upper_right=(170, 170, 420))
|
||||
|
||||
def set_params(self, particles=None, batches=None, inactive=None):
|
||||
def set_params(self, particles:int=None, batches:int=None, inactive:int=None) -> None:
|
||||
if particles: self.settings_particles = particles
|
||||
if batches: self.settings_batches = batches
|
||||
if inactive: self.settings_inactive = inactive
|
||||
|
|
@ -182,8 +234,8 @@ class BEAVRS(object):
|
|||
""" Sets a DD mesh that covers the whole geometry
|
||||
"""
|
||||
self.dd_mesh_dimension = [nx, ny, nz]
|
||||
self.dd_mesh_lower_left = [-c.rpvOR, -c.rpvOR, c.struct_LowestExtent]
|
||||
self.dd_mesh_upper_right = [c.rpvOR, c.rpvOR, c.struct_HighestExtent]
|
||||
self.dd_mesh_lower_left = [-self.c.rpvOR, -self.c.rpvOR, self.c.struct_LowestExtent]
|
||||
self.dd_mesh_upper_right = [self.c.rpvOR, self.c.rpvOR, self.c.struct_HighestExtent]
|
||||
self.dd_nodemap = nodemap
|
||||
self.dd_truncate = False
|
||||
|
||||
|
|
@ -191,28 +243,28 @@ class BEAVRS(object):
|
|||
""" Sets a DD mesh that truncates tracking outside the shield panels
|
||||
"""
|
||||
self.dd_mesh_dimension = [nx, ny, nz]
|
||||
self.dd_mesh_lower_left = [-c.neutronShieldOR, -c.neutronShieldOR, c.struct_LowestExtent]
|
||||
self.dd_mesh_upper_right = [c.neutronShieldOR, c.neutronShieldOR, c.struct_HighestExtent]
|
||||
self.dd_mesh_lower_left = [-self.c.neutronShieldOR, -self.c.neutronShieldOR, self.c.struct_LowestExtent]
|
||||
self.dd_mesh_upper_right = [self.c.neutronShieldOR, self.c.neutronShieldOR, self.c.struct_HighestExtent]
|
||||
self.dd_nodemap = nodemap
|
||||
self.dd_truncate = True
|
||||
|
||||
def set_dd_mesh_assembly_restricted(self, nz, nodemap=None):
|
||||
""" Sets a restricted DD mesh that is assembly-sized radially, and user-specified axially
|
||||
"""
|
||||
lp = c.latticePitch
|
||||
lp = self.c.latticePitch
|
||||
self.dd_mesh_dimension = [17, 17, nz]
|
||||
self.dd_mesh_lower_left = [-8*lp, -8*lp, c.struct_LowestExtent]
|
||||
self.dd_mesh_upper_right = [8*lp, 8*lp, c.struct_HighestExtent]
|
||||
self.dd_mesh_lower_left = [-8*lp, -8*lp, self.c.struct_LowestExtent]
|
||||
self.dd_mesh_upper_right = [8*lp, 8*lp, self.c.struct_HighestExtent]
|
||||
self.dd_nodemap = nodemap
|
||||
self.dd_truncate = True
|
||||
|
||||
def set_dd_mesh_3assembly_restricted(self, nz, nodemap=None):
|
||||
""" Sets a restricted DD mesh that is 3x3 assebly-sized radially, and user-specified axially
|
||||
"""
|
||||
lp = c.latticePitch
|
||||
lp = self.c.latticePitch
|
||||
self.dd_mesh_dimension = [7, 7, nz]
|
||||
self.dd_mesh_lower_left = [-10*lp, -10*lp, c.struct_LowestExtent]
|
||||
self.dd_mesh_upper_right = [10*lp, 10*lp, c.struct_HighestExtent]
|
||||
self.dd_mesh_lower_left = [-10*lp, -10*lp, self.self.c.struct_LowestExtent]
|
||||
self.dd_mesh_upper_right = [10*lp, 10*lp, self.self.c.struct_HighestExtent]
|
||||
self.dd_nodemap = nodemap
|
||||
self.dd_truncate = True
|
||||
|
||||
|
|
|
|||
|
|
@ -1,178 +1,274 @@
|
|||
|
||||
import math
|
||||
|
||||
############## Material paramters ##############
|
||||
class Constants(object):
|
||||
|
||||
h2oDens = 0.73986
|
||||
nominalBoronPPM = 975
|
||||
############## Material paramters ##############
|
||||
|
||||
############## Geometry paramters ##############
|
||||
h2oDens = 0.73986
|
||||
nominalBoronPPM = 975
|
||||
|
||||
S = 315
|
||||
SS = 0
|
||||
## pincell parameters
|
||||
pelletOR = 0.39218 #
|
||||
cladIR = 0.40005 #
|
||||
cladOR = 0.45720 #
|
||||
rodGridSide_tb = 1.22030 #
|
||||
rodGridSide_i = 1.22098 #
|
||||
guideTubeIR = 0.56134 #
|
||||
guideTubeOR = 0.60198 #
|
||||
guideTubeDashIR = 0.50419 #
|
||||
guideTubeDashOR = 0.54610 #
|
||||
rcca_clad_OR = 0.48387 # ML033530020 page 15
|
||||
rcca_clad_IR = 0.38608 # ML033530020 page 15
|
||||
rcca_b4c_OR = 0.37338 # ML033530020 page 15
|
||||
rcca_aic_OR = 0.38227 # ML033530020 page 15
|
||||
rcca_spacer_OR = 0.37845 # ML033530020 page 15
|
||||
rcca_spring_OR = 0.06459 # Assumed same as fuel
|
||||
burnabs1 = 0.21400 #
|
||||
burnabs2 = 0.23051 #
|
||||
burnabs3 = 0.24130 #
|
||||
burnabs4 = 0.42672 #
|
||||
burnabs5 = 0.43688 #
|
||||
burnabs6 = 0.48387 #
|
||||
instrTubeIR = 0.43688 # no source
|
||||
instrTubeOR = 0.48387 # no source
|
||||
plenumSpringOR = 0.06459 # frapcon source - see beavrs_spring.ods
|
||||
|
||||
# bite position is bank D at 213 steps withdrawn
|
||||
_D = max(0,228-S)
|
||||
_C = 228 if _D > 113 else max(0, 228-S+113 +2)
|
||||
_B = 228 if _C > 113 else max(0, 228-S+113*2+4)
|
||||
_A = 228 if _B > 113 else max(0, 228-S+113*3+6)
|
||||
## lattice parameters
|
||||
pinPitch = 1.25984 #
|
||||
latticePitch = 21.50364 #
|
||||
gridstrapSide = 21.49595 #
|
||||
|
||||
_SA = 228-SS
|
||||
_SB = 228-SS
|
||||
_SC = 228-SS
|
||||
_SD = 228-SS
|
||||
_SE = 228-SS
|
||||
## <!--- axials copied straight from rod_axials.ods
|
||||
|
||||
print(" RCCA Positions")
|
||||
print(f" A: {_A} B: {_B} C: {_C} D: {_D}")
|
||||
print(f" SA: {_SA} SB: {_SB} SC: {_SC} SD: {_SD} SE: {_SE}")
|
||||
# Core Structures
|
||||
struct_LowestExtent = 0.00000 #
|
||||
struct_SupportPlate_bot = 20.0000 # arbitrary amount of water below core
|
||||
struct_SupportPlate_top = 25.0000 # guessed
|
||||
struct_LowerNozzle_bot = 25.0000 # same as struct_SupportPlate_top
|
||||
struct_LowerNozzle_top = 35.0000 # approx from ** NDR of 4.088in for lower nozzle height
|
||||
struct_LowestExtent_2d = 220.000 # arbitrary lower slice for 2D problem
|
||||
struct_HighestExtent_2d = 230.000 # arbitrary upper slice for 2D problem
|
||||
struct_UpperNozzle_bot = 423.049 # fig 4.2-3 from Watts Bar Unit 2 safety analysis report
|
||||
struct_UpperNozzle_top = 431.876 # fig 4.2-3 from Watts Bar Unit 2 safety analysis report
|
||||
struct_HighestExtent = 460.000 # arbitrary amount of water above core
|
||||
|
||||
## Steps withdrawn for each RCCA bank
|
||||
rcca_bank_steps_withdrawn = {
|
||||
'A': _A,
|
||||
'B': _B,
|
||||
'C': _C,
|
||||
'D': _D,
|
||||
'SA': _SA,
|
||||
'SB': _SB,
|
||||
'SC': _SC,
|
||||
'SD': _SD,
|
||||
'SE': _SE,
|
||||
}
|
||||
rcca_banks = rcca_bank_steps_withdrawn.keys()
|
||||
# Fuel Rod
|
||||
fuel_Rod_bot = 35.0000 # same as struct_LowerNozzle_top
|
||||
fuel_LowerFitting_bot = 35.0000 # ML033530020 Fig 2-7
|
||||
fuel_LowerFitting_top = 36.7480 # ML033530020 Fig 2-7
|
||||
fuel_ActiveFuel_bot = 36.7480 # ML033530020 Fig 2-7
|
||||
fuel_ActiveFuel_top = 402.508 # ML033530020 Fig 2-7
|
||||
fuel_Plenum_bot = 402.508 # ML033530020 Fig 2-7
|
||||
fuel_Plenum_top = 417.164 # ML033530020 Fig 2-7
|
||||
fuel_UpperFitting_bot = 417.164 # ML033530020 Fig 2-7
|
||||
fuel_UpperFitting_top = 419.704 # ML033530020 Fig 2-7
|
||||
fuel_Rod_top = 419.704 # ML033530020 Fig 2-7
|
||||
|
||||
## pincell parameters
|
||||
pelletOR = 0.39218 #
|
||||
cladIR = 0.40005 #
|
||||
cladOR = 0.45720 #
|
||||
rodGridSide_tb = 1.22030 #
|
||||
rodGridSide_i = 1.22098 #
|
||||
guideTubeIR = 0.56134 #
|
||||
guideTubeOR = 0.60198 #
|
||||
guideTubeDashIR = 0.50419 #
|
||||
guideTubeDashOR = 0.54610 #
|
||||
rcca_clad_OR = 0.48387 # ML033530020 page 15
|
||||
rcca_clad_IR = 0.38608 # ML033530020 page 15
|
||||
rcca_b4c_OR = 0.37338 # ML033530020 page 15
|
||||
rcca_aic_OR = 0.38227 # ML033530020 page 15
|
||||
rcca_spacer_OR = 0.37845 # ML033530020 page 15
|
||||
rcca_spring_OR = 0.06459 # Assumed same as fuel
|
||||
burnabs1 = 0.21400 #
|
||||
burnabs2 = 0.23051 #
|
||||
burnabs3 = 0.24130 #
|
||||
burnabs4 = 0.42672 #
|
||||
burnabs5 = 0.43688 #
|
||||
burnabs6 = 0.48387 #
|
||||
instrTubeIR = 0.43688 # no source
|
||||
instrTubeOR = 0.48387 # no source
|
||||
plenumSpringOR = 0.06459 # frapcon source - see beavrs_spring.ods
|
||||
# RCCAs (0 steps withdraw, i.e., fully inserted)
|
||||
rcca_Rod_bot = 39.9580 # ML033530020 Fig 2-8
|
||||
rcca_LowerFitting_bot = 39.9580 # ML033530020 Fig 2-8
|
||||
rcca_LowerFitting_top = 41.8280 # ML033530020 Fig 2-8
|
||||
rcca_AIC_bot = 41.8280 # ML033530020 Fig 2-8
|
||||
rcca_AIC_top = 143.428 # ML033530020 Fig 2-8
|
||||
rcca_B4C_bot = 143.428 # ML033530020 Fig 2-8
|
||||
rcca_B4C_top = 402.508 # ML033530020 Fig 2-8
|
||||
rcca_Spacer_bot = 402.508 # ML033530020 Fig 2-8
|
||||
rcca_Spacer_top = 403.778 # ML033530020 Fig 2-8
|
||||
rcca_Plenum_bot = 403.778 # ML033530020 Fig 2-8
|
||||
rcca_Plenum_top = 415.558 # ML033530020 Fig 2-8
|
||||
rcca_Rod_top = 460.000 # same as struct_HighestExtent
|
||||
rcca_StepWidth = 1.58193 # Active height divided into 228 steps
|
||||
|
||||
## lattice parameters
|
||||
pinPitch = 1.25984 #
|
||||
latticePitch = 21.50364 #
|
||||
gridstrapSide = 21.49595 #
|
||||
# BPRAs
|
||||
bpra_Rod_bot = 38.6600 # ML033530020 Fig 2-9
|
||||
bpra_LowerFitting_bot = 38.6600 # ML033530020 Fig 2-9
|
||||
bpra_LowerFitting_top = 40.5580 # ML033530020 Fig 2-9
|
||||
bpra_Active_bot = 40.5580 # ML033530020 Fig 2-9
|
||||
bpra_Active_top = 401.238 # ML033530020 Fig 2-9
|
||||
bpra_Plenum_bot = 401.238 # ML033530020 Fig 2-9
|
||||
bpra_Plenum_top = 421.532 # ML033530020 Fig 2-9
|
||||
bpra_Rod_top = 431.876 # same as struct_UpperNozzle_top
|
||||
|
||||
## <!--- axials copied straight from rod_axials.ods
|
||||
# Guide Tube
|
||||
gt_Rod_bot = 35.0000 # same as fuel_Rod_bot
|
||||
gt_Dashpot_bot = 35.0000 #
|
||||
gt_Dashpot_top = 39.9580 # same as rcca_Rod_bot for full insertion
|
||||
gt_Upper_bot = 39.9580 #
|
||||
gt_Upper_top = 423.049 # same as struct_UpperNozzle_bot
|
||||
gt_Rod_top = 423.049 #
|
||||
|
||||
# Core Structures
|
||||
struct_LowestExtent = 0.00000 #
|
||||
struct_SupportPlate_bot = 20.0000 # arbitrary amount of water below core
|
||||
struct_SupportPlate_top = 25.0000 # guessed
|
||||
struct_LowerNozzle_bot = 25.0000 # same as struct_SupportPlate_top
|
||||
struct_LowerNozzle_top = 35.0000 # approx from ** NDR of 4.088in for lower nozzle height
|
||||
struct_LowestExtent_2d = 220.000 # arbitrary lower slice for 2D problem
|
||||
struct_HighestExtent_2d = 230.000 # arbitrary upper slice for 2D problem
|
||||
struct_UpperNozzle_bot = 423.049 # fig 4.2-3 from Watts Bar Unit 2 safety analysis report
|
||||
struct_UpperNozzle_top = 431.876 # fig 4.2-3 from Watts Bar Unit 2 safety analysis report
|
||||
struct_HighestExtent = 460.000 # arbitrary amount of water above core
|
||||
# Intrument Tube
|
||||
instr_Rod_bot = 35.0000 # same as fuel_Rod_bot
|
||||
instr_Rod_top = 423.049 # same as struct_UpperNozzle_bot
|
||||
|
||||
# Fuel Rod
|
||||
fuel_Rod_bot = 35.0000 # same as struct_LowerNozzle_top
|
||||
fuel_LowerFitting_bot = 35.0000 # ML033530020 Fig 2-7
|
||||
fuel_LowerFitting_top = 36.7480 # ML033530020 Fig 2-7
|
||||
fuel_ActiveFuel_bot = 36.7480 # ML033530020 Fig 2-7
|
||||
fuel_ActiveFuel_top = 402.508 # ML033530020 Fig 2-7
|
||||
fuel_Plenum_bot = 402.508 # ML033530020 Fig 2-7
|
||||
fuel_Plenum_top = 417.164 # ML033530020 Fig 2-7
|
||||
fuel_UpperFitting_bot = 417.164 # ML033530020 Fig 2-7
|
||||
fuel_UpperFitting_top = 419.704 # ML033530020 Fig 2-7
|
||||
fuel_Rod_top = 419.704 # ML033530020 Fig 2-7
|
||||
# Grid Spacers (centers provided by utiliy) (heights 1.65 top/bottom, 2.25 intermediate)
|
||||
grid1_bot = 37.1621 #
|
||||
grid1_top = 40.5200 #
|
||||
grid2_bot = 98.0250 #
|
||||
grid2_top = 103.740 #
|
||||
grid3_bot = 150.222 #
|
||||
grid3_top = 155.937 #
|
||||
grid4_bot = 202.419 #
|
||||
grid4_top = 208.134 #
|
||||
grid5_bot = 254.616 #
|
||||
grid5_top = 260.331 #
|
||||
grid6_bot = 306.813 #
|
||||
grid6_top = 312.528 #
|
||||
grid7_bot = 359.010 #
|
||||
grid7_top = 364.725 #
|
||||
grid8_bot = 411.806 #
|
||||
grid8_top = 415.164 #
|
||||
|
||||
# RCCAs (0 steps withdraw, i.e., fully inserted)
|
||||
rcca_Rod_bot = 39.9580 # ML033530020 Fig 2-8
|
||||
rcca_LowerFitting_bot = 39.9580 # ML033530020 Fig 2-8
|
||||
rcca_LowerFitting_top = 41.8280 # ML033530020 Fig 2-8
|
||||
rcca_AIC_bot = 41.8280 # ML033530020 Fig 2-8
|
||||
rcca_AIC_top = 143.428 # ML033530020 Fig 2-8
|
||||
rcca_B4C_bot = 143.428 # ML033530020 Fig 2-8
|
||||
rcca_B4C_top = 402.508 # ML033530020 Fig 2-8
|
||||
rcca_Spacer_bot = 402.508 # ML033530020 Fig 2-8
|
||||
rcca_Spacer_top = 403.778 # ML033530020 Fig 2-8
|
||||
rcca_Plenum_bot = 403.778 # ML033530020 Fig 2-8
|
||||
rcca_Plenum_top = 415.558 # ML033530020 Fig 2-8
|
||||
rcca_Rod_top = 460.000 # same as struct_HighestExtent
|
||||
rcca_StepWidth = 1.58193 # Active height divided into 228 steps
|
||||
# data for nozzle and support plate region
|
||||
n_nozzle_pins = 264 # number of pins
|
||||
# volume fractions from ML033530020 (table 2-3)
|
||||
nozzle_water_vol_frac = 0.8280 # water volume fraction
|
||||
nozzle_ss_vol_frac = 0.1720 # stainless steel volume fraction
|
||||
|
||||
# BPRAs
|
||||
bpra_Rod_bot = 38.6600 # ML033530020 Fig 2-9
|
||||
bpra_LowerFitting_bot = 38.6600 # ML033530020 Fig 2-9
|
||||
bpra_LowerFitting_top = 40.5580 # ML033530020 Fig 2-9
|
||||
bpra_Active_bot = 40.5580 # ML033530020 Fig 2-9
|
||||
bpra_Active_top = 401.238 # ML033530020 Fig 2-9
|
||||
bpra_Plenum_bot = 401.238 # ML033530020 Fig 2-9
|
||||
bpra_Plenum_top = 421.532 # ML033530020 Fig 2-9
|
||||
bpra_Rod_top = 431.876 # same as struct_UpperNozzle_top
|
||||
## -- axials copied straight from rod_axials.ods -->
|
||||
|
||||
# Guide Tube
|
||||
gt_Rod_bot = 35.0000 # same as fuel_Rod_bot
|
||||
gt_Dashpot_bot = 35.0000 #
|
||||
gt_Dashpot_top = 39.9580 # same as rcca_Rod_bot for full insertion
|
||||
gt_Upper_bot = 39.9580 #
|
||||
gt_Upper_top = 423.049 # same as struct_UpperNozzle_bot
|
||||
gt_Rod_top = 423.049 #
|
||||
## radial paramters
|
||||
coreBarrelIR = 187.9600 # Fig 2.1 from NDR 2-8
|
||||
coreBarrelOR = 193.6750 # Fig 2.1 from NDR 2-8
|
||||
baffleWidth = 2.2225 # Fig 2.1 from NDR 2-8
|
||||
baffleWaterGap = 0.1627 # ML033530020
|
||||
linerIR = 219.150 # ML033530020
|
||||
rpvIR = 219.710 # ML033530020
|
||||
rpvOR = 241.300 # ML033530020
|
||||
|
||||
# Intrument Tube
|
||||
instr_Rod_bot = 35.0000 # same as fuel_Rod_bot
|
||||
instr_Rod_top = 423.049 # same as struct_UpperNozzle_bot
|
||||
neutronShieldIR = 194.840 # ML033530020
|
||||
neutronShieldOR = 201.630 # ML033530020
|
||||
neutronShield_NWbot_SEtop = {'a': 1, 'b': math.tan(math.pi/3 + math.pi/180), 'c': 0, 'd': 0}
|
||||
neutronShield_NWtop_SEbot = {'a': 1, 'b': math.tan(math.pi/6 - math.pi/180), 'c': 0, 'd': 0}
|
||||
neutronShield_NEbot_SWtop = {'a': 1, 'b': math.tan(-math.pi/3 - math.pi/180), 'c': 0, 'd': 0}
|
||||
neutronShield_NEtop_SWbot = {'a': 1, 'b': math.tan(-math.pi/6 + math.pi/180), 'c': 0, 'd': 0}
|
||||
|
||||
# Grid Spacers (centers provided by utiliy) (heights 1.65 top/bottom, 2.25 intermediate)
|
||||
grid1_bot = 37.1621 #
|
||||
grid1_top = 40.5200 #
|
||||
grid2_bot = 98.0250 #
|
||||
grid2_top = 103.740 #
|
||||
grid3_bot = 150.222 #
|
||||
grid3_top = 155.937 #
|
||||
grid4_bot = 202.419 #
|
||||
grid4_top = 208.134 #
|
||||
grid5_bot = 254.616 #
|
||||
grid5_top = 260.331 #
|
||||
grid6_bot = 306.813 #
|
||||
grid6_top = 312.528 #
|
||||
grid7_bot = 359.010 #
|
||||
grid7_top = 364.725 #
|
||||
grid8_bot = 411.806 #
|
||||
grid8_top = 415.164 #
|
||||
def __init__(self, S:int=None, SS:int=None) -> None:
|
||||
|
||||
# data for nozzle and support plate region
|
||||
n_nozzle_pins = 264 # number of pins
|
||||
# volume fractions from ML033530020 (table 2-3)
|
||||
nozzle_water_vol_frac = 0.8280 # water volume fraction
|
||||
nozzle_ss_vol_frac = 0.1720 # stainless steel volume fraction
|
||||
############## Geometry paramters ##############
|
||||
self.first_thru = True
|
||||
self.rcca_bank_steps_withdrawn = {}
|
||||
self.S = S
|
||||
self.SS = SS
|
||||
|
||||
## -- axials copied straight from rod_axials.ods -->
|
||||
@property
|
||||
def S(self) -> int:
|
||||
return self._S
|
||||
|
||||
## radial paramters
|
||||
coreBarrelIR = 187.9600 # Fig 2.1 from NDR 2-8
|
||||
coreBarrelOR = 193.6750 # Fig 2.1 from NDR 2-8
|
||||
baffleWidth = 2.2225 # Fig 2.1 from NDR 2-8
|
||||
baffleWaterGap = 0.1627 # ML033530020
|
||||
linerIR = 219.150 # ML033530020
|
||||
rpvIR = 219.710 # ML033530020
|
||||
rpvOR = 241.300 # ML033530020
|
||||
@S.setter
|
||||
def S(self,S):
|
||||
|
||||
neutronShieldIR = 194.840 # ML033530020
|
||||
neutronShieldOR = 201.630 # ML033530020
|
||||
neutronShield_NWbot_SEtop = {'a': 1, 'b': math.tan(math.pi/3 + math.pi/180), 'c': 0, 'd': 0}
|
||||
neutronShield_NWtop_SEbot = {'a': 1, 'b': math.tan(math.pi/6 - math.pi/180), 'c': 0, 'd': 0}
|
||||
neutronShield_NEbot_SWtop = {'a': 1, 'b': math.tan(-math.pi/3 - math.pi/180), 'c': 0, 'd': 0}
|
||||
neutronShield_NEtop_SWbot = {'a': 1, 'b': math.tan(-math.pi/6 + math.pi/180), 'c': 0, 'd': 0}
|
||||
if isinstance(S,(float,int)):
|
||||
if S < 0:
|
||||
print("Cannot have a negative S position. S set to 0")
|
||||
self._S = 0
|
||||
elif S > 574:
|
||||
print("Cannot have a S position greater than 573. S set to 573")
|
||||
self._S = 573
|
||||
else:
|
||||
self._S = S
|
||||
elif S == None:
|
||||
self._S = 0
|
||||
print("Value supplied was 'None'. S Value set to default value")
|
||||
else:
|
||||
raise ValueError
|
||||
|
||||
self._D = max(0,228-self._S) # bite position is bank D at 213 steps withdrawn
|
||||
self._C = 228 if self._D > 113 else max(0, 228-self._S+113+2)
|
||||
self._B = 228 if self._C > 113 else max(0, 228-self._S+113*2+4)
|
||||
self._A = 228 if self._B > 113 else max(0, 228-self._S+113*3+6)
|
||||
|
||||
if not self.first_thru:
|
||||
self._update_dictionary()
|
||||
print(" RCCA Positions")
|
||||
print(f" A: {self._A:3d} B: {self._B:3d} C: {self._C:3d} D: {self._D:3d}")
|
||||
print(f" SA: {self._SA:3d} SB: {self._SB:3d} SC: {self._SC:3d} SD: {self._SD:3d} SE: {self._SE:3d}")
|
||||
else:
|
||||
self.first_thru = False
|
||||
|
||||
@property
|
||||
def A(self) -> int:
|
||||
return self._A
|
||||
|
||||
@property
|
||||
def B(self) -> int:
|
||||
return self._B
|
||||
|
||||
@property
|
||||
def C(self) -> int:
|
||||
return self._C
|
||||
|
||||
@property
|
||||
def D(self) -> int:
|
||||
return self._D
|
||||
|
||||
@property
|
||||
def SS(self) -> int:
|
||||
return self._SS
|
||||
|
||||
@SS.setter
|
||||
def SS(self,SS):
|
||||
|
||||
if isinstance(SS,(float,int)):
|
||||
if SS < 0:
|
||||
print("Cannot have a negative SS position. SS set to 0")
|
||||
self._SS = 0
|
||||
elif SS > 228:
|
||||
print("Cannot have a SS position greater than 228. SS set to 228")
|
||||
self._SS = 228
|
||||
else:
|
||||
self._SS = int(SS)
|
||||
elif SS == None:
|
||||
self._SS = 0
|
||||
print("Value supplied was 'None'. SS Value set to default value")
|
||||
else:
|
||||
raise ValueError
|
||||
|
||||
self._SA = 228-self._SS
|
||||
self._SB = 228-self._SS
|
||||
self._SC = 228-self._SS
|
||||
self._SD = 228-self._SS
|
||||
self._SE = 228-self._SS
|
||||
|
||||
self._update_dictionary()
|
||||
print(" RCCA Positions")
|
||||
print(f" A: {self._A:3d} B: {self._B:3d} C: {self._C:3d} D: {self._D:3d}")
|
||||
print(f" SA: {self._SA:3d} SB: {self._SB:3d} SC: {self._SC:3d} SD: {self._SD:3d} SE: {self._SE:3d}")
|
||||
|
||||
@property
|
||||
def SA(self) -> int:
|
||||
return self._SA
|
||||
|
||||
@property
|
||||
def SB(self) -> int:
|
||||
return self._SB
|
||||
|
||||
@property
|
||||
def SC(self) -> int:
|
||||
return self._SC
|
||||
|
||||
@property
|
||||
def SD(self) -> int:
|
||||
return self._SD
|
||||
|
||||
@property
|
||||
def SE(self) -> int:
|
||||
return self._SE
|
||||
|
||||
def _update_dictionary(self):
|
||||
self.rcca_bank_steps_withdrawn = {
|
||||
'A': self._A,
|
||||
'B': self._B,
|
||||
'C': self._C,
|
||||
'D': self._D,
|
||||
'SA': self._SA,
|
||||
'SB': self._SB,
|
||||
'SC': self._SC,
|
||||
'SD': self._SD,
|
||||
'SE': self._SE,
|
||||
}
|
||||
|
||||
@property
|
||||
def rcca_banks(self):
|
||||
self._update_dictionary()
|
||||
return self.rcca_bank_steps_withdrawn.keys()
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ Provides a container class for BEAVRS core lattice
|
|||
|
||||
"""
|
||||
|
||||
import beavrs.constants as c
|
||||
from beavrs.corebuilder import TemplatedLattice
|
||||
|
||||
class Core(object):
|
||||
|
|
@ -57,12 +56,13 @@ class Core(object):
|
|||
'J___1', 'J___2', 'J___3', 'J___8', 'J___9', 'K__15', 'K__14', 'K__13',
|
||||
'K__12', 'K__11', 'K__10']
|
||||
|
||||
def __init__(self, pincells, assemblies, baffle, is_symmetric=False):
|
||||
def __init__(self, pincells, assemblies, baffle, C, is_symmetric=False):
|
||||
""" Creates BEAVRS core lattice universe """
|
||||
|
||||
self.pins = pincells
|
||||
self.assem = assemblies
|
||||
self.baffle = baffle
|
||||
self.c = C
|
||||
self.is_symmetric = is_symmetric
|
||||
|
||||
self._set_enrichment_positions()
|
||||
|
|
@ -161,8 +161,8 @@ class Core(object):
|
|||
|
||||
lattice = TemplatedLattice(name='Core Lattice')
|
||||
lattice.setTemplate(self.core_lattice_template)
|
||||
lattice.pitch = [c.latticePitch, c.latticePitch]
|
||||
lattice.lower_left = [-19.*c.latticePitch/2., -19.*c.latticePitch/2.]
|
||||
lattice.pitch = [self.c.latticePitch, self.c.latticePitch]
|
||||
lattice.lower_left = [-19.*self.c.latticePitch/2., -19.*self.c.latticePitch/2.]
|
||||
lattice.updatePositions(self.baffle.universes)
|
||||
lattice.setPosition('dummy', self.pins.u_waterPin)
|
||||
for pos in self.core_positions:
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import numpy as np
|
|||
|
||||
import openmc
|
||||
from openmc.data import atomic_mass, atomic_weight
|
||||
import beavrs.constants as c
|
||||
|
||||
|
||||
MB10 = atomic_mass('B10')
|
||||
|
|
@ -18,8 +17,7 @@ MU234 = atomic_mass('U234')
|
|||
MU235 = atomic_mass('U235')
|
||||
MU238 = atomic_mass('U238')
|
||||
|
||||
|
||||
def openmc_materials(ppm):
|
||||
def openmc_materials(c,ppm):
|
||||
|
||||
# Initialize openmc material dictionary
|
||||
mats = OrderedDict()
|
||||
|
|
|
|||
|
|
@ -6,17 +6,16 @@ Provides a container class of all BEAVRS pincells
|
|||
|
||||
import openmc
|
||||
|
||||
import beavrs.constants as c
|
||||
from beavrs.corebuilder import InfinitePinCell
|
||||
from beavrs.corebuilder import AxialPinCell
|
||||
|
||||
|
||||
class Pincells(object):
|
||||
|
||||
def __init__(self, mats):
|
||||
def __init__(self, mats, C):
|
||||
""" Creates BEAVRS pincell universes """
|
||||
|
||||
self.mats = mats
|
||||
self.c = C
|
||||
|
||||
self._add_structural_axials()
|
||||
self._add_dummy_universe()
|
||||
|
|
@ -30,12 +29,12 @@ class Pincells(object):
|
|||
def _add_structural_axials(self):
|
||||
""" Adds structure axial surfaces common for most pincells """
|
||||
|
||||
self.s_struct_supportPlate_bot = openmc.ZPlane(name='Support plate bottom', z0=c.struct_SupportPlate_bot)
|
||||
self.s_struct_supportPlate_top = openmc.ZPlane(name='Support plate top', z0=c.struct_SupportPlate_top)
|
||||
self.s_struct_lowerNozzle_bot = openmc.ZPlane(name='Lower nozzle bottom', z0=c.struct_LowerNozzle_bot)
|
||||
self.s_struct_lowerNozzle_top = openmc.ZPlane(name='Lower nozzle top', z0=c.struct_LowerNozzle_top)
|
||||
self.s_struct_upperNozzle_bot = openmc.ZPlane(name='Upper nozzle bottom', z0=c.struct_UpperNozzle_bot)
|
||||
self.s_struct_upperNozzle_top = openmc.ZPlane(name='Upper nozzle top', z0=c.struct_UpperNozzle_top)
|
||||
self.s_struct_supportPlate_bot = openmc.ZPlane(name='Support plate bottom', z0=self.c.struct_SupportPlate_bot)
|
||||
self.s_struct_supportPlate_top = openmc.ZPlane(name='Support plate top', z0=self.c.struct_SupportPlate_top)
|
||||
self.s_struct_lowerNozzle_bot = openmc.ZPlane(name='Lower nozzle bottom', z0=self.c.struct_LowerNozzle_bot)
|
||||
self.s_struct_lowerNozzle_top = openmc.ZPlane(name='Lower nozzle top', z0=self.c.struct_LowerNozzle_top)
|
||||
self.s_struct_upperNozzle_bot = openmc.ZPlane(name='Upper nozzle bottom', z0=self.c.struct_UpperNozzle_bot)
|
||||
self.s_struct_upperNozzle_top = openmc.ZPlane(name='Upper nozzle top', z0=self.c.struct_UpperNozzle_top)
|
||||
|
||||
def _add_dummy_universe(self):
|
||||
""" Adds all-water universe for empty lattice positions"""
|
||||
|
|
@ -49,32 +48,32 @@ class Pincells(object):
|
|||
|
||||
# Rectangular prisms for grid spacers
|
||||
grid_surfs_tb = \
|
||||
openmc.rectangular_prism(c.rodGridSide_tb, c.rodGridSide_tb)
|
||||
openmc.rectangular_prism(self.c.rodGridSide_tb, self.c.rodGridSide_tb)
|
||||
grid_surfs_i = \
|
||||
openmc.rectangular_prism(c.rodGridSide_i, c.rodGridSide_i)
|
||||
openmc.rectangular_prism(self.c.rodGridSide_i, self.c.rodGridSide_i)
|
||||
|
||||
# Rectangular prisms for lattice grid sleeves
|
||||
grid_surfs_ass = \
|
||||
openmc.rectangular_prism(c.gridstrapSide, c.gridstrapSide)
|
||||
openmc.rectangular_prism(self.c.gridstrapSide, self.c.gridstrapSide)
|
||||
|
||||
# Grids axial surfaces
|
||||
|
||||
self.s_grid1_bot = openmc.ZPlane(name='Bottom of grid 1', z0=c.grid1_bot)
|
||||
self.s_grid1_top = openmc.ZPlane(name='Top of grid 1', z0=c.grid1_top)
|
||||
self.s_grid2_bot = openmc.ZPlane(name='Bottom of grid 2', z0=c.grid2_bot)
|
||||
self.s_grid2_top = openmc.ZPlane(name='Top of grid 2', z0=c.grid2_top)
|
||||
self.s_grid3_bot = openmc.ZPlane(name='Bottom of grid 3', z0=c.grid3_bot)
|
||||
self.s_grid3_top = openmc.ZPlane(name='Top of grid 3', z0=c.grid3_top)
|
||||
self.s_grid4_bot = openmc.ZPlane(name='Bottom of grid 4', z0=c.grid4_bot)
|
||||
self.s_grid4_top = openmc.ZPlane(name='Top of grid 4', z0=c.grid4_top)
|
||||
self.s_grid5_bot = openmc.ZPlane(name='Bottom of grid 5', z0=c.grid5_bot)
|
||||
self.s_grid5_top = openmc.ZPlane(name='Top of grid 5', z0=c.grid5_top)
|
||||
self.s_grid6_bot = openmc.ZPlane(name='Bottom of grid 6', z0=c.grid6_bot)
|
||||
self.s_grid6_top = openmc.ZPlane(name='Top of grid 6', z0=c.grid6_top)
|
||||
self.s_grid7_bot = openmc.ZPlane(name='Bottom of grid 7', z0=c.grid7_bot)
|
||||
self.s_grid7_top = openmc.ZPlane(name='Top of grid 7', z0=c.grid7_top)
|
||||
self.s_grid8_bot = openmc.ZPlane(name='Bottom of grid 8', z0=c.grid8_bot)
|
||||
self.s_grid8_top = openmc.ZPlane(name='Top of grid 8', z0=c.grid8_top)
|
||||
self.s_grid1_bot = openmc.ZPlane(name='Bottom of grid 1', z0=self.c.grid1_bot)
|
||||
self.s_grid1_top = openmc.ZPlane(name='Top of grid 1', z0=self.c.grid1_top)
|
||||
self.s_grid2_bot = openmc.ZPlane(name='Bottom of grid 2', z0=self.c.grid2_bot)
|
||||
self.s_grid2_top = openmc.ZPlane(name='Top of grid 2', z0=self.c.grid2_top)
|
||||
self.s_grid3_bot = openmc.ZPlane(name='Bottom of grid 3', z0=self.c.grid3_bot)
|
||||
self.s_grid3_top = openmc.ZPlane(name='Top of grid 3', z0=self.c.grid3_top)
|
||||
self.s_grid4_bot = openmc.ZPlane(name='Bottom of grid 4', z0=self.c.grid4_bot)
|
||||
self.s_grid4_top = openmc.ZPlane(name='Top of grid 4', z0=self.c.grid4_top)
|
||||
self.s_grid5_bot = openmc.ZPlane(name='Bottom of grid 5', z0=self.c.grid5_bot)
|
||||
self.s_grid5_top = openmc.ZPlane(name='Top of grid 5', z0=self.c.grid5_top)
|
||||
self.s_grid6_bot = openmc.ZPlane(name='Bottom of grid 6', z0=self.c.grid6_bot)
|
||||
self.s_grid6_top = openmc.ZPlane(name='Top of grid 6', z0=self.c.grid6_top)
|
||||
self.s_grid7_bot = openmc.ZPlane(name='Bottom of grid 7', z0=self.c.grid7_bot)
|
||||
self.s_grid7_top = openmc.ZPlane(name='Top of grid 7', z0=self.c.grid7_top)
|
||||
self.s_grid8_bot = openmc.ZPlane(name='Bottom of grid 8', z0=self.c.grid8_bot)
|
||||
self.s_grid8_top = openmc.ZPlane(name='Top of grid 8', z0=self.c.grid8_top)
|
||||
|
||||
# Grids pincell universes
|
||||
|
||||
|
|
@ -155,22 +154,22 @@ class Pincells(object):
|
|||
|
||||
# Fuel radial surfaces
|
||||
|
||||
self.s_fuel_pellet_OR = openmc.ZCylinder(name='Fuel pellet OR', r=c.pelletOR)
|
||||
self.s_fuel_clad_IR = openmc.ZCylinder(name='Fuel clad IR', r=c.cladIR)
|
||||
self.s_fuel_clad_OR = openmc.ZCylinder(name='Fuel clad OR', r=c.cladOR)
|
||||
self.s_fuel_plenumSpring_OR = openmc.ZCylinder(name='Fuel rod plenum spring OR', r=c.plenumSpringOR)
|
||||
self.s_fuel_pellet_OR = openmc.ZCylinder(name='Fuel pellet OR', r=self.c.pelletOR)
|
||||
self.s_fuel_clad_IR = openmc.ZCylinder(name='Fuel clad IR', r=self.c.cladIR)
|
||||
self.s_fuel_clad_OR = openmc.ZCylinder(name='Fuel clad OR', r=self.c.cladOR)
|
||||
self.s_fuel_plenumSpring_OR = openmc.ZCylinder(name='Fuel rod plenum spring OR', r=self.c.plenumSpringOR)
|
||||
|
||||
# Fuel axial surfaces
|
||||
|
||||
self.s_fuel_rod_bot = openmc.ZPlane(name='Fuel rod bottom', z0=c.fuel_Rod_bot)
|
||||
self.s_fuel_rod_bot = openmc.ZPlane(name='Fuel rod bottom', z0=self.c.fuel_Rod_bot)
|
||||
self.s_fuel_lowerFitting_bot = self.s_fuel_rod_bot
|
||||
self.s_fuel_lowerFitting_top = openmc.ZPlane(name='Fuel lower fitting top', z0=c.fuel_LowerFitting_top)
|
||||
self.s_fuel_lowerFitting_top = openmc.ZPlane(name='Fuel lower fitting top', z0=self.c.fuel_LowerFitting_top)
|
||||
self.s_fuel_activeFuel_bot = self.s_fuel_lowerFitting_top
|
||||
self.s_fuel_activeFuel_top = openmc.ZPlane(name='Fuel active region top', z0=c.fuel_ActiveFuel_top)
|
||||
self.s_fuel_activeFuel_top = openmc.ZPlane(name='Fuel active region top', z0=self.c.fuel_ActiveFuel_top)
|
||||
self.s_fuel_plenum_bot = self.s_fuel_activeFuel_top
|
||||
self.s_fuel_plenum_top = openmc.ZPlane(name='Fuel plenum top', z0=c.fuel_Plenum_top)
|
||||
self.s_fuel_plenum_top = openmc.ZPlane(name='Fuel plenum top', z0=self.c.fuel_Plenum_top)
|
||||
self.s_fuel_upperFitting_bot = self.s_fuel_plenum_top
|
||||
self.s_fuel_upperFitting_top = openmc.ZPlane(name='Fuel upper fitting top', z0=c.fuel_UpperFitting_top)
|
||||
self.s_fuel_upperFitting_top = openmc.ZPlane(name='Fuel upper fitting top', z0=self.c.fuel_UpperFitting_top)
|
||||
|
||||
# Fuel pincell universes
|
||||
|
||||
|
|
@ -210,17 +209,17 @@ class Pincells(object):
|
|||
|
||||
# GT radial surfaces
|
||||
|
||||
self.s_gt_IR = openmc.ZCylinder(name='Guide tube IR', r=c.guideTubeIR)
|
||||
self.s_gt_OR = openmc.ZCylinder(name='Guide tube OR', r=c.guideTubeOR)
|
||||
self.s_gt_dashpot_IR = openmc.ZCylinder(name='Guide tube IR below dashpot', r=c.guideTubeDashIR)
|
||||
self.s_gt_dashpot_OR = openmc.ZCylinder(name='Guide tube OR below dashpot', r=c.guideTubeDashOR)
|
||||
self.s_gt_IR = openmc.ZCylinder(name='Guide tube IR', r=self.c.guideTubeIR)
|
||||
self.s_gt_OR = openmc.ZCylinder(name='Guide tube OR', r=self.c.guideTubeOR)
|
||||
self.s_gt_dashpot_IR = openmc.ZCylinder(name='Guide tube IR below dashpot', r=self.c.guideTubeDashIR)
|
||||
self.s_gt_dashpot_OR = openmc.ZCylinder(name='Guide tube OR below dashpot', r=self.c.guideTubeDashOR)
|
||||
|
||||
# GT axial surfaces
|
||||
|
||||
self.s_gt_rod_bot = openmc.ZPlane(name='Bottom of GT rod', z0=c.gt_Rod_bot)
|
||||
self.s_gt_rod_bot = openmc.ZPlane(name='Bottom of GT rod', z0=self.c.gt_Rod_bot)
|
||||
self.s_gt_dashpot_bot = self.s_gt_rod_bot
|
||||
self.s_gt_dashpot_top = openmc.ZPlane(name='GT Dashpot plane', z0=c.gt_Dashpot_top)
|
||||
self.s_gt_rod_top = openmc.ZPlane(name='Top of GT rod', z0=c.gt_Rod_top)
|
||||
self.s_gt_dashpot_top = openmc.ZPlane(name='GT Dashpot plane', z0=self.c.gt_Dashpot_top)
|
||||
self.s_gt_rod_top = openmc.ZPlane(name='Top of GT rod', z0=self.c.gt_Rod_top)
|
||||
|
||||
# GT pincell universes
|
||||
|
||||
|
|
@ -261,8 +260,8 @@ class Pincells(object):
|
|||
|
||||
# IT radial surfaces
|
||||
|
||||
self.s_it_IR = openmc.ZCylinder(name='Instrument tube thimble IR', r=c.instrTubeIR)
|
||||
self.s_it_OR = openmc.ZCylinder(name='Instrument tube thimble OR', r=c.instrTubeOR)
|
||||
self.s_it_IR = openmc.ZCylinder(name='Instrument tube thimble IR', r=self.c.instrTubeIR)
|
||||
self.s_it_OR = openmc.ZCylinder(name='Instrument tube thimble OR', r=self.c.instrTubeOR)
|
||||
|
||||
# IT pincell universe
|
||||
self.u_it_p = InfinitePinCell(name='Instrument tube thimble')
|
||||
|
|
@ -294,23 +293,23 @@ class Pincells(object):
|
|||
|
||||
# BP radial surfaces
|
||||
|
||||
self.s_bp_innerclad_IR = openmc.ZCylinder(name='BPRA rod radius 1', r=c.burnabs1)
|
||||
self.s_bp_innerclad_OR = openmc.ZCylinder(name='BPRA rod radius 2', r=c.burnabs2)
|
||||
self.s_bp_poison_IR = openmc.ZCylinder(name='BPRA rod radius 3', r=c.burnabs3)
|
||||
self.s_bp_poison_OR = openmc.ZCylinder(name='BPRA rod radius 4', r=c.burnabs4)
|
||||
self.s_bp_outerclad_IR = openmc.ZCylinder(name='BPRA rod radius 5', r=c.burnabs5)
|
||||
self.s_bp_outerclad_OR = openmc.ZCylinder(name='BPRA rod radius 6', r=c.burnabs6)
|
||||
self.s_bp_innerclad_IR = openmc.ZCylinder(name='BPRA rod radius 1', r=self.c.burnabs1)
|
||||
self.s_bp_innerclad_OR = openmc.ZCylinder(name='BPRA rod radius 2', r=self.c.burnabs2)
|
||||
self.s_bp_poison_IR = openmc.ZCylinder(name='BPRA rod radius 3', r=self.c.burnabs3)
|
||||
self.s_bp_poison_OR = openmc.ZCylinder(name='BPRA rod radius 4', r=self.c.burnabs4)
|
||||
self.s_bp_outerclad_IR = openmc.ZCylinder(name='BPRA rod radius 5', r=self.c.burnabs5)
|
||||
self.s_bp_outerclad_OR = openmc.ZCylinder(name='BPRA rod radius 6', r=self.c.burnabs6)
|
||||
|
||||
# BP axial surfaces
|
||||
|
||||
self.s_bp_rod_bot = openmc.ZPlane(name='Bottom of BPRA rod', z0=c.bpra_Rod_bot)
|
||||
self.s_bp_rod_bot = openmc.ZPlane(name='Bottom of BPRA rod', z0=self.c.bpra_Rod_bot)
|
||||
self.s_bp_lowerFitting_bot = self.s_bp_rod_bot
|
||||
self.s_bp_lowerFitting_top = openmc.ZPlane(name='Top of lower fitting in BPRA rod', z0=c.bpra_LowerFitting_top)
|
||||
self.s_bp_lowerFitting_top = openmc.ZPlane(name='Top of lower fitting in BPRA rod', z0=self.c.bpra_LowerFitting_top)
|
||||
self.s_bp_active_bot = self.s_bp_lowerFitting_top
|
||||
self.s_bp_active_top = openmc.ZPlane(name='Top of active poison in BPRA rod', z0=c.bpra_Active_top)
|
||||
self.s_bp_active_top = openmc.ZPlane(name='Top of active poison in BPRA rod', z0=self.c.bpra_Active_top)
|
||||
self.s_bp_plenum_bot = self.s_bp_active_top
|
||||
self.s_bp_plenum_top = openmc.ZPlane(name='Top of plenum in BPRA rod', z0=c.bpra_Plenum_top)
|
||||
self.s_bp_rod_top = openmc.ZPlane(name='Top of BPRA rod', z0=c.bpra_Rod_top)
|
||||
self.s_bp_plenum_top = openmc.ZPlane(name='Top of plenum in BPRA rod', z0=self.c.bpra_Plenum_top)
|
||||
self.s_bp_rod_top = openmc.ZPlane(name='Top of BPRA rod', z0=self.c.bpra_Rod_top)
|
||||
|
||||
# BP pincell universes
|
||||
|
||||
|
|
@ -349,12 +348,12 @@ class Pincells(object):
|
|||
|
||||
# RCCA rod radial surfaces
|
||||
|
||||
self.s_rcca_clad_IR = openmc.ZCylinder(name='RCCA rod clad IR', r=c.rcca_clad_IR)
|
||||
self.s_rcca_clad_OR = openmc.ZCylinder(name='RCCA rod clad OR', r=c.rcca_clad_OR)
|
||||
self.s_rcca_b4c_OR = openmc.ZCylinder(name='RCCA rod B4C OR', r=c.rcca_b4c_OR)
|
||||
self.s_rcca_aic_OR = openmc.ZCylinder(name='RCCA rod AIC OR', r=c.rcca_aic_OR)
|
||||
self.s_rcca_spacer_OR = openmc.ZCylinder(name='RCCA rod spacer OR', r=c.rcca_spacer_OR)
|
||||
self.s_rcca_spring_OR = openmc.ZCylinder(name='RCCA rod plenum spring OR', r=c.rcca_spring_OR)
|
||||
self.s_rcca_clad_IR = openmc.ZCylinder(name='RCCA rod clad IR', r=self.c.rcca_clad_IR)
|
||||
self.s_rcca_clad_OR = openmc.ZCylinder(name='RCCA rod clad OR', r=self.c.rcca_clad_OR)
|
||||
self.s_rcca_b4c_OR = openmc.ZCylinder(name='RCCA rod B4C OR', r=self.c.rcca_b4c_OR)
|
||||
self.s_rcca_aic_OR = openmc.ZCylinder(name='RCCA rod AIC OR', r=self.c.rcca_aic_OR)
|
||||
self.s_rcca_spacer_OR = openmc.ZCylinder(name='RCCA rod spacer OR', r=self.c.rcca_spacer_OR)
|
||||
self.s_rcca_spring_OR = openmc.ZCylinder(name='RCCA rod plenum spring OR', r=self.c.rcca_spring_OR)
|
||||
|
||||
# RCCA rod axial surfaces
|
||||
|
||||
|
|
@ -364,14 +363,14 @@ class Pincells(object):
|
|||
self.s_rcca_b4c_top = {}
|
||||
self.s_rcca_spacer_top = {}
|
||||
self.s_rcca_plenum_top = {}
|
||||
for b in sorted(c.rcca_banks):
|
||||
d = c.rcca_bank_steps_withdrawn[b]*c.rcca_StepWidth
|
||||
self.s_rcca_rod_bot[b] = openmc.ZPlane(name='Bottom of RCCA rod bank {0}'.format(b), z0=c.rcca_Rod_bot + d)
|
||||
self.s_rcca_lowerFitting_top[b] = openmc.ZPlane(name='Top of RCCA rod lower fitting bank {0}'.format(b), z0=c.rcca_LowerFitting_top + d)
|
||||
self.s_rcca_aic_top[b] = openmc.ZPlane(name='Top of RCCA rod AIC bank {0}'.format(b), z0=c.rcca_AIC_top + d)
|
||||
self.s_rcca_b4c_top[b] = openmc.ZPlane(name='Top of RCCA rod B4C bank {0}'.format(b), z0=c.rcca_B4C_top + d)
|
||||
self.s_rcca_spacer_top[b] = openmc.ZPlane(name='Top of RCCA rod spacer bank {0}'.format(b), z0=c.rcca_Spacer_top + d)
|
||||
self.s_rcca_plenum_top[b] = openmc.ZPlane(name='Top of RCCA rod plenum bank {0}'.format(b), z0=c.rcca_Plenum_top + d)
|
||||
for b in sorted(self.c.rcca_banks):
|
||||
d = self.c.rcca_bank_steps_withdrawn[b]*self.c.rcca_StepWidth
|
||||
self.s_rcca_rod_bot[b] = openmc.ZPlane(name='Bottom of RCCA rod bank {0}'.format(b), z0=self.c.rcca_Rod_bot + d)
|
||||
self.s_rcca_lowerFitting_top[b] = openmc.ZPlane(name='Top of RCCA rod lower fitting bank {0}'.format(b), z0=self.c.rcca_LowerFitting_top + d)
|
||||
self.s_rcca_aic_top[b] = openmc.ZPlane(name='Top of RCCA rod AIC bank {0}'.format(b), z0=self.c.rcca_AIC_top + d)
|
||||
self.s_rcca_b4c_top[b] = openmc.ZPlane(name='Top of RCCA rod B4C bank {0}'.format(b), z0=self.c.rcca_B4C_top + d)
|
||||
self.s_rcca_spacer_top[b] = openmc.ZPlane(name='Top of RCCA rod spacer bank {0}'.format(b), z0=self.c.rcca_Spacer_top + d)
|
||||
self.s_rcca_plenum_top[b] = openmc.ZPlane(name='Top of RCCA rod plenum bank {0}'.format(b), z0=self.c.rcca_Plenum_top + d)
|
||||
|
||||
# RCCA pincell universes
|
||||
|
||||
|
|
@ -402,7 +401,7 @@ class Pincells(object):
|
|||
# RCCA rod axial stack
|
||||
|
||||
self.u_rcca = {}
|
||||
for b in sorted(c.rcca_banks):
|
||||
for b in sorted(self.c.rcca_banks):
|
||||
self.u_rcca[b] = AxialPinCell(name='RCCA bank {0}'.format(b))
|
||||
self.u_rcca[b].add_axial_section(self.s_struct_supportPlate_bot, self.mats['Borated Water'])
|
||||
self.u_rcca[b].add_axial_section(self.s_struct_lowerNozzle_top, self.mats['Water SPN'])
|
||||
|
|
|
|||
|
|
@ -4,15 +4,13 @@
|
|||
|
||||
import openmc
|
||||
|
||||
import beavrs.constants as c
|
||||
|
||||
|
||||
class Plots(object):
|
||||
|
||||
def __init__(self, mats):
|
||||
def __init__(self, mats, c):
|
||||
""" Creates BEAVRS plots"""
|
||||
|
||||
self.mats = mats
|
||||
self.c = c
|
||||
|
||||
self.plots = []
|
||||
|
||||
|
|
@ -41,7 +39,7 @@ class Plots(object):
|
|||
|
||||
def _add_plots(self):
|
||||
|
||||
H = c.struct_HighestExtent-c.struct_LowestExtent
|
||||
H = self.c.struct_HighestExtent-self.c.struct_LowestExtent
|
||||
res = 1000
|
||||
|
||||
# BPRA positions
|
||||
|
|
@ -50,7 +48,7 @@ class Plots(object):
|
|||
plot.color_by = 'material'
|
||||
plot.basis = 'xy'
|
||||
plot.origin = [0, 0, H/2]
|
||||
plot.width = [c.rpvOR*2, c.rpvOR*2]
|
||||
plot.width = [self.c.rpvOR*2, self.c.rpvOR*2]
|
||||
plot.pixels = [res, res]
|
||||
plot.mask_components = [self.mats['Borosilicate Glass']]
|
||||
self.plots.append(plot)
|
||||
|
|
@ -60,7 +58,7 @@ class Plots(object):
|
|||
plot.color_by = 'material'
|
||||
plot.basis = 'xy'
|
||||
plot.origin = [0, 0, H/2]
|
||||
plot.width = [c.rpvOR*2, c.rpvOR*2]
|
||||
plot.width = [self.c.rpvOR*2, self.c.rpvOR*2]
|
||||
plot.pixels = [res, res]
|
||||
plot.colors = self.colors_mat
|
||||
self.plots.append(plot)
|
||||
|
|
@ -70,7 +68,7 @@ class Plots(object):
|
|||
plot.color_by = 'material'
|
||||
plot.basis = 'xy'
|
||||
plot.origin = [0, 0, H/2]
|
||||
plot.width = [c.rpvOR*2, c.rpvOR*2]
|
||||
plot.width = [self.c.rpvOR*2, self.c.rpvOR*2]
|
||||
plot.pixels = [res, res]
|
||||
plot.colors = self.colors_mat
|
||||
self.plots.append(plot)
|
||||
|
|
@ -79,8 +77,8 @@ class Plots(object):
|
|||
plot.filename = 'radial_mats_grid1_center'
|
||||
plot.color_by = 'material'
|
||||
plot.basis = 'xy'
|
||||
plot.origin = [0, 0, c.grid1_bot+(c.grid1_top - c.grid1_bot)/2]
|
||||
plot.width = [c.rpvOR*2, c.rpvOR*2]
|
||||
plot.origin = [0, 0, self.c.grid1_bot+(self.c.grid1_top - self.c.grid1_bot)/2]
|
||||
plot.width = [self.c.rpvOR*2, self.c.rpvOR*2]
|
||||
plot.pixels = [res, res]
|
||||
plot.colors = self.colors_mat
|
||||
self.plots.append(plot)
|
||||
|
|
@ -89,8 +87,8 @@ class Plots(object):
|
|||
plot.filename = 'radial_mats_grid4_center'
|
||||
plot.color_by = 'material'
|
||||
plot.basis = 'xy'
|
||||
plot.origin = [0, 0, c.grid4_bot+(c.grid4_top - c.grid4_bot)/2]
|
||||
plot.width = [c.rpvOR*2, c.rpvOR*2]
|
||||
plot.origin = [0, 0, self.c.grid4_bot+(self.c.grid4_top - self.c.grid4_bot)/2]
|
||||
plot.width = [self.c.rpvOR*2, self.c.rpvOR*2]
|
||||
plot.pixels = [res, res]
|
||||
plot.colors = self.colors_mat
|
||||
self.plots.append(plot)
|
||||
|
|
@ -129,7 +127,7 @@ class Plots(object):
|
|||
plot.filename = 'axial_mats_row_8_topzoom3'
|
||||
plot.color_by = 'material'
|
||||
plot.basis = 'xz'
|
||||
plot.origin = [0, 0, c.fuel_Rod_top]
|
||||
plot.origin = [0, 0, self.c.fuel_Rod_top]
|
||||
plot.width = [H/8, H/8]
|
||||
plot.pixels = [res, res]
|
||||
plot.colors = self.colors_mat
|
||||
|
|
@ -159,7 +157,7 @@ class Plots(object):
|
|||
plot.filename = 'axial_mats_row_8_botzoom3'
|
||||
plot.color_by = 'material'
|
||||
plot.basis = 'xz'
|
||||
plot.origin = [0, 0, c.fuel_Rod_bot]
|
||||
plot.origin = [0, 0, self.c.fuel_Rod_bot]
|
||||
plot.width = [H/8, H/8]
|
||||
plot.pixels = [res, res]
|
||||
plot.colors = self.colors_mat
|
||||
|
|
@ -169,8 +167,8 @@ class Plots(object):
|
|||
plot.filename = 'grid5_mats_H7'
|
||||
plot.color_by = 'material'
|
||||
plot.basis = 'xy'
|
||||
plot.origin = [0, c.latticePitch, c.grid5_bot+(c.grid5_top-c.grid5_bot)/2]
|
||||
plot.width = [c.latticePitch, c.latticePitch]
|
||||
plot.origin = [0, self.c.latticePitch, self.c.grid5_bot+(self.c.grid5_top-self.c.grid5_bot)/2]
|
||||
plot.width = [self.c.latticePitch, self.c.latticePitch]
|
||||
plot.pixels = [res, res]
|
||||
plot.colors = self.colors_mat
|
||||
self.plots.append(plot)
|
||||
|
|
@ -179,10 +177,10 @@ class Plots(object):
|
|||
plot.filename = 'grid8_mats_J14'
|
||||
plot.color_by = 'material'
|
||||
plot.basis = 'xy'
|
||||
plot.origin = [-c.latticePitch+c.latticePitch/3, \
|
||||
-6*c.latticePitch+c.latticePitch/3, \
|
||||
c.grid8_bot+(c.grid8_top-c.grid8_bot)/2]
|
||||
plot.width = [c.latticePitch, c.latticePitch]
|
||||
plot.origin = [-self.c.latticePitch+self.c.latticePitch/3, \
|
||||
-6*self.c.latticePitch+self.c.latticePitch/3, \
|
||||
self.c.grid8_bot+(self.c.grid8_top-self.c.grid8_bot)/2]
|
||||
plot.width = [self.c.latticePitch, self.c.latticePitch]
|
||||
plot.pixels = [res, res]
|
||||
plot.colors = self.colors_mat
|
||||
self.plots.append(plot)
|
||||
|
|
@ -191,10 +189,10 @@ class Plots(object):
|
|||
plot.filename = 'grid5_mats_J14'
|
||||
plot.color_by = 'material'
|
||||
plot.basis = 'xy'
|
||||
plot.origin = [-c.latticePitch+c.latticePitch/3, \
|
||||
-6*c.latticePitch+c.latticePitch/3, \
|
||||
c.grid5_bot+(c.grid5_top-c.grid5_bot)/2]
|
||||
plot.width = [c.latticePitch, c.latticePitch]
|
||||
plot.origin = [-self.c.latticePitch+self.c.latticePitch/3, \
|
||||
-6*self.c.latticePitch+self.c.latticePitch/3, \
|
||||
self.c.grid5_bot+(self.c.grid5_top-self.c.grid5_bot)/2]
|
||||
plot.width = [self.c.latticePitch, self.c.latticePitch]
|
||||
plot.pixels = [res, res]
|
||||
plot.colors = self.colors_mat
|
||||
self.plots.append(plot)
|
||||
|
|
@ -203,31 +201,31 @@ class Plots(object):
|
|||
plot.filename = 'midplane_mats_J14'
|
||||
plot.color_by = 'material'
|
||||
plot.basis = 'xy'
|
||||
plot.origin = [-c.latticePitch+c.latticePitch/3, \
|
||||
-6*c.latticePitch+c.latticePitch/3, H/2]
|
||||
plot.width = [c.latticePitch, c.latticePitch]
|
||||
plot.origin = [-self.c.latticePitch+self.c.latticePitch/3, \
|
||||
-6*self.c.latticePitch+self.c.latticePitch/3, H/2]
|
||||
plot.width = [self.c.latticePitch, self.c.latticePitch]
|
||||
plot.pixels = [res, res]
|
||||
plot.colors = self.colors_mat
|
||||
self.plots.append(plot)
|
||||
|
||||
h = 4*(c.struct_LowerNozzle_top - c.struct_SupportPlate_bot)/c.latticePitch
|
||||
h = 4*(self.c.struct_LowerNozzle_top - self.c.struct_SupportPlate_bot)/self.c.latticePitch
|
||||
plot = openmc.Plot()
|
||||
plot.filename = 'J8_axial_bot'
|
||||
plot.color_by = 'material'
|
||||
plot.basis = 'xz'
|
||||
plot.origin = [0, c.latticePitch, c.struct_LowerNozzle_top]
|
||||
plot.width = [c.latticePitch, h]
|
||||
plot.origin = [0, self.c.latticePitch, self.c.struct_LowerNozzle_top]
|
||||
plot.width = [self.c.latticePitch, h]
|
||||
plot.pixels = [res, int(res*h)]
|
||||
plot.colors = self.colors_mat
|
||||
self.plots.append(plot)
|
||||
|
||||
h = 4*(c.struct_UpperNozzle_top - c.fuel_Rod_top)/c.latticePitch
|
||||
h = 4*(self.c.struct_UpperNozzle_top - self.c.fuel_Rod_top)/self.c.latticePitch
|
||||
plot = openmc.Plot()
|
||||
plot.filename = 'J8_axial_top'
|
||||
plot.color_by = 'material'
|
||||
plot.basis = 'xz'
|
||||
plot.origin = [0, c.latticePitch, c.fuel_Rod_top]
|
||||
plot.width = [c.latticePitch, h]
|
||||
plot.origin = [0, self.c.latticePitch, self.c.fuel_Rod_top]
|
||||
plot.width = [self.c.latticePitch, h]
|
||||
plot.pixels = [res, int(res*h)]
|
||||
plot.colors = self.colors_mat
|
||||
self.plots.append(plot)
|
||||
|
|
@ -236,18 +234,18 @@ class Plots(object):
|
|||
plot.filename = 'J8_nozzle'
|
||||
plot.color_by = 'material'
|
||||
plot.basis = 'xy'
|
||||
plot.origin = [0, c.latticePitch, c.struct_SupportPlate_bot + 2.0]
|
||||
plot.width = [c.latticePitch, c.latticePitch]
|
||||
plot.origin = [0, self.c.latticePitch, self.c.struct_SupportPlate_bot + 2.0]
|
||||
plot.width = [self.c.latticePitch, self.c.latticePitch]
|
||||
plot.pixels = [res, res]
|
||||
plot.colors = self.colors_mat
|
||||
self.plots.append(plot)
|
||||
|
||||
h = 2*(c.struct_UpperNozzle_top - c.fuel_Rod_top)
|
||||
h = 2*(self.c.struct_UpperNozzle_top - self.c.fuel_Rod_top)
|
||||
plot = openmc.Plot()
|
||||
plot.filename = 'H8_axial_top'
|
||||
plot.color_by = 'material'
|
||||
plot.basis = 'xz'
|
||||
plot.origin = [0, c.latticePitch, c.fuel_Rod_top]
|
||||
plot.origin = [0, self.c.latticePitch, self.c.fuel_Rod_top]
|
||||
plot.width = [h, h]
|
||||
plot.pixels = [res, res]
|
||||
plot.colors = self.colors_mat
|
||||
|
|
|
|||
|
|
@ -4,18 +4,17 @@ Provides a container class for the BEAVRS main universe cells
|
|||
|
||||
"""
|
||||
|
||||
import beavrs.constants as c
|
||||
|
||||
import openmc
|
||||
|
||||
class UniverseZero(openmc.Universe):
|
||||
|
||||
def __init__(self, core, mats, is_2d=False):
|
||||
def __init__(self, core, mats, C, is_2d=False):
|
||||
""" Creates BEAVRS main universe """
|
||||
super(UniverseZero, self).__init__(name='Main BEAVRS universe', universe_id=0)
|
||||
|
||||
self.core = core
|
||||
self.mats = mats
|
||||
self.c = C
|
||||
self.is_2d = is_2d
|
||||
|
||||
self._add_outer_rings()
|
||||
|
|
@ -29,30 +28,30 @@ class UniverseZero(openmc.Universe):
|
|||
|
||||
# Change z-dimension based on whether 2D or 3D problem
|
||||
if self.is_2d:
|
||||
self.s_upperBound = openmc.ZPlane(name='Highest Extent', z0=c.struct_HighestExtent_2d, boundary_type='reflective')
|
||||
self.s_lowerBound = openmc.ZPlane(name='Lowest Extent', z0=c.struct_LowestExtent_2d, boundary_type='reflective')
|
||||
self.s_upperBound = openmc.ZPlane(name='Highest Extent', z0=self.c.struct_HighestExtent_2d, boundary_type='reflective')
|
||||
self.s_lowerBound = openmc.ZPlane(name='Lowest Extent', z0=self.c.struct_LowestExtent_2d, boundary_type='reflective')
|
||||
else:
|
||||
self.s_upperBound = openmc.ZPlane(name='Highest Extent', z0=c.struct_HighestExtent, boundary_type='vacuum')
|
||||
self.s_lowerBound = openmc.ZPlane(name='Lowest Extent', z0=c.struct_LowestExtent, boundary_type='vacuum')
|
||||
self.s_upperBound = openmc.ZPlane(name='Highest Extent', z0=self.c.struct_HighestExtent, boundary_type='vacuum')
|
||||
self.s_lowerBound = openmc.ZPlane(name='Lowest Extent', z0=self.c.struct_LowestExtent, boundary_type='vacuum')
|
||||
|
||||
# RPV
|
||||
|
||||
self.s_RPVOR = openmc.ZCylinder(name='RPV OR', r=c.rpvOR, boundary_type='vacuum')
|
||||
self.s_RPVIR = openmc.ZCylinder(name='RPV IR', r=c.rpvIR)
|
||||
self.s_RPVOR = openmc.ZCylinder(name='RPV OR', r=self.c.rpvOR, boundary_type='vacuum')
|
||||
self.s_RPVIR = openmc.ZCylinder(name='RPV IR', r=self.c.rpvIR)
|
||||
self.c_RPV = openmc.Cell(name="RPV", fill=self.mats['Carbon Steel'])
|
||||
self.c_RPV.region = (-self.s_RPVOR & +self.s_RPVIR &
|
||||
-self.s_upperBound & +self.s_lowerBound)
|
||||
|
||||
# RPV liner
|
||||
|
||||
self.s_linerIR = openmc.ZCylinder(name='RPV Liner IR', r=c.linerIR)
|
||||
self.s_linerIR = openmc.ZCylinder(name='RPV Liner IR', r=self.c.linerIR)
|
||||
self.c_liner = openmc.Cell(name="RPV Liner", fill=self.mats['SS304'])
|
||||
self.c_liner.region = (-self.s_RPVIR & +self.s_linerIR &
|
||||
-self.s_upperBound & +self.s_lowerBound)
|
||||
|
||||
# Downcomer
|
||||
|
||||
self.s_neutronShieldOR = openmc.ZCylinder(name='Shield Panel OR', r=c.neutronShieldOR)
|
||||
self.s_neutronShieldOR = openmc.ZCylinder(name='Shield Panel OR', r=self.c.neutronShieldOR)
|
||||
self.c_downcomer = openmc.Cell(name="Downcomer", fill=self.mats['Borated Water'])
|
||||
self.c_downcomer.region = (-self.s_linerIR & +self.s_neutronShieldOR &
|
||||
-self.s_upperBound & +self.s_lowerBound)
|
||||
|
|
@ -62,11 +61,11 @@ class UniverseZero(openmc.Universe):
|
|||
""" Adds BEAVRS shield panels """
|
||||
|
||||
# Shield panels
|
||||
self.s_neutronShieldIR = openmc.ZCylinder(name='Shield Panel IR', r=c.neutronShieldIR)
|
||||
self.s_ns_NWbot_SEtop = openmc.Plane(name='Shield Panel NWbot/SEtop', **c.neutronShield_NWbot_SEtop)
|
||||
self.s_ns_NWtop_SEbot = openmc.Plane(name='Shield Panel NWtop/SEbot', **c.neutronShield_NWtop_SEbot)
|
||||
self.s_ns_NEbot_SWtop = openmc.Plane(name='Shield Panel NEbot/SWtop', **c.neutronShield_NEbot_SWtop)
|
||||
self.s_ns_NEtop_SWbot = openmc.Plane(name='Shield Panel NEtop/SWbot', **c.neutronShield_NEtop_SWbot)
|
||||
self.s_neutronShieldIR = openmc.ZCylinder(name='Shield Panel IR', r=self.c.neutronShieldIR)
|
||||
self.s_ns_NWbot_SEtop = openmc.Plane(name='Shield Panel NWbot/SEtop', **self.c.neutronShield_NWbot_SEtop)
|
||||
self.s_ns_NWtop_SEbot = openmc.Plane(name='Shield Panel NWtop/SEbot', **self.c.neutronShield_NWtop_SEbot)
|
||||
self.s_ns_NEbot_SWtop = openmc.Plane(name='Shield Panel NEbot/SWtop', **self.c.neutronShield_NEbot_SWtop)
|
||||
self.s_ns_NEtop_SWbot = openmc.Plane(name='Shield Panel NEtop/SWbot', **self.c.neutronShield_NEtop_SWbot)
|
||||
|
||||
self.c_shieldPanels = []
|
||||
|
||||
|
|
@ -118,7 +117,7 @@ class UniverseZero(openmc.Universe):
|
|||
-self.s_upperBound & +self.s_lowerBound)
|
||||
self.c_shieldPanels.append(self.c_sp_W)
|
||||
|
||||
self.s_coreBarrelOR = openmc.ZCylinder(name='Core Barrel OR', r=c.coreBarrelOR)
|
||||
self.s_coreBarrelOR = openmc.ZCylinder(name='Core Barrel OR', r=self.c.coreBarrelOR)
|
||||
self.c_sp_inner = openmc.Cell(name='Water between barrel and shield', fill=self.mats['Borated Water'])
|
||||
self.c_sp_inner.region = (+self.s_coreBarrelOR & -self.s_neutronShieldIR &
|
||||
-self.s_upperBound & +self.s_lowerBound)
|
||||
|
|
@ -130,7 +129,7 @@ class UniverseZero(openmc.Universe):
|
|||
|
||||
# Core barrel
|
||||
|
||||
self.s_coreBarrelIR = openmc.ZCylinder(name='Core Barrel IR', r=c.coreBarrelIR)
|
||||
self.s_coreBarrelIR = openmc.ZCylinder(name='Core Barrel IR', r=self.c.coreBarrelIR)
|
||||
self.c_coreBarrel = openmc.Cell(name="Core Barrel", fill=self.mats['SS304'])
|
||||
self.c_coreBarrel.region = (-self.s_coreBarrelOR & +self.s_coreBarrelIR &
|
||||
-self.s_upperBound & +self.s_lowerBound)
|
||||
|
|
@ -166,7 +165,7 @@ class UniverseZero(openmc.Universe):
|
|||
self.core_univ.add_cell(self.c_core)
|
||||
|
||||
# Define boundaries of bounding box
|
||||
outer_bound = 8.5*c.latticePitch
|
||||
outer_bound = 8.5*self.c.latticePitch
|
||||
self.s_leftBound = openmc.XPlane(name='Left Box', x0=-outer_bound, boundary_type='vacuum')
|
||||
self.s_rightBound = openmc.XPlane(name='Right Box', x0=outer_bound, boundary_type='vacuum')
|
||||
self.s_backBound = openmc.YPlane(name='Back Box', y0=-outer_bound, boundary_type='vacuum')
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -26,8 +26,10 @@
|
|||
"source": [
|
||||
"import openmc\n",
|
||||
"import beavrs.builder\n",
|
||||
"import beavrs.constants as c\n",
|
||||
"from IPython.display import Image"
|
||||
"from beavrs.constants import Constants\n",
|
||||
"from IPython.display import Image\n",
|
||||
"\n",
|
||||
"c = Constants(150,0)"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -379,7 +381,7 @@
|
|||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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\n",
|
||||
"image/png": "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",
|
||||
"text/plain": [
|
||||
"<IPython.core.display.Image object>"
|
||||
]
|
||||
|
|
|
|||
|
|
@ -44,19 +44,15 @@ p.add_option('-i', '--insert', action='store', type='int', dest='S', default=200
|
|||
help='Set where the control rods should be. Acceptable values are 15-574')
|
||||
p.add_option('-o', '--optimal', action='store_true', default=False,
|
||||
help='Find the best combination of particles, inactive and active batches to run')
|
||||
p.add_option('-r', '--run', action='store_true', default=False,
|
||||
help='Run the model once after building it')
|
||||
(options, args) = p.parse_args()
|
||||
|
||||
if not len(args) == 0:
|
||||
p.print_help()
|
||||
|
||||
b = BEAVRS(is_symmetric=options.is_symmetric, is_2d=options.is_2d)
|
||||
|
||||
model = openmc.Model(geometry=b.openmc_geometry, materials=b.materials,
|
||||
settings=b.settings, tallies=b.common_tallies, plots=b.plots)
|
||||
|
||||
model.materials.cross_sections = "/opt/xdata/endfb-vii.1-hdf5/cross_sections.xml"
|
||||
model.geometry.merge_surfaces = True
|
||||
model.settings.confidence_intervals = False
|
||||
b = BEAVRS(is_symmetric=options.is_symmetric, is_2d=options.is_2d, S=15)
|
||||
# b.export_xml()
|
||||
|
||||
# openmc.calculate_volumes()
|
||||
# openmc.plot_geometry()
|
||||
|
|
@ -71,10 +67,8 @@ if options.optimal:
|
|||
for i in inactive:
|
||||
for a in active:
|
||||
print(f"Particles: {p} Inactive Cycles: {i} Active Cycles: {a}\n\n")
|
||||
model.settings.batches = i+a
|
||||
model.settings.inactive = i
|
||||
model.settings.particles = p
|
||||
model.export_to_xml()
|
||||
b.set_params(batches=i+a,inactive=i,particles=p)
|
||||
b.export_xml()
|
||||
openmc.run()
|
||||
print("\n\n\n")
|
||||
sys.stdout.flush()
|
||||
|
|
@ -83,12 +77,8 @@ if options.optimal:
|
|||
# Depletion Settings
|
||||
###############################################################################
|
||||
|
||||
if options.run_deplete:
|
||||
model.settings.batches = 350
|
||||
model.settings.inactive = 50
|
||||
model.settings.particles = 20000
|
||||
model.settings.seed = np.random.randint(1e14, dtype=np.uint64)
|
||||
model.export_to_xml()
|
||||
elif options.run_deplete:
|
||||
b.set_params(batches=350,inactive=50,particles=20000)
|
||||
|
||||
# Get fission Q values from JSON file generated by get_fission_qvals.py
|
||||
with open('../beavrs/serpent_fissq.json', 'r') as f:
|
||||
|
|
@ -111,20 +101,41 @@ if options.run_deplete:
|
|||
|
||||
|
||||
## Power in Watts
|
||||
full_power = 3411
|
||||
full_power = 3411e6
|
||||
powers = [full_power if x > 1 else full_power*x for x in time_steps_cum]
|
||||
|
||||
print(time_steps)
|
||||
|
||||
time_step = 10
|
||||
power = int(3.411e9)
|
||||
|
||||
## setting the transport operator
|
||||
model = b.export_model()
|
||||
operator = openmc.deplete.CoupledOperator(model, chain_file,
|
||||
#diff_burnable_mats=False, normalization_mode='fission-q',
|
||||
fission_q=serpent_fission_q,
|
||||
fission_yield_mode="average")
|
||||
|
||||
## depleting using a first-order predictor algorithm
|
||||
integrator = openmc.deplete.PredictorIntegrator(operator, [time_step], [power], timestep_units='d')
|
||||
integrator.integrate()
|
||||
|
||||
openmc.deplete.Results('depletion_results.h5').export_to_materials(len(time_steps))
|
||||
|
||||
"""
|
||||
i = 0
|
||||
for power, time_step in zip(powers, time_steps):
|
||||
|
||||
print(f'Current loop info: {power} {time_step}')
|
||||
## setting the transport operator
|
||||
model = openmc.Model(geometry=b.openmc_geometry, materials=b.materials,
|
||||
settings=b.settings, tallies=b.common_tallies, plots=b.plots)
|
||||
|
||||
model.geometry.merge_surfaces = True
|
||||
model = b.export_model()
|
||||
operator = openmc.deplete.CoupledOperator(model, chain_file,
|
||||
#diff_burnable_mats=False, normalization_mode='fission-q',
|
||||
fission_q=serpent_fission_q,
|
||||
fission_yield_mode="average")
|
||||
fission_q=serpent_fission_q, fission_yield_mode="average")
|
||||
|
||||
## depleting using a first-order predictor algorithm
|
||||
integrator = openmc.deplete.PredictorIntegrator(operator, [time_step], [power], timestep_units='d')
|
||||
|
|
@ -147,6 +158,21 @@ if options.run_deplete:
|
|||
# Get materials at the end of the last simulation
|
||||
model.materials = results.export_to_materials(len(time_steps))
|
||||
|
||||
"""
|
||||
|
||||
elif options.run:
|
||||
b.set_params(batches=350,inactive=50,particles=20000)
|
||||
# b.set_S(20)
|
||||
|
||||
|
||||
|
||||
"""openmc.search_for_keff(b.set_S,initial_guess=15,target=1.0,bracket=[15,574],tol=6e-4,
|
||||
bracketed_method='ridder',print_iterations=True,model_args={'particles': 20000,
|
||||
'inactive': 50,'batches': 350})"""
|
||||
|
||||
b.export_xml(as_model=True)
|
||||
openmc.run()
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue