:issue:`3204`
+Fix issues with AWH with pull-geometry 'direction' to be periodic
+"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+Removed fatal error with AWH with periodic pull-geometry 'direction'
+when the distance was within 2% of half the box size.
+Changed an assertion failure when the AWH interval was larger than
+the box size to a fatal error.
+Clarified the documentation for pull geometry 'direction-periodic'.
+
+:issue:`2946`
+
+Remove assertion failure with AWH when not using the initial stage
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+:issue:`3217`
+
Fixes for ``gmx`` tools
^^^^^^^^^^^^^^^^^^^^^^^
and expect whitespace separation will continue to work in all cases.
:issue:`3176`
+
+Fix duplicate PDB CONECT record output
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+PDB "CONECT" record output was duplicated in some instances. Since |Gromacs| does
+not use these anywhere, analysis was not affected. The behavior is now fixed.
+
+:issue:`3206`
+
.. mdp-value:: direction-periodic
- As :mdp-value:`pull-coord1-geometry=direction`, but allows the distance to be larger
- than half the box size. With this geometry the box should not be
+ As :mdp-value:`pull-coord1-geometry=direction`, but does not apply
+ periodic box vector corrections to keep the distance within half
+ the box length. This is (only) useful for pushing groups apart
+ by more than half the box length by continuously changing the reference
+ location using a pull rate. With this geometry the box should not be
dynamic (*e.g.* no pressure scaling) in the pull dimensions and
- the pull force is not added to virial.
+ the pull force is not added to the virial.
.. mdp-value:: direction-relative
* \returns true at steps where checks should be performed.
* \note Only returns true at free energy update steps.
*/
- bool isCheckCoveringStep(int64_t step) const { return step % numStepsCheckCovering_ == 0; }
+ bool isCheckCoveringStep(int64_t step) const
+ {
+ return step > 0 && (step % numStepsCheckCovering_ == 0);
+ }
/*! \brief
* Returns if to perform checks for anomalies in the histogram.
const real innerProduct = iprod(pullCoordParams.vec, pbc.box[dim]);
if (innerProduct >= (1 - margin) * boxLength && innerProduct <= (1 + margin) * boxLength)
{
- GMX_RELEASE_ASSERT(intervalLength < (1 + margin) * boxLength,
- "We have checked before that interval <= period");
+ if (intervalLength > (1 + margin) * boxLength)
+ {
+ gmx_fatal(FARGS,
+ "The AWH interval (%f nm) for a pull coordinate is larger than the "
+ "box size (%f nm)",
+ intervalLength, boxLength);
+ }
+
if (intervalLength > periodicFraction * boxLength)
{
period = boxLength;
n = sscanf(line, format.c_str(), &aj);
if (n == 1)
{
- srenew(con->conect, ++con->nconect);
- con->conect[con->nconect - 1].ai = ai - 1;
- con->conect[con->nconect - 1].aj = aj - 1;
+ gmx_conect_add(con, ai - 1, aj - 1); /* to prevent duplicated records */
}
} while (n == 1);
}
PullCoordSpatialData& spatialData = pcrd->spatialData;
double md2;
- if (pcrd->params.eGeom == epullgDIRPBC)
+ /* With AWH pulling we allow for periodic pulling with geometry=direction.
+ * TODO: Store a periodicity flag instead of checking for external pull provider.
+ */
+ if (pcrd->params.eGeom == epullgDIRPBC
+ || (pcrd->params.eGeom == epullgDIR && pcrd->params.eType == epullEXTERNAL))
{
md2 = -1;
}