[Dart-dev] DART/branches Revision: 12756
dart at ucar.edu
dart at ucar.edu
Fri Aug 3 14:46:44 MDT 2018
nancy at ucar.edu
2018-08-03 14:46:44 -0600 (Fri, 03 Aug 2018)
314
serious performance fix - does not change the answer
but was passing the original observation into get_close()
routines instead of the already-converted vertical version
of the obs. this made running with a distribute_mean
time-prohibitive. this version fixes that and makes
the performance acceptable again.
Modified: DART/branches/rma_trunk/assimilation_code/modules/assimilation/assim_tools_mod.f90
===================================================================
--- DART/branches/rma_trunk/assimilation_code/modules/assimilation/assim_tools_mod.f90 2018-07-24 21:55:46 UTC (rev 12755)
+++ DART/branches/rma_trunk/assimilation_code/modules/assimilation/assim_tools_mod.f90 2018-08-03 20:46:44 UTC (rev 12756)
@@ -639,8 +639,8 @@
! vertical up above, then we need to broadcast the new values to all the other
! tasks so they're computing the right distances when applying the increments.
if (is_doing_vertical_conversion) then
- vertvalue_obs_in_localization_coord = query_location(base_obs_loc, "VLOC")
- whichvert_obs_in_localization_coord = query_location(base_obs_loc, "WHICH_VERT")
+ vertvalue_obs_in_localization_coord = query_location(my_obs_loc(owners_index), "VLOC")
+ whichvert_obs_in_localization_coord = query_location(my_obs_loc(owners_index), "WHICH_VERT")
else
vertvalue_obs_in_localization_coord = 0.0_r8
whichvert_obs_in_localization_coord = 0
@@ -755,10 +755,6 @@
endif
whichvert_obs_in_localization_coord = nint(whichvert_real)
- if (is_doing_vertical_conversion) then
- ! use converted vertical coordinate value and type from owner
- call set_vertical(base_obs_loc, vertvalue_obs_in_localization_coord, whichvert_obs_in_localization_coord)
- endif
endif
!-----------------------------------------------------------------------
@@ -765,6 +761,11 @@
! Everybody is doing this section, cycle if qc is bad
if(nint(obs_qc) /= 0) cycle SEQUENTIAL_OBS
+ !> all tasks must set the converted vertical values into the 'base' version of this loc
+ !> because that's what we pass into the get_close_xxx() routines below.
+ if (is_doing_vertical_conversion) &
+ call set_vertical(base_obs_loc, vertvalue_obs_in_localization_coord, whichvert_obs_in_localization_coord)
+
! Can compute prior mean and variance of obs for each group just once here
do group = 1, num_groups
grp_bot = grp_beg(group)
More information about the Dart-dev
mailing list