simulatedAnnealingGroupNames.resize(0);
}
if (!simulatedAnnealingGroupNames.empty() &&
- simulatedAnnealingGroupNames.size() != size_t(nr))
+ gmx::ssize(simulatedAnnealingGroupNames) != nr)
{
- gmx_fatal(FARGS, "Not enough annealing values: %zu (for %d groups)\n",
+ gmx_fatal(FARGS, "Wrong number of annealing values: %zu (for %d groups)\n",
simulatedAnnealingGroupNames.size(), nr);
}
else
simulatedAnnealingPoints.size(), simulatedAnnealingGroupNames.size());
}
convertInts(wi, simulatedAnnealingPoints, "annealing points", ir->opts.anneal_npoints);
- for (k = 0, i = 0; i < nr; i++)
+ size_t numSimulatedAnnealingFields = 0;
+ for (i = 0; i < nr; i++)
{
if (ir->opts.anneal_npoints[i] == 1)
{
}
snew(ir->opts.anneal_time[i], ir->opts.anneal_npoints[i]);
snew(ir->opts.anneal_temp[i], ir->opts.anneal_npoints[i]);
- k += ir->opts.anneal_npoints[i];
+ numSimulatedAnnealingFields += ir->opts.anneal_npoints[i];
}
auto simulatedAnnealingTimes = gmx::splitString(is->anneal_time);
- if (simulatedAnnealingTimes.size() != size_t(k))
+
+ if (simulatedAnnealingTimes.size() != numSimulatedAnnealingFields)
{
- gmx_fatal(FARGS, "Found %zu annealing-time values, wanted %d\n",
- simulatedAnnealingTimes.size(), k);
+ gmx_fatal(FARGS, "Found %zu annealing-time values, wanted %zu\n",
+ simulatedAnnealingTimes.size(), numSimulatedAnnealingFields);
}
auto simulatedAnnealingTemperatures = gmx::splitString(is->anneal_temp);
- if (simulatedAnnealingTemperatures.size() != size_t(k))
+ if (simulatedAnnealingTemperatures.size() != numSimulatedAnnealingFields)
{
- gmx_fatal(FARGS, "Found %zu annealing-temp values, wanted %d\n",
- simulatedAnnealingTemperatures.size(), k);
+ gmx_fatal(FARGS, "Found %zu annealing-temp values, wanted %zu\n",
+ simulatedAnnealingTemperatures.size(), numSimulatedAnnealingFields);
}
- convertReals(wi, simulatedAnnealingTimes, "anneal-time", ir->opts.anneal_time[i]);
- convertReals(wi, simulatedAnnealingTemperatures, "anneal-temp", ir->opts.anneal_temp[i]);
+ std::vector<real> allSimulatedAnnealingTimes(numSimulatedAnnealingFields);
+ std::vector<real> allSimulatedAnnealingTemperatures(numSimulatedAnnealingFields);
+ convertReals(wi, simulatedAnnealingTimes, "anneal-time", allSimulatedAnnealingTimes.data());
+ convertReals(wi, simulatedAnnealingTemperatures, "anneal-temp", allSimulatedAnnealingTemperatures.data());
for (i = 0, k = 0; i < nr; i++)
{
for (j = 0; j < ir->opts.anneal_npoints[i]; j++)
{
+ ir->opts.anneal_time[i][j] = allSimulatedAnnealingTimes[k];
+ ir->opts.anneal_temp[i][j] = allSimulatedAnnealingTemperatures[k];
if (j == 0)
{
if (ir->opts.anneal_time[i][0] > (ir->init_t+GMX_REAL_EPS))
}
}
/* Print out some summary information, to make sure we got it right */
- for (i = 0, k = 0; i < nr; i++)
+ for (i = 0; i < nr; i++)
{
if (ir->opts.annealing[i] != eannNO)
{
/*
* This file is part of the GROMACS molecular simulation package.
*
- * Copyright (c) 2015, by the GROMACS development team, led by
+ * Copyright (c) 2015,2019, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
runTest();
}
+/* Test for making sure grompp can handle simulated annealing data */
+TEST_F(GromppTest, SimulatedAnnealingWorks)
+{
+ runner_.useStringAsMdpFile("annealing = periodic\n"
+ "annealing-npoints = 4\n"
+ "annealing-time = 0 2 4 6\n"
+ "annealing-temp = 298 320 320 298\n"
+ );
+ runTest();
+}
+
+TEST_F(GromppTest, SimulatedAnnealingWorksWithMultipleGroups)
+{
+ runner_.useStringAsMdpFile("tc-grps = Methanol SOL\n"
+ "tau-t = 0.1 0.1\n"
+ "ref_t = 298 298\n"
+ "annealing = single periodic\n"
+ "annealing-npoints = 3 4\n"
+ "annealing-time = 0 3 6 0 2 4 6\n"
+ "annealing-temp = 298 280 270 298 320 320 298\n"
+ );
+ runTest();
+}
+
+
} // namespace