Explicitly specify manner of intersection

This commit is contained in:
XANTRONIX 2025-03-09 11:58:09 -04:00
parent ebae24b38e
commit 38c1a48e01
2 changed files with 10 additions and 8 deletions

View file

@ -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

View file

@ -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])