Source code for cfspopcon.formulas.metrics.greenwald_density

"""Calculate the Greenwald density limit."""

import numpy as np

from ...algorithm_class import Algorithm
from ...unit_handling import Unitfull, ureg, wraps_ufunc


[docs] @Algorithm.register_algorithm(return_keys=["greenwald_fraction"]) def calc_greenwald_fraction(average_electron_density: Unitfull, greenwald_density_limit: Unitfull) -> Unitfull: """Calculate the fraction of the Greenwald density limit. Args: average_electron_density: [1e20 m^-3] :term:`glossary link<average_electron_density>` greenwald_density_limit: [1e20 m^-3] :term:`glossary link<greenwald_density_limit>` Returns: :term:`greenwald_fraction` [~] """ return average_electron_density / greenwald_density_limit
[docs] @Algorithm.register_algorithm(return_keys=["greenwald_density_limit"]) @wraps_ufunc(return_units=dict(nG=ureg.n20), input_units=dict(plasma_current=ureg.MA, minor_radius=ureg.m)) def calc_greenwald_density_limit(plasma_current: float, minor_radius: float) -> float: """Calculate the Greenwald density limit. Args: plasma_current: [MA] :term:`glossary link<plasma_current>` minor_radius: [m] :term:`glossary link<minor_radius>` Returns: :term:`greenwald_density_limit` [1e20 m^-3] """ return plasma_current / (np.pi * minor_radius**2)
[docs] @Algorithm.register_algorithm(return_keys=["average_electron_density"]) def calc_average_electron_density_from_greenwald_fraction(greenwald_fraction: Unitfull, greenwald_density_limit: Unitfull) -> Unitfull: """Calculate the average electron density corresponding to a given Greenwald fraction. Args: greenwald_fraction: :term:`glossary link<greenwald_fraction>` greenwald_density_limit: :term:`glossary link<greenwald_density_limit>` Returns: :term:`average_electron_density` in same units as `greenwald_density_limit` """ return greenwald_fraction * greenwald_density_limit