|
|
@ -2,7 +2,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 wrf import (getvar, interplevel, interpline, vertcross, vinterp, |
|
|
|
from wrf import (getvar, interplevel, interpline, vertcross, vinterp, |
|
|
@ -20,6 +21,7 @@ REF_FILE = "ci_result_file.nc" |
|
|
|
if sys.version_info > (3,): |
|
|
|
if sys.version_info > (3,): |
|
|
|
xrange = range |
|
|
|
xrange = range |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Using helpful information at: |
|
|
|
# Using helpful information at: |
|
|
|
# http://eli.thegreenplace.net/2014/04/02/dynamically-generating-python-test-cases |
|
|
|
# http://eli.thegreenplace.net/2014/04/02/dynamically-generating-python-test-cases |
|
|
|
def make_test(varname, wrf_in, referent, multi=False, repeat=3, pynio=False): |
|
|
|
def make_test(varname, wrf_in, referent, multi=False, repeat=3, pynio=False): |
|
|
@ -34,7 +36,6 @@ def make_test(varname, wrf_in, referent, multi=False, repeat=3, pynio=False): |
|
|
|
multiproduct = varname in ("uvmet", "uvmet10", "cape_2d", "cape_3d", |
|
|
|
multiproduct = varname in ("uvmet", "uvmet10", "cape_2d", "cape_3d", |
|
|
|
"cfrac") |
|
|
|
"cfrac") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ref_vals = refnc.variables[varname][:] |
|
|
|
ref_vals = refnc.variables[varname][:] |
|
|
|
|
|
|
|
|
|
|
|
if (varname == "tc"): |
|
|
|
if (varname == "tc"): |
|
|
@ -45,8 +46,7 @@ def make_test(varname, wrf_in, referent, multi=False, repeat=3, pynio=False): |
|
|
|
elif (varname == "pw"): |
|
|
|
elif (varname == "pw"): |
|
|
|
my_vals = getvar(in_wrfnc, "pw", timeidx=timeidx) |
|
|
|
my_vals = getvar(in_wrfnc, "pw", timeidx=timeidx) |
|
|
|
tol = .5/100.0 |
|
|
|
tol = .5/100.0 |
|
|
|
atol = 0 # NCL uses different constants and doesn't use same |
|
|
|
atol = 0 |
|
|
|
# handrolled virtual temp in method |
|
|
|
|
|
|
|
nt.assert_allclose(to_np(my_vals), ref_vals, tol, atol) |
|
|
|
nt.assert_allclose(to_np(my_vals), ref_vals, tol, atol) |
|
|
|
elif (varname == "cape_2d"): |
|
|
|
elif (varname == "cape_2d"): |
|
|
|
cape_2d = getvar(in_wrfnc, varname, timeidx=timeidx) |
|
|
|
cape_2d = getvar(in_wrfnc, varname, timeidx=timeidx) |
|
|
@ -76,9 +76,9 @@ def make_test(varname, wrf_in, referent, multi=False, repeat=3, pynio=False): |
|
|
|
# print (np.amax(np.abs(to_np(my_vals) - ref_vals))) |
|
|
|
# print (np.amax(np.abs(to_np(my_vals) - ref_vals))) |
|
|
|
nt.assert_allclose(to_np(my_vals), ref_vals, tol, atol) |
|
|
|
nt.assert_allclose(to_np(my_vals), ref_vals, tol, atol) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return test |
|
|
|
return test |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _get_refvals(referent, varname, repeat, multi): |
|
|
|
def _get_refvals(referent, varname, repeat, multi): |
|
|
|
from netCDF4 import Dataset as NetCDF |
|
|
|
from netCDF4 import Dataset as NetCDF |
|
|
|
|
|
|
|
|
|
|
@ -88,6 +88,7 @@ def _get_refvals(referent, varname, repeat, multi): |
|
|
|
|
|
|
|
|
|
|
|
return ref_vals |
|
|
|
return ref_vals |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def make_interp_test(varname, wrf_in, referent, multi=False, |
|
|
|
def make_interp_test(varname, wrf_in, referent, multi=False, |
|
|
|
repeat=3, pynio=False): |
|
|
|
repeat=3, pynio=False): |
|
|
|
def test(self): |
|
|
|
def test(self): |
|
|
@ -123,7 +124,6 @@ def make_interp_test(varname, wrf_in, referent, multi=False, |
|
|
|
|
|
|
|
|
|
|
|
nt.assert_allclose(to_np(ht_cross), ref_ht_cross, rtol=.01) |
|
|
|
nt.assert_allclose(to_np(ht_cross), ref_ht_cross, rtol=.01) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
elif (varname == "interpline"): |
|
|
|
elif (varname == "interpline"): |
|
|
|
|
|
|
|
|
|
|
|
ref_t2_line = _get_refvals(referent, "interpline", repeat, multi) |
|
|
|
ref_t2_line = _get_refvals(referent, "interpline", repeat, multi) |
|
|
@ -200,7 +200,6 @@ def make_latlon_test(testid, wrf_in, referent, single, multi=False, repeat=3, |
|
|
|
|
|
|
|
|
|
|
|
nt.assert_allclose(to_np(xy), ref_vals) |
|
|
|
nt.assert_allclose(to_np(xy), ref_vals) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
else: |
|
|
|
else: |
|
|
|
# Since this domain is not moving, the reference values are the |
|
|
|
# Since this domain is not moving, the reference values are the |
|
|
|
# same whether there are multiple or single files |
|
|
|
# same whether there are multiple or single files |
|
|
@ -215,15 +214,17 @@ def make_latlon_test(testid, wrf_in, referent, single, multi=False, repeat=3, |
|
|
|
|
|
|
|
|
|
|
|
nt.assert_allclose(to_np(ll), ref_vals) |
|
|
|
nt.assert_allclose(to_np(ll), ref_vals) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return test |
|
|
|
return test |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WRFVarsTest(ut.TestCase): |
|
|
|
class WRFVarsTest(ut.TestCase): |
|
|
|
longMessage = True |
|
|
|
longMessage = True |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WRFInterpTest(ut.TestCase): |
|
|
|
class WRFInterpTest(ut.TestCase): |
|
|
|
longMessage = True |
|
|
|
longMessage = True |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WRFLatLonTest(ut.TestCase): |
|
|
|
class WRFLatLonTest(ut.TestCase): |
|
|
|
longMessage = True |
|
|
|
longMessage = True |
|
|
|
|
|
|
|
|
|
|
@ -261,10 +262,7 @@ if __name__ == "__main__": |
|
|
|
repeat=3, pynio=False) |
|
|
|
repeat=3, pynio=False) |
|
|
|
multistr = "" if not multi else "_multi" |
|
|
|
multistr = "" if not multi else "_multi" |
|
|
|
singlestr = "_nosingle" if not single else "_single" |
|
|
|
singlestr = "_nosingle" if not single else "_single" |
|
|
|
test_name = "test_{}{}{}".format(testid, singlestr, |
|
|
|
test_name = "test_{}{}{}".format(testid, singlestr, multistr) |
|
|
|
multistr) |
|
|
|
|
|
|
|
setattr(WRFLatLonTest, test_name, test_ll_func) |
|
|
|
setattr(WRFLatLonTest, test_name, test_ll_func) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ut.main() |
|
|
|
ut.main() |
|
|
|
|
|
|
|
|