Skip to content

zephyrus.escape

escape

escape.py

Main functions to compute atmospheric escape.
Authors: Emma Postolec, Harrison Nicholls

EL_escape(tidal_contribution, a, e, Mp, Ms, epsilon, Rp, Rxuv, Fxuv, scaling=2)

Compute the mass-loss rate for Energy-Limited (EL) atmospheric escape.

The mass-loss rate is given by

\[ \dot{M}_\mathrm{EL} = \frac{\epsilon\,\pi\,R^3\,F_\mathrm{XUV}} {G\,M_p\,K_\mathrm{tide}} \]

where \(R^3\) is either \(R_p R_\mathrm{XUV}^2\) or \(R_\mathrm{XUV}^3\) depending on scaling, and \(K_\mathrm{tide}\) is the tidal correction factor of Lopez et al. (2012) when tidal_contribution is True, else 1.

Parameters:

Name Type Description Default
tidal_contribution bool

If True, include the tidal correction factor \(K_\mathrm{tide}\) (0 < K_tide < 1). If False, \(K_\mathrm{tide} = 1\) (no tidal effects).

required
a float

Planetary semi-major axis [m]. Only used when tidal_contribution is True.

required
e float

Orbital eccentricity (dimensionless). Only used when tidal_contribution is True.

required
Mp float

Planetary mass [kg].

required
Ms float

Stellar mass [kg]. Only used when tidal_contribution is True.

required
epsilon float

Escape efficiency factor (dimensionless). Typical literature range is \(0.1 < \epsilon < 0.6\).

required
Rp float

Planetary radius [m]. Used as a linear factor when scaling=2.

required
Rxuv float

Planetary radius at which the atmosphere becomes optically thick to XUV radiation [m]. Defined at 20 mbar in Baumeister et al. (2023).

required
Fxuv float

XUV flux received by the planet from the host star, in W m\(^{-2}\).

required
scaling int

Planet radius scaling exponent. 2 (default) uses \(R_p R_\mathrm{XUV}^2\); 3 uses \(R_\mathrm{XUV}^3\). Any other value raises ValueError.

2

Returns:

Name Type Description
escape_EL float

Mass-loss rate for energy-limited escape, in kg s\(^{-1}\).

Raises:

Type Description
ValueError

If scaling is not 2 or 3.

References

Based on the formulation of Lopez, Fortney & Miller (2012), Equations 2-4. The alternative radius scaling (scaling=3) follows Lehmer & Catling (2017), Equation 1.

  1. Lopez, E. D., Fortney, J. J., & Miller, N. (2012). How thermal evolution and mass-loss sculpt populations of super-Earths and sub-Neptunes. ApJ, 761(1), 59.
  2. Lehmer, O. R., & Catling, D. C. (2017). Rocky worlds limited to ~1.8 Earth radii by atmospheric escape during a star's extreme UV saturation. ApJ, 845(2), 130.
Source code in src/zephyrus/escape.py
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
def EL_escape(tidal_contribution:bool, a:float, e:float,
                Mp:float, Ms:float, epsilon:float,
                Rp:float, Rxuv:float, Fxuv:float, scaling:int=2):
    r"""
    Compute the mass-loss rate for Energy-Limited (EL) atmospheric escape.

    The mass-loss rate is given by

    $$
    \dot{M}_\mathrm{EL} = \frac{\epsilon\,\pi\,R^3\,F_\mathrm{XUV}}
                               {G\,M_p\,K_\mathrm{tide}}
    $$

    where $R^3$ is either $R_p R_\mathrm{XUV}^2$ or $R_\mathrm{XUV}^3$
    depending on ``scaling``, and $K_\mathrm{tide}$ is the tidal
    correction factor of Lopez et al. (2012) when ``tidal_contribution``
    is True, else 1.

    Parameters
    ----------
    tidal_contribution : bool
        If True, include the tidal correction factor $K_\mathrm{tide}$
        (0 < K_tide < 1). If False, $K_\mathrm{tide} = 1$ (no tidal
        effects).
    a : float
        Planetary semi-major axis [m]. Only used when
        ``tidal_contribution`` is True.
    e : float
        Orbital eccentricity (dimensionless). Only used when
        ``tidal_contribution`` is True.
    Mp : float
        Planetary mass [kg].
    Ms : float
        Stellar mass [kg]. Only used when
        ``tidal_contribution`` is True.
    epsilon : float
        Escape efficiency factor (dimensionless). Typical literature
        range is $0.1 < \epsilon < 0.6$.
    Rp : float
        Planetary radius [m]. Used as a linear factor when
        ``scaling=2``.
    Rxuv : float
        Planetary radius at which the atmosphere becomes optically
        thick to XUV radiation [m]. Defined at 20 mbar in
        Baumeister et al. (2023).
    Fxuv : float
        XUV flux received by the planet from the host star, in
        W m$^{-2}$.
    scaling : int, optional
        Planet radius scaling exponent. ``2`` (default) uses
        $R_p R_\mathrm{XUV}^2$; ``3`` uses $R_\mathrm{XUV}^3$. Any other
        value raises ``ValueError``.

    Returns
    -------
    escape_EL : float
        Mass-loss rate for energy-limited escape, in kg s$^{-1}$.

    Raises
    ------
    ValueError
        If ``scaling`` is not ``2`` or ``3``.

    References
    ----------
    Based on the formulation of Lopez, Fortney & Miller (2012),
    Equations 2-4. The alternative radius scaling (``scaling=3``)
    follows Lehmer & Catling (2017), Equation 1.

    1. Lopez, E. D., Fortney, J. J., & Miller, N. (2012).
       How thermal evolution and mass-loss sculpt populations of
       super-Earths and sub-Neptunes. *ApJ*, 761(1), 59.
    2. Lehmer, O. R., & Catling, D. C. (2017). Rocky worlds
       limited to ~1.8 Earth radii by atmospheric escape during a
       star's extreme UV saturation. *ApJ*, 845(2), 130.
    """
    # Tidal contribution
    if tidal_contribution:                 # Take into account tidal contributions : Ktide
        Rhill = a * (1-e) * (Mp/(3*Ms))**(1/3)
        ksi = Rhill/Rxuv
        K_tide = 1 - (3/(2*ksi)) + (1/(2*(ksi**3)))
    else :                                           # No tidal contributions : Ktide = 1
        K_tide = 1

    # Radius
    match scaling:
        case 2:
            R_cubed = Rp * Rxuv**2
        case 3:
            R_cubed = Rxuv**3
        case _:
            raise ValueError(f"Invalid radius exponent: {scaling}")

    # Mass-loss rate for EL escape
    escape_EL = (epsilon * np.pi * R_cubed * Fxuv) / (G * Mp * K_tide)

    return escape_EL