[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