Improve stability of ContinuationIsExact tests
authorAndrey Alekseenko <al42and@gmail.com>
Wed, 13 Oct 2021 17:30:13 +0000 (19:30 +0200)
committerAndrey Alekseenko <al42and@gmail.com>
Thu, 14 Oct 2021 10:59:17 +0000 (10:59 +0000)
The default nstlist value in tests is set to 8. This is appropriate for
NormalIntegrators/MdrunNoAppendContinuationIsExact tests, which do the
restart after 8 steps, so the "full" trajectory and the "restarted"
trajectory update their lists at the same time. However, pairlist tuning
often increases the nstlist value, which might affect the "full" run.

Here, we force the nstlist to be half the nsteps for the "full" run by
setting it via CLI option.

src/programs/mdrun/tests/exactcontinuation.cpp

index efd2e806455d90203dfaf334db112c5d3f6c3fef..8b4b8f051faa60be5bc2fb079a946f5e0db0fb92 100644 (file)
@@ -252,6 +252,8 @@ void runTest(TestFileManager*            fileManager,
         EXPECT_EQ(0, runner->callGrompp(caller));
     }
 
+    const std::string splitPoint = std::to_string(std::stoi(mdpFieldValues.at("nsteps")) / 2);
+
     // prepare the .tpr file for the first part of the two-part run
     {
         // TODO evolve grompp to report the number of warnings issued, so
@@ -261,7 +263,7 @@ void runTest(TestFileManager*            fileManager,
         caller.addOption("-maxwarn", maxWarningsTolerated);
         runner->useTopGroAndNdxFromDatabase(simulationName);
         auto firstPartMdpFieldValues      = mdpFieldValues;
-        firstPartMdpFieldValues["nsteps"] = std::to_string(std::stoi(mdpFieldValues.at("nsteps")) / 2);
+        firstPartMdpFieldValues["nsteps"] = splitPoint;
         runner->useStringAsMdpFile(prepareMdpFileContents(firstPartMdpFieldValues));
         runner->tprFileName_ = firstPartRunTprFileName;
         EXPECT_EQ(0, runner->callGrompp(caller));
@@ -273,6 +275,9 @@ void runTest(TestFileManager*            fileManager,
         runner->edrFileName_ = fullRunEdrFileName;
         CommandLine fullRunCaller;
         fullRunCaller.append("mdrun");
+        /* Force neighborlist update at the beginning of the second half of the trajectory.
+         * Doing so through CLI options prevents pairlist tuning from changing it. */
+        fullRunCaller.addOption("-nstlist", splitPoint);
         ASSERT_EQ(0, runner->callMdrun(fullRunCaller));
     }