1 /* 2 * This file is part of the GROMACS molecular simulation package. 3 * 4 * Copyright (c) 2018,2019,2020, by the GROMACS development team, led by 5 * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, 6 * and including many others, as listed in the AUTHORS file in the 7 * top-level source directory and at http://www.gromacs.org. 8 * 9 * GROMACS is free software; you can redistribute it and/or 10 * modify it under the terms of the GNU Lesser General Public License 11 * as published by the Free Software Foundation; either version 2.1 12 * of the License, or (at your option) any later version. 13 * 14 * GROMACS is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 * Lesser General Public License for more details. 18 * 19 * You should have received a copy of the GNU Lesser General Public 20 * License along with GROMACS; if not, see 21 * http://www.gnu.org/licenses, or write to the Free Software Foundation, 22 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 23 * 24 * If you want to redistribute modifications to GROMACS, please 25 * consider that scientific software is very special. Version 26 * control is crucial - bugs must be traceable. We will be happy to 27 * consider code for inclusion in the official distribution, but 28 * derived work must not be called official GROMACS. Details are found 29 * in the README & COPYING files - if they are missing, get the 30 * official version at http://www.gromacs.org. 31 * 32 * To help us fund GROMACS development, we humbly ask that you cite 33 * the research papers on the package. Check out http://www.gromacs.org. 34 */ 35 /*! \internal \file 36 * \brief SETTLE tests header. 37 * 38 * Declares the class that accumulates SETTLE test data. 39 * 40 * \author Artem Zhmurov <zhmurov@gmail.com> 41 * \ingroup module_mdlib 42 */ 43 #ifndef GMX_MDLIB_TESTS_SETTLETESTDATA_H 44 #define GMX_MDLIB_TESTS_SETTLETESTDATA_H 45 46 #include "gromacs/math/paddedvector.h" 47 #include "gromacs/math/vectypes.h" 48 #include "gromacs/pbcutil/pbc.h" 49 #include "gromacs/topology/idef.h" 50 #include "gromacs/topology/topology.h" 51 52 namespace gmx 53 { 54 namespace test 55 { 56 57 /* \brief SETTLE test data object. 58 * 59 * Initializes and stores data necessary to run SETTLE constraints, including 60 * atom coordinates and velocities, virial, system topology and some parameters. 61 */ 62 class SettleTestData 63 { 64 public: 65 //! Number of settles 66 int numSettles_; 67 //! Initial (undisturbed) positions 68 PaddedVector<gmx::RVec> x_; 69 //! Updated water atom positions to constrain 70 PaddedVector<gmx::RVec> xPrime_; 71 //! Water atom velocities to constrain 72 PaddedVector<gmx::RVec> v_; 73 //! SETTLE virial 74 tensor virial_ = { { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } }; 75 76 //! Global topology 77 gmx_mtop_t mtop_; 78 //! Number of atoms 79 int numAtoms_ = 0; 80 //! Atom masses 81 std::vector<real> masses_; 82 //! Reciprocal masses 83 std::vector<real> inverseMasses_; 84 //! Local topology 85 std::unique_ptr<InteractionDefinitions> idef_; 86 87 //! Inverse timestep 88 const real reciprocalTimeStep_ = 1.0 / 0.002; 89 //! Target distance between oxygen and hydrogens 90 const real dOH_ = 0.09572; 91 //! Target distance between hydrogens 92 const real dHH_ = 0.15139; 93 //! Mass of oxygen atom 94 const real oxygenMass_ = 15.9994; 95 //! Mass of hydrogen atom 96 const real hydrogenMass_ = 1.008; 97 98 //! Stride for array with atom indexes 99 const int atomsPerSettle_ = NRAL(F_SETTLE); 100 101 /*! \brief Construct the object and initialize the data structures. 102 * 103 * \param[in] numSettles Number of SETTLE constraints in the system. 104 * 105 */ 106 SettleTestData(int numSettles); 107 108 ~SettleTestData(); 109 }; 110 111 } // namespace test 112 } // namespace gmx 113 114 #endif // GMX_MDLIB_TESTS_SETTLETESTDATA_H 115