|
|
@ -5,20 +5,21 @@ 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, |
|
|
|
|
|
|
|
virtual_temp, wetbulbcalc, dcomputepw, |
|
|
|
wrf_monotonic, wrf_vintrp, dcomputewspd, |
|
|
|
wrf_monotonic, wrf_vintrp, dcomputewspd, |
|
|
|
dcomputewdir, dinterp3dz_2dlev, |
|
|
|
dcomputewdir, dinterp3dz_2dlev, |
|
|
|
fomp_set_num_threads, fomp_get_num_threads, |
|
|
|
fomp_set_num_threads, fomp_get_num_threads, |
|
|
|
fomp_get_max_threads, fomp_get_thread_num, |
|
|
|
fomp_get_max_threads, fomp_get_thread_num, |
|
|
|
fomp_get_num_procs, fomp_in_parallel, |
|
|
|
fomp_get_num_procs, fomp_in_parallel, |
|
|
|
fomp_set_dynamic, fomp_get_dynamic, fomp_set_nested, |
|
|
|
fomp_set_dynamic, fomp_get_dynamic, |
|
|
|
fomp_get_nested, fomp_set_schedule, |
|
|
|
fomp_set_nested, fomp_get_nested, |
|
|
|
fomp_get_schedule, fomp_get_thread_limit, |
|
|
|
fomp_set_schedule, fomp_get_schedule, |
|
|
|
fomp_set_max_active_levels, |
|
|
|
fomp_get_thread_limit, fomp_set_max_active_levels, |
|
|
|
fomp_get_max_active_levels, fomp_get_level, |
|
|
|
fomp_get_max_active_levels, fomp_get_level, |
|
|
|
fomp_get_ancestor_thread_num, fomp_get_team_size, |
|
|
|
fomp_get_ancestor_thread_num, fomp_get_team_size, |
|
|
|
fomp_get_active_level, fomp_in_final, |
|
|
|
fomp_get_active_level, fomp_in_final, |
|
|
@ -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,7 +76,6 @@ 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)) |
|
|
@ -348,9 +350,8 @@ 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() |
|
|
@ -403,8 +404,10 @@ def _eth(qv, tk, p, outview=None): |
|
|
|
@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. |
|
|
@ -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. |
|
|
@ -933,6 +938,7 @@ 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)) |
|
|
@ -1651,6 +1657,3 @@ def omp_get_wtick(): |
|
|
|
|
|
|
|
|
|
|
|
""" |
|
|
|
""" |
|
|
|
return fomp_get_wtick() |
|
|
|
return fomp_get_wtick() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|