When the whole system was frozen, grompp would attempt to write
a vector out of range.
Fixes #3683
Miscellaneous
^^^^^^^^^^^^^
Miscellaneous
^^^^^^^^^^^^^
+Fix crash of grompp when the whole system is frozen
+"""""""""""""""""""""""""""""""""""""""""""""""""""
+
+When the whole system would be frozen, grompp would crash with
+a segmentation fault.
+
+:issue:`3683`
+
Fixes the unexpected change in molecule indexing in output after simulation
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Fixes the unexpected change in molecule indexing in output after simulation
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if (numFrozenDims == DIM)
{
/* Do not remove COM motion for this fully frozen atom */
if (numFrozenDims == DIM)
{
/* Do not remove COM motion for this fully frozen atom */
- if (groups->groups[SimulationAtomGroupType::MassCenterVelocityRemoval].empty())
+ if (groups->groupNumbers[SimulationAtomGroupType::MassCenterVelocityRemoval].empty())
- groups->groups[SimulationAtomGroupType::MassCenterVelocityRemoval].resize(numAtoms, 0);
+ groups->groupNumbers[SimulationAtomGroupType::MassCenterVelocityRemoval].resize(
+ numAtoms, 0);
- groups->groups[SimulationAtomGroupType::MassCenterVelocityRemoval][a] = vcmRestGroup;
+ groups->groupNumbers[SimulationAtomGroupType::MassCenterVelocityRemoval][a] = vcmRestGroup;
numFullyFrozenVcmAtoms++;
}
else if (numFrozenDims > 0)
numFullyFrozenVcmAtoms++;
}
else if (numFrozenDims > 0)
*
* Copyright (c) 1991-2000, University of Groningen, The Netherlands.
* Copyright (c) 2001-2004, The GROMACS development team.
*
* Copyright (c) 1991-2000, University of Groningen, The Netherlands.
* Copyright (c) 2001-2004, The GROMACS development team.
- * Copyright (c) 2011,2014,2015,2016,2018,2019, by the GROMACS development team, led by
+ * Copyright (c) 2011,2014,2015,2016,2018,2019,2020, 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.
* 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.
*/
struct SimulationGroups
{
*/
struct SimulationGroups
{
- //! Groups of particles
+ // TODO: collect groups and groupNumbers in a struct for each group type
+ //! Group numbers for each of the different SimulationAtomGroupType groups.
gmx::EnumerationArray<SimulationAtomGroupType, AtomGroupIndices> groups;
//! Names of groups, stored as pointer to the entries in the symbol table.
std::vector<char**> groupNames;
gmx::EnumerationArray<SimulationAtomGroupType, AtomGroupIndices> groups;
//! Names of groups, stored as pointer to the entries in the symbol table.
std::vector<char**> groupNames;
- //! Group numbers for the different SimulationAtomGroupType groups.
+ //! Indices into groups for each atom for each of the different SimulationAtomGroupType groups.
gmx::EnumerationArray<SimulationAtomGroupType, std::vector<unsigned char>> groupNumbers;
/*! \brief
gmx::EnumerationArray<SimulationAtomGroupType, std::vector<unsigned char>> groupNumbers;
/*! \brief
- * Number of group numbers for a single SimulationGroup.
+ * Number of atoms for which group numbers are stored for a single SimulationGroup.
- * \param[in] group Integer value for the group type.
+ * \param[in] group The group type.
*/
int numberOfGroupNumbers(SimulationAtomGroupType group) const
{
*/
int numberOfGroupNumbers(SimulationAtomGroupType group) const
{