diff --git a/lib/xmet/thermo.py b/lib/xmet/thermo.py index c1424a9..3a01ea7 100644 --- a/lib/xmet/thermo.py +++ b/lib/xmet/thermo.py @@ -2,6 +2,8 @@ import math from typing import Callable +from xmet.series import Series + LAPSE_RATE_DRY = 9.8 / 1000 # degrees C per km LAPSE_RATE_MOIST = 4.0 / 1000 @@ -141,3 +143,37 @@ def loft_parcel(start_temp: float, pressure = PRESSURE_MIN else: pressure -= step + +def follow_dry_adiabat(temp: float, pressure: float) -> Series: + series = Series() + + for level in loft_parcel(temp, pressure, lambda t, p: LAPSE_RATE_DRY): + t2, p2 = level + + series[p2] = t2 + + return series + +def follow_moist_adiabat(temp: float, pressure: float) -> Series: + series = Series() + + for level in loft_parcel(temp, pressure, moist_lapse_rate): + t2, p2 = level + + series[p2] = t2 + + return series + +def follow_saturated_mixing_ratio(temp: float, pressure: float) -> Series: + series = dict() + + ratio = saturated_mixing_ratio(temp, pressure) + + p2 = pressure + + while p2 >= PRESSURE_MIN: + series[p2] = mixing_ratio_temp(ratio, p2) + + p2 -= 10 + + return series