Propagate from current rather than previous position
authorPascal Merz <pascal.merz@me.com>
Thu, 8 Apr 2021 21:58:15 +0000 (15:58 -0600)
committerMark Abraham <mark.j.abraham@gmail.com>
Sun, 11 Apr 2021 20:01:16 +0000 (20:01 +0000)
The current implementation was using the previous position as a starting
point of position propagation. This is conceptually wrong: We want to
propagate starting from the current position.

This had no influence currently, as none of the algorithms present has
multiple position propagations per step. Moving forward, this does however
pose the risk of bugs.

src/gromacs/modularsimulator/propagator.cpp

index 406438aedcea4756d81f3aa34af7a43a7922f0ce..8045b5eec89dd862549fa70497283c04cf75dcdf 100644 (file)
@@ -148,8 +148,8 @@ void Propagator<IntegrationStep::PositionsOnly>::run()
     wallcycle_start(wcycle_, ewcUPDATE);
 
     auto xp = as_rvec_array(statePropagatorData_->positionsView().paddedArrayRef().data());
-    auto x = as_rvec_array(statePropagatorData_->constPreviousPositionsView().paddedArrayRef().data());
-    auto v = as_rvec_array(statePropagatorData_->constVelocitiesView().paddedArrayRef().data());
+    auto x  = as_rvec_array(statePropagatorData_->constPositionsView().paddedArrayRef().data());
+    auto v  = as_rvec_array(statePropagatorData_->constVelocitiesView().paddedArrayRef().data());
 
     int nth    = gmx_omp_nthreads_get(emntUpdate);
     int homenr = mdAtoms_->mdatoms()->homenr;
@@ -248,9 +248,9 @@ void Propagator<IntegrationStep::LeapFrog>::run()
     wallcycle_start(wcycle_, ewcUPDATE);
 
     auto xp = as_rvec_array(statePropagatorData_->positionsView().paddedArrayRef().data());
-    auto x = as_rvec_array(statePropagatorData_->constPreviousPositionsView().paddedArrayRef().data());
-    auto v = as_rvec_array(statePropagatorData_->velocitiesView().paddedArrayRef().data());
-    auto f = as_rvec_array(statePropagatorData_->constForcesView().force().data());
+    auto x  = as_rvec_array(statePropagatorData_->constPositionsView().paddedArrayRef().data());
+    auto v  = as_rvec_array(statePropagatorData_->velocitiesView().paddedArrayRef().data());
+    auto f  = as_rvec_array(statePropagatorData_->constForcesView().force().data());
     auto invMassPerDim = mdAtoms_->mdatoms()->invMassPerDim;
 
     const real lambda =
@@ -319,9 +319,9 @@ void Propagator<IntegrationStep::VelocityVerletPositionsAndVelocities>::run()
     wallcycle_start(wcycle_, ewcUPDATE);
 
     auto xp = as_rvec_array(statePropagatorData_->positionsView().paddedArrayRef().data());
-    auto x = as_rvec_array(statePropagatorData_->constPreviousPositionsView().paddedArrayRef().data());
-    auto v = as_rvec_array(statePropagatorData_->velocitiesView().paddedArrayRef().data());
-    auto f = as_rvec_array(statePropagatorData_->constForcesView().force().data());
+    auto x  = as_rvec_array(statePropagatorData_->constPositionsView().paddedArrayRef().data());
+    auto v  = as_rvec_array(statePropagatorData_->velocitiesView().paddedArrayRef().data());
+    auto f  = as_rvec_array(statePropagatorData_->constForcesView().force().data());
     auto invMassPerDim = mdAtoms_->mdatoms()->invMassPerDim;
 
     const real lambda =