Add unit test for 1-4 interactions.
authorSebastian Kehl <sebastian.kehl@mpcdf.mpg.de>
Thu, 1 Apr 2021 14:38:08 +0000 (14:38 +0000)
committerPaul Bauer <paul.bauer.q@gmail.com>
Thu, 1 Apr 2021 14:38:08 +0000 (14:38 +0000)
14 files changed:
src/gromacs/listed_forces/tests/CMakeLists.txt
src/gromacs/listed_forces/tests/pairs.cpp [new file with mode: 0644]
src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_0.xml [new file with mode: 0644]
src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_1.xml [new file with mode: 0644]
src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_10.xml [new file with mode: 0644]
src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_11.xml [new file with mode: 0644]
src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_2.xml [new file with mode: 0644]
src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_3.xml [new file with mode: 0644]
src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_4.xml [new file with mode: 0644]
src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_5.xml [new file with mode: 0644]
src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_6.xml [new file with mode: 0644]
src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_7.xml [new file with mode: 0644]
src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_8.xml [new file with mode: 0644]
src/gromacs/listed_forces/tests/refdata/14Interaction_ListedForcesPairsTest_Ifunc_9.xml [new file with mode: 0644]

index ffe786b4b24c6bdfca4012a73d6a37d1b30bec86..850e11a28df33006f2bedeb7741a8a4f17135ceb 100644 (file)
@@ -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 (file)
index 0000000..d9087d9
--- /dev/null
@@ -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 <sebastian.kehl@mpcdf.mpg.de>
+ * \ingroup module_listed_forces
+ */
+#include "gmxpre.h"
+
+#include "gromacs/listed_forces/bonded.h"
+
+#include <cmath>
+
+#include <memory>
+#include <unordered_map>
+
+#include <gtest/gtest.h>
+
+#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<int>(FreeEnergyPerturbationCouplingType::Count), 0.0)
+    {
+    }
+
+    //! Energy of this interaction
+    gmx_grppairener_t energy;
+    //! Derivative with respect to lambda
+    std::vector<real> 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<int>(FreeEnergyPerturbationCouplingType::Coul)],
+                           "dVdlCoul ");
+        checker->checkReal(output.dvdLambda[static_cast<int>(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<interaction_const_t>();
+        // set data in ic
+        fr_.ic->softCoreParameters = std::make_unique<interaction_const_t::SoftCoreParameters>(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<std::tuple<ListInput, PaddedVector<RVec>, PbcType>>
+{
+protected:
+    matrix               box_;
+    t_pbc                pbc_;
+    PaddedVector<RVec>   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<t_iatom> iatoms = { 0, 1, 2, 0, 0, 2 };
+
+        std::vector<int>            ddgatindex = { 0, 1, 2 };
+        std::vector<real>           chargeA    = { 1.0, -0.5, -0.5 };
+        std::vector<real>           chargeB    = { 0.0, 0.0, 0.0 };
+        std::vector<unsigned short> 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<BondedKernelFlavor> 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<int>(NonBondedEnergyTerms::Count);
+            int numFepCouplingTerms = static_cast<int>(FreeEnergyPerturbationCouplingType::Count);
+            OutputQuantities  output(numEnergyTerms);
+            std::vector<real> 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<ListInput> 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<PbcType> 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<PaddedVector<RVec>> 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 (file)
index 0000000..9e4ad67
--- /dev/null
@@ -0,0 +1,101 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <FunctionType Name="LJ14">
+    <FEP Name="Yes">
+      <Lambda Name="0">
+        <Real Name="Epot Coulomb14">0.21407271220614837</Real>
+        <Real Name="Epot LJ14">-0.39771349695163671</Real>
+        <Real Name="dVdlCoul ">-0.21851037383566912</Real>
+        <Real Name="dVdlVdw ">0.41875860652489377</Real>
+        <Sequence Name="Forces">
+          <Int Name="Length">3</Int>
+          <Vector>
+            <Real Name="X">0.030442842705220918</Real>
+            <Real Name="Y">0.033210373860240998</Real>
+            <Real Name="Z">0.035977905015261082</Real>
+          </Vector>
+          <Vector>
+            <Real Name="X">0.89301764058624677</Real>
+            <Real Name="Y">1.7860352811724916</Real>
+            <Real Name="Z">2.6790529217587382</Real>
+          </Vector>
+          <Vector>
+            <Real Name="X">-0.92346048329146768</Real>
+            <Real Name="Y">-1.8192456550327325</Real>
+            <Real Name="Z">-2.7150308267739991</Real>
+          </Vector>
+        </Sequence>
+        <Shift-Forces Name="Shift-forces">
+          <Vector Name="Central">
+            <Real Name="X">0</Real>
+            <Real Name="Y">0</Real>
+            <Real Name="Z">0</Real>
+          </Vector>
+        </Shift-Forces>
+      </Lambda>
+      <Lambda Name="0.5">
+        <Real Name="Epot Coulomb14">0.10595201107466379</Real>
+        <Real Name="Epot LJ14">-0.19369895958475428</Real>
+        <Real Name="dVdlCoul ">-0.21402396676422034</Real>
+        <Real Name="dVdlVdw ">0.39750692921973912</Real>
+        <Sequence Name="Forces">
+          <Int Name="Length">3</Int>
+          <Vector>
+            <Real Name="X">0.015221397582715825</Real>
+            <Real Name="Y">0.016605160999326352</Real>
+            <Real Name="Z">0.017988924415936882</Real>
+          </Vector>
+          <Vector>
+            <Real Name="X">0.42958890996342458</Real>
+            <Real Name="Y">0.85917781992684816</Real>
+            <Real Name="Z">1.2887667298902727</Real>
+          </Vector>
+          <Vector>
+            <Real Name="X">-0.44481030754614043</Real>
+            <Real Name="Y">-0.87578298092617457</Real>
+            <Real Name="Z">-1.3067556543062095</Real>
+          </Vector>
+        </Sequence>
+        <Shift-Forces Name="Shift-forces">
+          <Vector Name="Central">
+            <Real Name="X">0</Real>
+            <Real Name="Y">0</Real>
+            <Real Name="Z">0</Real>
+          </Vector>
+        </Shift-Forces>
+      </Lambda>
+      <Lambda Name="1">
+        <Real Name="Epot Coulomb14">0</Real>
+        <Real Name="Epot LJ14">0</Real>
+        <Real Name="dVdlCoul ">-0.20983019696952224</Real>
+        <Real Name="dVdlVdw ">0.37749364747323017</Real>
+        <Sequence Name="Forces">
+          <Int Name="Length">3</Int>
+          <Vector>
+            <Real Name="X">0</Real>
+            <Real Name="Y">0</Real>
+            <Real Name="Z">0</Real>
+          </Vector>
+          <Vector>
+            <Real Name="X">0</Real>
+            <Real Name="Y">0</Real>
+            <Real Name="Z">0</Real>
+          </Vector>
+          <Vector>
+            <Real Name="X">0</Real>
+            <Real Name="Y">0</Real>
+            <Real Name="Z">0</Real>
+          </Vector>
+        </Sequence>
+        <Shift-Forces Name="Shift-forces">
+          <Vector Name="Central">
+            <Real Name="X">0</Real>
+            <Real Name="Y">0</Real>
+            <Real Name="Z">0</Real>
+          </Vector>
+        </Shift-Forces>
+      </Lambda>
+    </FEP>
+  </FunctionType>
+</ReferenceData>
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 (file)
index 0000000..1af2924
--- /dev/null
@@ -0,0 +1,101 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <FunctionType Name="LJ14">
+    <FEP Name="Yes">
+      <Lambda Name="0">
+        <Real Name="Epot Coulomb14">0.1445520414957524</Real>
+        <Real Name="Epot LJ14">-0.3979723893321509</Real>
+        <Real Name="dVdlCoul ">-0.14898844529427274</Real>
+        <Real Name="dVdlVdw ">0.41901751034443802</Real>
+        <Sequence Name="Forces">
+          <Int Name="Length">3</Int>
+          <Vector>
+            <Real Name="X">0.010987624164811038</Real>
+            <Real Name="Y">0.021975248329622051</Real>
+            <Real Name="Z">0.14283911414254338</Real>
+          </Vector>
+          <Vector>
+            <Real Name="X">0.89301764058624677</Real>
+            <Real Name="Y">1.7860352811724916</Real>
+            <Real Name="Z">2.6790529217587382</Real>
+          </Vector>
+          <Vector>
+            <Real Name="X">-0.9040052647510578</Real>
+            <Real Name="Y">-1.8080105295021136</Real>
+            <Real Name="Z">-2.8218920359012816</Real>
+          </Vector>
+        </Sequence>
+        <Shift-Forces Name="Shift-forces">
+          <Vector Name="Central">
+            <Real Name="X">-0.010987624164811038</Real>
+            <Real Name="Y">-0.021975248329622051</Real>
+            <Real Name="Z">-0.14283911414254338</Real>
+          </Vector>
+        </Shift-Forces>
+      </Lambda>
+      <Lambda Name="0.5">
+        <Real Name="Epot Coulomb14">0.071191990173256878</Real>
+        <Real Name="Epot LJ14">-0.19382840291531345</Real>
+        <Real Name="dVdlCoul ">-0.14450329606174245</Real>
+        <Real Name="dVdlVdw ">0.39776582160013413</Real>
+        <Sequence Name="Forces">
+          <Int Name="Length">3</Int>
+          <Vector>
+            <Real Name="X">0.0054936782176173184</Real>
+            <Real Name="Y">0.010987356435234625</Real>
+            <Real Name="Z">0.07141781682902508</Real>
+          </Vector>
+          <Vector>
+            <Real Name="X">0.42958890996342458</Real>
+            <Real Name="Y">0.85917781992684816</Real>
+            <Real Name="Z">1.2887667298902727</Real>
+          </Vector>
+          <Vector>
+            <Real Name="X">-0.4350825881810419</Real>
+            <Real Name="Y">-0.87016517636208279</Real>
+            <Real Name="Z">-1.3601845467192979</Real>
+          </Vector>
+        </Sequence>
+        <Shift-Forces Name="Shift-forces">
+          <Vector Name="Central">
+            <Real Name="X">-0.0054936782176173184</Real>
+            <Real Name="Y">-0.010987356435234625</Real>
+            <Real Name="Z">-0.07141781682902508</Real>
+          </Vector>
+        </Shift-Forces>
+      </Lambda>
+      <Lambda Name="1">
+        <Real Name="Epot Coulomb14">0</Real>
+        <Real Name="Epot LJ14">0</Real>
+        <Real Name="dVdlCoul ">-0.14031078405845462</Real>
+        <Real Name="dVdlVdw ">0.37775252841519097</Real>
+        <Sequence Name="Forces">
+          <Int Name="Length">3</Int>
+          <Vector>
+            <Real Name="X">0</Real>
+            <Real Name="Y">0</Real>
+            <Real Name="Z">0</Real>
+          </Vector>
+          <Vector>
+            <Real Name="X">0</Real>
+            <Real Name="Y">0</Real>
+            <Real Name="Z">0</Real>
+          </Vector>
+          <Vector>
+            <Real Name="X">0</Real>
+            <Real Name="Y">0</Real>
+            <Real Name="Z">0</Real>
+          </Vector>
+        </Sequence>
+        <Shift-Forces Name="Shift-forces">
+          <Vector Name="Central">
+            <Real Name="X">0</Real>
+            <Real Name="Y">0</Real>
+            <Real Name="Z">0</Real>
+          </Vector>
+        </Shift-Forces>
+      </Lambda>
+    </FEP>
+  </FunctionType>
+</ReferenceData>
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 (file)
index 0000000..1f21e7d
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <FunctionType Name="LJC_NB">
+    <FEP Name="No">
+      <Real Name="Epot Coulomb14">-3.4307104627027285</Real>
+      <Real Name="Epot LJ14">-0.3979723893321509</Real>
+      <Real Name="dVdlCoul ">0</Real>
+      <Real Name="dVdlVdw ">0</Real>
+      <Sequence Name="Forces">
+        <Int Name="Length">3</Int>
+        <Vector>
+          <Real Name="X">0.043664263974573722</Real>
+          <Real Name="Y">0.087328527949147347</Real>
+          <Real Name="Z">0.56763543166945785</Real>
+        </Vector>
+        <Vector>
+          <Real Name="X">3.0406526210041607</Real>
+          <Real Name="Y">6.0813052420083142</Real>
+          <Real Name="Z">9.1219578630124758</Real>
+        </Vector>
+        <Vector>
+          <Real Name="X">-3.0843168849787346</Real>
+          <Real Name="Y">-6.1686337699574612</Real>
+          <Real Name="Z">-9.6895932946819343</Real>
+        </Vector>
+      </Sequence>
+      <Shift-Forces Name="Shift-forces">
+        <Vector Name="Central">
+          <Real Name="X">-0.043664263974573722</Real>
+          <Real Name="Y">-0.087328527949147347</Real>
+          <Real Name="Z">-0.56763543166945785</Real>
+        </Vector>
+      </Shift-Forces>
+    </FEP>
+  </FunctionType>
+</ReferenceData>
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 (file)
index 0000000..3a85c07
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <FunctionType Name="LJC_NB">
+    <FEP Name="No">
+      <Real Name="Epot Coulomb14">-5.3452248382476508</Real>
+      <Real Name="Epot LJ14">-0.79539132295421022</Real>
+      <Real Name="dVdlCoul ">0</Real>
+      <Real Name="dVdlVdw ">0</Real>
+      <Sequence Name="Forces">
+        <Int Name="Length">3</Int>
+        <Vector>
+          <Real Name="X">3.0406526210041607</Real>
+          <Real Name="Y">6.0813052420083142</Real>
+          <Real Name="Z">9.1219578630124758</Real>
+        </Vector>
+        <Vector>
+          <Real Name="X">3.0406526210041607</Real>
+          <Real Name="Y">6.0813052420083142</Real>
+          <Real Name="Z">9.1219578630124758</Real>
+        </Vector>
+        <Vector>
+          <Real Name="X">-6.0813052420083213</Real>
+          <Real Name="Y">-12.162610484016628</Real>
+          <Real Name="Z">-18.243915726024952</Real>
+        </Vector>
+      </Sequence>
+      <Shift-Forces Name="Shift-forces">
+        <Vector Name="Central">
+          <Real Name="X">-3.0406526210041607</Real>
+          <Real Name="Y">-6.0813052420083142</Real>
+          <Real Name="Z">-9.1219578630124758</Real>
+        </Vector>
+      </Shift-Forces>
+    </FEP>
+  </FunctionType>
+</ReferenceData>
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 (file)
index 0000000..c55987f
--- /dev/null
@@ -0,0 +1,101 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <FunctionType Name="LJ14">
+    <FEP Name="Yes">
+      <Lambda Name="0">
+        <Real Name="Epot Coulomb14">-0.33407655239047818</Real>
+        <Real Name="Epot LJ14">-0.79539132295421022</Real>
+        <Real Name="dVdlCoul ">0.3385142675285866</Real>
+        <Real Name="dVdlVdw ">0.83748154200529312</Real>
+        <Sequence Name="Forces">
+          <Int Name="Length">3</Int>
+          <Vector>
+            <Real Name="X">1.6088959673922179</Real>
+            <Real Name="Y">3.2177919347844322</Real>
+            <Real Name="Z">4.8266879021766504</Real>
+          </Vector>
+          <Vector>
+            <Real Name="X">0.89301764058624677</Real>
+            <Real Name="Y">1.7860352811724916</Real>
+            <Real Name="Z">2.6790529217587382</Real>
+          </Vector>
+          <Vector>
+            <Real Name="X">-2.5019136079784645</Real>
+            <Real Name="Y">-5.0038272159569237</Real>
+            <Real Name="Z">-7.5057408239353887</Real>
+          </Vector>
+        </Sequence>
+        <Shift-Forces Name="Shift-forces">
+          <Vector Name="Central">
+            <Real Name="X">-1.6088959673922179</Real>
+            <Real Name="Y">-3.2177919347844322</Real>
+            <Real Name="Z">-4.8266879021766504</Real>
+          </Vector>
+        </Shift-Forces>
+      </Lambda>
+      <Lambda Name="0.5">
+        <Real Name="Epot Coulomb14">-0.16595391778969223</Real>
+        <Real Name="Epot LJ14">-0.38738008371883476</Real>
+        <Real Name="dVdlCoul ">0.33402780694852929</Real>
+        <Real Name="dVdlVdw ">0.79497818749041516</Real>
+        <Sequence Name="Forces">
+          <Int Name="Length">3</Int>
+          <Vector>
+            <Real Name="X">0.77157606087074149</Real>
+            <Real Name="Y">1.5431521217414814</Real>
+            <Real Name="Z">2.3147281826122228</Real>
+          </Vector>
+          <Vector>
+            <Real Name="X">0.42958890996342458</Real>
+            <Real Name="Y">0.85917781992684816</Real>
+            <Real Name="Z">1.2887667298902727</Real>
+          </Vector>
+          <Vector>
+            <Real Name="X">-1.2011649708341661</Real>
+            <Real Name="Y">-2.4023299416683295</Real>
+            <Real Name="Z">-3.6034949125024953</Real>
+          </Vector>
+        </Sequence>
+        <Shift-Forces Name="Shift-forces">
+          <Vector Name="Central">
+            <Real Name="X">-0.77157606087074149</Real>
+            <Real Name="Y">-1.5431521217414814</Real>
+            <Real Name="Z">-2.3147281826122228</Real>
+          </Vector>
+        </Shift-Forces>
+      </Lambda>
+      <Lambda Name="1">
+        <Real Name="Epot Coulomb14">0</Real>
+        <Real Name="Epot LJ14">0</Real>
+        <Real Name="dVdlCoul ">0.32983398364534788</Real>
+        <Real Name="dVdlVdw ">0.75495162409282812</Real>
+        <Sequence Name="Forces">
+          <Int Name="Length">3</Int>
+          <Vector>
+            <Real Name="X">0</Real>
+            <Real Name="Y">0</Real>
+            <Real Name="Z">0</Real>
+          </Vector>
+          <Vector>
+            <Real Name="X">0</Real>
+            <Real Name="Y">0</Real>
+            <Real Name="Z">0</Real>
+          </Vector>
+          <Vector>
+            <Real Name="X">0</Real>
+            <Real Name="Y">0</Real>
+            <Real Name="Z">0</Real>
+          </Vector>
+        </Sequence>
+        <Shift-Forces Name="Shift-forces">
+          <Vector Name="Central">
+            <Real Name="X">0</Real>
+            <Real Name="Y">0</Real>
+            <Real Name="Z">0</Real>
+          </Vector>
+        </Shift-Forces>
+      </Lambda>
+    </FEP>
+  </FunctionType>
+</ReferenceData>
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 (file)
index 0000000..0ee6004
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <FunctionType Name="LJ14">
+    <FEP Name="No">
+      <Real Name="Epot Coulomb14">0.2140727122061484</Real>
+      <Real Name="Epot LJ14">-0.39771349695163671</Real>
+      <Real Name="dVdlCoul ">0</Real>
+      <Real Name="dVdlVdw ">0</Real>
+      <Sequence Name="Forces">
+        <Int Name="Length">3</Int>
+        <Vector>
+          <Real Name="X">0.030442842705220907</Real>
+          <Real Name="Y">0.033210373860240984</Real>
+          <Real Name="Z">0.035977905015261075</Real>
+        </Vector>
+        <Vector>
+          <Real Name="X">0.89301764058624677</Real>
+          <Real Name="Y">1.7860352811724916</Real>
+          <Real Name="Z">2.6790529217587382</Real>
+        </Vector>
+        <Vector>
+          <Real Name="X">-0.92346048329146768</Real>
+          <Real Name="Y">-1.8192456550327325</Real>
+          <Real Name="Z">-2.7150308267739991</Real>
+        </Vector>
+      </Sequence>
+      <Shift-Forces Name="Shift-forces">
+        <Vector Name="Central">
+          <Real Name="X">0</Real>
+          <Real Name="Y">0</Real>
+          <Real Name="Z">0</Real>
+        </Vector>
+      </Shift-Forces>
+    </FEP>
+  </FunctionType>
+</ReferenceData>
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 (file)
index 0000000..c540567
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <FunctionType Name="LJ14">
+    <FEP Name="No">
+      <Real Name="Epot Coulomb14">0.14455204149575238</Real>
+      <Real Name="Epot LJ14">-0.3979723893321509</Real>
+      <Real Name="dVdlCoul ">0</Real>
+      <Real Name="dVdlVdw ">0</Real>
+      <Sequence Name="Forces">
+        <Int Name="Length">3</Int>
+        <Vector>
+          <Real Name="X">0.010987624164811043</Real>
+          <Real Name="Y">0.021975248329622062</Real>
+          <Real Name="Z">0.14283911414254344</Real>
+        </Vector>
+        <Vector>
+          <Real Name="X">0.89301764058624677</Real>
+          <Real Name="Y">1.7860352811724916</Real>
+          <Real Name="Z">2.6790529217587382</Real>
+        </Vector>
+        <Vector>
+          <Real Name="X">-0.9040052647510578</Real>
+          <Real Name="Y">-1.8080105295021136</Real>
+          <Real Name="Z">-2.8218920359012816</Real>
+        </Vector>
+      </Sequence>
+      <Shift-Forces Name="Shift-forces">
+        <Vector Name="Central">
+          <Real Name="X">-0.010987624164811043</Real>
+          <Real Name="Y">-0.021975248329622062</Real>
+          <Real Name="Z">-0.14283911414254344</Real>
+        </Vector>
+      </Shift-Forces>
+    </FEP>
+  </FunctionType>
+</ReferenceData>
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 (file)
index 0000000..3f65bf3
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <FunctionType Name="LJ14">
+    <FEP Name="No">
+      <Real Name="Epot Coulomb14">-0.33407655239047818</Real>
+      <Real Name="Epot LJ14">-0.79539132295421022</Real>
+      <Real Name="dVdlCoul ">0</Real>
+      <Real Name="dVdlVdw ">0</Real>
+      <Sequence Name="Forces">
+        <Int Name="Length">3</Int>
+        <Vector>
+          <Real Name="X">1.6088959673922179</Real>
+          <Real Name="Y">3.2177919347844322</Real>
+          <Real Name="Z">4.8266879021766504</Real>
+        </Vector>
+        <Vector>
+          <Real Name="X">0.89301764058624677</Real>
+          <Real Name="Y">1.7860352811724916</Real>
+          <Real Name="Z">2.6790529217587382</Real>
+        </Vector>
+        <Vector>
+          <Real Name="X">-2.5019136079784645</Real>
+          <Real Name="Y">-5.0038272159569237</Real>
+          <Real Name="Z">-7.5057408239353887</Real>
+        </Vector>
+      </Sequence>
+      <Shift-Forces Name="Shift-forces">
+        <Vector Name="Central">
+          <Real Name="X">-1.6088959673922179</Real>
+          <Real Name="Y">-3.2177919347844322</Real>
+          <Real Name="Z">-4.8266879021766504</Real>
+        </Vector>
+      </Shift-Forces>
+    </FEP>
+  </FunctionType>
+</ReferenceData>
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 (file)
index 0000000..5104d00
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <FunctionType Name="LJC14_Q">
+    <FEP Name="No">
+      <Real Name="Epot Coulomb14">-1.5763138899305722</Real>
+      <Real Name="Epot LJ14">-0.39771349695163671</Real>
+      <Real Name="dVdlCoul ">0</Real>
+      <Real Name="dVdlVdw ">0</Real>
+      <Sequence Name="Forces">
+        <Int Name="Length">3</Int>
+        <Vector>
+          <Real Name="X">0.060858562567575235</Real>
+          <Real Name="Y">0.066391159164627525</Real>
+          <Real Name="Z">0.071923755761679822</Real>
+        </Vector>
+        <Vector>
+          <Real Name="X">2.0861481852628656</Real>
+          <Real Name="Y">4.1722963705257259</Real>
+          <Real Name="Z">6.2584445557885919</Real>
+        </Vector>
+        <Vector>
+          <Real Name="X">-2.1470067478304409</Real>
+          <Real Name="Y">-4.2386875296903535</Real>
+          <Real Name="Z">-6.3303683115502718</Real>
+        </Vector>
+      </Sequence>
+      <Shift-Forces Name="Shift-forces">
+        <Vector Name="Central">
+          <Real Name="X">0</Real>
+          <Real Name="Y">0</Real>
+          <Real Name="Z">0</Real>
+        </Vector>
+      </Shift-Forces>
+    </FEP>
+  </FunctionType>
+</ReferenceData>
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 (file)
index 0000000..4efb547
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <FunctionType Name="LJC14_Q">
+    <FEP Name="No">
+      <Real Name="Epot Coulomb14">-1.7153552313513643</Real>
+      <Real Name="Epot LJ14">-0.3979723893321509</Real>
+      <Real Name="dVdlCoul ">0</Real>
+      <Real Name="dVdlVdw ">0</Real>
+      <Sequence Name="Forces">
+        <Int Name="Length">3</Int>
+        <Vector>
+          <Real Name="X">0.021879837434731937</Real>
+          <Real Name="Y">0.043759674869463826</Real>
+          <Real Name="Z">0.28443788665151498</Real>
+        </Vector>
+        <Vector>
+          <Real Name="X">2.0861481852628656</Real>
+          <Real Name="Y">4.1722963705257259</Real>
+          <Real Name="Z">6.2584445557885919</Real>
+        </Vector>
+        <Vector>
+          <Real Name="X">-2.1080280226975976</Real>
+          <Real Name="Y">-4.2160560453951899</Real>
+          <Real Name="Z">-6.5428824424401073</Real>
+        </Vector>
+      </Sequence>
+      <Shift-Forces Name="Shift-forces">
+        <Vector Name="Central">
+          <Real Name="X">-0.021879837434731937</Real>
+          <Real Name="Y">-0.043759674869463826</Real>
+          <Real Name="Z">-0.28443788665151498</Real>
+        </Vector>
+      </Shift-Forces>
+    </FEP>
+  </FunctionType>
+</ReferenceData>
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 (file)
index 0000000..9c72eaa
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <FunctionType Name="LJC14_Q">
+    <FEP Name="No">
+      <Real Name="Epot Coulomb14">-2.6726124191238254</Real>
+      <Real Name="Epot LJ14">-0.79539132295421022</Real>
+      <Real Name="dVdlCoul ">0</Real>
+      <Real Name="dVdlVdw ">0</Real>
+      <Sequence Name="Forces">
+        <Int Name="Length">3</Int>
+        <Vector>
+          <Real Name="X">2.0861481852628656</Real>
+          <Real Name="Y">4.1722963705257259</Real>
+          <Real Name="Z">6.2584445557885919</Real>
+        </Vector>
+        <Vector>
+          <Real Name="X">2.0861481852628656</Real>
+          <Real Name="Y">4.1722963705257259</Real>
+          <Real Name="Z">6.2584445557885919</Real>
+        </Vector>
+        <Vector>
+          <Real Name="X">-4.1722963705257312</Real>
+          <Real Name="Y">-8.3445927410514518</Real>
+          <Real Name="Z">-12.516889111577184</Real>
+        </Vector>
+      </Sequence>
+      <Shift-Forces Name="Shift-forces">
+        <Vector Name="Central">
+          <Real Name="X">-2.0861481852628656</Real>
+          <Real Name="Y">-4.1722963705257259</Real>
+          <Real Name="Z">-6.2584445557885919</Real>
+        </Vector>
+      </Shift-Forces>
+    </FEP>
+  </FunctionType>
+</ReferenceData>
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 (file)
index 0000000..23f2d94
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <FunctionType Name="LJC_NB">
+    <FEP Name="No">
+      <Real Name="Epot Coulomb14">-3.1526277798611444</Real>
+      <Real Name="Epot LJ14">-0.39771349695163671</Real>
+      <Real Name="dVdlCoul ">0</Real>
+      <Real Name="dVdlVdw ">0</Real>
+      <Sequence Name="Forces">
+        <Int Name="Length">3</Int>
+        <Vector>
+          <Real Name="X">0.1216900022922839</Real>
+          <Real Name="Y">0.13275272977340061</Real>
+          <Real Name="Z">0.14381545725451733</Real>
+        </Vector>
+        <Vector>
+          <Real Name="X">3.0406526210041607</Real>
+          <Real Name="Y">6.0813052420083142</Real>
+          <Real Name="Z">9.1219578630124758</Real>
+        </Vector>
+        <Vector>
+          <Real Name="X">-3.1623426232964444</Real>
+          <Real Name="Y">-6.214057971781715</Real>
+          <Real Name="Z">-9.2657733202669927</Real>
+        </Vector>
+      </Sequence>
+      <Shift-Forces Name="Shift-forces">
+        <Vector Name="Central">
+          <Real Name="X">0</Real>
+          <Real Name="Y">0</Real>
+          <Real Name="Z">0</Real>
+        </Vector>
+      </Shift-Forces>
+    </FEP>
+  </FunctionType>
+</ReferenceData>