1 /* 2 * This file is part of the GROMACS molecular simulation package. 3 * 4 * Copyright (c) 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 36 /*! \libinternal \file 37 * \brief Defines a struct useful for transferring the PME output 38 * values 39 * 40 * \author Mark Abraham <mark.j.abraham@gmail.com> 41 * \ingroup module_ewald 42 */ 43 44 #ifndef GMX_EWALD_PME_OUTPUT_H 45 #define GMX_EWALD_PME_OUTPUT_H 46 47 #include "gromacs/math/vectypes.h" 48 #include "gromacs/utility/arrayref.h" 49 50 // TODO There's little value in computing the Coulomb and LJ virial 51 // separately, so we should simplify that. 52 // TODO The matrices might be best as a view, but not currently 53 // possible. Use mdspan? 54 struct PmeOutput 55 { 56 //!< Host staging area for PME forces 57 gmx::ArrayRef<gmx::RVec> forces_; 58 //!< True if forces have been staged other false (when forces are reduced on the GPU). 59 bool haveForceOutput_ = false; 60 //!< Host staging area for PME coulomb energy 61 real coulombEnergy_ = 0; 62 //!< Host staging area for PME coulomb virial contributions 63 matrix coulombVirial_ = { { 0 } }; 64 //!< Host staging area for PME coulomb dVdl. 65 real coulombDvdl_ = 0; 66 //!< Host staging area for PME LJ energy 67 real lennardJonesEnergy_ = 0; 68 //!< Host staging area for PME LJ virial contributions 69 matrix lennardJonesVirial_ = { { 0 } }; 70 //!< Host staging area for PME LJ dVdl. (Not used) 71 real lennardJonesDvdl_ = 0; 72 }; 73 74 #endif 75