bluemira.balance_of_plant.steady_state ====================================== .. py:module:: bluemira.balance_of_plant.steady_state .. autoapi-nested-parse:: Crude 0-D steady-state balance of plant model. Mostly for visualisation purposes. Attributes ---------- .. autoapisummary:: bluemira.balance_of_plant.steady_state.CoolantPumpingT bluemira.balance_of_plant.steady_state.PowerCycleEfficiencyCalcT bluemira.balance_of_plant.steady_state.FractionSplitStrategyT Classes ------- .. autoapisummary:: bluemira.balance_of_plant.steady_state.CoolantPumping bluemira.balance_of_plant.steady_state.HePumping bluemira.balance_of_plant.steady_state.H2OPumping bluemira.balance_of_plant.steady_state.PowerCycleEfficiencyCalc bluemira.balance_of_plant.steady_state.PredeterminedEfficiency bluemira.balance_of_plant.steady_state.SuperheatedRankine bluemira.balance_of_plant.steady_state.FractionSplitStrategy bluemira.balance_of_plant.steady_state.RadChargedPowerStrategy bluemira.balance_of_plant.steady_state.ParasiticLoadStrategy bluemira.balance_of_plant.steady_state.BoPModelParams bluemira.balance_of_plant.steady_state.BalanceOfPlantModel Module Contents --------------- .. py:data:: CoolantPumpingT .. py:class:: CoolantPumping Bases: :py:obj:`abc.ABC` .. autoapi-inheritance-diagram:: bluemira.balance_of_plant.steady_state.CoolantPumping :parts: 1 :private-bases: Pumping power strategy abstract base class .. py:method:: pump(power: float) -> tuple[float, float] :abstractmethod: Calculate the pump work and electrical pumping power required for a given power. .. py:class:: HePumping(pressure_in: float, pressure_out: float, temp_in: float, temp_out: float, eta_isentropic: float, eta_electric: float) Bases: :py:obj:`CoolantPumping` .. autoapi-inheritance-diagram:: bluemira.balance_of_plant.steady_state.HePumping :parts: 1 :private-bases: He-cooling pumping power calculation strategy :param pressure_in: Inlet pressure [Pa] :param pressure_out: Pressure drop [Pa] :param temp_in: Inlet temperature [K] :param temp_out: Outlet temperature [K] :param eta_isen: Isentropic efficiency of the He compressors :param eta_el: Electrical efficiency of the He compressors .. py:attribute:: p_in .. py:attribute:: p_out .. py:attribute:: t_in .. py:attribute:: t_out .. py:attribute:: eta_isen .. py:attribute:: eta_el .. py:method:: pump(power: float) -> tuple[float, float] Calculate the pump work and electrical pumping power required for a given power. :param power: Total blanket power excluding pumping power [W] :returns: * *P_pump_is* -- The isentropic pumping power (added to the working fluid) * *P_pump_el* -- The electrical pumping power (parasitic load) .. py:class:: H2OPumping(f_pump: float, eta_isentropic: float, eta_electric: float) Bases: :py:obj:`CoolantPumping` .. autoapi-inheritance-diagram:: bluemira.balance_of_plant.steady_state.H2OPumping :parts: 1 :private-bases: H20-cooling pumping power calculation strategy :param f_pump: Fraction of thermal power required to pump :param eta_isen: Isentropic efficiency of the water pumps :param eta_el: Electrical efficiency of the water pumps .. py:attribute:: f_pump .. py:attribute:: eta_isen .. py:attribute:: eta_el .. py:method:: pump(power: float) -> tuple[float, float] Calculate the pump work and electrical pumping power required for a given power. :param power: Total blanket power excluding pumping power [W] :returns: * *P_pump_is* -- The isentropic pumping power (added to the working fluid) * *P_pump_el* -- The eletrical pumping power (parasitic load) .. py:data:: PowerCycleEfficiencyCalcT .. py:class:: PowerCycleEfficiencyCalc Bases: :py:obj:`abc.ABC` .. autoapi-inheritance-diagram:: bluemira.balance_of_plant.steady_state.PowerCycleEfficiencyCalc :parts: 1 :private-bases: Power cycle efficiency calculation abstract base class .. py:method:: calculate(*args) -> float :abstractmethod: Calculate the efficiency of the power cycle .. py:class:: PredeterminedEfficiency(efficiency: float) Bases: :py:obj:`PowerCycleEfficiencyCalc` .. autoapi-inheritance-diagram:: bluemira.balance_of_plant.steady_state.PredeterminedEfficiency :parts: 1 :private-bases: Predetermined efficiency 'calculation' :param efficiency: The efficiency to 'calculate' .. py:attribute:: efficiency .. py:method:: calculate(p_blanket: float, p_divertor: float) -> float Calculate the efficiency of the power cycle :param p_blanket: Blanket thermal power [MW] :param p_divertor: Divertor thermal power [MW] :returns: The efficiency .. py:class:: SuperheatedRankine(bb_t_out: float, delta_t_turbine: float) Bases: :py:obj:`PowerCycleEfficiencyCalc` .. autoapi-inheritance-diagram:: bluemira.balance_of_plant.steady_state.SuperheatedRankine :parts: 1 :private-bases: Superheated Rankine power cycle for use with gas coolants :param bb_t_out: Breeding blanket outlet temperature [K] :param delta_t_turbine: Turbine inlet delta T [K] .. py:attribute:: bb_t_out .. py:attribute:: delta_t_turbine .. py:method:: calculate(p_blanket: float, p_divertor: float) -> float Calculate the efficiency of the power cycle :param p_blanket: Blanket thermal power [MW] :param p_divertor: Divertor thermal power [MW] :returns: The efficiency of the power cycle .. py:data:: FractionSplitStrategyT .. py:class:: FractionSplitStrategy Bases: :py:obj:`abc.ABC` .. autoapi-inheritance-diagram:: bluemira.balance_of_plant.steady_state.FractionSplitStrategy :parts: 1 :private-bases: Strategy ABC for splitting flows according to fractions. .. py:method:: split(*args) :abstractmethod: Split flows somehow. .. py:method:: check_fractions(fractions: collections.abc.Iterable[float]) Check that fractions sum to 1.0 :raises BalanceOfPlantError: If they do not .. py:class:: RadChargedPowerStrategy(f_core_rad_fw: float, f_sol_rad: float, f_sol_rad_fw: float, f_sol_ch_fw: float, f_fw_aux: float) Bases: :py:obj:`FractionSplitStrategy` .. autoapi-inheritance-diagram:: bluemira.balance_of_plant.steady_state.RadChargedPowerStrategy :parts: 1 :private-bases: Strategy for distributing radiation and charged particle power from the plasma core and scrape-off layer :param f_core_rad_fw: Fraction of core radiation power distributed to the first wall :param f_sol_rad: Fraction of SOL power that is radiated :param f_sol_rad_fw: Fraction of radiated SOL power that is distributed to the first wall :param f_sol_ch_fw: Fraction of SOL charged particle power that is distributed to the first wall :param f_fw_aux: Fraction of first power that actually goes into auxiliary systems .. py:attribute:: f_core_rad_fw .. py:attribute:: f_sol_rad .. py:attribute:: f_sol_rad_fw .. py:attribute:: f_sol_ch_fw .. py:attribute:: f_fw_aux .. py:method:: split(p_radiation: float, p_separatrix: float) -> tuple[float, float, float] Split the radiation and charged particle power :param p_radiation: Plasma core radiation power :param p_separatrix: Charged particle power crossing the separatrix :returns: * *p_rad_sep_blk* -- Radiation power from separatrix to blanket * *p_rad_sep_div* -- Radiation power from separatrix to divertor * *p_rad_sep_aux* -- Radiation power from separatrix to auxiliaries .. py:class:: ParasiticLoadStrategy Bases: :py:obj:`abc.ABC` .. autoapi-inheritance-diagram:: bluemira.balance_of_plant.steady_state.ParasiticLoadStrategy :parts: 1 :private-bases: Strategy for calculating the parasitic loads .. py:method:: calculate(**kwargs) -> tuple[float, float, float, float] :abstractmethod: Calculate the parasitic loads somehow :returns: * *p_mag* -- Parasitic loads to power the magnets * *p_cryo* -- Parasitic loads to power the cryoplant * *p_t_plant* -- Parasitic loads to power the tritium plant * *p_other* -- Parasitic loads to power other miscellaneous things .. py:class:: BoPModelParams Bases: :py:obj:`bluemira.base.parameter_frame.ParameterFrame` .. autoapi-inheritance-diagram:: bluemira.balance_of_plant.steady_state.BoPModelParams :parts: 1 :private-bases: Parameters required to run :class:`~bluemira.balance_of_plant.steady_state.BalanceOfPlantModel`. .. py:attribute:: P_fus_DT :type: bluemira.base.parameter_frame.Parameter[float] .. py:attribute:: P_fus_DD :type: bluemira.base.parameter_frame.Parameter[float] .. py:attribute:: P_rad :type: bluemira.base.parameter_frame.Parameter[float] .. py:attribute:: P_hcd_ss :type: bluemira.base.parameter_frame.Parameter[float] .. py:attribute:: P_hcd_ss_el :type: bluemira.base.parameter_frame.Parameter[float] .. py:attribute:: P_n_blanket :type: bluemira.base.parameter_frame.Parameter[float] .. py:attribute:: P_n_divertor :type: bluemira.base.parameter_frame.Parameter[float] .. py:attribute:: P_n_vessel :type: bluemira.base.parameter_frame.Parameter[float] .. py:attribute:: P_n_aux :type: bluemira.base.parameter_frame.Parameter[float] .. py:attribute:: P_n_e_mult :type: bluemira.base.parameter_frame.Parameter[float] .. py:attribute:: P_n_decay :type: bluemira.base.parameter_frame.Parameter[float] .. py:class:: BalanceOfPlantModel(params: bluemira.base.parameter_frame.typed.ParameterFrameLike, rad_sep_strat: FractionSplitStrategyT, blanket_pump_strat: CoolantPumpingT, divertor_pump_strat: CoolantPumpingT, bop_cycle_strat: PowerCycleEfficiencyCalcT, parasitic_load_strat: ParasiticLoadStrategy) Balance of plant calculator for a fusion power reactor. :param params: Structure containing input parameters. If this is a dictionary, required keys are: * P_fus_DT: float * P_fus_DD: float * P_rad: float * P_hcd_ss: float * P_hcd_ss_el: float See :class:`~bluemira.balance_of_plant.steady_state.BoPModelParams` for parameter details. :param rad_sep_strat: Strategy to calculate the where the radiation and charged particle power in the scrape-off-layer is carried to :param blanket_pump_strat: Strategy to calculate the coolant pumping power for the blanket :param divertor_pump_strat: Strategy to calculate the coolant pumping power for the divertor :param bop_cycle_strat: Strategy to calculate the balance of plant thermal efficiency :param parasitic_load_strat: Strategy to calculate the parasitic loads .. rubric:: Notes .. math:: P_{el}={\eta}_{BOP} & \Bigg[\Bigg(\frac{4}{5}P_{fus}f_{nrgm}- P_{n_{aux}}-P_{n_{DIV}}+f_{SOL_{rad}}f_{SOL_{ch}} \Big(\frac{P_{fus}}{5}+P_{HCD}\Big)\Bigg) \Big(1+\frac{f_{p_{BB}}}{1-f_{p_{BB}}}\Big) \\ & +\Bigg(P_{n_{DIV}}+f_{SOL_{rad}}f_{SOL_{ch}}f_{fw} \Big(\frac{P_{fus}}{5}+P_{HCD}\Big)\Bigg) \Big(1+\frac{f_{p_{DIV}}}{1-f_{p_{DIV}}}\Big)\Bigg] .. py:attribute:: _plotter .. py:attribute:: params :type: BoPModelParams .. py:attribute:: rad_sep_strat .. py:attribute:: blanket_pump_strat .. py:attribute:: divertor_pump_strat .. py:attribute:: bop_strat .. py:attribute:: parasitic_strat .. py:method:: build() Carry out the balance of plant calculation .. py:method:: sanity() Perform a series of sanity checks. .. py:method:: plot(title: str = '', **kwargs) Plot the BalanceOfPlant object. :param title: Title to print on the plot :param kwargs: see BALANCE_PLOT_DEFAULTS for details :returns: The plot axis