Source code for pyrfu.models.ion_anisotropy_thresh

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# 3rd party imports
import numpy as np

EMPIRICAL_FITS = {
    "10^-2": {
        "proton-cyclotron": {"a": 0.69, "b": 0.4, "beta0": 0.0},
        "mirror": {"a": 1.040, "b": 0.633, "beta0": -0.012},
        "parallel-firehose": {"a": -0.647, "b": 0.583, "beta0": 0.713},
        "oblique-firehose": {"a": -1.447, "b": 1, "beta0": -0.148},
    }
}


[docs]def ion_anisotropy_thresh(beta, instability_type, growth_rate="10^-2"): r"""Compute the threshold using the empirical model defined in [1]_. .. math:: R_i = T_{i\perp} / T_{i\parallel} = 1 + a / (\beta_{i\parallel} -\beta_0)^b Parameters ---------- beta : xarray.DataArray or numpy.ndarray Time series or array of parallel ion plasma beta. a : float Coefficient from fit. b : float Coefficient from fit. beta0 : float Coefficient from fit. Returns ------- r_i_thresh : xarray.DataArray Time series or array of threshold temperature anisotropy at the given beta. References ---------- .. [1] Hellinger, P., P. Travnicek, J. C. Kasper, and A. J. Lazarus (2006), Solar wind proton temperature anisotropy: Linear theory and WIND/SWE observations, Geophys. Res. Lett., 33, L09101, doi:10.1029/2006GL025925. """ if growth_rate not in EMPIRICAL_FITS: raise ValueError(f"Growth rate {growth_rate} not recognized.") if instability_type not in EMPIRICAL_FITS[growth_rate]: raise ValueError(f"Instability type {instability_type} not recognized.") # Get fit parameters fit_params = EMPIRICAL_FITS[growth_rate][instability_type] a = fit_params["a"] b = fit_params["b"] beta0 = fit_params["beta0"] # Discard negative values from the denominator beta[beta < beta0] = np.nan # Compute threshold r_i_thresh = 1 + a / (beta - beta0) ** b return r_i_thresh