forked from 3rdparty/wrf-python
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.8 KiB
90 lines
2.8 KiB
from __future__ import (absolute_import, division, print_function, |
|
unicode_literals) |
|
|
|
from .constants import Constants |
|
|
|
from .extension import computesrh, computeuh |
|
from .destag import destagger |
|
from .util import extract_vars, extract_global_attrs, either |
|
from .metadecorators import copy_and_set_metadata |
|
|
|
@copy_and_set_metadata(copy_varname="HGT", name="srh", |
|
description="storm relative helicity", |
|
units="m-2/s-2") |
|
def get_srh(wrfnc, timeidx=0, method="cat", squeeze=True, |
|
cache=None, meta=True, |
|
top=3000.0): |
|
# Top can either be 3000 or 1000 (for 0-1 srh or 0-3 srh) |
|
|
|
ncvars = extract_vars(wrfnc, timeidx, ("HGT", "PH", "PHB"), |
|
method, squeeze, cache, meta=False) |
|
|
|
ter = ncvars["HGT"] |
|
ph = ncvars["PH"] |
|
phb = ncvars["PHB"] |
|
|
|
# As coded in NCL, but not sure this is possible |
|
varname = either("U", "UU")(wrfnc) |
|
u_vars = extract_vars(wrfnc, timeidx, varname, method, squeeze, cache, |
|
meta=False) |
|
u = destagger(u_vars[varname], -1) |
|
|
|
varname = either("V", "VV")(wrfnc) |
|
v_vars = extract_vars(wrfnc, timeidx, varname, method, squeeze, cache, |
|
meta=False) |
|
v = destagger(v_vars[varname], -2) |
|
|
|
geopt = ph + phb |
|
geopt_unstag = destagger(geopt, -3) |
|
|
|
z = geopt_unstag / Constants.G |
|
|
|
# Re-ordering from high to low |
|
u1 = u[...,::-1,:,:] |
|
v1 = v[...,::-1,:,:] |
|
z1 = z[...,::-1,:,:] |
|
|
|
srh = computesrh(u1, v1, z1, ter, top) |
|
|
|
return srh |
|
|
|
@copy_and_set_metadata(copy_varname="MAPFAC_M", name="updraft_helicity", |
|
description="updraft helicity", |
|
units="m-2/s-2") |
|
def get_uh(wrfnc, timeidx=0, method="cat", squeeze=True, |
|
cache=None, meta=True, |
|
bottom=2000.0, top=5000.0): |
|
|
|
ncvars = extract_vars(wrfnc, timeidx, ("W", "PH", "PHB", "MAPFAC_M"), |
|
method, squeeze, cache) |
|
|
|
wstag = ncvars["W"] |
|
ph = ncvars["PH"] |
|
phb = ncvars["PHB"] |
|
mapfct = ncvars["MAPFAC_M"] |
|
|
|
attrs = extract_global_attrs(wrfnc, attrs=("DX", "DY")) |
|
dx = attrs["DX"] |
|
dy = attrs["DY"] |
|
|
|
# As coded in NCL, but not sure this is possible |
|
varname = either("U", "UU")(wrfnc) |
|
u_vars = extract_vars(wrfnc, timeidx, varname, method, squeeze, cache, |
|
meta=False) |
|
u = destagger(u_vars[varname], -1) |
|
|
|
varname = either("V", "VV")(wrfnc) |
|
v_vars = extract_vars(wrfnc, timeidx, varname, method, squeeze, cache, |
|
meta=False) |
|
v = destagger(v_vars[varname], -2) |
|
|
|
zp = ph + phb |
|
|
|
uh = computeuh(zp, mapfct, u, v, wstag, dx, dy, bottom, top) |
|
|
|
return uh |
|
|
|
|
|
|
|
|
|
|