From d66a81a98a514c0f5350adc5695d6cda897ebf6d Mon Sep 17 00:00:00 2001 From: Bill Ladwig Date: Fri, 17 Nov 2017 14:27:54 -0700 Subject: [PATCH] Fixed wrf_monotonic performance issues caused by an accidental revert --- fortran/wrf_vinterp.f90 | 17 +++++++++++------ src/wrf/interp.py | 14 ++++++++------ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/fortran/wrf_vinterp.f90 b/fortran/wrf_vinterp.f90 index 3357050..d5c18c1 100644 --- a/fortran/wrf_vinterp.f90 +++ b/fortran/wrf_vinterp.f90 @@ -20,13 +20,13 @@ SUBROUTINE wrf_monotonic(out, in, lvprs, cor, idir, delta, ew, ns, nz, icorsw) !NCLEND - INTEGER :: i, j, k, ripk, k300 + INTEGER :: i, j, k, k300 - k300 = 1 ! removes the warning - - !$OMP PARALLEL DO COLLAPSE(2) PRIVATE(i, j, k, ripk) FIRSTPRIVATE(k300) + !$OMP PARALLEL DO COLLAPSE(2) PRIVATE(i, j, k, k300) DO j=1,ns DO i=1,ew + k300 = -1 + IF (icorsw .EQ. 1 .AND. cor(i,j) .LT. 0.) THEN DO k=1,nz in(i,j,k) = -in(i,j,k) @@ -35,14 +35,19 @@ SUBROUTINE wrf_monotonic(out, in, lvprs, cor, idir, delta, ew, ns, nz, icorsw) ! First find k index that is at or below (height-wise) ! the 300 hPa level. - DO k = 1,nz - ripk = nz-k+1 + DO k = 1,nz-1 IF (lvprs(i,j,k) .LE. 300.D0) THEN k300 = k EXIT END IF END DO + ! If the search fails for some reason, use the second to last + ! k index + IF (k300 .EQ. -1) THEN + k300 = nz-1 + END IF + DO k = k300,1,-1 IF (idir .EQ. 1) THEN out(i,j,k) = MIN(in(i,j,k), in(i,j,k+1) + delta) diff --git a/src/wrf/interp.py b/src/wrf/interp.py index a2e67aa..8741596 100755 --- a/src/wrf/interp.py +++ b/src/wrf/interp.py @@ -584,9 +584,6 @@ def vinterp(wrfin, field, vert_coord, interp_levels, extrapolate=False, terht = get_terrain(wrfin, timeidx, units="m", method=method, squeeze=squeeze, cache=cache, meta=False, _key=_key) - t = get_theta(wrfin, timeidx, units="k", - method=method, squeeze=squeeze, cache=cache, - meta=False, _key=_key) tk = get_temp(wrfin, timeidx, units="k", method=method, squeeze=squeeze, cache=cache, meta=False, _key=_key) @@ -596,9 +593,6 @@ def vinterp(wrfin, field, vert_coord, interp_levels, extrapolate=False, ght = get_height(wrfin, timeidx, msl=True, units="m", method=method, squeeze=squeeze, cache=cache, meta=False, _key=_key) - ht_agl = get_height(wrfin, timeidx, msl=False, units="m", - method=method, squeeze=squeeze, cache=cache, - meta=False, _key=_key) smsfp = _smooth2d(sfp, 3) @@ -613,10 +607,18 @@ def vinterp(wrfin, field, vert_coord, interp_levels, extrapolate=False, vcord_array = np.exp(-ght/sclht) elif vert_coord == "ght_agl": + ht_agl = get_height(wrfin, timeidx, msl=False, units="m", + method=method, squeeze=squeeze, cache=cache, + meta=False, _key=_key) + vcor = 3 vcord_array = np.exp(-ht_agl/sclht) elif vert_coord in ("theta", "th"): + t = get_theta(wrfin, timeidx, units="k", + method=method, squeeze=squeeze, cache=cache, + meta=False, _key=_key) + vcor = 4 idir = 1 icorsw = 0