[Dart-dev] DART/branches Revision: 12760

dart at ucar.edu dart at ucar.edu
Mon Aug 6 07:52:28 MDT 2018


nancy at ucar.edu
2018-08-06 07:52:27 -0600 (Mon, 06 Aug 2018)
109
fix for performance bottleneck when running with
a distributed mean and doing vertical location conversion.




Modified: DART/branches/recam/assimilation_code/modules/assimilation/assim_tools_mod.f90
===================================================================
--- DART/branches/recam/assimilation_code/modules/assimilation/assim_tools_mod.f90	2018-08-06 13:47:10 UTC (rev 12759)
+++ DART/branches/recam/assimilation_code/modules/assimilation/assim_tools_mod.f90	2018-08-06 13:52:27 UTC (rev 12760)
@@ -635,8 +635,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
@@ -751,10 +751,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
    !-----------------------------------------------------------------------
 
@@ -761,6 +757,11 @@
    ! Everybody is doing this section, cycle if qc is bad
    if(nint(obs_qc) /= 0) cycle SEQUENTIAL_OBS
 
+   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
+
    ! 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