From 2ee5cdbe173045aa2f04be65a98c053affa9d5bb Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Sat, 11 Nov 2023 22:37:19 -0800 Subject: [PATCH] Trying to get responsive control rods. Currently not working, but framework is in place --- BEAVRS/beavrs/assemblies.py | 12 +- BEAVRS/beavrs/baffle.py | 17 +- BEAVRS/beavrs/builder.py | 104 ++++++--- BEAVRS/beavrs/constants.py | 406 ++++++++++++++++++++++-------------- BEAVRS/beavrs/core.py | 8 +- BEAVRS/beavrs/materials.py | 4 +- BEAVRS/beavrs/pincells.py | 143 +++++++------ BEAVRS/beavrs/plots.py | 72 ++++--- BEAVRS/beavrs/univzero.py | 37 ++-- BEAVRS/extract-assm.ipynb | 10 +- BEAVRS/extract-pin.ipynb | 8 +- BEAVRS/make_beavrs.py | 68 ++++-- 12 files changed, 530 insertions(+), 359 deletions(-) diff --git a/BEAVRS/beavrs/assemblies.py b/BEAVRS/beavrs/assemblies.py index f485398..01c167d 100644 --- a/BEAVRS/beavrs/assemblies.py +++ b/BEAVRS/beavrs/assemblies.py @@ -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) diff --git a/BEAVRS/beavrs/baffle.py b/BEAVRS/beavrs/baffle.py index 6a36ee5..77c635c 100644 --- a/BEAVRS/beavrs/baffle.py +++ b/BEAVRS/beavrs/baffle.py @@ -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 diff --git a/BEAVRS/beavrs/builder.py b/BEAVRS/beavrs/builder.py index 923a17e..5d4a8a1 100644 --- a/BEAVRS/beavrs/builder.py +++ b/BEAVRS/beavrs/builder.py @@ -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 diff --git a/BEAVRS/beavrs/constants.py b/BEAVRS/beavrs/constants.py index 4ba8dde..163db4b 100644 --- a/BEAVRS/beavrs/constants.py +++ b/BEAVRS/beavrs/constants.py @@ -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 + ## -# 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() diff --git a/BEAVRS/beavrs/core.py b/BEAVRS/beavrs/core.py index 67d373d..99b5da7 100644 --- a/BEAVRS/beavrs/core.py +++ b/BEAVRS/beavrs/core.py @@ -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: diff --git a/BEAVRS/beavrs/materials.py b/BEAVRS/beavrs/materials.py index 73c40a1..ca71789 100644 --- a/BEAVRS/beavrs/materials.py +++ b/BEAVRS/beavrs/materials.py @@ -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() diff --git a/BEAVRS/beavrs/pincells.py b/BEAVRS/beavrs/pincells.py index 500db3c..4edfffd 100644 --- a/BEAVRS/beavrs/pincells.py +++ b/BEAVRS/beavrs/pincells.py @@ -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']) diff --git a/BEAVRS/beavrs/plots.py b/BEAVRS/beavrs/plots.py index bed2302..0779276 100644 --- a/BEAVRS/beavrs/plots.py +++ b/BEAVRS/beavrs/plots.py @@ -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 diff --git a/BEAVRS/beavrs/univzero.py b/BEAVRS/beavrs/univzero.py index 71ad340..d0f29ae 100644 --- a/BEAVRS/beavrs/univzero.py +++ b/BEAVRS/beavrs/univzero.py @@ -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') diff --git a/BEAVRS/extract-assm.ipynb b/BEAVRS/extract-assm.ipynb index c7f6337..5d4af15 100644 --- a/BEAVRS/extract-assm.ipynb +++ b/BEAVRS/extract-assm.ipynb @@ -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)" ] }, { @@ -370,7 +372,7 @@ "settings.particles = 1000\n", "\n", "# Use a bounding box to define the starting source distribution\n", - "lower_left = [-17*c.pinPitch/2, -17*c.pinPitch/2, c.fuel_ActiveFuel_bot]\n", + "lower_left = [-17*c.pinPitch/2, 17*c.pinPitch/2, c.fuel_ActiveFuel_bot]\n", "upper_right = [+17*c.pinPitch/2, +17*c.pinPitch/2, c.fuel_ActiveFuel_top]\n", "settings.source = openmc.source.Source(\n", " openmc.stats.Box(lower_left, upper_right, only_fissionable=True))\n", @@ -438,7 +440,7 @@ "outputs": [ { "data": { - "image/png": "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\nMDBmW1hXAAAAAElFTkSuQmCC\n", + "image/png": "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", "text/plain": [ "" ] diff --git a/BEAVRS/extract-pin.ipynb b/BEAVRS/extract-pin.ipynb index bd02091..369c77d 100644 --- a/BEAVRS/extract-pin.ipynb +++ b/BEAVRS/extract-pin.ipynb @@ -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": [ "" ] diff --git a/BEAVRS/make_beavrs.py b/BEAVRS/make_beavrs.py index 9fe0eaf..4d44754 100755 --- a/BEAVRS/make_beavrs.py +++ b/BEAVRS/make_beavrs.py @@ -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() +