[Dart-dev] DART/branches Revision: 12686
dart at ucar.edu
dart at ucar.edu
Wed Jun 27 14:55:57 MDT 2018
jla at ucar.edu
2018-06-27 14:55:57 -0600 (Wed, 27 Jun 2018)
91
Added check for failed interpolation and pass back missing_r8 for those ensemble members.
Modified: DART/branches/gigg/observations/forward_operators/obs_def_1d_state_mod.f90
===================================================================
--- DART/branches/gigg/observations/forward_operators/obs_def_1d_state_mod.f90 2018-06-27 20:16:28 UTC (rev 12685)
+++ DART/branches/gigg/observations/forward_operators/obs_def_1d_state_mod.f90 2018-06-27 20:55:57 UTC (rev 12686)
@@ -203,7 +203,9 @@
! for tracking/debug use if needed.
if (is_ascii) then
- write(ifile, *) power(powkey)
+ write(ifile, 11) power(powkey)
+ ! Avoid having an integer entered value get truncated to non-integer which would be disastrous for power
+ 11 format(G25.16)
write(ifile, *) powkey
else
write(ifile) power(powkey)
@@ -394,7 +396,7 @@
real(r8) :: range, loc, bottom, dx, x
integer :: j !< loop variable
integer :: point_istatus(ens_size)
-logical :: return_now ! used to return early if an interpoaltion fails
+logical :: return_now ! used to return early if an interpolation fails
real(r8), dimension(ens_size) :: sum, dist, weight, weight_sum
if ( .not. module_initialized ) call initialize_module
@@ -492,17 +494,24 @@
pow = power(powkey)
-! NOTE: WORRY ABOUT SMALL ROUND_OFF AWAY FROM INTEGER IN FILES?
if(pow == int(pow)) then
! Integer power, just use standard definition
- val = pval ** pow
+ where(istatus == 0)
+ val = pval ** pow
+ elsewhere
+ val = missing_r8
+ endwhere
else
! For non-integer powers, fix up values for negative bases
do i = 1, ens_size
- if(pval(i) >= 0.0_r8) then
- val(i) = pval(i) ** pow
+ if(istatus(i) == 0) then
+ if(pval(i) >= 0.0_r8) then
+ val(i) = pval(i) ** pow
+ else
+ val(i) = - (- pval(i)) ** pow
+ endif
else
- val(i) = -1.0_r8 * (-1.0_r8 * pval(i)) ** pow
+ val(i) = missing_r8
endif
end do
endif
More information about the Dart-dev
mailing list