From 5bc611c17f833c561d02ce1c3a59c94a07c93625 Mon Sep 17 00:00:00 2001 From: bjorn-stevens <64255981+bjorn-stevens@users.noreply.github.com> Date: Fri, 12 Aug 2022 13:36:35 +0200 Subject: [PATCH] added more complete docstrings - added better referenced and more complete docstreams for all of the functions. - modified docstring formatting to better align with standards (google) - cleaned up some stray cells in the examples notebook --- examples/examples.ipynb | 15 +- moist_thermodynamics/functions.py | 438 +++++++++++++++++++++++++----- 2 files changed, 370 insertions(+), 83 deletions(-) diff --git a/examples/examples.ipynb b/examples/examples.ipynb index 0c75eae..6d955cd 100644 --- a/examples/examples.ipynb +++ b/examples/examples.ipynb @@ -25,7 +25,7 @@ "Usage of the moist thermodynamic functions is documented through a number of examples\n", "\n", "1. constructing a moist adiabat.\n", - "2. sensitivity of moist adiabat on saturation vapor pressure \n", + "2. sensitivity of moist adiabat to saturation vapor pressure \n", "3. lcl computations\n", "\n", "## 1. Constructing a moist adiabat\n", @@ -35,7 +35,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "id": "0f765565-ed26-4cc7-a859-bebf9b020aea", "metadata": {}, "outputs": [ @@ -99,7 +99,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "id": "321bddff-0bb6-4b3a-a3f0-1dae1c50c852", "metadata": {}, "outputs": [ @@ -170,7 +170,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "id": "a53539ae-7920-41b9-aa41-fed0031ce16b", "metadata": {}, "outputs": [], @@ -303,7 +303,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "id": "9b2830db-855d-467d-ac66-cc9154ab7caa", "metadata": {}, "outputs": [ @@ -311,9 +311,6 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/m219063/opt/miniforge3/lib/python3.9/site-packages/scipy/optimize/_minpack_py.py:175: RuntimeWarning: The iteration is not making good progress, as measured by the \n", - " improvement from the last ten iterations.\n", - " warnings.warn(msg, RuntimeWarning)\n", "/Users/m219063/opt/miniforge3/lib/python3.9/site-packages/scipy/optimize/_minpack_py.py:175: RuntimeWarning: The iteration is not making good progress, as measured by the \n", " improvement from the last ten iterations.\n", " warnings.warn(msg, RuntimeWarning)\n" @@ -321,7 +318,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "<Figure size 504x360 with 2 Axes>" ] diff --git a/moist_thermodynamics/functions.py b/moist_thermodynamics/functions.py index 5969847..b180cb8 100644 --- a/moist_thermodynamics/functions.py +++ b/moist_thermodynamics/functions.py @@ -1,6 +1,11 @@ # -*- coding: utf-8 -*- """ +Provides accurate thermodynamic functions for moist atmosphere + Author: Bjorn Stevens (bjorn.stevens@mpimet.mpg.de) +copygright, bjorn stevens Max Planck Institute for Meteorology, Hamburg + +License: BSD-3C """ # from . import constants @@ -8,7 +13,16 @@ import numpy as np from scipy import interpolate, optimize def planck(T,nu): - """ Returns the Planck source function for the given temperature (K) and frequency (Hz) + """Planck source function (J/m2 per steradian per Hz) + + Args: + T: temperature in kelvin + nu: frequency in Hz + + Returns: + Returns the radiance in the differential frequency interval per unit steradian. Usually we + multiply by $\pi$ to convert to irradiances + >>> planck(300,1000*constants.c) 8.086837160291128e-15 """ @@ -18,9 +32,20 @@ def planck(T,nu): return (2 * h * nu**3 / c**2) / (np.exp(h*nu/(kB*T))-1) def es_liq(T): - """ Returns the saturation vapor pressure of water over liquid following Wagner and Pruss (2002) - fits for saturation over planar liquid. These formulations were found to be the most accurate as - compared to the IAPWS standard for warm temperatures + """Returns saturation vapor pressure (Pa) over planer liquid water + + Encodes the empirical fits of Wagner and Pruss (2002), Eq 2.5a (page 399). Their formulation + is compared to other fits in the example scripts used in this package, and deemed to be the + best reference. + + Args: + T: temperature in kelvin + + Reference: + W. Wagner and A. Pruß , "The IAPWS Formulation 1995 for the Thermodynamic Properties + of Ordinary Water Substance for General and Scientific Use", Journal of Physical and Chemical + Reference Data 31, 387-535 (2002) https://doi.org/10.1063/1.1461829 + >>> es_liq(np.asarray([273.16,305.])) array([ 611.65706974, 4719.32683147]) """ @@ -33,8 +58,20 @@ def es_liq(T): return es def es_ice(T): - """ Returns the saturation vapor pressure of water over ice following Wagner et al., (2011) - fits for saturation over ice, these also define the IAPWS standard for ice. + """Returns sublimation vapor pressure (Pa) over simple (Ih) ice + + Encodes the emperical fits of Wagner et al., (2011) which also define the IAPWS standard for + sublimation vapor pressure over ice-Ih + + Args: + T: temperature in kelvin + + Reference: + Wagner, W., Riethmann, T., Feistel, R. & Harvey, A. H. New Equations for the Sublimation + Pressure and Melting Pressure of H 2 O Ice Ih. Journal of Physical and Chemical Reference + Data 40, 043103 (2011). + + >>> es_ice(np.asarray([273.16,260.])) array([611.655 , 195.80103377]) """ @@ -52,19 +89,44 @@ def es_ice(T): return es def es_mxd(T): - """ Saturation vapor pressure of water over liquid (T>Tmelt) or ice (T>Tmel) following the - Wagner and Pruss (2002) and Wagner et al (2011) formuations for each of these. + """Returns the minimum of the sublimation and saturation vapor pressure + + Calculates both the sublimation vapor pressure over ice Ih using es_ice and that over planar + water using es_liq, and returns the minimum of the two quantities. + + Args: + T: temperature in kelvin + + Returns: + value of es_ice(T) for T < 273.15 and es_liq(T) otherwise + >>> es_mxd(np.asarray([305.,260.])) array([4719.32683147, 195.80103377]) """ return np.minimum(es_liq(T),es_ice(T)) def es_liq_analytic(T, delta_cl=constants.delta_cl): - """ Returns an analytic approximation to the saturation vapor pressure over liquid - that depends on the differential specific heats (cpv-cl). Useful for computations - that require consisntency with assumption of cp's being constant. The analytic - expressions become identical to Romps (2017) in the case when the differential specific - heats are adjusted to his suggested values. + """Analytic approximation for saturation vapor pressure over iquid + + Uses the rankine (constant specific heat, negligible condensate volume) approximations to + calculate the saturation vapor pressure over liquid. The procedure is described in Eq(4) of + Romps (2017) and best approximates the actual value for specific heats that differ slightly + from the best estimates of these quantities which are provided as default quantities. + Romps recommends cl = 4119 J/kg/K, and cpv = 1861 J/kg/K. + + Args: + T: temperature in kelvin + delta_cl: differnce between isobaric specific heat capacity of vapor and that of liquid. + + Returns: + value of saturation vapor pressure over liquid water in Pa + + Reference: + Romps, D. M. Exact Expression for the Lifting Condensation Level. Journal of the Atmospheric + Sciences 74, 3891–3900 (2017). + Romps, D. M. Accurate expressions for the dew point and frost point derived from the Rankine- + Kirchhoff approximations. Journal of the Atmospheric Sciences (2021) doi:10.1175/JAS-D-20-0301.1. + >>> es_liq_analytic(np.asarray([273.16,305.])) array([ 611.655 , 4711.13161169]) """ @@ -79,11 +141,28 @@ def es_liq_analytic(T, delta_cl=constants.delta_cl): return es def es_ice_analytic(T, delta_ci=constants.delta_ci): - """ Returns an analytic approximation to the saturation vapor pressure over ice - that depends on the differential specific heats (cpv-ci). Useful for computations - that require consisntency with assumption of cp's being constant. The analytic - expressions become identical to Romps (2017) in the case when the differential specific - heats are adjusted to his suggested values. + """Analytic approximation for saturation vapor pressure over ice + + Uses the rankine (constant specific heat, negligible condensate volume) approximations to + calculate the saturation vapor pressure over ice. The procedure is described in Eq(4) of + Romps (2017) and best approximates the actual value for specific heats that differ slightly + from the best estimates of these quantities which are provided as default quantities. + Romps recommends ci = 1861 J/kg/K, and cpv = 1879 J/kg/K. + + Args: + T: temperature in kelvin + delta_cl: differnce between isobaric specific heat capacity of vapor and that of liquid. + + Returns: + value of saturation vapor pressure over liquid water in Pa + + Reference: + Romps, D. M. Exact Expression for the Lifting Condensation Level. Journal of the Atmospheric + Sciences 74, 3891–3900 (2017). + Romps, D. M. Accurate expressions for the dew point and frost point derived from the Rankine- + Kirchhoff approximations. Journal of the Atmospheric Sciences (2021) doi:10.1175/JAS-D-20-0301.1. + + >>> es_ice_analytic(np.asarray([273.16,260.])) array([611.655 , 195.99959431]) """ @@ -98,16 +177,34 @@ def es_ice_analytic(T, delta_ci=constants.delta_ci): return es def es_mxd_analytic(T, delta_cl=constants.delta_cl, delta_ci=constants.delta_ci): - """ Saturation vapor pressure of water over liquid (T>Tmelt) or ice (T>Tmel) following the - analytic formulations (constant cp) for each of these. + """Returns the minimum of the analytic sublimation and saturation vapor pressure + + Calculates both the sublimation vapor pressure over ice Ih using es_ice_analytic and + that over planar water using es_liq_analytic, and returns the minimum of the two + quantities. + + Args: + T: temperature in kelvin + + Returns: + value of es_ice_analytic(T) for T < 273.15 and es_liq_analytic(T) otherwise + >>> es_ice_analytic(np.asarray([273.16,260.])) array([611.655 , 195.99959431]) """ return np.minimum(es_liq_analytic(T,delta_cl),es_ice_analytic(T,delta_ci)) def vaporization_enthalpy(TK,delta_cl=constants.delta_cl): - """ Returns the enthlapy [J/g] of vaporization (default) of water vapor or - (if fusion=True) the fusion anthalpy. Input temperature can be in degC or Kelvin + """Returns the vaporization enthlapy of water (J/kg) + + The vaporization enthalpy is calculated from a linear depdence on temperature about a + reference value valid at the melting temperature. This approximation is consistent with the + assumption of a Rankine fluid. + + Args: + T: temperature in kelvin + delta_cl: differnce between isobaric specific heat capacity of vapor and that of liquid. + >>> vaporization_enthalpy(np.asarray([305.,273.15])) array([2427211.264, 2500930. ]) """ @@ -116,8 +213,17 @@ def vaporization_enthalpy(TK,delta_cl=constants.delta_cl): return lv0 + delta_cl*(TK-T0) def sublimation_enthalpy(TK,delta_ci=constants.delta_ci): - """ Returns the enthlapy [J/g] of vaporization (default) of water vapor or - (if fusion=True) the fusion anthalpy. Input temperature can be in degC or Kelvin + """Returns the sublimation enthlapy of water (J/kg) + + The sublimation enthalpy is calculated from a linear depdence on temperature about a + reference value valid at the melting temperature. This approximation is consistent with the + assumption of a Rankine fluid. + + Args: + T: temperature in kelvin + delta_cl: differnce between isobaric specific heat capacity of vapor and that of liquid. + + >>> sublimation_enthalpy(273.15) 2834350.0 """ @@ -126,8 +232,8 @@ def sublimation_enthalpy(TK,delta_ci=constants.delta_ci): return ls0 + delta_ci*(TK-T0) def partial_pressure_to_mixing_ratio(pp,p): - """ Calculates mixing ratio from the partial and total pressure assuming - no condensate is present. Returns value in units of kg/kg. + """Returns the mass mixing ratio given the partial pressure and pressure + >>> partial_pressure_to_mixing_ratio(es_liq(300.),60000.) 0.0389569254590098 """ @@ -135,8 +241,13 @@ def partial_pressure_to_mixing_ratio(pp,p): return eps1*pp/(p-pp) def mixing_ratio_to_partial_pressure(r,p): - """ Calculates partial pressure from mixing ratio and pressure, if mixing ratio - units are greater than 1 they are normalized by 1000. + """Returns the partial pressure (pp in units of p) from a gas' mixing ratio + + Args: + r: mass mixing ratio (unitless) + p: pressure in same units as desired return value + + >>> mixing_ratio_to_partial_pressure(2e-5,60000.) 1.929375975915276 """ @@ -144,9 +255,14 @@ def mixing_ratio_to_partial_pressure(r,p): return r*p/(eps1+r) def partial_pressure_to_specific_humidity(pp,p): - """ Calculates specific mass from the partial and total pressure - assuming both have same units and no condensate is present. Returns value - in units of kg/kg. + """Returns the specific mass given the partial pressure and pressure. + + The specific mass can be written in terms of partial pressure and pressure as + expressed here only if the gas quanta contains no condensate phases. In this + case the specific humidity is the same as the co-dryair specific mass. In + situations where condensate is present one should instead calculate + $q = r*(1-qt)$ which would require an additional argument + >>> partial_pressure_to_specific_humidity(es_liq(300.),60000.) 0.037496189210922945 """ @@ -154,7 +270,20 @@ def partial_pressure_to_specific_humidity(pp,p): return r/(1+r) def theta_e_bolton(TK,PPa,qt,es=es_liq): - """ Calculates pseudo equivalent potential temperature. following Bolton + """Returns the pseudo equivalent potential temperature. + + Following Eq. 43 in Bolton (1980) the (pseudo) equivalent potential temperature + is calculated and returned by this function + + Args: + TK: temperature in kelvin + PPa: pressure in pascal + qt: specific total water mass + es: form of the saturation vapor pressure to use + + Reference: + Bolton, D. The Computation of Equivalent Potential Temperature. Monthly Weather + Review 108, 1046–1053 (1980). """ P0 = constants.standard_pressure p2r = partial_pressure_to_mixing_ratio @@ -167,8 +296,23 @@ def theta_e_bolton(TK,PPa,qt,es=es_liq): return TK*(P0/PPa)**(0.2854*(1.0 - 0.28*rv)) * np.exp((3376./TL - 2.54)*rv*(1+0.81*rv)) def theta_e(TK,PPa,qt,es=es_liq): - """ Calculates equivalent potential temperature corresponding to Eq. 2.42 in the Clouds - and Climate book. + """Returns the equivalent potential temperature + + Follows Eq. 11 in Marquet and Stevens (2022). The closed form solutionis derived for a + Rankine-Kirchoff fluid (constant specific heats). Differences arising from its + calculation using more accurate expressions (such as the default) as opposed to less + accurate, but more consistent, formulations are on the order of millikelvin + + Args: + TK: temperature in kelvin + PPa: pressure in pascal + qt: total water specific humidity (unitless) + es: form of the saturation vapor pressure + + Reference: + Marquet, P. & Stevens, B. On Moist Potential Temperatures and Their Ability to + Characterize Differences in the Properties of Air Parcels. Journal of the Atmospheric + Sciences 79, 1089–1103 (2022). """ P0 = constants.standard_pressure Rd = constants.dry_air_gas_constant @@ -192,8 +336,23 @@ def theta_e(TK,PPa,qt,es=es_liq): return(theta_e) def theta_l(TK,PPa,qt,es=es_liq): - """ Calculates liquid-water potential temperature. Following Stevens and Siebesma - Eq. 2.44-2.45 in the Clouds and Climate book + """Returns the liquid-water potential temperature + + Follows Eq. 16 in Marquet and Stevens (2022). The closed form solutionis derived for a + Rankine-Kirchoff fluid (constant specific heats). Differences arising from its + calculation using more accurate expressions (such as the default) as opposed to less + accurate, but more consistent, formulations are on the order of millikelvin + + Args: + TK: temperature in kelvin + PPa: pressure in pascal + qt: total water specific humidity (unitless) + es: form of the saturation vapor pressure + + Reference: + Marquet, P. & Stevens, B. On Moist Potential Temperatures and Their Ability to + Characterize Differences in the Properties of Air Parcels. Journal of the Atmospheric + Sciences 79, 1089–1103 (2022). """ P0 = constants.standard_pressure Rd = constants.dry_air_gas_constant @@ -217,8 +376,26 @@ def theta_l(TK,PPa,qt,es=es_liq): return(theta_l) def theta_s(TK,PPa,qt,es=es_liq): - """ Calculates entropy potential temperature. This follows the formulation of Pascal - Marquet and ensures that parcels with different theta-s have a different entropy + """Returns the entropy potential temperature + + Follows Eq. 18 in Marquet and Stevens (2022). The closed form solutionis derived for a + Rankine-Kirchoff fluid (constant specific heats). Differences arising from its + calculation using more accurate expressions (such as the default) as opposed to less + accurate, but more consistent, formulations are on the order of millikelvin + + Args: + TK: temperature in kelvin + PPa: pressure in pascal + qt: total water specific humidity (unitless) + es: form of the saturation vapor pressure + + Reference: + Marquet, P. & Stevens, B. On Moist Potential Temperatures and Their Ability to + Characterize Differences in the Properties of Air Parcels. Journal of the Atmospheric + Sciences 79, 1089–1103 (2022). + + Marquet, P. Definition of a moist entropy potential temperature: application to FIRE-I + data flights: Moist Entropy Potential Temperature. Q.J.R. Meteorol. Soc. 137, 768–791 (2011). """ P0 = constants.standard_pressure T0 = constants.standard_temperature @@ -258,8 +435,20 @@ def theta_s(TK,PPa,qt,es=es_liq): return(theta_s) def theta_es(TK,PPa,es=es_liq): - """ Calculates equivalent potential temperature corresponding to Eq. 2.42 in the Clouds - and Climate book but assuming that the water amount is just saturated + """Returns the saturated equivalent potential temperature + + Adapted from Eq. 11 in Marquet and Stevens (2022) with the assumption that the gas quanta is + everywhere just saturated. + + Args: + TK: temperature in kelvin + PPa: pressure in pascal + qt: total water specific humidity (unitless) + es: form of the saturation vapor pressure + + Reference: + Characterize Differences in the Properties of Air Parcels. Journal of the Atmospheric + Sciences 79, 1089–1103 (2022). """ P0 = constants.standard_pressure Rd = constants.dry_air_gas_constant @@ -280,87 +469,177 @@ def theta_es(TK,PPa,es=es_liq): return(theta_es) def theta_rho(TK,PPa,qt,es=es_liq): - """ Calculates theta_rho as theta_l * (1+Rd/Rv qv - qt) + """Returns the density liquid-water potential temperature + + calculates $\theta_\mathrm{l} R/R_\mathrm{d}$ where $R$ is the gas constant of a + most fluid. For an unsaturated fluid this is identical to the density potential + temperature baswed on the two component fluid thermodynamic constants. + + Args: + TK: temperature in kelvin + PPa: pressure in pascal + qt: total water specific humidity (unitless) + es: form of the saturation vapor pressure """ Rd = constants.dry_air_gas_constant Rv = constants.water_vapor_gas_constant - eps1 = constants.rd_over_rv p2r = partial_pressure_to_mixing_ratio ps = es(TK) qs = p2r(ps,PPa) * (1. - qt) qv = np.minimum(qt,qs) - theta_rho = theta_l(TK,PPa,qt,es) * (1.+ qv/eps1 - qt) + theta_rho = theta_l(TK,PPa,qt,es) * (1.-qt + qv*Rv/Rd) return(theta_rho) def T_from_Te(Te,P,qt,es=es_liq): - """ Given theta_e solves implicitly for the temperature at some other pressure, - so that theta_e(T,P,qt) = Te + """Returns temperature for an atmosphere whose state is given by theta_e + + This equation allows the temperature to be inferred from a state description + in terms of theta_e. It derives temperature by numerically inverting the + expression for theta_e provided in this package. Uses a least-squares non-linear + optimization to find the value of T such that $theta_e(T,P,q) = theta_e$ + +Args: + Te: equivalent potential temperature in kelvin + P: pressure in pascal + qt: total water specific humidity (unitless) + es: form of the saturation vapor pressure + >>> T_from_Te(350.,100000.,17.e-3) array([304.49321301]) """ - def zero(T,Te,P,qt,es=es): - return np.abs(Te-theta_e(T,P,qt,es=es)) + def zero(T,Te,P,qt,es): + return np.abs(Te-theta_e(T,P,qt,es)) return optimize.fsolve(zero, 280., args=(Te,P,qt,es), xtol=1.e-10) def T_from_Tl(Tl,P,qt,es=es_liq): - """ Given theta_e solves implicitly for the temperature at some other pressure, - so that theta_e(T,P,qt) = Te + """returns temperature for an atmosphere whose state is given by theta_l + + This equation allows the temperature to be inferred from a state description + in terms of theta_l. It derives temperature by numerically inverting the + expression for theta_l provided in this package. Uses a least-squares non-linear + optimization to find the value of T such that $theta_l(T,P,q) = theta_l$ + +Args: + Tl: liquid-water potential temperature in kelvin + P: pressure in pascal + qt: total water specific humidity (unitless) + es: form of the saturation vapor pressure + >>> T_from_Tl(282., 90000, 20.e-3) array([289.73684039]) """ - def zero(T,Tl,P,qt,es=es): - return np.abs(Tl-theta_l(T,P,qt,es=es)) + def zero(T,Tl,P,qt,es): + return np.abs(Tl-theta_l(T,P,qt,es)) + return optimize.fsolve(zero, 280., args=(Tl,P,qt,es), xtol=1.e-10) def T_from_Ts(Ts,P,qt,es=es_liq): - """ Given theta_e solves implicitly for the temperature at some other pressure, - so that theta_e(T,P,qt) = Te + """Returns temperature for an atmosphere whose state is given by theta_s + + This equation allows the temperature to be inferred from a state description + in terms of theta_s. It derives temperature by numerically inverting the + expression for theta_s provided in this package. Uses a least-squares non-linear + optimization to find the value of T such that $theta_s(T,P,q) = theta_s$ + +Args: + Ts: entropy potential temperature in kelvin + P: pressure in pascal + qt: total water specific humidity (unitless) + es: form of the saturation vapor pressure + >>> T_from_Tl(282.75436951,90000,20.e-3) array([289.98864293]) """ - def zero(T,Ts,P,qt,es=es): - return np.abs(Ts-theta_s(T,P,qt,es=es)) + def zero(T,Ts,P,qt,es): + return np.abs(Ts-theta_s(T,P,qt,es)) + return optimize.fsolve(zero, 280., args=(Ts,P,qt,es), xtol=1.e-10) def P_from_Te(Te,T,qt,es=es_liq): - """ Given Te solves implicitly for the pressure at some temperature and qt - so that theta_e(T,P,qt) = Te + """Returns pressure for an atmosphere whose state is given by theta_e + + This equation allows the pressure to be inferred from a state description + in terms of theta_e. It derives pressure by numerically inverting the + expression for theta_e provided in this package. Uses a least-squares non-linear + optimization to find the value of P such that $theta_e(T,P,q) = theta_e$ + +Args: + Tl: liquid-water potential temperature in kelvin + T: temperature in kelvin + qt: total water specific humidity (unitless) + es: form of the saturation vapor pressure + >>> P_from_Te(350.,305.,17e-3) array([100586.3357635]) """ - def zero(P,Te,T,qt,es=es_liq): - return np.abs(Te-theta_e(T,P,qt,es=es)) + def zero(P,Te,T,qt,es): + return np.abs(Te-theta_e(T,P,qt,es)) + return optimize.fsolve(zero, 90000., args=(Te,T,qt,es), xtol=1.e-10) def P_from_Tl(Tl,T,qt,es=es_liq): - """ Given Tl solves implicitly for the pressure at some temperature and qt - so that theta_l(T,P,qt) = Tl + """Returns pressure for an atmosphere whose state is given by theta_l + + This equation allows the pressure to be inferred from a state description + in terms of theta_l. It derives pressure by numerically inverting the + expression for theta_l provided in this package. Uses a least-squares non-linear + optimization to find the value of P such that $theta_l(T,P,q) = theta_l$ + + Args: + Tl: liquid-water potential temperature in kelvin + T: temperature in kelvin + qt: total water specific humidity (unitless) + es: form of the saturation vapor pressure + >>> P_from_Tl(282.75436951,290,20.e-3) array([90027.65146427]) """ - def zero(P,Tl,T,qt,es=es): - return np.abs(Tl-theta_l(T,P,qt,es=es)) + def zero(P,Tl,T,qt,es): + return np.abs(Tl-theta_l(T,P,qt,es)) + return optimize.fsolve(zero, 90000., args=(Tl,T,qt,es), xtol=1.e-10) def plcl(TK,PPa,qt,es=es_liq): - """ Iteratively solve for the pressure [Pa] of the LCL, allows for saturate air. + """Returns the pressure at the lifting condensation level + + Calculates the lifting condensation level pressure using an interative solution under the + constraint of constant theta-l. Exact to within the accuracy of the expression of theta-l + which depends on the expression for the saturation vapor pressure + + Args: + TK: temperature in kelvin + PPa: pressure in pascal + qt: specific total water mass + >>> plcl(300.,102000.,17e-3) array([95971.69750248]) """ - p2r = partial_pressure_to_mixing_ratio - - def zero(P,Tl,qt,es=es_liq): + + def zero(P,Tl,qt,es): + p2r = partial_pressure_to_mixing_ratio TK = T_from_Tl(Tl,P,qt) qs = p2r(es(TK),P) * (1. - qt) return np.abs(qs/qt-1.) - Tl = theta_l(TK,PPa,qt) - return optimize.fsolve(zero, 80000., args=(Tl,qt), xtol=1.e-5) + Tl = theta_l(TK,PPa,qt,es) + return optimize.fsolve(zero, 80000., args=(Tl,qt,es), xtol=1.e-5) def plcl_bolton(TK,PPa,qt): - """ Returns the pressure [Pa] of the LCL using the Bolton formula. Usually accurate to - within about 10 Pa, or about 1 m + """Returns the pressure at the lifting condensation level + + Following Bolton (1980) the lifting condensation level pressure is derived from the state + of an air parcel. Usually accurate to within about 10 Pa, or about 1 m + + Args: + TK: temperature in kelvin + PPa: pressure in pascal + qt: specific total water mass + + Reference: + Bolton, D. The Computation of Equivalent Potential Temperature. Monthly Weather + Review 108, 1046–1053 (1980). + >>> plcl_bolton(300.,102000.,17e-3) 95980.41895404423 """ @@ -377,9 +656,20 @@ def plcl_bolton(TK,PPa,qt): return PPa * (Tl/TK)**(cp/R) def zlcl(Plcl,T,P,qt,z): - """ Returns the height of the LCL assuming temperature changes following a - dry adiabat with vertical displacements from the height where the ambient - temperature is measured. + """Returns the height of the LCL above mean sea-level + + Given the Plcl, calculate its height in meters given the height of the ambient state + from which it (Plcl) was calculated. This is accomplished by assuming temperature + changes following a dry adiabat with vertical displacements between the ambient + temperature and the ambient LCL + + Args: + Plcl: lifting condensation level in Pa + T: ambient temperature in kelvin + P: ambient pressure in pascal + qt: specific total water mass + z: height at ambient temperature and pressure + >>> zlcl(95000.,300.,90000.,17.e-3,500.) 16.621174077862747 """ -- GitLab