|
|
@ -4,7 +4,8 @@ import unittest as ut |
|
|
|
import numpy.testing as nt |
|
|
|
import numpy.testing as nt |
|
|
|
import numpy as np |
|
|
|
import numpy as np |
|
|
|
import numpy.ma as ma |
|
|
|
import numpy.ma as ma |
|
|
|
import os, sys |
|
|
|
import os |
|
|
|
|
|
|
|
import sys |
|
|
|
import subprocess |
|
|
|
import subprocess |
|
|
|
|
|
|
|
|
|
|
|
from netCDF4 import Dataset as nc |
|
|
|
from netCDF4 import Dataset as nc |
|
|
@ -21,7 +22,6 @@ NCGROUP = [NCFILE, NCFILE, NCFILE] |
|
|
|
if sys.version_info > (3,): |
|
|
|
if sys.version_info > (3,): |
|
|
|
xrange = range |
|
|
|
xrange = range |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ROUTINE_MAP = {"avo": avo, |
|
|
|
ROUTINE_MAP = {"avo": avo, |
|
|
|
"eth": eth, |
|
|
|
"eth": eth, |
|
|
|
"cape_2d": cape_2d, |
|
|
|
"cape_2d": cape_2d, |
|
|
@ -42,15 +42,16 @@ ROUTINE_MAP = {"avo" : avo, |
|
|
|
"uvmet": uvmet, |
|
|
|
"uvmet": uvmet, |
|
|
|
"cloudfrac": cloudfrac} |
|
|
|
"cloudfrac": cloudfrac} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ProjectionError(RuntimeError): |
|
|
|
class ProjectionError(RuntimeError): |
|
|
|
pass |
|
|
|
pass |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_args(varname, wrfnc, timeidx, method, squeeze): |
|
|
|
def get_args(varname, wrfnc, timeidx, method, squeeze): |
|
|
|
if varname == "avo": |
|
|
|
if varname == "avo": |
|
|
|
ncvars = extract_vars(wrfnc, timeidx, ("U", "V", "MAPFAC_U", |
|
|
|
varnames = ("U", "V", "MAPFAC_U", "MAPFAC_V", "MAPFAC_M", "F") |
|
|
|
"MAPFAC_V", "MAPFAC_M", |
|
|
|
ncvars = extract_vars(wrfnc, timeidx, varnames, method, squeeze, |
|
|
|
"F"), |
|
|
|
cache=None, meta=True) |
|
|
|
method, squeeze, cache=None, meta=True) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
attrs = extract_global_attrs(wrfnc, attrs=("DX", "DY")) |
|
|
|
attrs = extract_global_attrs(wrfnc, attrs=("DX", "DY")) |
|
|
|
u = ncvars["U"] |
|
|
|
u = ncvars["U"] |
|
|
@ -66,10 +67,10 @@ def get_args(varname, wrfnc, timeidx, method, squeeze): |
|
|
|
return (u, v, msfu, msfv, msfm, cor, dx, dy) |
|
|
|
return (u, v, msfu, msfv, msfm, cor, dx, dy) |
|
|
|
|
|
|
|
|
|
|
|
if varname == "pvo": |
|
|
|
if varname == "pvo": |
|
|
|
ncvars = extract_vars(wrfnc, timeidx, ("U", "V", "T", "P", |
|
|
|
varnames = ("U", "V", "T", "P", "PB", "MAPFAC_U", "MAPFAC_V", |
|
|
|
"PB", "MAPFAC_U", |
|
|
|
"MAPFAC_M", "F") |
|
|
|
"MAPFAC_V", "MAPFAC_M", |
|
|
|
ncvars = extract_vars(wrfnc, timeidx, |
|
|
|
"F"), |
|
|
|
varnames, |
|
|
|
method, squeeze, cache=None, meta=True) |
|
|
|
method, squeeze, cache=None, meta=True) |
|
|
|
attrs = extract_global_attrs(wrfnc, attrs=("DX", "DY")) |
|
|
|
attrs = extract_global_attrs(wrfnc, attrs=("DX", "DY")) |
|
|
|
|
|
|
|
|
|
|
@ -269,8 +270,9 @@ def get_args(varname, wrfnc, timeidx, method, squeeze): |
|
|
|
return (u, v, z, ter) |
|
|
|
return (u, v, z, ter) |
|
|
|
|
|
|
|
|
|
|
|
if varname == "updraft_helicity": |
|
|
|
if varname == "updraft_helicity": |
|
|
|
ncvars = extract_vars(wrfnc, timeidx, ("W", "PH", "PHB", "MAPFAC_M"), |
|
|
|
varnames = ("W", "PH", "PHB", "MAPFAC_M") |
|
|
|
method, squeeze, cache=None, meta=True) |
|
|
|
ncvars = extract_vars(wrfnc, timeidx, varnames, method, squeeze, |
|
|
|
|
|
|
|
cache=None, meta=True) |
|
|
|
|
|
|
|
|
|
|
|
wstag = ncvars["W"] |
|
|
|
wstag = ncvars["W"] |
|
|
|
ph = ncvars["PH"] |
|
|
|
ph = ncvars["PH"] |
|
|
@ -463,15 +465,16 @@ def get_args(varname, wrfnc, timeidx, method, squeeze): |
|
|
|
lon_attrs = extract_global_attrs(wrfnc, attrs="STAND_LON") |
|
|
|
lon_attrs = extract_global_attrs(wrfnc, attrs="STAND_LON") |
|
|
|
except AttributeError: |
|
|
|
except AttributeError: |
|
|
|
try: |
|
|
|
try: |
|
|
|
cen_lon_attrs = extract_global_attrs(wrfnc, attrs="CEN_LON") |
|
|
|
cen_lon_attrs = extract_global_attrs(wrfnc, |
|
|
|
|
|
|
|
attrs="CEN_LON") |
|
|
|
except AttributeError: |
|
|
|
except AttributeError: |
|
|
|
raise RuntimeError("longitude attributes not found in NetCDF") |
|
|
|
raise RuntimeError("longitude attributes not found in " |
|
|
|
|
|
|
|
"NetCDF") |
|
|
|
else: |
|
|
|
else: |
|
|
|
cen_lon = cen_lon_attrs["CEN_LON"] |
|
|
|
cen_lon = cen_lon_attrs["CEN_LON"] |
|
|
|
else: |
|
|
|
else: |
|
|
|
cen_lon = lon_attrs["STAND_LON"] |
|
|
|
cen_lon = lon_attrs["STAND_LON"] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
varname = "XLAT" |
|
|
|
varname = "XLAT" |
|
|
|
xlat_var = extract_vars(wrfnc, timeidx, varname, |
|
|
|
xlat_var = extract_vars(wrfnc, timeidx, varname, |
|
|
|
method, squeeze, cache=None, meta=True) |
|
|
|
method, squeeze, cache=None, meta=True) |
|
|
@ -488,8 +491,10 @@ def get_args(varname, wrfnc, timeidx, method, squeeze): |
|
|
|
cone = (log(cos(true_lat1 * radians_per_degree)) |
|
|
|
cone = (log(cos(true_lat1 * radians_per_degree)) |
|
|
|
- log(cos(true_lat2 * radians_per_degree))) |
|
|
|
- log(cos(true_lat2 * radians_per_degree))) |
|
|
|
cone = (cone / |
|
|
|
cone = (cone / |
|
|
|
(log(tan((45.-fabs(true_lat1/2.))*radians_per_degree)) |
|
|
|
(log(tan((45.-fabs(true_lat1/2.)) * |
|
|
|
- log(tan((45.-fabs(true_lat2/2.))*radians_per_degree)))) |
|
|
|
radians_per_degree)) |
|
|
|
|
|
|
|
- log(tan((45.-fabs(true_lat2/2.)) * |
|
|
|
|
|
|
|
radians_per_degree)))) |
|
|
|
else: |
|
|
|
else: |
|
|
|
cone = sin(fabs(true_lat1) * radians_per_degree) |
|
|
|
cone = sin(fabs(true_lat1) * radians_per_degree) |
|
|
|
else: |
|
|
|
else: |
|
|
@ -499,8 +504,10 @@ def get_args(varname, wrfnc, timeidx, method, squeeze): |
|
|
|
|
|
|
|
|
|
|
|
if varname == "cloudfrac": |
|
|
|
if varname == "cloudfrac": |
|
|
|
from wrf.g_geoht import get_height |
|
|
|
from wrf.g_geoht import get_height |
|
|
|
vars = extract_vars(wrfnc, timeidx, ("P", "PB", "QVAPOR", "T"), |
|
|
|
|
|
|
|
method, squeeze, cache=None, meta=True) |
|
|
|
varnames = ("P", "PB", "QVAPOR", "T") |
|
|
|
|
|
|
|
vars = extract_vars(wrfnc, timeidx, varnames, method, squeeze, |
|
|
|
|
|
|
|
cache=None, meta=True) |
|
|
|
|
|
|
|
|
|
|
|
p = vars["P"] |
|
|
|
p = vars["P"] |
|
|
|
pb = vars["PB"] |
|
|
|
pb = vars["PB"] |
|
|
@ -522,6 +529,7 @@ def get_args(varname, wrfnc, timeidx, method, squeeze): |
|
|
|
class WRFVarsTest(ut.TestCase): |
|
|
|
class WRFVarsTest(ut.TestCase): |
|
|
|
longMessage = True |
|
|
|
longMessage = True |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def make_func(varname, wrfnc, timeidx, method, squeeze, meta): |
|
|
|
def make_func(varname, wrfnc, timeidx, method, squeeze, meta): |
|
|
|
def func(self): |
|
|
|
def func(self): |
|
|
|
|
|
|
|
|
|
|
@ -651,6 +659,7 @@ def test_cape2d_1d(wrfnc): |
|
|
|
|
|
|
|
|
|
|
|
return func |
|
|
|
return func |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
if __name__ == "__main__": |
|
|
|
from wrf import (omp_set_num_threads, omp_set_schedule, omp_get_schedule, |
|
|
|
from wrf import (omp_set_num_threads, omp_set_schedule, omp_get_schedule, |
|
|
|
omp_set_dynamic, omp_get_num_procs, OMP_SCHED_STATIC) |
|
|
|
omp_set_dynamic, omp_get_num_procs, OMP_SCHED_STATIC) |
|
|
@ -664,11 +673,6 @@ if __name__ == "__main__": |
|
|
|
"theta", "tk", "tv", "twb", "updraft_helicity", "ua", "va", |
|
|
|
"theta", "tk", "tv", "twb", "updraft_helicity", "ua", "va", |
|
|
|
"wa", "uvmet10", "uvmet", "z", "cloudfrac"] |
|
|
|
"wa", "uvmet10", "uvmet", "z", "cloudfrac"] |
|
|
|
|
|
|
|
|
|
|
|
#varnames = ["helicity"] |
|
|
|
|
|
|
|
varnames=["avo", "pvo", "eth", "dbz", "helicity", "updraft_helicity", |
|
|
|
|
|
|
|
"omg", "pw", "rh", "slp", "td", "tk", "tv", "twb", "uvmet", |
|
|
|
|
|
|
|
"cloudfrac", "ctt"] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
omp_set_num_threads(omp_get_num_procs()-1) |
|
|
|
omp_set_num_threads(omp_get_num_procs()-1) |
|
|
|
omp_set_schedule(OMP_SCHED_STATIC, 0) |
|
|
|
omp_set_schedule(OMP_SCHED_STATIC, 0) |
|
|
|
omp_set_dynamic(False) |
|
|
|
omp_set_dynamic(False) |
|
|
@ -686,10 +690,11 @@ if __name__ == "__main__": |
|
|
|
squeeze, meta) |
|
|
|
squeeze, meta) |
|
|
|
ncname = "single" if i == 0 else "multi" |
|
|
|
ncname = "single" if i == 0 else "multi" |
|
|
|
timename = "t0" if j == 0 else "all" |
|
|
|
timename = "t0" if j == 0 else "all" |
|
|
|
squeeze_name = "squeeze" if squeeze else "nosqueeze" |
|
|
|
squeeze_name = ("squeeze" if squeeze |
|
|
|
|
|
|
|
else "nosqueeze") |
|
|
|
meta_name = "meta" if meta else "nometa" |
|
|
|
meta_name = "meta" if meta else "nometa" |
|
|
|
test_name = "test_{}_{}_{}_{}_{}_{}".format(varname, |
|
|
|
test_name = "test_{}_{}_{}_{}_{}_{}".format( |
|
|
|
ncname, timename, method, |
|
|
|
varname, ncname, timename, method, |
|
|
|
squeeze_name, meta_name) |
|
|
|
squeeze_name, meta_name) |
|
|
|
|
|
|
|
|
|
|
|
setattr(WRFVarsTest, test_name, func) |
|
|
|
setattr(WRFVarsTest, test_name, func) |
|
|
@ -700,7 +705,4 @@ if __name__ == "__main__": |
|
|
|
func = test_cape2d_1d(wrfnc) |
|
|
|
func = test_cape2d_1d(wrfnc) |
|
|
|
setattr(WRFVarsTest, "test_cape2d_1d", func) |
|
|
|
setattr(WRFVarsTest, "test_cape2d_1d", func) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ut.main() |
|
|
|
ut.main() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|