|
|
@ -5,29 +5,30 @@ import numpy as np |
|
|
|
from .constants import Constants, default_fill |
|
|
|
from .constants import Constants, default_fill |
|
|
|
|
|
|
|
|
|
|
|
from wrf._wrffortran import (dcomputetk, dinterp3dz, dinterp2dxy, dinterp1d, |
|
|
|
from wrf._wrffortran import (dcomputetk, dinterp3dz, dinterp2dxy, dinterp1d, |
|
|
|
dcomputeseaprs, dfilter2d, dcomputerh, dcomputeuvmet, |
|
|
|
dcomputeseaprs, dfilter2d, dcomputerh, |
|
|
|
dcomputetd, dcapecalc2d, dcapecalc3d, dcloudfrac2, |
|
|
|
dcomputeuvmet, dcomputetd, dcapecalc2d, |
|
|
|
wrfcttcalc, calcdbz, dcalrelhl, dcalcuh, dcomputepv, |
|
|
|
dcapecalc3d, dcloudfrac2, wrfcttcalc, calcdbz, |
|
|
|
dcomputeabsvort, dlltoij, dijtoll, deqthecalc, |
|
|
|
dcalrelhl, dcalcuh, dcomputepv, dcomputeabsvort, |
|
|
|
omgcalc, virtual_temp, wetbulbcalc, dcomputepw, |
|
|
|
dlltoij, dijtoll, deqthecalc, omgcalc, |
|
|
|
wrf_monotonic, wrf_vintrp, dcomputewspd, |
|
|
|
virtual_temp, wetbulbcalc, dcomputepw, |
|
|
|
dcomputewdir, dinterp3dz_2dlev, |
|
|
|
wrf_monotonic, wrf_vintrp, dcomputewspd, |
|
|
|
fomp_set_num_threads, fomp_get_num_threads, |
|
|
|
dcomputewdir, dinterp3dz_2dlev, |
|
|
|
fomp_get_max_threads, fomp_get_thread_num, |
|
|
|
fomp_set_num_threads, fomp_get_num_threads, |
|
|
|
fomp_get_num_procs, fomp_in_parallel, |
|
|
|
fomp_get_max_threads, fomp_get_thread_num, |
|
|
|
fomp_set_dynamic, fomp_get_dynamic, fomp_set_nested, |
|
|
|
fomp_get_num_procs, fomp_in_parallel, |
|
|
|
fomp_get_nested, fomp_set_schedule, |
|
|
|
fomp_set_dynamic, fomp_get_dynamic, |
|
|
|
fomp_get_schedule, fomp_get_thread_limit, |
|
|
|
fomp_set_nested, fomp_get_nested, |
|
|
|
fomp_set_max_active_levels, |
|
|
|
fomp_set_schedule, fomp_get_schedule, |
|
|
|
fomp_get_max_active_levels, fomp_get_level, |
|
|
|
fomp_get_thread_limit, fomp_set_max_active_levels, |
|
|
|
fomp_get_ancestor_thread_num, fomp_get_team_size, |
|
|
|
fomp_get_max_active_levels, fomp_get_level, |
|
|
|
fomp_get_active_level, fomp_in_final, |
|
|
|
fomp_get_ancestor_thread_num, fomp_get_team_size, |
|
|
|
fomp_init_lock, fomp_init_nest_lock, |
|
|
|
fomp_get_active_level, fomp_in_final, |
|
|
|
fomp_destroy_lock, fomp_destroy_nest_lock, |
|
|
|
fomp_init_lock, fomp_init_nest_lock, |
|
|
|
fomp_set_lock, fomp_set_nest_lock, |
|
|
|
fomp_destroy_lock, fomp_destroy_nest_lock, |
|
|
|
fomp_unset_lock, fomp_unset_nest_lock, |
|
|
|
fomp_set_lock, fomp_set_nest_lock, |
|
|
|
fomp_test_lock, fomp_test_nest_lock, |
|
|
|
fomp_unset_lock, fomp_unset_nest_lock, |
|
|
|
fomp_get_wtime, fomp_get_wtick, fomp_enabled) |
|
|
|
fomp_test_lock, fomp_test_nest_lock, |
|
|
|
|
|
|
|
fomp_get_wtime, fomp_get_wtick, fomp_enabled) |
|
|
|
|
|
|
|
|
|
|
|
from .decorators import (left_iteration, cast_type, |
|
|
|
from .decorators import (left_iteration, cast_type, |
|
|
|
extract_and_transpose, check_args) |
|
|
|
extract_and_transpose, check_args) |
|
|
@ -37,6 +38,7 @@ from .specialdec import (uvmet_left_iter, cape_left_iter, |
|
|
|
cloudfrac_left_iter, check_cape_args, |
|
|
|
cloudfrac_left_iter, check_cape_args, |
|
|
|
interplevel_left_iter, check_interplevel_args) |
|
|
|
interplevel_left_iter, check_interplevel_args) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class DiagnosticError(Exception): |
|
|
|
class DiagnosticError(Exception): |
|
|
|
"""Raised when an error occurs in a diagnostic routine.""" |
|
|
|
"""Raised when an error occurs in a diagnostic routine.""" |
|
|
|
def __init__(self, message=None): |
|
|
|
def __init__(self, message=None): |
|
|
@ -66,6 +68,7 @@ class DiagnosticError(Exception): |
|
|
|
""" |
|
|
|
""" |
|
|
|
raise self.__class__(message) |
|
|
|
raise self.__class__(message) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# The routines below are thin wrappers around the Fortran functions. These |
|
|
|
# The routines below are thin wrappers around the Fortran functions. These |
|
|
|
# are not meant to be called by end users. Use the public API instead for |
|
|
|
# are not meant to be called by end users. Use the public API instead for |
|
|
|
# that purpose. |
|
|
|
# that purpose. |
|
|
@ -73,10 +76,9 @@ class DiagnosticError(Exception): |
|
|
|
# IMPORTANT! Unless otherwise noted, all variables used in the routines |
|
|
|
# IMPORTANT! Unless otherwise noted, all variables used in the routines |
|
|
|
# below assume that Fortran-ordered views are being used. This allows |
|
|
|
# below assume that Fortran-ordered views are being used. This allows |
|
|
|
# f2py to pass the array pointers directly to the Fortran routine. |
|
|
|
# f2py to pass the array pointers directly to the Fortran routine. |
|
|
|
|
|
|
|
|
|
|
|
@check_interplevel_args(is2dlev=False) |
|
|
|
@check_interplevel_args(is2dlev=False) |
|
|
|
@interplevel_left_iter(is2dlev=False) |
|
|
|
@interplevel_left_iter(is2dlev=False) |
|
|
|
@cast_type(arg_idxs=(0,1,2)) |
|
|
|
@cast_type(arg_idxs=(0, 1, 2)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _interpz3d(field3d, z, desiredloc, missingval, outview=None): |
|
|
|
def _interpz3d(field3d, z, desiredloc, missingval, outview=None): |
|
|
|
"""Wrapper for dinterp3dz. |
|
|
|
"""Wrapper for dinterp3dz. |
|
|
@ -98,7 +100,7 @@ def _interpz3d(field3d, z, desiredloc, missingval, outview=None): |
|
|
|
|
|
|
|
|
|
|
|
@check_interplevel_args(is2dlev=True) |
|
|
|
@check_interplevel_args(is2dlev=True) |
|
|
|
@interplevel_left_iter(is2dlev=True) |
|
|
|
@interplevel_left_iter(is2dlev=True) |
|
|
|
@cast_type(arg_idxs=(0,1,2)) |
|
|
|
@cast_type(arg_idxs=(0, 1, 2)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _interpz3d_lev2d(field3d, z, lev2d, missingval, outview=None): |
|
|
|
def _interpz3d_lev2d(field3d, z, lev2d, missingval, outview=None): |
|
|
|
"""Wrapper for dinterp3dz. |
|
|
|
"""Wrapper for dinterp3dz. |
|
|
@ -117,10 +119,10 @@ def _interpz3d_lev2d(field3d, z, lev2d, missingval, outview=None): |
|
|
|
return result |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 3, (3,)) |
|
|
|
@check_args(0, 3, (3, )) |
|
|
|
@left_iteration(3, combine_dims([(0,-3),(1,-2)]), ref_var_idx=0, |
|
|
|
@left_iteration(3, combine_dims([(0, -3), (1, -2)]), ref_var_idx=0, |
|
|
|
ignore_args=(1,)) |
|
|
|
ignore_args=(1, )) |
|
|
|
@cast_type(arg_idxs=(0,1)) |
|
|
|
@cast_type(arg_idxs=(0, 1)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _interp2dxy(field3d, xy, outview=None): |
|
|
|
def _interp2dxy(field3d, xy, outview=None): |
|
|
|
"""Wrapper for dinterp2dxy. |
|
|
|
"""Wrapper for dinterp2dxy. |
|
|
@ -138,9 +140,9 @@ def _interp2dxy(field3d, xy, outview=None): |
|
|
|
return result |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 1, (1,1,None,None)) |
|
|
|
@check_args(0, 1, (1, 1, None, None)) |
|
|
|
@left_iteration(1, combine_dims([(2,0)]), ref_var_idx=0, ignore_args=(2,3)) |
|
|
|
@left_iteration(1, combine_dims([(2, 0)]), ref_var_idx=0, ignore_args=(2, 3)) |
|
|
|
@cast_type(arg_idxs=(0,1,2)) |
|
|
|
@cast_type(arg_idxs=(0, 1, 2)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _interp1d(v_in, z_in, z_out, missingval, outview=None): |
|
|
|
def _interp1d(v_in, z_in, z_out, missingval, outview=None): |
|
|
|
"""Wrapper for dinterp1d. |
|
|
|
"""Wrapper for dinterp1d. |
|
|
@ -160,9 +162,9 @@ def _interp1d(v_in, z_in, z_out, missingval, outview=None): |
|
|
|
return result |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@left_iteration(3, combine_dims([(3,0), (1,0)]), |
|
|
|
@left_iteration(3, combine_dims([(3, 0), (1, 0)]), |
|
|
|
ref_var_idx=0, ignore_args=(1,3,4)) |
|
|
|
ref_var_idx=0, ignore_args=(1, 3, 4)) |
|
|
|
@cast_type(arg_idxs=(0,)) |
|
|
|
@cast_type(arg_idxs=(0, )) |
|
|
|
@extract_and_transpose(do_transpose=False) |
|
|
|
@extract_and_transpose(do_transpose=False) |
|
|
|
def _vertcross(field3d, xy, var2dz, z_var2d, missingval, outview=None): |
|
|
|
def _vertcross(field3d, xy, var2dz, z_var2d, missingval, outview=None): |
|
|
|
"""Return the vertical cross section. |
|
|
|
"""Return the vertical cross section. |
|
|
@ -180,14 +182,14 @@ def _vertcross(field3d, xy, var2dz, z_var2d, missingval, outview=None): |
|
|
|
var2dtmp = _interp2dxy(field3d, xy) |
|
|
|
var2dtmp = _interp2dxy(field3d, xy) |
|
|
|
|
|
|
|
|
|
|
|
for i in py3range(xy.shape[0]): |
|
|
|
for i in py3range(xy.shape[0]): |
|
|
|
outview[:,i] = _interp1d(var2dtmp[:,i], var2dz[:,i], z_var2d, |
|
|
|
outview[:, i] = _interp1d(var2dtmp[:, i], var2dz[:, i], z_var2d, |
|
|
|
missingval) |
|
|
|
missingval) |
|
|
|
|
|
|
|
|
|
|
|
return outview |
|
|
|
return outview |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@left_iteration(2, combine_dims([(1,0)]), ref_var_idx=0, ignore_args=(1,)) |
|
|
|
@left_iteration(2, combine_dims([(1, 0)]), ref_var_idx=0, ignore_args=(1, )) |
|
|
|
@cast_type(arg_idxs=(0,)) |
|
|
|
@cast_type(arg_idxs=(0, )) |
|
|
|
@extract_and_transpose(do_transpose=False) |
|
|
|
@extract_and_transpose(do_transpose=False) |
|
|
|
def _interpline(field2d, xy, outview=None): |
|
|
|
def _interpline(field2d, xy, outview=None): |
|
|
|
"""Return the two-dimensional field interpolated to a line. |
|
|
|
"""Return the two-dimensional field interpolated to a line. |
|
|
@ -204,7 +206,7 @@ def _interpline(field2d, xy, outview=None): |
|
|
|
|
|
|
|
|
|
|
|
tmp_shape = (1,) + field2d.shape |
|
|
|
tmp_shape = (1,) + field2d.shape |
|
|
|
var2dtmp = np.empty(tmp_shape, field2d.dtype) |
|
|
|
var2dtmp = np.empty(tmp_shape, field2d.dtype) |
|
|
|
var2dtmp[0,:,:] = field2d[:,:] |
|
|
|
var2dtmp[0, :, :] = field2d[:, :] |
|
|
|
|
|
|
|
|
|
|
|
var1dtmp = _interp2dxy(var2dtmp, xy) |
|
|
|
var1dtmp = _interp2dxy(var2dtmp, xy) |
|
|
|
|
|
|
|
|
|
|
@ -213,9 +215,9 @@ def _interpline(field2d, xy, outview=None): |
|
|
|
return outview |
|
|
|
return outview |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 3, (3,3,3,3)) |
|
|
|
@check_args(0, 3, (3, 3, 3, 3)) |
|
|
|
@left_iteration(3, 2, ref_var_idx=0) |
|
|
|
@left_iteration(3, 2, ref_var_idx=0) |
|
|
|
@cast_type(arg_idxs=(0,1,2,3)) |
|
|
|
@cast_type(arg_idxs=(0, 1, 2, 3)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _slp(z, t, p, q, outview=None): |
|
|
|
def _slp(z, t, p, q, outview=None): |
|
|
|
"""Wrapper for dcomputeseaprs. |
|
|
|
"""Wrapper for dcomputeseaprs. |
|
|
@ -250,9 +252,9 @@ def _slp(z, t, p, q, outview=None): |
|
|
|
return result |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 3, (3,3)) |
|
|
|
@check_args(0, 3, (3, 3)) |
|
|
|
@left_iteration(3, 3, ref_var_idx=0) |
|
|
|
@left_iteration(3, 3, ref_var_idx=0) |
|
|
|
@cast_type(arg_idxs=(0,1)) |
|
|
|
@cast_type(arg_idxs=(0, 1)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _tk(pressure, theta, outview=None): |
|
|
|
def _tk(pressure, theta, outview=None): |
|
|
|
"""Wrapper for dcomputetk. |
|
|
|
"""Wrapper for dcomputetk. |
|
|
@ -265,16 +267,16 @@ def _tk(pressure, theta, outview=None): |
|
|
|
if outview is None: |
|
|
|
if outview is None: |
|
|
|
outview = np.empty_like(pressure) |
|
|
|
outview = np.empty_like(pressure) |
|
|
|
result = dcomputetk(outview.ravel(order="A"), |
|
|
|
result = dcomputetk(outview.ravel(order="A"), |
|
|
|
pressure.ravel(order="A"), |
|
|
|
pressure.ravel(order="A"), |
|
|
|
theta.ravel(order="A")) |
|
|
|
theta.ravel(order="A")) |
|
|
|
result = np.reshape(result, shape, order="F") |
|
|
|
result = np.reshape(result, shape, order="F") |
|
|
|
|
|
|
|
|
|
|
|
return result |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 2, (2,2)) |
|
|
|
@check_args(0, 2, (2, 2)) |
|
|
|
@left_iteration(2, 2, ref_var_idx=0) |
|
|
|
@left_iteration(2, 2, ref_var_idx=0) |
|
|
|
@cast_type(arg_idxs=(0,1)) |
|
|
|
@cast_type(arg_idxs=(0, 1)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _td(pressure, qv_in, outview=None): |
|
|
|
def _td(pressure, qv_in, outview=None): |
|
|
|
"""Wrapper for dcomputetd. |
|
|
|
"""Wrapper for dcomputetd. |
|
|
@ -294,9 +296,9 @@ def _td(pressure, qv_in, outview=None): |
|
|
|
return result |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 2, (2,2,2)) |
|
|
|
@check_args(0, 2, (2, 2, 2)) |
|
|
|
@left_iteration(2, 2, ref_var_idx=0) |
|
|
|
@left_iteration(2, 2, ref_var_idx=0) |
|
|
|
@cast_type(arg_idxs=(0,1,2)) |
|
|
|
@cast_type(arg_idxs=(0, 1, 2)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _rh(qv, q, t, outview=None): |
|
|
|
def _rh(qv, q, t, outview=None): |
|
|
|
"""Wrapper for dcomputerh. |
|
|
|
"""Wrapper for dcomputerh. |
|
|
@ -308,9 +310,9 @@ def _rh(qv, q, t, outview=None): |
|
|
|
if outview is None: |
|
|
|
if outview is None: |
|
|
|
outview = np.empty_like(qv) |
|
|
|
outview = np.empty_like(qv) |
|
|
|
result = dcomputerh(qv.ravel(order="A"), |
|
|
|
result = dcomputerh(qv.ravel(order="A"), |
|
|
|
q.ravel(order="A"), |
|
|
|
q.ravel(order="A"), |
|
|
|
t.ravel(order="A"), |
|
|
|
t.ravel(order="A"), |
|
|
|
outview.ravel(order="A")) |
|
|
|
outview.ravel(order="A")) |
|
|
|
result = np.reshape(result, shape, order="F") |
|
|
|
result = np.reshape(result, shape, order="F") |
|
|
|
|
|
|
|
|
|
|
|
return result |
|
|
|
return result |
|
|
@ -318,12 +320,12 @@ def _rh(qv, q, t, outview=None): |
|
|
|
|
|
|
|
|
|
|
|
# Note: combining the -3 and -2 dimensions from u, then the -1 dimension |
|
|
|
# Note: combining the -3 and -2 dimensions from u, then the -1 dimension |
|
|
|
# from v |
|
|
|
# from v |
|
|
|
@check_args(0, 3, (3,3,2,2,2,2), stagger=(-1,-2,-1,-2,None,None), |
|
|
|
@check_args(0, 3, (3, 3, 2, 2, 2, 2), stagger=(-1, -2, -1, -2, None, None), |
|
|
|
refstagdim=-1) |
|
|
|
refstagdim=-1) |
|
|
|
@left_iteration(3, combine_dims([(0, (-3,-2)), |
|
|
|
@left_iteration(3, combine_dims([(0, (-3, -2)), |
|
|
|
(1, (-1,))]), |
|
|
|
(1, (-1, ))]), |
|
|
|
ref_var_idx=0, ignore_args=(6,7)) |
|
|
|
ref_var_idx=0, ignore_args=(6, 7)) |
|
|
|
@cast_type(arg_idxs=(0,1,2,3,4,5)) |
|
|
|
@cast_type(arg_idxs=(0, 1, 2, 3, 4, 5)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _avo(u, v, msfu, msfv, msfm, cor, dx, dy, outview=None): |
|
|
|
def _avo(u, v, msfu, msfv, msfm, cor, dx, dy, outview=None): |
|
|
|
"""Wrapper for dcomputeabsvort. |
|
|
|
"""Wrapper for dcomputeabsvort. |
|
|
@ -332,7 +334,7 @@ def _avo(u, v, msfu, msfv, msfm, cor, dx, dy, outview=None): |
|
|
|
|
|
|
|
|
|
|
|
""" |
|
|
|
""" |
|
|
|
if outview is None: |
|
|
|
if outview is None: |
|
|
|
outshape = (v.shape[0],) + u.shape[1:] |
|
|
|
outshape = (v.shape[0], ) + u.shape[1:] |
|
|
|
outview = np.empty(outshape, np.float64, order="F") |
|
|
|
outview = np.empty(outshape, np.float64, order="F") |
|
|
|
|
|
|
|
|
|
|
|
result = dcomputeabsvort(outview, |
|
|
|
result = dcomputeabsvort(outview, |
|
|
@ -348,11 +350,10 @@ def _avo(u, v, msfu, msfv, msfm, cor, dx, dy, outview=None): |
|
|
|
return result |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 3, (3,3,3,3,2,2,2,2), stagger=(-1,-2,None,None,-1,-2,None, |
|
|
|
@check_args(0, 3, (3, 3, 3, 3, 2, 2, 2, 2), |
|
|
|
None), |
|
|
|
stagger=(-1, -2, None, None, -1, -2, None, None), refstagdim=-1) |
|
|
|
refstagdim=-1) |
|
|
|
@left_iteration(3, 3, ref_var_idx=2, ignore_args=(8, 9)) |
|
|
|
@left_iteration(3, 3, ref_var_idx=2, ignore_args=(8,9)) |
|
|
|
@cast_type(arg_idxs=(0, 1, 2, 3, 4, 5, 6, 7)) |
|
|
|
@cast_type(arg_idxs=(0,1,2,3,4,5,6,7)) |
|
|
|
|
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _pvo(u, v, theta, prs, msfu, msfv, msfm, cor, dx, dy, outview=None): |
|
|
|
def _pvo(u, v, theta, prs, msfu, msfv, msfm, cor, dx, dy, outview=None): |
|
|
|
"""Wrapper for dcomputepv. |
|
|
|
"""Wrapper for dcomputepv. |
|
|
@ -378,9 +379,9 @@ def _pvo(u, v, theta, prs, msfu, msfv, msfm, cor, dx, dy, outview=None): |
|
|
|
return result |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 3, (3,3,3)) |
|
|
|
@check_args(0, 3, (3, 3, 3)) |
|
|
|
@left_iteration(3, 3, ref_var_idx=0) |
|
|
|
@left_iteration(3, 3, ref_var_idx=0) |
|
|
|
@cast_type(arg_idxs=(0,1,2)) |
|
|
|
@cast_type(arg_idxs=(0, 1, 2)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _eth(qv, tk, p, outview=None): |
|
|
|
def _eth(qv, tk, p, outview=None): |
|
|
|
"""Wrapper for deqthecalc. |
|
|
|
"""Wrapper for deqthecalc. |
|
|
@ -400,11 +401,13 @@ def _eth(qv, tk, p, outview=None): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@uvmet_left_iter() |
|
|
|
@uvmet_left_iter() |
|
|
|
@cast_type(arg_idxs=(0,1,2,3)) |
|
|
|
@cast_type(arg_idxs=(0, 1, 2, 3)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _uvmet(u, v, lat, lon, cen_long, cone, isstag=0, has_missing=False, |
|
|
|
def _uvmet(u, v, lat, lon, cen_long, cone, isstag=0, has_missing=False, |
|
|
|
umissing=default_fill(np.float64), vmissing=default_fill(np.float64), |
|
|
|
umissing=default_fill(np.float64), |
|
|
|
uvmetmissing=default_fill(np.float64), outview=None): |
|
|
|
vmissing=default_fill(np.float64), |
|
|
|
|
|
|
|
uvmetmissing=default_fill(np.float64), |
|
|
|
|
|
|
|
outview=None): |
|
|
|
"""Wrapper for dcomputeuvmet. |
|
|
|
"""Wrapper for dcomputeuvmet. |
|
|
|
|
|
|
|
|
|
|
|
Located in wrf_user.f90. |
|
|
|
Located in wrf_user.f90. |
|
|
@ -437,9 +440,9 @@ def _uvmet(u, v, lat, lon, cen_long, cone, isstag=0, has_missing=False, |
|
|
|
return result |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 3, (3,3,3,3)) |
|
|
|
@check_args(0, 3, (3, 3, 3, 3)) |
|
|
|
@left_iteration(3, 3, ref_var_idx=0) |
|
|
|
@left_iteration(3, 3, ref_var_idx=0) |
|
|
|
@cast_type(arg_idxs=(0,1,2,3)) |
|
|
|
@cast_type(arg_idxs=(0, 1, 2, 3)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _omega(qv, tk, w, p, outview=None): |
|
|
|
def _omega(qv, tk, w, p, outview=None): |
|
|
|
"""Wrapper for omgcalc. |
|
|
|
"""Wrapper for omgcalc. |
|
|
@ -459,9 +462,9 @@ def _omega(qv, tk, w, p, outview=None): |
|
|
|
return result |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 3, (3,3)) |
|
|
|
@check_args(0, 3, (3, 3)) |
|
|
|
@left_iteration(3, 3, ref_var_idx=0) |
|
|
|
@left_iteration(3, 3, ref_var_idx=0) |
|
|
|
@cast_type(arg_idxs=(0,1)) |
|
|
|
@cast_type(arg_idxs=(0, 1)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _tv(tk, qv, outview=None): |
|
|
|
def _tv(tk, qv, outview=None): |
|
|
|
"""Wrapper for virtual_temp. |
|
|
|
"""Wrapper for virtual_temp. |
|
|
@ -479,9 +482,9 @@ def _tv(tk, qv, outview=None): |
|
|
|
return result |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 3, (3,3,3)) |
|
|
|
@check_args(0, 3, (3, 3, 3)) |
|
|
|
@left_iteration(3, 3, ref_var_idx=0, ignore_args=(3,)) |
|
|
|
@left_iteration(3, 3, ref_var_idx=0, ignore_args=(3,)) |
|
|
|
@cast_type(arg_idxs=(0,1,2)) |
|
|
|
@cast_type(arg_idxs=(0, 1, 2)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _wetbulb(p, tk, qv, psafile=psafilepath(), outview=None): |
|
|
|
def _wetbulb(p, tk, qv, psafile=psafilepath(), outview=None): |
|
|
|
"""Wrapper for wetbulbcalc. |
|
|
|
"""Wrapper for wetbulbcalc. |
|
|
@ -509,9 +512,9 @@ def _wetbulb(p, tk, qv, psafile=psafilepath(), outview=None): |
|
|
|
return result |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 3, (3,3,3,2,2)) |
|
|
|
@check_args(0, 3, (3, 3, 3, 2, 2)) |
|
|
|
@left_iteration(3, 2, ref_var_idx=0, ignore_args=(5,)) |
|
|
|
@left_iteration(3, 2, ref_var_idx=0, ignore_args=(5, )) |
|
|
|
@cast_type(arg_idxs=(0,1,2,3,4)) |
|
|
|
@cast_type(arg_idxs=(0, 1, 2, 3, 4)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _srhel(u, v, z, ter, lats, top, outview=None): |
|
|
|
def _srhel(u, v, z, ter, lats, top, outview=None): |
|
|
|
"""Wrapper for dcalrelhl. |
|
|
|
"""Wrapper for dcalrelhl. |
|
|
@ -533,9 +536,9 @@ def _srhel(u, v, z, ter, lats, top, outview=None): |
|
|
|
return result |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@check_args(2, 3, (3,2,3,3,3), stagger=(-3,None,None,None,-3)) |
|
|
|
@check_args(2, 3, (3, 2, 3, 3, 3), stagger=(-3, None, None, None, -3)) |
|
|
|
@left_iteration(3, 2, ref_var_idx=2, ignore_args=(5,6,7,8)) |
|
|
|
@left_iteration(3, 2, ref_var_idx=2, ignore_args=(5, 6, 7, 8)) |
|
|
|
@cast_type(arg_idxs=(0,1,2,3,4)) |
|
|
|
@cast_type(arg_idxs=(0, 1, 2, 3, 4)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _udhel(zstag, mapfct, u, v, wstag, dx, dy, bottom, top, outview=None): |
|
|
|
def _udhel(zstag, mapfct, u, v, wstag, dx, dy, bottom, top, outview=None): |
|
|
|
"""Wrapper for dcalcuh. |
|
|
|
"""Wrapper for dcalcuh. |
|
|
@ -567,9 +570,9 @@ def _udhel(zstag, mapfct, u, v, wstag, dx, dy, bottom, top, outview=None): |
|
|
|
return result |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 3, (3,3,3,3), stagger=(None, None, None, -3)) |
|
|
|
@check_args(0, 3, (3, 3, 3, 3), stagger=(None, None, None, -3)) |
|
|
|
@left_iteration(3, 2, ref_var_idx=0) |
|
|
|
@left_iteration(3, 2, ref_var_idx=0) |
|
|
|
@cast_type(arg_idxs=(0,1,2,3)) |
|
|
|
@cast_type(arg_idxs=(0, 1, 2, 3)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _pw(p, tv, qv, ht, outview=None): |
|
|
|
def _pw(p, tv, qv, ht, outview=None): |
|
|
|
"""Wrapper for dcomputepw. |
|
|
|
"""Wrapper for dcomputepw. |
|
|
@ -589,9 +592,9 @@ def _pw(p, tv, qv, ht, outview=None): |
|
|
|
return result |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 3, (3,3,3,3,3,3)) |
|
|
|
@check_args(0, 3, (3, 3, 3, 3, 3, 3)) |
|
|
|
@left_iteration(3, 3, ref_var_idx=0, ignore_args=(6,7,8)) |
|
|
|
@left_iteration(3, 3, ref_var_idx=0, ignore_args=(6, 7, 8)) |
|
|
|
@cast_type(arg_idxs=(0,1,2,3,4,5)) |
|
|
|
@cast_type(arg_idxs=(0, 1, 2, 3, 4, 5)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _dbz(p, tk, qv, qr, qs, qg, sn0, ivarint, iliqskin, outview=None): |
|
|
|
def _dbz(p, tk, qv, qr, qs, qg, sn0, ivarint, iliqskin, outview=None): |
|
|
|
"""Wrapper for calcdbz. |
|
|
|
"""Wrapper for calcdbz. |
|
|
@ -618,7 +621,7 @@ def _dbz(p, tk, qv, qr, qs, qg, sn0, ivarint, iliqskin, outview=None): |
|
|
|
|
|
|
|
|
|
|
|
@check_cape_args() |
|
|
|
@check_cape_args() |
|
|
|
@cape_left_iter() |
|
|
|
@cape_left_iter() |
|
|
|
@cast_type(arg_idxs=(0,1,2,3,4,5), outviews=("capeview", "cinview")) |
|
|
|
@cast_type(arg_idxs=(0, 1, 2, 3, 4, 5), outviews=("capeview", "cinview")) |
|
|
|
@extract_and_transpose(outviews=("capeview", "cinview")) |
|
|
|
@extract_and_transpose(outviews=("capeview", "cinview")) |
|
|
|
def _cape(p_hpa, tk, qv, ht, ter, sfp, missing, i3dflag, ter_follow, |
|
|
|
def _cape(p_hpa, tk, qv, ht, ter, sfp, missing, i3dflag, ter_follow, |
|
|
|
psafile=psafilepath(), capeview=None, cinview=None): |
|
|
|
psafile=psafilepath(), capeview=None, cinview=None): |
|
|
@ -674,12 +677,14 @@ def _cape(p_hpa, tk, qv, ht, ter, sfp, missing, i3dflag, ter_follow, |
|
|
|
|
|
|
|
|
|
|
|
return result |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 3, (3,3)) |
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 3, (3, 3)) |
|
|
|
@cloudfrac_left_iter() |
|
|
|
@cloudfrac_left_iter() |
|
|
|
@cast_type(arg_idxs=(0, 1), outviews=("lowview", "midview", "highview")) |
|
|
|
@cast_type(arg_idxs=(0, 1), outviews=("lowview", "midview", "highview")) |
|
|
|
@extract_and_transpose(outviews=("lowview", "midview", "highview")) |
|
|
|
@extract_and_transpose(outviews=("lowview", "midview", "highview")) |
|
|
|
def _cloudfrac(vert, rh, vert_inc_w_height, low_thresh, mid_thresh, |
|
|
|
def _cloudfrac(vert, rh, vert_inc_w_height, low_thresh, mid_thresh, |
|
|
|
high_thresh, missing, lowview=None, midview=None, highview=None): |
|
|
|
high_thresh, missing, lowview=None, midview=None, |
|
|
|
|
|
|
|
highview=None): |
|
|
|
"""Wrapper for dcloudfrac2. |
|
|
|
"""Wrapper for dcloudfrac2. |
|
|
|
|
|
|
|
|
|
|
|
Located in wrf_cloud_fracf.f90. |
|
|
|
Located in wrf_cloud_fracf.f90. |
|
|
@ -750,8 +755,8 @@ def _lltoxy(map_proj, truelat1, truelat2, stdlon, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _xytoll(map_proj, truelat1, truelat2, stdlon, lat1, lon1, |
|
|
|
def _xytoll(map_proj, truelat1, truelat2, stdlon, lat1, lon1, |
|
|
|
pole_lat, pole_lon, known_x, known_y, dx, dy, latinc, |
|
|
|
pole_lat, pole_lon, known_x, known_y, dx, dy, latinc, |
|
|
|
loninc, x, y, outview=None): |
|
|
|
loninc, x, y, outview=None): |
|
|
|
"""Wrapper for dijtoll. |
|
|
|
"""Wrapper for dijtoll. |
|
|
|
|
|
|
|
|
|
|
|
Located in wrf_user_latlon_routines.f90. |
|
|
|
Located in wrf_user_latlon_routines.f90. |
|
|
@ -789,9 +794,9 @@ def _xytoll(map_proj, truelat1, truelat2, stdlon, lat1, lon1, |
|
|
|
return result |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 3, (3,3,3,3,3,3,2)) |
|
|
|
@check_args(0, 3, (3, 3, 3, 3, 3, 3, 2)) |
|
|
|
@left_iteration(3, 2, ref_var_idx=0, ignore_args=(7,8,9,10)) |
|
|
|
@left_iteration(3, 2, ref_var_idx=0, ignore_args=(7, 8, 9, 10)) |
|
|
|
@cast_type(arg_idxs=(0,1,2,3,4,5,6)) |
|
|
|
@cast_type(arg_idxs=(0, 1, 2, 3, 4, 5, 6)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _ctt(p_hpa, tk, qice, qcld, qv, ght, ter, haveqci, fill_nocloud, |
|
|
|
def _ctt(p_hpa, tk, qice, qcld, qv, ght, ter, haveqci, fill_nocloud, |
|
|
|
missing, opt_thresh, outview=None): |
|
|
|
missing, opt_thresh, outview=None): |
|
|
@ -822,9 +827,9 @@ def _ctt(p_hpa, tk, qice, qcld, qv, ght, ter, haveqci, fill_nocloud, |
|
|
|
return result |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 2, (2,)) |
|
|
|
@check_args(0, 2, (2, )) |
|
|
|
@left_iteration(2, 2, ref_var_idx=0, ignore_args=(1,2)) |
|
|
|
@left_iteration(2, 2, ref_var_idx=0, ignore_args=(1, 2)) |
|
|
|
@cast_type(arg_idxs=(0,)) |
|
|
|
@cast_type(arg_idxs=(0, )) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _smooth2d(field, passes, cenweight, outview=None): |
|
|
|
def _smooth2d(field, passes, cenweight, outview=None): |
|
|
|
"""Wrapper for dfilter2d. |
|
|
|
"""Wrapper for dfilter2d. |
|
|
@ -856,9 +861,9 @@ def _smooth2d(field, passes, cenweight, outview=None): |
|
|
|
return outview |
|
|
|
return outview |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 3, (3,3,2)) |
|
|
|
@check_args(0, 3, (3, 3, 2)) |
|
|
|
@left_iteration(3, 3, ref_var_idx=0, ignore_args=(3,4,5)) |
|
|
|
@left_iteration(3, 3, ref_var_idx=0, ignore_args=(3, 4, 5)) |
|
|
|
@cast_type(arg_idxs=(0,1,2)) |
|
|
|
@cast_type(arg_idxs=(0, 1, 2)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _monotonic(var, lvprs, coriolis, idir, delta, icorsw, outview=None): |
|
|
|
def _monotonic(var, lvprs, coriolis, idir, delta, icorsw, outview=None): |
|
|
|
"""Wrapper for wrf_monotonic. |
|
|
|
"""Wrapper for wrf_monotonic. |
|
|
@ -885,11 +890,11 @@ def _monotonic(var, lvprs, coriolis, idir, delta, icorsw, outview=None): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Output shape is interp_levels.shape + field.shape[-2:] |
|
|
|
# Output shape is interp_levels.shape + field.shape[-2:] |
|
|
|
@check_args(0, 3, (3,3,3,3,3,2,2,2,3)) |
|
|
|
@check_args(0, 3, (3, 3, 3, 3, 3, 2, 2, 2, 3)) |
|
|
|
@left_iteration(3, combine_dims([(9, (-1,)), |
|
|
|
@left_iteration(3, combine_dims([(9, (-1, )), |
|
|
|
(0, (-2,-1))]), |
|
|
|
(0, (-2, -1))]), |
|
|
|
ref_var_idx=0, ignore_args=(9,10,11,12,13,14)) |
|
|
|
ref_var_idx=0, ignore_args=(9, 10, 11, 12, 13, 14)) |
|
|
|
@cast_type(arg_idxs=(0,1,2,3,4,5,6,7,8,9)) |
|
|
|
@cast_type(arg_idxs=(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _vintrp(field, pres, tk, qvp, ght, terrain, sfp, smsfp, |
|
|
|
def _vintrp(field, pres, tk, qvp, ght, terrain, sfp, smsfp, |
|
|
|
vcarray, interp_levels, icase, extrap, vcor, logp, |
|
|
|
vcarray, interp_levels, icase, extrap, vcor, logp, |
|
|
@ -933,9 +938,10 @@ def _vintrp(field, pres, tk, qvp, ght, terrain, sfp, smsfp, |
|
|
|
|
|
|
|
|
|
|
|
return result |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 2, (2,2)) |
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 2, (2, 2)) |
|
|
|
@left_iteration(2, 2, ref_var_idx=0) |
|
|
|
@left_iteration(2, 2, ref_var_idx=0) |
|
|
|
@cast_type(arg_idxs=(0,1)) |
|
|
|
@cast_type(arg_idxs=(0, 1)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _wspd(u, v, outview=None): |
|
|
|
def _wspd(u, v, outview=None): |
|
|
|
"""Wrapper for dcomputewspd. |
|
|
|
"""Wrapper for dcomputewspd. |
|
|
@ -953,9 +959,9 @@ def _wspd(u, v, outview=None): |
|
|
|
return result |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@check_args(0, 2, (2,2)) |
|
|
|
@check_args(0, 2, (2, 2)) |
|
|
|
@left_iteration(2, 2, ref_var_idx=0) |
|
|
|
@left_iteration(2, 2, ref_var_idx=0) |
|
|
|
@cast_type(arg_idxs=(0,1)) |
|
|
|
@cast_type(arg_idxs=(0, 1)) |
|
|
|
@extract_and_transpose() |
|
|
|
@extract_and_transpose() |
|
|
|
def _wdir(u, v, outview=None): |
|
|
|
def _wdir(u, v, outview=None): |
|
|
|
"""Wrapper for dcomputewdir. |
|
|
|
"""Wrapper for dcomputewdir. |
|
|
@ -1651,6 +1657,3 @@ def omp_get_wtick(): |
|
|
|
|
|
|
|
|
|
|
|
""" |
|
|
|
""" |
|
|
|
return fomp_get_wtick() |
|
|
|
return fomp_get_wtick() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|