diff --git a/lib/xmet/skew_t.py b/lib/xmet/skew_t.py index 451a272..0599c79 100644 --- a/lib/xmet/skew_t.py +++ b/lib/xmet/skew_t.py @@ -260,7 +260,7 @@ class SkewTGraph(): if self.opts.draw_cape_mixing_ratio: cr.set_source_rgb(0.8, 0.8, 1.0) - self.draw_series(cr, x, y, params.saturated_mr_line) + self.draw_series(cr, x, y, params.mixing_ratio_line) def draw(self, cr: cairo.Context, diff --git a/lib/xmet/sounding.py b/lib/xmet/sounding.py index eb51fa6..3802810 100644 --- a/lib/xmet/sounding.py +++ b/lib/xmet/sounding.py @@ -10,6 +10,7 @@ from xmet.thermo import follow_dry_adiabat, \ follow_moist_adiabat, \ follow_saturated_mixing_ratio, \ pressure_height, \ + virtual_temp, \ kelvin LAPSE_RATE_DRY = 9.8 # degrees C per 1000m @@ -233,19 +234,31 @@ class SoundingParams(): return 9.8076 * cape def load_sounding(self, sounding: Sounding): - temp_line = sounding.follow_temp() - dry_adiabat = follow_dry_adiabat(sounding.samples[0].temp, - sounding.samples[0].pressure) + surface = sounding.samples[0] - saturated_mr_line = follow_saturated_mixing_ratio(sounding.samples[0].dewpoint, - sounding.samples[0].pressure) + tv = virtual_temp(surface.temp, + surface.dewpoint, + surface.pressure) - lcl = dry_adiabat.intersect(saturated_mr_line, SeriesIntersection.LESSER) + temp_line = sounding.follow_temp() + dewpoint_line = sounding.follow_dewpoint() + dry_adiabat = follow_dry_adiabat(tv, surface.pressure) - moist_adiabat = follow_moist_adiabat(*lcl) + mixing_ratio_line = follow_saturated_mixing_ratio(surface.dewpoint, + surface.pressure) + + lcl = dry_adiabat.intersect(mixing_ratio_line, + SeriesIntersection.LESSER) + + tv2 = virtual_temp(temp_line.nearest(lcl[1]), + dewpoint_line.nearest(lcl[1]), + lcl[1]) + + moist_adiabat = follow_moist_adiabat(tv2, lcl[1]) lfc = temp_line.intersect(moist_adiabat, SeriesIntersection.LESSER) - el = temp_line.intersect(moist_adiabat, SeriesIntersection.GREATER, lfc[1]-100) + el = temp_line.intersect(moist_adiabat, SeriesIntersection.GREATER, + lfc[1]) self.lcl = lcl self.lfc = lfc @@ -254,7 +267,7 @@ class SoundingParams(): self.temp_line = temp_line self.dry_adiabat = dry_adiabat - self.saturated_mr_line = saturated_mr_line + self.mixing_ratio_line = mixing_ratio_line self.moist_adiabat = moist_adiabat @staticmethod