corfidi_storm_motion#

metpy.calc.corfidi_storm_motion(pressure, u, v, *, u_llj=None, v_llj=None)[source]#

Calculate upwind- and downwind-developing MCS storm motions using the Corfidi method.

Method described by ([Corfidi2003]):

  • Cloud-layer winds, estimated as the mean of the wind from 850 hPa to 300 hPa

  • Convergence along the cold pool, defined as the negative of the low-level jet

    (estimated as maximum in winds below 850 hPa unless specified in u_llj and v_llj)

  • The vector sum of the above is used to describe upwind propagating MCSes

  • Downwind propagating MCSes are taken as propagating along the sum of the cloud-layer wind

    and negative of the low level jet, therefore the cloud-level winds are doubled to re-add storm motion

Parameters:
Returns:

Examples

>>> from metpy.calc import corfidi_storm_motion, wind_components
>>> from metpy.units import units
>>> p = [1000, 925, 850, 700, 500, 400] * units.hPa
>>> wdir = [165, 180, 190, 210, 220, 250] * units.degree
>>> speed = [5, 15, 20, 30, 50, 60] * units.knots
>>> u, v = wind_components(speed, wdir)
>>> corfidi_storm_motion(p, u, v)
(<Quantity([16.4274315   7.75758388], 'knot')>,
<Quantity([36.32782655 35.21132283], 'knot')>)
>>> # Example with manually specified low-level jet as max wind below 1500m
>>> import numpy as np
>>> h = [100, 250, 700, 1500, 3100, 5720] * units.meters
>>> lowest1500_index = np.argmin(h <= units.Quantity(1500, 'meter'))
>>> llj_index = np.argmax(speed[:lowest1500_index])
>>> llj_u, llj_v = u[llj_index], v[llj_index]
>>> corfidi_storm_motion(p, u, v, u_llj=llj_u, v_llj=llj_v)
(<Quantity([4.90039505   1.47297683], 'knot')>,
<Quantity([24.8007901 28.92671577], 'knot')>)

Notes

Only functions on 1D profiles (not higher-dimension vertical cross sections or grids). Since this function returns scalar values when given a profile, this will return Pint Quantities even when given xarray DataArray profiles.