Explicitly specify manner of intersection
This commit is contained in:
parent
ebae24b38e
commit
38c1a48e01
2 changed files with 10 additions and 8 deletions
|
@ -1,24 +1,26 @@
|
||||||
|
import enum
|
||||||
from typing import Self
|
from typing import Self
|
||||||
|
|
||||||
from xmet.util import cmp
|
from xmet.util import cmp
|
||||||
from xmet.list import nearest
|
from xmet.list import nearest
|
||||||
|
|
||||||
|
class SeriesIntersection(enum.Enum):
|
||||||
|
GREATER = -1
|
||||||
|
EQUAL = 0
|
||||||
|
LESSER = 1
|
||||||
|
|
||||||
class Series(dict):
|
class Series(dict):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
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),
|
pairs = nearest(sorted(self.keys(), reverse=True),
|
||||||
sorted(series.keys(), reverse=True))
|
sorted(series.keys(), reverse=True))
|
||||||
|
|
||||||
sign_last = None
|
|
||||||
|
|
||||||
for pair in pairs:
|
for pair in pairs:
|
||||||
v1, v2 = self[pair[0]], series[pair[1]]
|
v1, v2 = self[pair[0]], series[pair[1]]
|
||||||
|
|
||||||
sign = cmp(v1, v2)
|
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]
|
return v1, pair[0]
|
||||||
|
|
||||||
sign_last = sign
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import shapely
|
||||||
from xmet.db import Database, DatabaseTable, DatabaseOrder
|
from xmet.db import Database, DatabaseTable, DatabaseOrder
|
||||||
from xmet.coord import COORD_SYSTEM
|
from xmet.coord import COORD_SYSTEM
|
||||||
from xmet.list import nearest
|
from xmet.list import nearest
|
||||||
from xmet.series import Series
|
from xmet.series import Series, SeriesIntersection
|
||||||
from xmet.thermo import follow_dry_adiabat, \
|
from xmet.thermo import follow_dry_adiabat, \
|
||||||
follow_moist_adiabat, \
|
follow_moist_adiabat, \
|
||||||
follow_saturated_mixing_ratio
|
follow_saturated_mixing_ratio
|
||||||
|
@ -218,7 +218,7 @@ class Sounding(DatabaseTable):
|
||||||
saturated_mr_line = follow_saturated_mixing_ratio(self.samples[0].dewpoint,
|
saturated_mr_line = follow_saturated_mixing_ratio(self.samples[0].dewpoint,
|
||||||
self.samples[0].pressure)
|
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])
|
lfc = self.find_lfc(lcl[0], lcl[1])
|
||||||
el = self.find_el(lfc[0], lfc[1])
|
el = self.find_el(lfc[0], lfc[1])
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue