From: Sebastian Kehl Date: Thu, 1 Apr 2021 14:38:08 +0000 (+0000) Subject: Add unit test for 1-4 interactions. X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=37d7e7d31d04fb716885abb082124804768d3daf;p=alexxy%2Fgromacs.git Add unit test for 1-4 interactions. --- diff --git a/src/gromacs/listed_forces/tests/CMakeLists.txt b/src/gromacs/listed_forces/tests/CMakeLists.txt index ffe786b4b2..850e11a28d 100644 --- a/src/gromacs/listed_forces/tests/CMakeLists.txt +++ b/src/gromacs/listed_forces/tests/CMakeLists.txt @@ -1,7 +1,7 @@ # # This file is part of the GROMACS molecular simulation package. # -# Copyright (c) 2016,2019,2020, by the GROMACS development team, led by +# Copyright (c) 2016,2019,2020,2021, 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. @@ -35,5 +35,6 @@ gmx_add_unit_test(ListedForcesTest listed_forces-test CPP_SOURCE_FILES bonded.cpp + pairs.cpp ) diff --git a/src/gromacs/listed_forces/tests/pairs.cpp b/src/gromacs/listed_forces/tests/pairs.cpp new file mode 100644 index 0000000000..d9087d9400 --- /dev/null +++ b/src/gromacs/listed_forces/tests/pairs.cpp @@ -0,0 +1,464 @@ +/* + * This file is part of the GROMACS molecular simulation package. + * + * Copyright (c) 2021, 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. + * + * GROMACS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * GROMACS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with GROMACS; if not, see + * http://www.gnu.org/licenses, or write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * If you want to redistribute modifications to GROMACS, please + * consider that scientific software is very special. Version + * control is crucial - bugs must be traceable. We will be happy to + * consider code for inclusion in the official distribution, but + * derived work must not be called official GROMACS. Details are found + * in the README & COPYING files - if they are missing, get the + * official version at http://www.gromacs.org. + * + * To help us fund GROMACS development, we humbly ask that you cite + * the research papers on the package. Check out http://www.gromacs.org. + */ +/*! \internal \file + * \brief Implements test of 1-4 interactions + * + * This test is copied from the bonded interactions test and slightly + * modified since 'do_pairs' takes a different set of arguments than + * 'calculateSimpleBond'. To keep the test setup uncluttered this test is + * therefore not merged into the bonded test but implemented standalone. + * + * The test setup consists of 2 atom pairs that are tested in an fep setting + * (vanishing charge and lennard-jones parameters of one atom) and without + * fep. Placement of the atoms in the box is such that shift-forces and pbc + * paths in do_pairs are covered. + * + * \author Sebastian Kehl + * \ingroup module_listed_forces + */ +#include "gmxpre.h" + +#include "gromacs/listed_forces/bonded.h" + +#include + +#include +#include + +#include + +#include "gromacs/listed_forces/listed_forces.h" +#include "gromacs/listed_forces/pairs.h" +#include "gromacs/math/paddedvector.h" +#include "gromacs/math/units.h" +#include "gromacs/math/vec.h" +#include "gromacs/math/vectypes.h" +#include "gromacs/mdtypes/mdatom.h" +#include "gromacs/mdtypes/simulation_workload.h" +#include "gromacs/mdtypes/enerdata.h" +#include "gromacs/mdtypes/forcerec.h" +#include "gromacs/mdtypes/inputrec.h" +#include "gromacs/mdtypes/interaction_const.h" +#include "gromacs/mdtypes/nblist.h" +#include "gromacs/tables/forcetable.h" +#include "gromacs/pbcutil/ishift.h" +#include "gromacs/pbcutil/pbc.h" +#include "gromacs/topology/idef.h" +#include "gromacs/utility/enumerationhelpers.h" +#include "gromacs/utility/strconvert.h" +#include "gromacs/utility/stringstream.h" +#include "gromacs/utility/textwriter.h" +#include "gromacs/utility/fatalerror.h" + +#include "testutils/refdata.h" +#include "testutils/testasserts.h" + +namespace gmx +{ +namespace test +{ +namespace +{ + +//! Number of atoms used in these tests. +constexpr int c_numAtoms = 3; + +/*! \brief Output from pairs kernels + * + */ +struct OutputQuantities +{ + OutputQuantities(int energyGroup) : + energy(energyGroup), + dvdLambda(static_cast(FreeEnergyPerturbationCouplingType::Count), 0.0) + { + } + + //! Energy of this interaction + gmx_grppairener_t energy; + //! Derivative with respect to lambda + std::vector dvdLambda; + //! Shift vectors + rvec fShift[N_IVEC] = { { 0 } }; + //! Forces + alignas(GMX_REAL_MAX_SIMD_WIDTH * sizeof(real)) rvec4 f[c_numAtoms] = { { 0 } }; +}; + +/*! \brief Utility to check the output from pairs tests + * + * \param[in] checker Reference checker + * \param[in] output The output from the test to check + * \param[in] bondedKernelFlavor Flavor for determining what output to check + * \param[in] functionType type of the interaction + */ +void checkOutput(TestReferenceChecker* checker, + const OutputQuantities& output, + const BondedKernelFlavor bondedKernelFlavor, + const int functionType) +{ + if (computeEnergy(bondedKernelFlavor)) + { + switch (functionType) + { + case F_LJ14: + case F_LJC14_Q: + checker->checkReal(output.energy.energyGroupPairTerms[NonBondedEnergyTerms::Coulomb14][0], + "Epot Coulomb14"); + checker->checkReal(output.energy.energyGroupPairTerms[NonBondedEnergyTerms::LJ14][0], + "Epot LJ14"); + break; + case F_LJC_PAIRS_NB: + checker->checkReal(output.energy.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR][0], + "Epot Coulomb14"); + checker->checkReal(output.energy.energyGroupPairTerms[NonBondedEnergyTerms::LJSR][0], + "Epot LJ14"); + break; + default: gmx_fatal(FARGS, "Unknown function type %d in do_nonbonded14", functionType); + } + checker->checkReal(output.dvdLambda[static_cast(FreeEnergyPerturbationCouplingType::Coul)], + "dVdlCoul "); + checker->checkReal(output.dvdLambda[static_cast(FreeEnergyPerturbationCouplingType::Vdw)], + "dVdlVdw "); + } + checker->checkSequence(std::begin(output.f), std::end(output.f), "Forces"); +} + +/* \brief Utility class to setup forcerec and interaction parameters + * + * Data is only initialized as necessary for the 1-4 interactions to work! + */ +class ForcerecHelper +{ +public: + ForcerecHelper() + { + fepVals_.sc_alpha = 0.3; + fepVals_.sc_power = 1; + fepVals_.sc_r_power = 6.0; + fepVals_.sc_sigma = 0.3; + fepVals_.sc_sigma_min = 0.3; + fepVals_.bScCoul = true; + + fr_.ic = std::make_unique(); + // set data in ic + fr_.ic->softCoreParameters = std::make_unique(fepVals_); + + // set data in fr + real tableRange = 2.9; + fr_.pairsTable = make_tables(nullptr, fr_.ic.get(), nullptr, tableRange, GMX_MAKETABLES_14ONLY); + fr_.efep = haveFep_; + fr_.fudgeQQ = 0.5; + fr_.use_simd_kernels = useSimd_; + fr_.bMolPBC = haveMolPBC_; + } + + t_forcerec* get() { return &fr_; } + +private: + FreeEnergyPerturbationType haveFep_ = FreeEnergyPerturbationType::No; + bool useSimd_ = false; + bool haveMolPBC_ = false; + + t_lambda fepVals_; + t_forcerec fr_; +}; + +ForcerecHelper frHelper; + + +/*! \brief Input structure for listed forces tests + */ +struct ListInput +{ +public: + //! Function type + int fType = -1; + //! do fep + bool fep = false; + //! Tolerance for float evaluation + float floatToler = 1e-6; + //! Tolerance for double evaluation + double doubleToler = 1e-8; + //! Interaction parameters + t_iparams iparams = { { 0 } }; + + //! Constructor + ListInput() {} + + /*! \brief Constructor with tolerance + * + * \param[in] ftol Single precision tolerance + * \param[in] dtol Double precision tolerance + */ + ListInput(float ftol, double dtol) + { + floatToler = ftol; + doubleToler = dtol; + } + + /*! \brief Set parameters for lj14 interaction + * + * Fep is used if either c6A != c6B or c12A != c12B. + * + * \param[in] c6A lj-c6 of state A + * \param[in] c12A lj-c12 of state A + * \param[in] c6B lj-c6 of state B + * \param[in] c12B lj-c12 of state B + */ + ListInput setLj14Interaction(real c6A, real c12A, real c6B, real c12B) + { + fType = F_LJ14; + fep = (c6A != c6B || c12A != c12B); + iparams.lj14.c6A = c6A; + iparams.lj14.c12A = c12A; + iparams.lj14.c6B = c6B; + iparams.lj14.c12B = c12B; + + return *this; + } + + /*! \brief Set parameters for ljc14 interaction + * + * \param[in] qi charge i + * \param[in] qj charge j + * \param[in] c6 lj-c6 + * \param[in] c12 lj-c12 + * \param[in] fudgeQ fudge factor + */ + ListInput setLjc14Interaction(real qi, real qj, real c6, real c12, real fudgeQ) + { + fType = F_LJC14_Q; + iparams.ljc14.qi = qi; + iparams.ljc14.qj = qj; + iparams.ljc14.c6 = c6; + iparams.ljc14.c12 = c12; + iparams.ljc14.fqq = fudgeQ; + + return *this; + } + + /*! \brief Set parameters for ljcnb interaction + * + * \param[in] qi charge i + * \param[in] qj charge j + * \param[in] c6 lj-c6 + * \param[in] c12 lj-c12 + */ + ListInput setLjcnbInteraction(real qi, real qj, real c6, real c12) + { + fType = F_LJC_PAIRS_NB; + iparams.ljcnb.qi = qi; + iparams.ljcnb.qj = qj; + iparams.ljcnb.c6 = c6; + iparams.ljcnb.c12 = c12; + + return *this; + } +}; + +class ListedForcesPairsTest : + public ::testing::TestWithParam, PbcType>> +{ +protected: + matrix box_; + t_pbc pbc_; + PaddedVector x_; + PbcType pbcType_; + ListInput input_; + TestReferenceData refData_; + TestReferenceChecker checker_; + + ListedForcesPairsTest() : checker_(refData_.rootChecker()) + { + input_ = std::get<0>(GetParam()); + x_ = std::get<1>(GetParam()); + pbcType_ = std::get<2>(GetParam()); + clear_mat(box_); + box_[0][0] = box_[1][1] = box_[2][2] = 1.0; + set_pbc(&pbc_, pbcType_, box_); + + FloatingPointTolerance tolerance = relativeToleranceAsPrecisionDependentFloatingPoint( + 1.0, input_.floatToler, input_.doubleToler); + + checker_.setDefaultTolerance(tolerance); + } + + void testOneIfunc(TestReferenceChecker* checker, const real lambda) + { + SCOPED_TRACE(std::string("Testing PBC type: ") + c_pbcTypeNames[pbcType_]); + + // 'definition of pairs' is a concatenation of #npairs (here 2) + // 'nAtomsPerPair+1'-tuples (fType a_0 a_i ... a_nAtomsPerPair) + std::vector iatoms = { 0, 1, 2, 0, 0, 2 }; + + std::vector ddgatindex = { 0, 1, 2 }; + std::vector chargeA = { 1.0, -0.5, -0.5 }; + std::vector chargeB = { 0.0, 0.0, 0.0 }; + std::vector egrp = { 0, 0, 0 }; + t_mdatoms mdatoms = { 0 }; + + mdatoms.chargeA = chargeA.data(); + mdatoms.chargeB = chargeB.data(); + mdatoms.cENER = egrp.data(); + // nPerturbed is not decisive for fep to be used; it is overruled by + // other conditions in do_pairs_general; just here to not segfault + // upon query + mdatoms.nPerturbed = 0; + + t_forcerec* fr = frHelper.get(); + fr->efep = input_.fep ? FreeEnergyPerturbationType::Yes : FreeEnergyPerturbationType::No; + if (pbcType_ != PbcType::No) + { + fr->bMolPBC = true; + } + + std::vector flavors = { BondedKernelFlavor::ForcesAndVirialAndEnergy }; + + if (!input_.fep || lambda == 0) + { + fr->use_simd_kernels = true; + flavors.push_back(BondedKernelFlavor::ForcesSimdWhenAvailable); + } + + for (const auto flavor : flavors) + { + SCOPED_TRACE("Testing bonded kernel flavor: " + c_bondedKernelFlavorStrings[flavor]); + + StepWorkload stepWork; + stepWork.computeVirial = computeVirial(flavor); + stepWork.computeEnergy = computeEnergy(flavor); + + bool havePerturbedInteractions = input_.fep; + if (flavor == BondedKernelFlavor::ForcesSimdWhenAvailable) + { + havePerturbedInteractions = false; + } + + int numEnergyTerms = static_cast(NonBondedEnergyTerms::Count); + int numFepCouplingTerms = static_cast(FreeEnergyPerturbationCouplingType::Count); + OutputQuantities output(numEnergyTerms); + std::vector lambdas(numFepCouplingTerms, lambda); + + do_pairs(input_.fType, + iatoms.size(), + iatoms.data(), + &input_.iparams, + as_rvec_array(x_.data()), + output.f, + output.fShift, + &pbc_, + lambdas.data(), + output.dvdLambda.data(), + &mdatoms, + fr, + havePerturbedInteractions, + stepWork, + &output.energy, + ddgatindex.data()); + + checkOutput(checker, output, flavor, input_.fType); + auto shiftForcesChecker = checker->checkCompound("Shift-Forces", "Shift-forces"); + + if (computeVirial(flavor)) + { + shiftForcesChecker.checkVector(output.fShift[CENTRAL], "Central"); + } + else + { + // Permit omitting to compare shift forces with + // reference data when that is useless. + shiftForcesChecker.disableUnusedEntriesCheck(); + } + } + } + + void testIfunc() + { + TestReferenceChecker thisChecker = + checker_.checkCompound("FunctionType", interaction_function[input_.fType].name) + .checkCompound("FEP", (input_.fep ? "Yes" : "No")); + + if (input_.fep) + { + const int numLambdas = 3; + for (int i = 0; i < numLambdas; ++i) + { + const real lambda = i / (numLambdas - 1.0); + auto lambdaChecker = thisChecker.checkCompound("Lambda", toString(lambda)); + testOneIfunc(&lambdaChecker, lambda); + } + } + else + { + testOneIfunc(&thisChecker, 0.0); + } + } +}; + +TEST_P(ListedForcesPairsTest, Ifunc) +{ + testIfunc(); +} + +//! Function types for testing 1-4 interaction. Add new terms at the end. +std::vector c_14Interaction = { + { ListInput(1e-5, 1e-7).setLj14Interaction(0.001458, 1.0062882e-6, 0.0, 0.0) }, + { ListInput(1e-5, 1e-7).setLj14Interaction(0.001458, 1.0062882e-6, 0.001458, 1.0062882e-6) }, + { ListInput(1e-5, 1e-7).setLjc14Interaction(1.0, -1.0, 0.001458, 1.0062882e-6, 0.5) }, + { ListInput(1e-5, 1e-7).setLjcnbInteraction(1.0, -1.0, 0.001458, 1.0062882e-6) } +}; + +//! PBC values for testing +std::vector c_pbcForTests = { PbcType::No, PbcType::XY, PbcType::Xyz }; + +/*! \brief Coordinates for testing 1-4 interaction + * + * Define coordinates for 3 atoms here, which will be used in 2 interactions. + */ +std::vector> c_coordinatesFor14Interaction = { + { { 0.0, 0.0, 0.0 }, { 1.0, 1.0, 1.0 }, { 1.1, 1.2, 1.3 } } +}; + +INSTANTIATE_TEST_CASE_P(14Interaction, + ListedForcesPairsTest, + ::testing::Combine(::testing::ValuesIn(c_14Interaction), + ::testing::ValuesIn(c_coordinatesFor14Interaction), + ::testing::ValuesIn(c_pbcForTests))); + +} // namespace + +} // namespace test + +} // namespace gmx diff --git a/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_0.xml b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_0.xml new file mode 100644 index 0000000000..9e4ad67034 --- /dev/null +++ b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_0.xml @@ -0,0 +1,101 @@ + + + + + + + 0.21407271220614837 + -0.39771349695163671 + -0.21851037383566912 + 0.41875860652489377 + + 3 + + 0.030442842705220918 + 0.033210373860240998 + 0.035977905015261082 + + + 0.89301764058624677 + 1.7860352811724916 + 2.6790529217587382 + + + -0.92346048329146768 + -1.8192456550327325 + -2.7150308267739991 + + + + + 0 + 0 + 0 + + + + + 0.10595201107466379 + -0.19369895958475428 + -0.21402396676422034 + 0.39750692921973912 + + 3 + + 0.015221397582715825 + 0.016605160999326352 + 0.017988924415936882 + + + 0.42958890996342458 + 0.85917781992684816 + 1.2887667298902727 + + + -0.44481030754614043 + -0.87578298092617457 + -1.3067556543062095 + + + + + 0 + 0 + 0 + + + + + 0 + 0 + -0.20983019696952224 + 0.37749364747323017 + + 3 + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + + + 0 + 0 + 0 + + + + + + diff --git a/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_1.xml b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_1.xml new file mode 100644 index 0000000000..1af29241e3 --- /dev/null +++ b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_1.xml @@ -0,0 +1,101 @@ + + + + + + + 0.1445520414957524 + -0.3979723893321509 + -0.14898844529427274 + 0.41901751034443802 + + 3 + + 0.010987624164811038 + 0.021975248329622051 + 0.14283911414254338 + + + 0.89301764058624677 + 1.7860352811724916 + 2.6790529217587382 + + + -0.9040052647510578 + -1.8080105295021136 + -2.8218920359012816 + + + + + -0.010987624164811038 + -0.021975248329622051 + -0.14283911414254338 + + + + + 0.071191990173256878 + -0.19382840291531345 + -0.14450329606174245 + 0.39776582160013413 + + 3 + + 0.0054936782176173184 + 0.010987356435234625 + 0.07141781682902508 + + + 0.42958890996342458 + 0.85917781992684816 + 1.2887667298902727 + + + -0.4350825881810419 + -0.87016517636208279 + -1.3601845467192979 + + + + + -0.0054936782176173184 + -0.010987356435234625 + -0.07141781682902508 + + + + + 0 + 0 + -0.14031078405845462 + 0.37775252841519097 + + 3 + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + + + 0 + 0 + 0 + + + + + + diff --git a/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_10.xml b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_10.xml new file mode 100644 index 0000000000..1f21e7d863 --- /dev/null +++ b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_10.xml @@ -0,0 +1,37 @@ + + + + + + -3.4307104627027285 + -0.3979723893321509 + 0 + 0 + + 3 + + 0.043664263974573722 + 0.087328527949147347 + 0.56763543166945785 + + + 3.0406526210041607 + 6.0813052420083142 + 9.1219578630124758 + + + -3.0843168849787346 + -6.1686337699574612 + -9.6895932946819343 + + + + + -0.043664263974573722 + -0.087328527949147347 + -0.56763543166945785 + + + + + diff --git a/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_11.xml b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_11.xml new file mode 100644 index 0000000000..3a85c07157 --- /dev/null +++ b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_11.xml @@ -0,0 +1,37 @@ + + + + + + -5.3452248382476508 + -0.79539132295421022 + 0 + 0 + + 3 + + 3.0406526210041607 + 6.0813052420083142 + 9.1219578630124758 + + + 3.0406526210041607 + 6.0813052420083142 + 9.1219578630124758 + + + -6.0813052420083213 + -12.162610484016628 + -18.243915726024952 + + + + + -3.0406526210041607 + -6.0813052420083142 + -9.1219578630124758 + + + + + diff --git a/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_2.xml b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_2.xml new file mode 100644 index 0000000000..c55987fc81 --- /dev/null +++ b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_2.xml @@ -0,0 +1,101 @@ + + + + + + + -0.33407655239047818 + -0.79539132295421022 + 0.3385142675285866 + 0.83748154200529312 + + 3 + + 1.6088959673922179 + 3.2177919347844322 + 4.8266879021766504 + + + 0.89301764058624677 + 1.7860352811724916 + 2.6790529217587382 + + + -2.5019136079784645 + -5.0038272159569237 + -7.5057408239353887 + + + + + -1.6088959673922179 + -3.2177919347844322 + -4.8266879021766504 + + + + + -0.16595391778969223 + -0.38738008371883476 + 0.33402780694852929 + 0.79497818749041516 + + 3 + + 0.77157606087074149 + 1.5431521217414814 + 2.3147281826122228 + + + 0.42958890996342458 + 0.85917781992684816 + 1.2887667298902727 + + + -1.2011649708341661 + -2.4023299416683295 + -3.6034949125024953 + + + + + -0.77157606087074149 + -1.5431521217414814 + -2.3147281826122228 + + + + + 0 + 0 + 0.32983398364534788 + 0.75495162409282812 + + 3 + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + + + 0 + 0 + 0 + + + + + + diff --git a/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_3.xml b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_3.xml new file mode 100644 index 0000000000..0ee6004d3f --- /dev/null +++ b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_3.xml @@ -0,0 +1,37 @@ + + + + + + 0.2140727122061484 + -0.39771349695163671 + 0 + 0 + + 3 + + 0.030442842705220907 + 0.033210373860240984 + 0.035977905015261075 + + + 0.89301764058624677 + 1.7860352811724916 + 2.6790529217587382 + + + -0.92346048329146768 + -1.8192456550327325 + -2.7150308267739991 + + + + + 0 + 0 + 0 + + + + + diff --git a/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_4.xml b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_4.xml new file mode 100644 index 0000000000..c540567804 --- /dev/null +++ b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_4.xml @@ -0,0 +1,37 @@ + + + + + + 0.14455204149575238 + -0.3979723893321509 + 0 + 0 + + 3 + + 0.010987624164811043 + 0.021975248329622062 + 0.14283911414254344 + + + 0.89301764058624677 + 1.7860352811724916 + 2.6790529217587382 + + + -0.9040052647510578 + -1.8080105295021136 + -2.8218920359012816 + + + + + -0.010987624164811043 + -0.021975248329622062 + -0.14283911414254344 + + + + + diff --git a/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_5.xml b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_5.xml new file mode 100644 index 0000000000..3f65bf30bd --- /dev/null +++ b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_5.xml @@ -0,0 +1,37 @@ + + + + + + -0.33407655239047818 + -0.79539132295421022 + 0 + 0 + + 3 + + 1.6088959673922179 + 3.2177919347844322 + 4.8266879021766504 + + + 0.89301764058624677 + 1.7860352811724916 + 2.6790529217587382 + + + -2.5019136079784645 + -5.0038272159569237 + -7.5057408239353887 + + + + + -1.6088959673922179 + -3.2177919347844322 + -4.8266879021766504 + + + + + diff --git a/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_6.xml b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_6.xml new file mode 100644 index 0000000000..5104d0037e --- /dev/null +++ b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_6.xml @@ -0,0 +1,37 @@ + + + + + + -1.5763138899305722 + -0.39771349695163671 + 0 + 0 + + 3 + + 0.060858562567575235 + 0.066391159164627525 + 0.071923755761679822 + + + 2.0861481852628656 + 4.1722963705257259 + 6.2584445557885919 + + + -2.1470067478304409 + -4.2386875296903535 + -6.3303683115502718 + + + + + 0 + 0 + 0 + + + + + diff --git a/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_7.xml b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_7.xml new file mode 100644 index 0000000000..4efb5476f7 --- /dev/null +++ b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_7.xml @@ -0,0 +1,37 @@ + + + + + + -1.7153552313513643 + -0.3979723893321509 + 0 + 0 + + 3 + + 0.021879837434731937 + 0.043759674869463826 + 0.28443788665151498 + + + 2.0861481852628656 + 4.1722963705257259 + 6.2584445557885919 + + + -2.1080280226975976 + -4.2160560453951899 + -6.5428824424401073 + + + + + -0.021879837434731937 + -0.043759674869463826 + -0.28443788665151498 + + + + + diff --git a/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_8.xml b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_8.xml new file mode 100644 index 0000000000..9c72eaaa20 --- /dev/null +++ b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_8.xml @@ -0,0 +1,37 @@ + + + + + + -2.6726124191238254 + -0.79539132295421022 + 0 + 0 + + 3 + + 2.0861481852628656 + 4.1722963705257259 + 6.2584445557885919 + + + 2.0861481852628656 + 4.1722963705257259 + 6.2584445557885919 + + + -4.1722963705257312 + -8.3445927410514518 + -12.516889111577184 + + + + + -2.0861481852628656 + -4.1722963705257259 + -6.2584445557885919 + + + + + diff --git a/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_9.xml b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_9.xml new file mode 100644 index 0000000000..23f2d948a6 --- /dev/null +++ b/src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_9.xml @@ -0,0 +1,37 @@ + + + + + + -3.1526277798611444 + -0.39771349695163671 + 0 + 0 + + 3 + + 0.1216900022922839 + 0.13275272977340061 + 0.14381545725451733 + + + 3.0406526210041607 + 6.0813052420083142 + 9.1219578630124758 + + + -3.1623426232964444 + -6.214057971781715 + -9.2657733202669927 + + + + + 0 + 0 + 0 + + + + +