Browse Source

Fix parallel computation problem with wrf_monotonic

lon0
Bill Ladwig 8 years ago
parent
commit
3056a34ea2
  1. 14
      fortran/wrf_vinterp.f90
  2. 14
      src/wrf/interp.py

14
fortran/wrf_vinterp.f90

@ -20,24 +20,24 @@ SUBROUTINE wrf_monotonic(out, in, lvprs, cor, idir, delta, ew, ns, nz, icorsw)
!NCLEND !NCLEND
INTEGER :: i, j, k, k300 INTEGER :: i, j, k, ripk, k300
!$OMP PARALLEL DO COLLAPSE(2) k300 = 1 ! removes the warning
!$OMP PARALLEL DO COLLAPSE(2) PRIVATE(i, j, k, ripk) FIRSTPRIVATE(k300)
DO j=1,ns DO j=1,ns
DO i=1,ew DO i=1,ew
IF (icorsw .EQ. 1 .AND. cor(i,j) .LT. 0.) THEN IF (icorsw .EQ. 1 .AND. cor(i,j) .LT. 0.) THEN
DO k=1,nz DO k=1,nz
in(i,j,k) = -in(i,j,k) in(i,j,k) = -in(i,j,k)
END DO END DO
END IF END IF
k300 = nz
! First find k index that is at or below (height-wise) ! First find k index that is at or below (height-wise)
! the 300 hPa level. ! the 300 hPa level.
DO k = nz,1,-1 DO k = 1,nz
IF (lvprs(i,j,k) .GE. 300.D0) THEN ripk = nz-k+1
IF (lvprs(i,j,k) .LE. 300.D0) THEN
k300 = k k300 = k
EXIT EXIT
END IF END IF

14
src/wrf/interp.py

@ -584,6 +584,9 @@ def vinterp(wrfin, field, vert_coord, interp_levels, extrapolate=False,
terht = get_terrain(wrfin, timeidx, units="m", terht = get_terrain(wrfin, timeidx, units="m",
method=method, squeeze=squeeze, cache=cache, method=method, squeeze=squeeze, cache=cache,
meta=False, _key=_key) 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", tk = get_temp(wrfin, timeidx, units="k",
method=method, squeeze=squeeze, cache=cache, method=method, squeeze=squeeze, cache=cache,
meta=False, _key=_key) meta=False, _key=_key)
@ -593,6 +596,9 @@ def vinterp(wrfin, field, vert_coord, interp_levels, extrapolate=False,
ght = get_height(wrfin, timeidx, msl=True, units="m", ght = get_height(wrfin, timeidx, msl=True, units="m",
method=method, squeeze=squeeze, cache=cache, method=method, squeeze=squeeze, cache=cache,
meta=False, _key=_key) 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) smsfp = _smooth2d(sfp, 3)
@ -607,18 +613,10 @@ def vinterp(wrfin, field, vert_coord, interp_levels, extrapolate=False,
vcord_array = np.exp(-ght/sclht) vcord_array = np.exp(-ght/sclht)
elif vert_coord == "ght_agl": 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 vcor = 3
vcord_array = np.exp(-ht_agl/sclht) vcord_array = np.exp(-ht_agl/sclht)
elif vert_coord in ("theta", "th"): 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 vcor = 4
idir = 1 idir = 1
icorsw = 0 icorsw = 0

Loading…
Cancel
Save