"""Calculate the average fuel mass in atomic mass units."""
import xarray as xr
from ...algorithm_class import Algorithm
from ...unit_handling import Unitfull
from .fusion_data import REACTIONS, DDFusionBoschHale, DDFusionHively, DHe3Fusion, DTFusionBoschHale, DTFusionHively, pB11Fusion
[docs]
@Algorithm.register_algorithm(return_keys=["average_ion_mass"])
def calc_average_ion_mass(fusion_reaction: str, heavier_fuel_species_fraction: Unitfull) -> Unitfull:
"""Calculate the average mass of the fuel ions, based on reaction type and fuel mixture ratio.
Args:
fusion_reaction: reaction type.
heavier_fuel_species_fraction: n_heavier / (n_heavier + n_lighter) number fraction.
Returns:
:term:`average_ion_mass` [amu]
"""
if isinstance(fusion_reaction, xr.DataArray):
fusion_reaction = fusion_reaction.item()
reaction = REACTIONS[fusion_reaction]
if isinstance(reaction, (DTFusionBoschHale, DTFusionHively, DHe3Fusion, pB11Fusion)):
return reaction.calc_average_ion_mass(heavier_fuel_species_fraction)
elif isinstance(reaction, (DDFusionBoschHale, DDFusionHively)):
return reaction.calc_average_ion_mass()
else:
raise NotImplementedError(f"No implementation for calc_average_ion_mass for {fusion_reaction}")