From 0aad130001bbc71c9a362e9cfc6774bdf7b03375 Mon Sep 17 00:00:00 2001 From: XANTRONIX Industrial <xan@xantronix.com> Date: Wed, 5 Mar 2025 00:34:23 -0500 Subject: [PATCH] Initial implementation of moist_lapse_rate() --- lib/xmet/thermo.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/xmet/thermo.py b/lib/xmet/thermo.py index cfefcac..540ad00 100644 --- a/lib/xmet/thermo.py +++ b/lib/xmet/thermo.py @@ -1,6 +1,9 @@ LAPSE_RATE_DRY = 9.8 / 1000 # degrees C per km LAPSE_RATE_MOIST = 4.0 / 1000 +def kelvin(c: float) -> float: + return 273.15 + c + def vapor_pressure(dewpoint: float) -> float: """ Return the pressure of vapor in a parcel of a given dewpoint. @@ -56,3 +59,15 @@ def lapse(temp: float, delta: float, rate=LAPSE_RATE_DRY) -> float: given increase in height (in meters). """ return temp - (rate * delta) + +def moist_lapse_rate(temp: float, dewpoint: float, pressure: float) -> float: + g = 9.8076 + Hv = 2501000 + r = mixing_ratio(dewpoint, pressure) + Rsd = 287 + Rsw = 461.5 + Cpd = 1003.5 + T = kelvin(temp) + + return g * (1 + (Hv * r) / (Rsd * T)) \ + / (Cpd + ((Hv**2 * r) / (Rsw * T**2)))