[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