diff --git a/lib/xmet/series.py b/lib/xmet/series.py index 2835594..6e502b7 100644 --- a/lib/xmet/series.py +++ b/lib/xmet/series.py @@ -1,24 +1,26 @@ +import enum from typing import Self from xmet.util import cmp from xmet.list import nearest +class SeriesIntersection(enum.Enum): + GREATER = -1 + EQUAL = 0 + LESSER = 1 + class Series(dict): def __init__(self): super().__init__() - def intersect(self, series: Self) -> tuple[float]: + def intersect(self, series: Self, intersection: SeriesIntersection) -> tuple[float]: pairs = nearest(sorted(self.keys(), reverse=True), sorted(series.keys(), reverse=True)) - sign_last = None - for pair in pairs: v1, v2 = self[pair[0]], series[pair[1]] sign = cmp(v1, v2) - if sign == 0 or (sign_last is not None and sign_last != sign): + if sign == intersection.value: return v1, pair[0] - - sign_last = sign diff --git a/lib/xmet/sounding.py b/lib/xmet/sounding.py index 22d373f..c703ab6 100644 --- a/lib/xmet/sounding.py +++ b/lib/xmet/sounding.py @@ -4,7 +4,7 @@ import shapely from xmet.db import Database, DatabaseTable, DatabaseOrder from xmet.coord import COORD_SYSTEM from xmet.list import nearest -from xmet.series import Series +from xmet.series import Series, SeriesIntersection from xmet.thermo import follow_dry_adiabat, \ follow_moist_adiabat, \ follow_saturated_mixing_ratio @@ -218,7 +218,7 @@ class Sounding(DatabaseTable): saturated_mr_line = follow_saturated_mixing_ratio(self.samples[0].dewpoint, self.samples[0].pressure) - lcl = dry_adiabat.intersect(saturated_mr_line) + lcl = dry_adiabat.intersect(saturated_mr_line, SeriesIntersection.LESSER) lfc = self.find_lfc(lcl[0], lcl[1]) el = self.find_el(lfc[0], lfc[1])