Remove duplicate waiting for coordinates
[alexxy/gromacs.git] / src / gromacs / mdlib / sim_util.cpp
index 45026b2ad599999c94f22b2540c4071d97e49d57..4210f696cda3492b55c55d2e60593c4e5f224dd5 100644 (file)
@@ -1665,19 +1665,22 @@ void do_force(FILE*                               fplog,
         xWholeMolecules = fr->wholeMoleculeTransform->wholeMoleculeCoordinates(x.unpaddedArrayRef(), box);
     }
 
+    // For the rest of the CPU tasks that depend on GPU-update produced coordinates,
+    // this wait ensures that the D2H transfer is complete.
+    if (simulationWork.useGpuUpdate && !stepWork.doNeighborSearch
+        && (runScheduleWork->domainWork.haveCpuLocalForceWork || stepWork.computeVirial
+            || simulationWork.computeMuTot))
+    {
+        GMX_ASSERT(haveCopiedXFromGpu, "a wait should only be triggered if copy has been scheduled");
+        stateGpu->waitCoordinatesReadyOnHost(AtomLocality::Local);
+    }
+
     DipoleData dipoleData;
 
     if (simulationWork.computeMuTot)
     {
         const int start = 0;
 
-        if (simulationWork.useGpuUpdate && !stepWork.doNeighborSearch)
-        {
-            GMX_ASSERT(haveCopiedXFromGpu,
-                       "a wait should only be triggered if copy has been scheduled");
-            stateGpu->waitCoordinatesReadyOnHost(AtomLocality::Local);
-        }
-
         /* Calculate total (local) dipole moment in a temporary common array.
          * This makes it possible to sum them over nodes faster.
          */
@@ -1707,15 +1710,6 @@ void do_force(FILE*                               fplog,
         dd_force_flop_start(cr->dd, nrnb);
     }
 
-    // For the rest of the CPU tasks that depend on GPU-update produced coordinates,
-    // this wait ensures that the D2H transfer is complete.
-    if (simulationWork.useGpuUpdate && !stepWork.doNeighborSearch
-        && (runScheduleWork->domainWork.haveCpuLocalForceWork || stepWork.computeVirial))
-    {
-        GMX_ASSERT(haveCopiedXFromGpu, "a wait should only be triggered if copy has been scheduled");
-        stateGpu->waitCoordinatesReadyOnHost(AtomLocality::Local);
-    }
-
     if (inputrec.bRot)
     {
         wallcycle_start(wcycle, WallCycleCounter::Rot);