[Dart-dev] [6883] DART/trunk/models/mpas_atm/model_mod.f90: fix a bug in the log P vertical interpolation.

nancy at ucar.edu nancy at ucar.edu
Fri Apr 11 14:47:26 MDT 2014


Revision: 6883
Author:   nancy
Date:     2014-04-11 14:47:26 -0600 (Fri, 11 Apr 2014)
Log Message:
-----------
fix a bug in the log P vertical interpolation.
the find_pressure_bounds() routine was not
returning a fraction between 0 and 1 for log pressure
interpolation option.  fixes issue DART-19.

Modified Paths:
--------------
    DART/trunk/models/mpas_atm/model_mod.f90

-------------- next part --------------
Modified: DART/trunk/models/mpas_atm/model_mod.f90
===================================================================
--- DART/trunk/models/mpas_atm/model_mod.f90	2014-04-11 20:45:42 UTC (rev 6882)
+++ DART/trunk/models/mpas_atm/model_mod.f90	2014-04-11 20:47:26 UTC (rev 6883)
@@ -4866,11 +4866,19 @@
       if (pressure(i) == pressure(i-1)) then
          fract = 0.0_r8
       else if (log_p_vert_interp) then
-         fract = exp((log(p) - log(pressure(i-1))) / &
-                    (log(pressure(i)) - log(pressure(i-1))))
+         fract = (log(p) - log(pressure(i-1))) / &
+                 (log(pressure(i)) - log(pressure(i-1)))
       else
          fract = (p - pressure(i-1)) / (pressure(i) - pressure(i-1))
       endif
+      ! shouldn't happen but with roundoff i suppose could be one
+      ! least-significant-bit out of range. so don't print unless some
+      ! level of debugging is enabled.
+      if ((fract < 0.0_r8 .or. fract > 1.0_r8) .and. debug > 0) then
+         print '(A,3F26.18,2I4,F22.18)', &
+          "find_pressure_bounds: bad fract!  p_in, pr(i-1), pr(i), lower, upper, fract = ", &
+           p, pressure(i-1), pressure(i), lower, upper, fract
+      endif
 
       if ((debug > 9) .and. do_output()) print '(A,3F26.18,2I4,F22.18)', &
          "find_pressure_bounds: p_in, pr(i-1), pr(i), lower, upper, fract = ", &


More information about the Dart-dev mailing list