diff --git a/lib/xmet/skew_t.py b/lib/xmet/skew_t.py index 6dc0e5e..f30b878 100644 --- a/lib/xmet/skew_t.py +++ b/lib/xmet/skew_t.py @@ -4,12 +4,9 @@ import cairo from typing import Callable from xmet.sounding import Sounding -from xmet.thermo import pressure_height, lapse, moist_lapse_rate, \ - LAPSE_RATE_DRY - -PRESSURE_MAX = 1050 # millibar -PRESSURE_MIN = 100 -PRESSURE_STEP = 50 +from xmet.thermo import pressure_height, loft_parcel, moist_lapse_rate, \ + LAPSE_RATE_DRY, PRESSURE_MAX, PRESSURE_MIN, \ + PRESSURE_STEP PRESSURE_LOG_MAX = math.log(PRESSURE_MAX) PRESSURE_LOG_MIN = math.log(PRESSURE_MIN) @@ -107,26 +104,11 @@ class SkewTGraph(): start_temp: float, start_pressure: float, lapse_rate: Callable): - start_height = pressure_height(start_pressure) - sx_last = None - sy_last = None - height_last = None + sx_last = None + sy_last = None - temp = start_temp - pressure = start_pressure - - while pressure >= PRESSURE_MIN: - height = pressure_height(pressure) - - if height_last is None: - height_last = height - - try: - rate = lapse_rate(temp, temp, pressure) - except OverflowError: - break - - temp = lapse(temp, height - height_last, rate) + for level in loft_parcel(start_temp, start_pressure, lapse_rate): + temp, pressure = level sx, sy = self.sample_to_screen(temp, pressure) @@ -135,16 +117,8 @@ class SkewTGraph(): cr.line_to(x + sx_last, y + sy_last) cr.stroke() - sx_last = sx - sy_last = sy - height_last = height - - if pressure == PRESSURE_MIN: - break - elif pressure - 10.0 < PRESSURE_MIN: - pressure = PRESSURE_MIN - else: - pressure -= 10.0 + sx_last = sx + sy_last = sy def draw_adiabats(self, cr: cairo.Context,