Example #1
0
    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
Example #2
0
    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()
Example #3
0
    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()
Example #4
0
    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()
Example #5
0
    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()
Example #6
0
    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()
Example #7
0
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()
Example #8
0
    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
Example #9
0
    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()