def _add_all_assembly_combinations(self): """ Adds all BEAVRS assembly layouts Here we make every possible combination of enrichments, control and shutdown banks, with or without instrument tubes. """ types_fuel = self.pins.enrichments types_gt = self.ba_specs + self.cr_specs types_instr = [(self.pins.u_it_nt, 'no instr'), (self.pins.u_it, 'instr')] self.u_fuel = {} self.u_fuel_no_sleeve = {} for enr in types_fuel: self.u_fuel[enr] = {} self.u_fuel_no_sleeve[enr] = {} for gt_label, gt_spec in types_gt: self.u_fuel[enr][gt_label] = {} self.u_fuel_no_sleeve[enr][gt_label] = {} for u_c, center_label in types_instr: name = 'Fuel {0} enr {1} {2}'.format( enr, center_label, gt_label) # 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.setPosition('center', u_c) lattice.setPosition('fuel', self.pins.u_fuel_p[enr]) lattice.updatePositions(gt_spec) lattice.finalize() # Wrap the lattice with the grid sleeve universe u_lattice = InfinitePinCell( name='{0} universe'.format(name)) u_lattice.add_ring(lattice, self.lattice_surfs, box=True) u_lattice.add_last_ring(self.pins.u_gridsleeve) self.u_fuel[enr][gt_label][center_label] = u_lattice u_lattice.finalize() # Store the lattice without the gridsleeve u_latticePins = InfinitePinCell( name='{0} pins'.format(name)) u_latticePins.add_ring(lattice, self.lattice_surfs, box=True) u_latticePins.add_last_ring(self.mats['Borated Water']) self.u_fuel_no_sleeve[enr][gt_label][ center_label] = u_latticePins u_latticePins.finalize()
class Pincells(object): def __init__(self, mats): """ Creates BEAVRS pincell universes """ self.mats = mats self._add_structural_axials() self._add_dummy_universe() self._add_grid_pincells() self._add_fuel_pincells() self._add_guide_tube_pincells() self._add_instrument_tube_pincells() self._add_bpra_pincells() self._add_rcca_pincells() 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) def _add_dummy_universe(self): """ Adds all-water universe for empty lattice positions""" self.u_waterPin = openmc.Universe(name='Dummy Water Universe') self.c_water = openmc.Cell(name='Water', fill=self.mats['Borated Water']) self.u_waterPin.add_cells([self.c_water]) def _add_grid_pincells(self): """ Adds BEAVRS pincellgrid and assembly gridsleeve pincells """ # Rectangular prisms for grid spacers grid_surfs_tb = \ openmc.get_rectangular_prism(c.rodGridSide_tb, c.rodGridSide_tb) grid_surfs_i = \ openmc.get_rectangular_prism(c.rodGridSide_i, c.rodGridSide_i) # Rectangular prisms for lattice grid sleeves grid_surfs_ass = \ openmc.get_rectangular_prism(c.gridstrapSide, 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) # Grids pincell universes self.u_grid_i = InfinitePinCell(name='Intermediate grid pincell') self.u_grid_i.add_ring(self.mats['Borated Water'], grid_surfs_i, box=True) self.u_grid_i.add_last_ring(self.mats['Zircaloy 4']) self.u_grid_i.finalize() self.u_grid_tb = InfinitePinCell(name='Top/Bottom grid pincell') self.u_grid_tb.add_ring(self.mats['Borated Water'], grid_surfs_tb, box=True) self.u_grid_tb.add_last_ring(self.mats['Inconel 718']) self.u_grid_tb.finalize() self.u_grid_sleeve_i = InfinitePinCell( name='Intermediate grid sleeve pincell') self.u_grid_sleeve_i.add_ring(self.mats['Zircaloy 4'], grid_surfs_ass, box=True) self.u_grid_sleeve_i.add_last_ring(self.mats['Borated Water']) self.u_grid_sleeve_i.finalize() self.u_grid_sleeve_tb = InfinitePinCell( name='Top/Bottom grid sleeve pincell') self.u_grid_sleeve_tb.add_ring(self.mats['Inconel 718'], grid_surfs_ass, box=True) self.u_grid_sleeve_tb.add_last_ring(self.mats['Borated Water']) self.u_grid_sleeve_tb.finalize() # Grids axial stack self.u_grids = AxialPinCell(name='Grids axial universe') self.u_grids.add_axial_section(self.s_struct_supportPlate_bot, self.mats['Borated Water']) self.u_grids.add_axial_section(self.s_struct_lowerNozzle_top, self.mats['Water SPN']) self.u_grids.add_axial_section(self.s_grid1_bot, self.mats['Borated Water']) self.u_grids.add_axial_section(self.s_grid1_top, self.u_grid_tb) self.u_grids.add_axial_section(self.s_grid2_bot, self.mats['Borated Water']) self.u_grids.add_axial_section(self.s_grid2_top, self.u_grid_i) self.u_grids.add_axial_section(self.s_grid3_bot, self.mats['Borated Water']) self.u_grids.add_axial_section(self.s_grid3_top, self.u_grid_i) self.u_grids.add_axial_section(self.s_grid4_bot, self.mats['Borated Water']) self.u_grids.add_axial_section(self.s_grid4_top, self.u_grid_i) self.u_grids.add_axial_section(self.s_grid5_bot, self.mats['Borated Water']) self.u_grids.add_axial_section(self.s_grid5_top, self.u_grid_i) self.u_grids.add_axial_section(self.s_grid6_bot, self.mats['Borated Water']) self.u_grids.add_axial_section(self.s_grid6_top, self.u_grid_i) self.u_grids.add_axial_section(self.s_grid7_bot, self.mats['Borated Water']) self.u_grids.add_axial_section(self.s_grid7_top, self.u_grid_i) self.u_grids.add_axial_section(self.s_grid8_bot, self.mats['Borated Water']) self.u_grids.add_axial_section(self.s_grid8_top, self.u_grid_tb) self.u_grids.add_axial_section(self.s_struct_upperNozzle_bot, self.mats['Borated Water']) self.u_grids.add_axial_section(self.s_struct_upperNozzle_top, self.mats['Water SPN']) self.u_grids.add_last_axial_section(self.mats['Borated Water']) self.u_grids.finalize() self.u_gridsleeve = AxialPinCell(name='Grid sleeve axial universe') self.u_gridsleeve.add_axial_section(self.s_struct_supportPlate_bot, self.mats['Borated Water']) self.u_gridsleeve.add_axial_section(self.s_struct_lowerNozzle_top, self.mats['Water SPN']) self.u_gridsleeve.add_axial_section(self.s_grid1_bot, self.mats['Borated Water']) self.u_gridsleeve.add_axial_section(self.s_grid1_top, self.u_grid_sleeve_tb) self.u_gridsleeve.add_axial_section(self.s_grid2_bot, self.mats['Borated Water']) self.u_gridsleeve.add_axial_section(self.s_grid2_top, self.u_grid_sleeve_i) self.u_gridsleeve.add_axial_section(self.s_grid3_bot, self.mats['Borated Water']) self.u_gridsleeve.add_axial_section(self.s_grid3_top, self.u_grid_sleeve_i) self.u_gridsleeve.add_axial_section(self.s_grid4_bot, self.mats['Borated Water']) self.u_gridsleeve.add_axial_section(self.s_grid4_top, self.u_grid_sleeve_i) self.u_gridsleeve.add_axial_section(self.s_grid5_bot, self.mats['Borated Water']) self.u_gridsleeve.add_axial_section(self.s_grid5_top, self.u_grid_sleeve_i) self.u_gridsleeve.add_axial_section(self.s_grid6_bot, self.mats['Borated Water']) self.u_gridsleeve.add_axial_section(self.s_grid6_top, self.u_grid_sleeve_i) self.u_gridsleeve.add_axial_section(self.s_grid7_bot, self.mats['Borated Water']) self.u_gridsleeve.add_axial_section(self.s_grid7_top, self.u_grid_sleeve_i) self.u_gridsleeve.add_axial_section(self.s_grid8_bot, self.mats['Borated Water']) self.u_gridsleeve.add_axial_section(self.s_grid8_top, self.u_grid_sleeve_tb) self.u_gridsleeve.add_axial_section(self.s_struct_upperNozzle_bot, self.mats['Borated Water']) self.u_gridsleeve.add_axial_section(self.s_struct_upperNozzle_top, self.mats['Water SPN']) self.u_gridsleeve.add_last_axial_section(self.mats['Borated Water']) self.u_gridsleeve.finalize() def _add_fuel_pincells(self): """ Adds BEAVRS fuel pincells """ self.enrichments = ['1.6%', '2.4%', '3.1%', '3.2%', '3.4%'] # 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) # Fuel axial surfaces self.s_fuel_rod_bot = openmc.ZPlane(name='Fuel rod bottom', z0=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_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_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_upperFitting_bot = self.s_fuel_plenum_top self.s_fuel_upperFitting_top = openmc.ZPlane( name='Fuel upper fitting top', z0=c.fuel_UpperFitting_top) # Fuel pincell universes self.u_fuel_active_pin = {} for enr in self.enrichments: self.u_fuel_active_pin[enr] = InfinitePinCell( name='Fuel rod active region - {0} enr'.format(enr)) self.u_fuel_active_pin[enr].add_ring( self.mats['Fuel {0}'.format(enr)], self.s_fuel_pellet_OR) self.u_fuel_active_pin[enr].add_ring(self.mats['Helium'], self.s_fuel_clad_IR) self.u_fuel_active_pin[enr].add_last_ring(self.mats['Zircaloy 4']) self.u_fuel_active_pin[enr].finalize() self.u_fuel_plenum = InfinitePinCell(name='Fuel rod plenum') self.u_fuel_plenum.add_ring(self.mats['Inconel 718'], self.s_fuel_plenumSpring_OR) self.u_fuel_plenum.add_ring(self.mats['Helium'], self.s_fuel_clad_IR) self.u_fuel_plenum.add_last_ring(self.mats['Zircaloy 4']) self.u_fuel_plenum.finalize() # Fuel axial stack universes self.u_fuel_p = {} for enr in self.enrichments: self.u_fuel_p[enr] = AxialPinCell( name='Fuel rod - {0} enr'.format(enr)) self.u_fuel_p[enr].add_axial_section( self.s_struct_supportPlate_bot, self.mats['Borated Water']) self.u_fuel_p[enr].add_axial_section(self.s_fuel_rod_bot, self.mats['SS304 SPN']) self.u_fuel_p[enr].add_axial_section(self.s_fuel_lowerFitting_top, self.mats['Zircaloy 4']) self.u_fuel_p[enr].add_axial_section(self.s_fuel_activeFuel_top, self.u_fuel_active_pin[enr]) self.u_fuel_p[enr].add_axial_section(self.s_fuel_plenum_top, self.u_fuel_plenum) self.u_fuel_p[enr].add_axial_section(self.s_fuel_upperFitting_top, self.mats['Zircaloy 4']) self.u_fuel_p[enr].add_axial_section(self.s_struct_upperNozzle_bot, self.mats['Borated Water']) self.u_fuel_p[enr].add_axial_section(self.s_struct_upperNozzle_top, self.mats['SS304 SPN']) self.u_fuel_p[enr].add_last_axial_section( self.mats['Borated Water']) self.u_fuel_p[enr] = self.u_fuel_p[enr].add_wrapper( self.u_grids, self.s_fuel_clad_OR) self.u_fuel_p[enr].finalize() def _add_guide_tube_pincells(self): """ Adds BEAVRS guide tube pincells """ # 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) # GT axial surfaces self.s_gt_rod_bot = openmc.ZPlane(name='Bottom of GT rod', z0=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) # GT pincell universes self.u_gt_dashpot = InfinitePinCell(name='Empty GT below the dashpot') self.u_gt_dashpot.add_ring(self.mats['Borated Water'], self.s_gt_dashpot_IR) self.u_gt_dashpot.add_ring(self.mats['Zircaloy 4'], self.s_gt_dashpot_OR) self.u_gt_dashpot.add_last_ring(self.mats['Borated Water']) self.u_gt_dashpot.finalize() self.u_gt_nodashpot_p = InfinitePinCell( name='Empty GT above the dashpot') self.u_gt_nodashpot_p.add_ring(self.mats['Borated Water'], self.s_gt_IR) self.u_gt_nodashpot_p.add_last_ring(self.mats['Zircaloy 4']) self.u_gt_nodashpot_p.finalize() # GT axial stack self.u_gt = AxialPinCell(name='Empty Guide Tube') self.u_gt.add_axial_section(self.s_struct_supportPlate_bot, self.mats['Borated Water']) self.u_gt.add_axial_section(self.s_gt_rod_bot, self.mats['Water SPN']) self.u_gt.add_axial_section(self.s_gt_dashpot_top, self.u_gt_dashpot) self.u_gt.add_axial_section(self.s_gt_rod_top, self.u_gt_nodashpot_p) self.u_gt.add_axial_section(self.s_struct_upperNozzle_top, self.mats['Water SPN']) self.u_gt.add_last_axial_section(self.mats['Borated Water']) self.u_gt = self.u_gt.add_wrapper(self.u_grids, self.s_gt_OR) self.u_gt.finalize() self.u_gt_nodashpot = AxialPinCell( name='Empty Guide Tube in Center Position') self.u_gt_nodashpot.add_axial_section(self.s_struct_supportPlate_bot, self.mats['Borated Water']) self.u_gt_nodashpot.add_axial_section(self.s_gt_rod_bot, self.mats['Water SPN']) self.u_gt_nodashpot.add_axial_section(self.s_gt_rod_top, self.u_gt_nodashpot_p) self.u_gt_nodashpot.add_axial_section(self.s_struct_upperNozzle_top, self.mats['Water SPN']) self.u_gt_nodashpot.add_last_axial_section(self.mats['Borated Water']) self.u_gt_nodashpot = self.u_gt_nodashpot.add_wrapper( self.u_grids, self.s_gt_OR) self.u_gt_nodashpot.finalize() def _add_instrument_tube_pincells(self): """ Adds BEAVRS instrument tube pincells to self 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) # IT pincell universe self.u_it_p = InfinitePinCell(name='Instrument tube thimble') self.u_it_p.add_ring(self.mats['Air'], self.s_it_IR) self.u_it_p.add_last_ring(self.mats['Zircaloy 4']) self.u_it_p.finalize() # IT pincell in support plane self.u_it_p_spn = InfinitePinCell( name='Instrument tube thimble support plane') self.u_it_p_spn.add_ring(self.mats['Air'], self.s_it_IR) self.u_it_p_spn.add_last_ring(self.mats['Zircaloy 4']) self.u_it_p_spn.finalize() # IT axial stack self.u_it = AxialPinCell(name='Instrument tube axial stack') self.u_it.add_axial_section(self.s_struct_supportPlate_bot, self.u_it_p) self.u_it.add_axial_section(self.s_fuel_rod_bot, self.u_it_p_spn) self.u_it.add_axial_section(self.s_struct_upperNozzle_bot, self.u_it_p) self.u_it.add_axial_section(self.s_struct_upperNozzle_top, self.mats['Water SPN']) self.u_it.add_last_axial_section(self.mats['Borated Water']) self.u_it = self.u_it.add_wrapper(self.u_gt_nodashpot, self.s_it_OR) self.u_it.finalize() # IT axial stack - empty self.u_it_nt = self.u_gt_nodashpot def _add_bpra_pincells(self): """ Adds BEAVRS BPRA pincells """ # 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) # BP axial surfaces self.s_bp_rod_bot = openmc.ZPlane(name='Bottom of BPRA rod', z0=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_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_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) # BP pincell universes self.u_bp_activePoison = InfinitePinCell(name='BPRA rod active poison') self.u_bp_activePoison.add_ring(self.mats['Air'], self.s_bp_innerclad_IR) self.u_bp_activePoison.add_ring(self.mats['SS304'], self.s_bp_innerclad_OR) self.u_bp_activePoison.add_ring(self.mats['Air'], self.s_bp_poison_IR) self.u_bp_activePoison.add_ring(self.mats['Borosilicate Glass'], self.s_bp_poison_OR) self.u_bp_activePoison.add_ring(self.mats['Air'], self.s_bp_outerclad_IR) self.u_bp_activePoison.add_last_ring(self.mats['SS304']) self.u_bp_activePoison.finalize() self.u_bp_plenum = InfinitePinCell(name='BPRA rod plenum') self.u_bp_plenum.add_ring(self.mats['Air'], self.s_bp_innerclad_IR) self.u_bp_plenum.add_ring(self.mats['SS304'], self.s_bp_innerclad_OR) self.u_bp_plenum.add_ring(self.mats['Air'], self.s_bp_outerclad_IR) self.u_bp_plenum.add_last_ring(self.mats['SS304']) self.u_bp_plenum.finalize() # BP axial stack universe self.u_bp = AxialPinCell(name='BPRA rod') self.u_bp.add_axial_section(self.s_struct_supportPlate_bot, self.mats['Borated Water']) self.u_bp.add_axial_section(self.s_struct_lowerNozzle_top, self.mats['Water SPN']) self.u_bp.add_axial_section(self.s_bp_rod_bot, self.mats['Borated Water']) self.u_bp.add_axial_section(self.s_bp_lowerFitting_top, self.mats['SS304']) self.u_bp.add_axial_section(self.s_bp_active_top, self.u_bp_activePoison) self.u_bp.add_axial_section(self.s_bp_plenum_top, self.u_bp_plenum) self.u_bp.add_axial_section(self.s_bp_rod_top, self.mats['SS304']) self.u_bp.add_last_axial_section(self.mats['Borated Water']) self.u_bp = self.u_bp.add_wrapper(self.u_gt, self.s_bp_outerclad_OR) self.u_bp.finalize() def _add_rcca_pincells(self): """ Adds BEAVRS RCCA pincells """ # 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) # RCCA rod axial surfaces self.s_rcca_rod_bot = {} self.s_rcca_lowerFitting_top = {} self.s_rcca_aic_top = {} 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) # RCCA pincell universes self.u_rcca_plenum = InfinitePinCell(name='RCCA plenum') self.u_rcca_plenum.add_ring(self.mats['Inconel 718'], self.s_rcca_spring_OR) self.u_rcca_plenum.add_ring(self.mats['Air'], self.s_rcca_clad_IR) self.u_rcca_plenum.add_last_ring(self.mats['Zircaloy 4']) self.u_rcca_plenum.finalize() self.u_rcca_aic = InfinitePinCell(name='RCCA AIC') self.u_rcca_aic.add_ring(self.mats['Ag-In-Cd'], self.s_rcca_aic_OR) self.u_rcca_aic.add_ring(self.mats['Air'], self.s_rcca_clad_IR) self.u_rcca_aic.add_last_ring(self.mats['Zircaloy 4']) self.u_rcca_aic.finalize() self.u_rcca_b4c = InfinitePinCell(name='RCCA B4C') self.u_rcca_b4c.add_ring(self.mats['B4C'], self.s_rcca_b4c_OR) self.u_rcca_b4c.add_ring(self.mats['Air'], self.s_rcca_clad_IR) self.u_rcca_b4c.add_last_ring(self.mats['Zircaloy 4']) self.u_rcca_b4c.finalize() self.u_rcca_spacer = InfinitePinCell(name='RCCA Spacer') self.u_rcca_spacer.add_ring(self.mats['SS304'], self.s_rcca_spacer_OR) self.u_rcca_spacer.add_ring(self.mats['Air'], self.s_rcca_clad_IR) self.u_rcca_spacer.add_last_ring(self.mats['Zircaloy 4']) self.u_rcca_spacer.finalize() # RCCA rod axial stack self.u_rcca = {} for b in sorted(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']) self.u_rcca[b].add_axial_section(self.s_rcca_rod_bot[b], self.mats['Borated Water']) self.u_rcca[b].add_axial_section(self.s_rcca_lowerFitting_top[b], self.mats['SS304']) self.u_rcca[b].add_axial_section(self.s_rcca_aic_top[b], self.u_rcca_aic) self.u_rcca[b].add_axial_section(self.s_rcca_b4c_top[b], self.u_rcca_b4c) self.u_rcca[b].add_axial_section(self.s_rcca_spacer_top[b], self.u_rcca_spacer) self.u_rcca[b].add_axial_section(self.s_rcca_plenum_top[b], self.u_rcca_plenum) self.u_rcca[b].add_last_axial_section(self.mats['SS304']) self.u_rcca[b] = self.u_rcca[b].add_wrapper( self.u_gt, self.s_rcca_clad_OR) self.u_rcca[b].finalize()
class Baffle(object): def __init__(self, assemblies, mats): """ Creates BEAVRS baffle universes """ self.assem = assemblies self.mats = mats self._add_baffle_universes() def _add_baffle_universes(self): """ Adds BEAVRS baffle universes """ self.dummy = openmc.ZCylinder(name="Dummy filling universe", r=4000.) # 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) self.s_baffle_N = openmc.YPlane(name='North Baffle Surface', y0=c.latticePitch / 2 - c.baffleWaterGap - 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 self.c_baffle_N2 = openmc.Cell(name='North Baffle Steel', fill=self.mats['SS304']) self.c_baffle_N2.region = -self.s_baffle_N_gap & +self.s_baffle_N self.c_baffle_N3 = openmc.Cell(name='North Baffle Outer Water', fill=self.mats['Borated Water']) self.c_baffle_N3.region = -self.s_baffle_N self.u_baffle_N.add_cells( [self.c_baffle_N1, self.c_baffle_N2, self.c_baffle_N3]) # West Baffle self.u_baffle_W = InfinitePinCell(name="Baffle West") self.u_baffle_W.add_ring(self.u_baffle_N, self.dummy, rot=[0, 0, 90]) self.u_baffle_W.add_last_ring(self.mats['Borated Water']) self.u_baffle_W.finalize() # South Baffle self.u_baffle_S = InfinitePinCell(name="Baffle South") self.u_baffle_S.add_ring(self.u_baffle_N, self.dummy, rot=[0, 0, 180]) self.u_baffle_S.add_last_ring(self.mats['Borated Water']) self.u_baffle_S.finalize() # East Baffle self.u_baffle_E = InfinitePinCell(name="Baffle East") self.u_baffle_E.add_ring(self.u_baffle_N, self.dummy, rot=[0, 0, 270]) self.u_baffle_E.add_last_ring(self.mats['Borated Water']) self.u_baffle_E.finalize() # 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) self.s_baffle_W = openmc.XPlane(name='West Baffle Surface', x0=c.baffleWaterGap + c.baffleWidth - 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 self.c_baffle_C2 = openmc.Cell(name='Corner Baffle Water Gap W', fill=self.mats['Borated Water']) self.c_baffle_C2.region = -self.s_baffle_N_gap & -self.s_baffle_W_gap self.c_baffle_C3 = openmc.Cell(name='Corner Baffle Steel N', fill=self.mats['SS304']) self.c_baffle_C3.region = \ -self.s_baffle_N_gap & +self.s_baffle_N & +self.s_baffle_W_gap self.c_baffle_C4 = openmc.Cell(name='Corner Baffle Steel W', fill=self.mats['SS304']) self.c_baffle_C4.region = \ -self.s_baffle_N & +self.s_baffle_W_gap & -self.s_baffle_W self.c_baffle_C5 = openmc.Cell(name='Corner Baffle Outer Water', fill=self.mats['Borated Water']) self.c_baffle_C5.region = -self.s_baffle_N & +self.s_baffle_W self.u_baffle_NW.add_cells([ self.c_baffle_C1, self.c_baffle_C2, self.c_baffle_C3, self.c_baffle_C4, self.c_baffle_C5 ]) # South West Corner Baffle self.u_baffle_SW = InfinitePinCell(name="Baffle South West Corner") self.u_baffle_SW.add_ring(self.u_baffle_NW, self.dummy, rot=[0, 0, 90]) self.u_baffle_SW.add_last_ring(self.mats['Borated Water']) self.u_baffle_SW.finalize() # South East Corner Baffle self.u_baffle_SE = InfinitePinCell(name="Baffle South East Corner") self.u_baffle_SE.add_ring(self.u_baffle_NW, self.dummy, rot=[0, 0, 180]) self.u_baffle_SE.add_last_ring(self.mats['Borated Water']) self.u_baffle_SE.finalize() # North East Corner Baffle self.u_baffle_NE = InfinitePinCell(name="Baffle North East Corner") self.u_baffle_NE.add_ring(self.u_baffle_NW, self.dummy, rot=[0, 0, 270]) self.u_baffle_NE.add_last_ring(self.mats['Borated Water']) self.u_baffle_NE.finalize() # North West Tip Baffle self.u_baffle_NWT = openmc.Universe(name='Baffle North West Tip') self.c_baffle_C1 = openmc.Cell(name='Tip Baffle Water Gap', fill=self.mats['Borated Water']) self.c_baffle_C1.region = +self.s_baffle_N_gap & -self.s_baffle_W_gap self.c_baffle_C2 = openmc.Cell(name='Tip Baffle steel N', fill=self.mats['SS304']) self.c_baffle_C2.region = \ +self.s_baffle_N & -self.s_baffle_W & +self.s_baffle_W_gap self.c_baffle_C3 = openmc.Cell(name='Tip Baffle Steel W', fill=self.mats['SS304']) self.c_baffle_C3.region = \ -self.s_baffle_N_gap & +self.s_baffle_N & -self.s_baffle_W_gap self.c_baffle_C4 = openmc.Cell(name='Tip Baffle Outer Water N', fill=self.mats['Borated Water']) self.c_baffle_C4.region = +self.s_baffle_N & +self.s_baffle_W self.c_baffle_C5 = openmc.Cell(name='Tip Baffle Outer Water W', fill=self.mats['Borated Water']) self.c_baffle_C5.region = -self.s_baffle_N & -self.s_baffle_W self.c_baffle_C6 = openmc.Cell(name='Tip Baffle Outer Water SE', fill=self.mats['Borated Water']) self.c_baffle_C6.region = -self.s_baffle_N & +self.s_baffle_W self.u_baffle_NWT.add_cells([ self.c_baffle_C1, self.c_baffle_C2, self.c_baffle_C3, self.c_baffle_C4, self.c_baffle_C5, self.c_baffle_C6 ]) # South West Tip Baffle self.u_baffle_SWT = InfinitePinCell(name="Baffle South West Tip") self.u_baffle_SWT.add_ring(self.u_baffle_NWT, self.dummy, rot=[0, 0, 90]) self.u_baffle_SWT.add_last_ring(self.mats['Borated Water']) self.u_baffle_SWT.finalize() # South East Tip Baffle self.u_baffle_SET = InfinitePinCell(name="Baffle South East Tip") self.u_baffle_SET.add_ring(self.u_baffle_NWT, self.dummy, rot=[0, 0, 180]) self.u_baffle_SET.add_last_ring(self.mats['Borated Water']) self.u_baffle_SET.finalize() # North East Tip Baffle self.u_baffle_NET = InfinitePinCell(name="Baffle North East Tip") self.u_baffle_NET.add_ring(self.u_baffle_NWT, self.dummy, rot=[0, 0, 270]) self.u_baffle_NET.add_last_ring(self.mats['Borated Water']) self.u_baffle_NET.finalize() self.universes = {} self.universes['bafn_'] = self.u_baffle_S self.universes['bafs_'] = self.u_baffle_N self.universes['bafe_'] = self.u_baffle_W self.universes['bafw_'] = self.u_baffle_E self.universes['bafnw'] = self.u_baffle_SET self.universes['bafne'] = self.u_baffle_SWT self.universes['bafsw'] = self.u_baffle_NET self.universes['bafse'] = self.u_baffle_NWT self.universes['bfcnw'] = self.u_baffle_SE self.universes['bfcne'] = self.u_baffle_SW self.universes['bfcsw'] = self.u_baffle_NE self.universes['bfcse'] = self.u_baffle_NW