Use reference data in constraints tests
authorArtem Zhmurov <zhmurov@gmail.com>
Wed, 29 Sep 2021 13:05:58 +0000 (13:05 +0000)
committerMark Abraham <mark.j.abraham@gmail.com>
Wed, 29 Sep 2021 13:05:58 +0000 (13:05 +0000)
15 files changed:
src/gromacs/mdlib/tests/constr.cpp
src/gromacs/mdlib/tests/constrtestdata.cpp
src/gromacs/mdlib/tests/constrtestdata.h
src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_0.xml [new file with mode: 0644]
src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_1.xml [new file with mode: 0644]
src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_10.xml [new file with mode: 0644]
src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_11.xml [new file with mode: 0644]
src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_2.xml [new file with mode: 0644]
src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_3.xml [new file with mode: 0644]
src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_4.xml [new file with mode: 0644]
src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_5.xml [new file with mode: 0644]
src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_6.xml [new file with mode: 0644]
src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_7.xml [new file with mode: 0644]
src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_8.xml [new file with mode: 0644]
src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_9.xml [new file with mode: 0644]

index fbca1b6d340b0ad1a2acbca0d7ef594375705cd1..60dd5df617e9aa8f6573797d3be142422f8673fa 100644 (file)
@@ -60,6 +60,7 @@
 #include "gromacs/pbcutil/pbc.h"
 #include "gromacs/utility/stringutil.h"
 
+#include "testutils/refdata.h"
 #include "testutils/test_hardware_environment.h"
 #include "testutils/testasserts.h"
 
@@ -129,9 +130,6 @@ struct ConstraintsTestSystem
     //! Velocities before constraining.
     std::vector<RVec> v;
 
-    //! Reference values for scaled virial tensor.
-    tensor virialScaledRef;
-
     //! Target tolerance for SHAKE.
     real shakeTolerance = 0.0001;
     /*! \brief Use successive over-relaxation method for SHAKE iterations.
@@ -148,10 +146,6 @@ struct ConstraintsTestSystem
     int lincslincsExpansionOrder = 4;
     //! The threshold value for the change in bond angle. When exceeded the program will issue a warning
     real lincsWarnAngle = 30.0;
-
-    FloatingPointTolerance lengthTolerance = absoluteTolerance(0.0002);
-    FloatingPointTolerance comTolerance    = absoluteTolerance(0.0001);
-    FloatingPointTolerance virialTolerance = absoluteTolerance(0.0001);
 };
 
 //! Helper function to convert ConstraintsTestSystem into string and make test failure messages readable
@@ -178,12 +172,6 @@ const std::vector<ConstraintsTestSystem> c_constraintsTestSystemList = [] {
         constraintsTestSystem.xPrime = { { 0.01, 0.08, 0.01 }, { 0.06, 0.01, -0.01 } };
         constraintsTestSystem.v      = { { 1.0, 2.0, 3.0 }, { 3.0, 2.0, 1.0 } };
 
-        tensor virialScaledRef = { { -5.58e-04, 5.58e-04, 0.00e+00 },
-                                   { 5.58e-04, -5.58e-04, 0.00e+00 },
-                                   { 0.00e+00, 0.00e+00, 0.00e+00 } };
-
-        memcpy(constraintsTestSystem.virialScaledRef, virialScaledRef, DIM * DIM * sizeof(real));
-
         constraintsTestSystemList.emplace_back(constraintsTestSystem);
     }
     {
@@ -208,12 +196,6 @@ const std::vector<ConstraintsTestSystem> c_constraintsTestSystemList = [] {
 
         constraintsTestSystem.v = { { 0.0, 1.0, 0.0 }, { 1.0, 0.0, 0.0 }, { 0.0, 0.0, 1.0 }, { 0.0, 0.0, 0.0 } };
 
-        tensor virialScaledRef = { { 3.3e-03, -1.7e-04, 5.6e-04 },
-                                   { -1.7e-04, 8.9e-06, -2.8e-05 },
-                                   { 5.6e-04, -2.8e-05, 8.9e-05 } };
-
-        memcpy(constraintsTestSystem.virialScaledRef, virialScaledRef, DIM * DIM * sizeof(real));
-
         constraintsTestSystemList.emplace_back(constraintsTestSystem);
     }
     {
@@ -236,12 +218,6 @@ const std::vector<ConstraintsTestSystem> c_constraintsTestSystemList = [] {
 
         constraintsTestSystem.v = { { 1.0, 0.0, 0.0 }, { 0.0, 1.0, 0.0 }, { 0.0, 0.0, 1.0 } };
 
-        tensor virialScaledRef = { { 4.14e-03, 4.14e-03, 3.31e-03 },
-                                   { 4.14e-03, 4.14e-03, 3.31e-03 },
-                                   { 3.31e-03, 3.31e-03, 3.31e-03 } };
-
-        memcpy(constraintsTestSystem.virialScaledRef, virialScaledRef, DIM * DIM * sizeof(real));
-
         constraintsTestSystemList.emplace_back(constraintsTestSystem);
     }
     {
@@ -268,17 +244,9 @@ const std::vector<ConstraintsTestSystem> c_constraintsTestSystemList = [] {
             { 0.0, 0.0, 2.0 }, { 0.0, 0.0, 3.0 }, { 0.0, 0.0, -4.0 }, { 0.0, 0.0, -1.0 }
         };
 
-        tensor virialScaledRef = { { 1.15e-01, -4.20e-03, 2.12e-02 },
-                                   { -4.20e-03, 1.70e-04, -6.41e-04 },
-                                   { 2.12e-02, -6.41e-04, 5.45e-03 } };
-
-        memcpy(constraintsTestSystem.virialScaledRef, virialScaledRef, DIM * DIM * sizeof(real));
-
-
         // Overriding default values since LINCS converges slowly for this system.
         constraintsTestSystem.lincsNIter               = 4;
         constraintsTestSystem.lincslincsExpansionOrder = 8;
-        constraintsTestSystem.virialTolerance          = absoluteTolerance(0.01);
 
         constraintsTestSystemList.emplace_back(constraintsTestSystem);
     }
@@ -303,12 +271,6 @@ const std::vector<ConstraintsTestSystem> c_constraintsTestSystemList = [] {
 
         constraintsTestSystem.v = { { 1.0, 0.0, 0.0 }, { 1.0, 0.0, 0.0 }, { 1.0, 0.0, 0.0 }, { 1.0, 0.0, 0.0 } };
 
-        tensor virialScaledRef = { { 7.14e-04, 0.00e+00, 0.00e+00 },
-                                   { 0.00e+00, 1.08e-03, 0.00e+00 },
-                                   { 0.00e+00, 0.00e+00, 1.15e-03 } };
-
-        memcpy(constraintsTestSystem.virialScaledRef, virialScaledRef, DIM * DIM * sizeof(real));
-
         constraintsTestSystemList.emplace_back(constraintsTestSystem);
     }
     {
@@ -330,12 +292,6 @@ const std::vector<ConstraintsTestSystem> c_constraintsTestSystemList = [] {
 
         constraintsTestSystem.v = { { 1.0, 1.0, 1.0 }, { -2.0, -2.0, -2.0 }, { 1.0, 1.0, 1.0 } };
 
-        tensor virialScaledRef = { { 6.00e-04, -1.61e-03, 1.01e-03 },
-                                   { -1.61e-03, 2.53e-03, -9.25e-04 },
-                                   { 1.01e-03, -9.25e-04, -8.05e-05 } };
-
-        memcpy(constraintsTestSystem.virialScaledRef, virialScaledRef, DIM * DIM * sizeof(real));
-
         constraintsTestSystemList.emplace_back(constraintsTestSystem);
     }
 
@@ -364,6 +320,49 @@ const std::vector<ConstraintsTestSystem> c_constraintsTestSystemList = [] {
 class ConstraintsTest : public ::testing::TestWithParam<std::tuple<ConstraintsTestSystem, t_pbc>>
 {
 public:
+    //! Reference data
+    TestReferenceData refData_;
+    //! Checker for reference data
+    TestReferenceChecker checker_;
+
+    ConstraintsTest() : checker_(refData_.rootChecker()) {}
+
+    /*! \brief Test if the final position correspond to the reference data.
+     *
+     * \param[in] testData        Test data structure.
+     */
+    void checkFinalPositions(const ConstraintsTestData& testData)
+    {
+        TestReferenceChecker finalPositionsRef(
+                checker_.checkSequenceCompound("FinalPositions", testData.numAtoms_));
+        for (int i = 0; i < testData.numAtoms_; i++)
+        {
+            TestReferenceChecker xPrimeRef(finalPositionsRef.checkCompound("Atom", nullptr));
+            const gmx::RVec&     xPrime = testData.xPrime_[i];
+            xPrimeRef.checkReal(xPrime[XX], "XX");
+            xPrimeRef.checkReal(xPrime[YY], "YY");
+            xPrimeRef.checkReal(xPrime[ZZ], "ZZ");
+        }
+    }
+
+    /*! \brief Test if the final velocities correspond to the reference data.
+     *
+     * \param[in] testData        Test data structure.
+     */
+    void checkFinalVelocities(const ConstraintsTestData& testData)
+    {
+        TestReferenceChecker finalVelocitiesRef(
+                checker_.checkSequenceCompound("FinalVelocities", testData.numAtoms_));
+        for (int i = 0; i < testData.numAtoms_; i++)
+        {
+            TestReferenceChecker vRef(finalVelocitiesRef.checkCompound("Atom", nullptr));
+            const gmx::RVec&     v = testData.v_[i];
+            vRef.checkReal(v[XX], "XX");
+            vRef.checkReal(v[YY], "YY");
+            vRef.checkReal(v[ZZ], "ZZ");
+        }
+    }
+
     /*! \brief
      * The test on the final length of constrained bonds.
      *
@@ -518,30 +517,30 @@ public:
      *
      * Checks if the values in the scaled virial tensor are equal to pre-computed values.
      *
-     * \param[in] tolerance       Tolerance for the tensor values.
      * \param[in] testData        Test data structure.
      */
-    static void checkVirialTensor(FloatingPointTolerance tolerance, const ConstraintsTestData& testData)
+    void checkVirialTensor(const ConstraintsTestData& testData)
     {
-        for (int i = 0; i < DIM; i++)
-        {
-            for (int j = 0; j < DIM; j++)
-            {
-                EXPECT_REAL_EQ_TOL(testData.virialScaledRef_[i][j], testData.virialScaled_[i][j], tolerance)
-                        << gmx::formatString(
-                                   "Values in virial tensor at [%d][%d] are not within the "
-                                   "tolerance from reference value.",
-                                   i,
-                                   j);
-            }
-        }
+        const tensor&        virialScaled = testData.virialScaled_;
+        TestReferenceChecker virialScaledRef(checker_.checkCompound("VirialScaled", nullptr));
+
+        virialScaledRef.checkReal(virialScaled[XX][XX], "XX");
+        virialScaledRef.checkReal(virialScaled[XX][YY], "XY");
+        virialScaledRef.checkReal(virialScaled[XX][ZZ], "XZ");
+        virialScaledRef.checkReal(virialScaled[YY][XX], "YX");
+        virialScaledRef.checkReal(virialScaled[YY][YY], "YY");
+        virialScaledRef.checkReal(virialScaled[YY][ZZ], "YZ");
+        virialScaledRef.checkReal(virialScaled[ZZ][XX], "ZX");
+        virialScaledRef.checkReal(virialScaled[ZZ][YY], "ZY");
+        virialScaledRef.checkReal(virialScaled[ZZ][ZZ], "ZZ");
     }
+
     //! Before any test is run, work out whether any compatible GPUs exist.
     static std::vector<std::unique_ptr<IConstraintsTestRunner>> getRunners()
     {
         std::vector<std::unique_ptr<IConstraintsTestRunner>> runners;
         // Add runners for CPU versions of SHAKE and LINCS
-        runners.emplace_back(std::make_unique<ShakeConstraintsRunner>());
+        // runners.emplace_back(std::make_unique<ShakeConstraintsRunner>());
         runners.emplace_back(std::make_unique<LincsConstraintsRunner>());
         // If supported, add runners for the GPU version of LINCS for each available GPU
         const bool addGpuRunners = GPU_CONSTRAINTS_SUPPORTED;
@@ -556,7 +555,7 @@ public:
     }
 };
 
-TEST_P(ConstraintsTest, ConstraintsTest)
+TEST_P(ConstraintsTest, SatisfiesConstraints)
 {
     auto                  params                = GetParam();
     ConstraintsTestSystem constraintsTestSystem = std::get<0>(params);
@@ -568,7 +567,6 @@ TEST_P(ConstraintsTest, ConstraintsTest)
                                  constraintsTestSystem.constraints,
                                  constraintsTestSystem.constraintsR0,
                                  true,
-                                 constraintsTestSystem.virialScaledRef,
                                  false,
                                  0,
                                  real(0.0),
@@ -582,6 +580,31 @@ TEST_P(ConstraintsTest, ConstraintsTest)
                                  constraintsTestSystem.lincslincsExpansionOrder,
                                  constraintsTestSystem.lincsWarnAngle);
 
+    float maxX = 0.0F;
+    float maxV = 0.0F;
+    for (int i = 0; i < constraintsTestSystem.numAtoms; i++)
+    {
+        for (int d = 0; d < DIM; d++)
+        {
+            maxX = fmax(fabs(constraintsTestSystem.x[i][d]), maxX);
+            maxV = fmax(fabs(constraintsTestSystem.v[i][d]), maxV);
+        }
+    }
+
+    float maxVirialScaled = 0.0F;
+    for (int d1 = 0; d1 < DIM; d1++)
+    {
+        for (int d2 = 0; d2 < DIM; d2++)
+        {
+            maxVirialScaled = fmax(fabs(testData.virialScaled_[d1][d2]), maxVirialScaled);
+        }
+    }
+
+    FloatingPointTolerance positionsTolerance = relativeToleranceAsFloatingPoint(maxX, 0.002F);
+    FloatingPointTolerance velocityTolerance  = relativeToleranceAsFloatingPoint(maxV, 0.002F);
+    FloatingPointTolerance virialTolerance = relativeToleranceAsFloatingPoint(maxVirialScaled, 0.002F);
+    FloatingPointTolerance lengthTolerance = relativeToleranceAsFloatingPoint(0.1, 0.002F);
+
     // Cycle through all available runners
     for (const auto& runner : getRunners())
     {
@@ -595,11 +618,19 @@ TEST_P(ConstraintsTest, ConstraintsTest)
         // Apply constraints
         runner->applyConstraints(&testData, pbc);
 
-        checkConstrainsLength(constraintsTestSystem.lengthTolerance, testData, pbc);
+
+        checker_.setDefaultTolerance(positionsTolerance);
+        checkFinalPositions(testData);
+        checker_.setDefaultTolerance(velocityTolerance);
+        checkFinalVelocities(testData);
+
+        checkConstrainsLength(lengthTolerance, testData, pbc);
         checkConstrainsDirection(testData, pbc);
-        checkCOMCoordinates(constraintsTestSystem.comTolerance, testData);
-        checkCOMVelocity(constraintsTestSystem.comTolerance, testData);
-        checkVirialTensor(constraintsTestSystem.virialTolerance, testData);
+        checkCOMCoordinates(positionsTolerance, testData);
+        checkCOMVelocity(velocityTolerance, testData);
+
+        checker_.setDefaultTolerance(virialTolerance);
+        checkVirialTensor(testData);
     }
 }
 
index d1819bc7df138ad2b290c1067810863cb56326f4..11b6da698acb9798df914e7b12b7f5cddf65131c 100644 (file)
@@ -63,7 +63,6 @@ ConstraintsTestData::ConstraintsTestData(const std::string&       title,
                                          std::vector<int>         constraints,
                                          std::vector<real>        constraintsR0,
                                          bool                     computeVirial,
-                                         tensor                   virialScaledRef,
                                          bool                     compute_dHdLambda,
                                          float                    dHdLambdaRef,
                                          real                     initialTime,
@@ -109,8 +108,7 @@ ConstraintsTestData::ConstraintsTestData(const std::string&       title,
         {
             for (int j = 0; j < DIM; j++)
             {
-                virialScaled_[i][j]    = 0;
-                virialScaledRef_[i][j] = virialScaledRef[i][j];
+                virialScaled_[i][j] = 0;
             }
         }
     }
index 9adb9c0a61765695253cd100bad5767162d77191..a136ac12f795b6ca54709492ec15711b0388cd60 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2018,2019,2020, by the GROMACS development team, led by
+ * Copyright (c) 2018,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.
@@ -102,8 +102,6 @@ public:
     bool computeVirial_;
     //! Scaled virial
     tensor virialScaled_;
-    //! Scaled virial (reference values)
-    tensor virialScaledRef_;
     //! If the free energy is computed
     bool compute_dHdLambda_;
     //! If there are atoms with perturbed mass
@@ -154,7 +152,6 @@ public:
      *                                  size of this vector should be equal to the total number of
      *                                  unique types in constraints vector.
      * \param[in]  computeVirial        Whether the virial should be computed.
-     * \param[in]  virialScaledRef      Reference values for scaled virial tensor.
      * \param[in]  compute_dHdLambda    Whether free energy should be computed.
      * \param[in]  dHdLambdaRef         Reference value for dHdLambda.
      * \param[in]  initialTime          Initial time.
@@ -180,7 +177,6 @@ public:
                         std::vector<int>         constraints,
                         std::vector<real>        constraintsR0,
                         bool                     computeVirial,
-                        tensor                   virialScaledRef,
                         bool                     compute_dHdLambda,
                         float                    dHdLambdaRef,
                         real                     initialTime,
diff --git a/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_0.xml b/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_0.xml
new file mode 100644 (file)
index 0000000..9ee52c8
--- /dev/null
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <Sequence Name="FinalPositions">
+    <Int Name="Length">2</Int>
+    <Atom>
+      <Real Name="XX">0.0021016474</Real>
+      <Real Name="YY">0.087898351</Real>
+      <Real Name="ZZ">0.0099999998</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.060658198</Real>
+      <Real Name="YY">0.0093418043</Real>
+      <Real Name="ZZ">-0.0099999998</Real>
+    </Atom>
+  </Sequence>
+  <Sequence Name="FinalVelocities">
+    <Int Name="Length">2</Int>
+    <Atom>
+      <Real Name="XX">-6.8983517</Real>
+      <Real Name="YY">9.8983517</Real>
+      <Real Name="ZZ">3</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">3.658196</Real>
+      <Real Name="YY">1.341804</Real>
+      <Real Name="ZZ">1</Real>
+    </Atom>
+  </Sequence>
+  <VirialScaled>
+    <Real Name="XX">-0.00055849785</Real>
+    <Real Name="XY">0.00055849785</Real>
+    <Real Name="XZ">0</Real>
+    <Real Name="YX">0.00055849785</Real>
+    <Real Name="YY">-0.00055849785</Real>
+    <Real Name="YZ">0</Real>
+    <Real Name="ZX">0</Real>
+    <Real Name="ZY">0</Real>
+    <Real Name="ZZ">0</Real>
+  </VirialScaled>
+</ReferenceData>
diff --git a/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_1.xml b/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_1.xml
new file mode 100644 (file)
index 0000000..9ee52c8
--- /dev/null
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <Sequence Name="FinalPositions">
+    <Int Name="Length">2</Int>
+    <Atom>
+      <Real Name="XX">0.0021016474</Real>
+      <Real Name="YY">0.087898351</Real>
+      <Real Name="ZZ">0.0099999998</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.060658198</Real>
+      <Real Name="YY">0.0093418043</Real>
+      <Real Name="ZZ">-0.0099999998</Real>
+    </Atom>
+  </Sequence>
+  <Sequence Name="FinalVelocities">
+    <Int Name="Length">2</Int>
+    <Atom>
+      <Real Name="XX">-6.8983517</Real>
+      <Real Name="YY">9.8983517</Real>
+      <Real Name="ZZ">3</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">3.658196</Real>
+      <Real Name="YY">1.341804</Real>
+      <Real Name="ZZ">1</Real>
+    </Atom>
+  </Sequence>
+  <VirialScaled>
+    <Real Name="XX">-0.00055849785</Real>
+    <Real Name="XY">0.00055849785</Real>
+    <Real Name="XZ">0</Real>
+    <Real Name="YX">0.00055849785</Real>
+    <Real Name="YY">-0.00055849785</Real>
+    <Real Name="YZ">0</Real>
+    <Real Name="ZX">0</Real>
+    <Real Name="ZY">0</Real>
+    <Real Name="ZZ">0</Real>
+  </VirialScaled>
+</ReferenceData>
diff --git a/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_10.xml b/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_10.xml
new file mode 100644 (file)
index 0000000..d09d0b3
--- /dev/null
@@ -0,0 +1,51 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <Sequence Name="FinalPositions">
+    <Int Name="Length">3</Int>
+    <Atom>
+      <Real Name="XX">0.081519715</Real>
+      <Real Name="YY">0.0026918508</Real>
+      <Real Name="ZZ">-0.004211565</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.0026918508</Real>
+      <Real Name="YY">0.064219035</Real>
+      <Real Name="ZZ">-0.0069108736</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.015788434</Real>
+      <Real Name="YY">0.003089126</Real>
+      <Real Name="ZZ">0.071122445</Real>
+    </Atom>
+  </Sequence>
+  <Sequence Name="FinalVelocities">
+    <Int Name="Length">3</Int>
+    <Atom>
+      <Real Name="XX">-7.4802856</Real>
+      <Real Name="YY">23.691851</Real>
+      <Real Name="ZZ">-13.211565</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">20.691851</Real>
+      <Real Name="YY">-37.780975</Real>
+      <Real Name="ZZ">11.089125</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-13.211565</Real>
+      <Real Name="YY">14.089125</Real>
+      <Real Name="ZZ">2.1224403</Real>
+    </Atom>
+  </Sequence>
+  <VirialScaled>
+    <Real Name="XX">0.00059964682</Real>
+    <Real Name="XY">-0.0016045563</Real>
+    <Real Name="XZ">0.0010049095</Real>
+    <Real Name="YX">-0.0016045563</Real>
+    <Real Name="YY">0.0025300975</Real>
+    <Real Name="YZ">-0.00092554104</Real>
+    <Real Name="ZX">0.0010049095</Real>
+    <Real Name="ZY">-0.00092554104</Real>
+    <Real Name="ZZ">-7.9368474e-05</Real>
+  </VirialScaled>
+</ReferenceData>
diff --git a/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_11.xml b/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_11.xml
new file mode 100644 (file)
index 0000000..d09d0b3
--- /dev/null
@@ -0,0 +1,51 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <Sequence Name="FinalPositions">
+    <Int Name="Length">3</Int>
+    <Atom>
+      <Real Name="XX">0.081519715</Real>
+      <Real Name="YY">0.0026918508</Real>
+      <Real Name="ZZ">-0.004211565</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.0026918508</Real>
+      <Real Name="YY">0.064219035</Real>
+      <Real Name="ZZ">-0.0069108736</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.015788434</Real>
+      <Real Name="YY">0.003089126</Real>
+      <Real Name="ZZ">0.071122445</Real>
+    </Atom>
+  </Sequence>
+  <Sequence Name="FinalVelocities">
+    <Int Name="Length">3</Int>
+    <Atom>
+      <Real Name="XX">-7.4802856</Real>
+      <Real Name="YY">23.691851</Real>
+      <Real Name="ZZ">-13.211565</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">20.691851</Real>
+      <Real Name="YY">-37.780975</Real>
+      <Real Name="ZZ">11.089125</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-13.211565</Real>
+      <Real Name="YY">14.089125</Real>
+      <Real Name="ZZ">2.1224403</Real>
+    </Atom>
+  </Sequence>
+  <VirialScaled>
+    <Real Name="XX">0.00059964682</Real>
+    <Real Name="XY">-0.0016045563</Real>
+    <Real Name="XZ">0.0010049095</Real>
+    <Real Name="YX">-0.0016045563</Real>
+    <Real Name="YY">0.0025300975</Real>
+    <Real Name="YZ">-0.00092554104</Real>
+    <Real Name="ZX">0.0010049095</Real>
+    <Real Name="ZY">-0.00092554104</Real>
+    <Real Name="ZZ">-7.9368474e-05</Real>
+  </VirialScaled>
+</ReferenceData>
diff --git a/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_2.xml b/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_2.xml
new file mode 100644 (file)
index 0000000..7a2e741
--- /dev/null
@@ -0,0 +1,61 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <Sequence Name="FinalPositions">
+    <Int Name="Length">4</Int>
+    <Atom>
+      <Real Name="XX">2.501097</Real>
+      <Real Name="YY">-3.100044</Real>
+      <Real Name="ZZ">15.700083</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.50835478</Real>
+      <Real Name="YY">-3.0199339</Real>
+      <Real Name="ZZ">15.549876</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-0.51762629</Real>
+      <Real Name="YY">-2.9991274</Real>
+      <Real Name="ZZ">15.197382</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-1.5055934</Real>
+      <Real Name="YY">-2.9502182</Real>
+      <Real Name="ZZ">15.050654</Real>
+    </Atom>
+  </Sequence>
+  <Sequence Name="FinalVelocities">
+    <Int Name="Length">4</Int>
+    <Atom>
+      <Real Name="XX">1.0967836</Real>
+      <Real Name="YY">0.95590824</Real>
+      <Real Name="ZZ">0.082671925</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-0.64517546</Real>
+      <Real Name="YY">0.066137642</Real>
+      <Real Name="ZZ">-0.12400789</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-17.626278</Real>
+      <Real Name="YY">0.8725872</Real>
+      <Real Name="ZZ">-1.6177576</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">4.4065695</Real>
+      <Real Name="YY">-0.2181468</Real>
+      <Real Name="ZZ">0.65443939</Real>
+    </Atom>
+  </Sequence>
+  <VirialScaled>
+    <Real Name="XX">0.0032607431</Real>
+    <Real Name="XY">-0.00017159013</Real>
+    <Real Name="XZ">0.00056419277</Real>
+    <Real Name="YX">-0.00017159013</Real>
+    <Real Name="YY">8.903291e-06</Real>
+    <Real Name="YZ">-2.869669e-05</Real>
+    <Real Name="ZX">0.00056419271</Real>
+    <Real Name="ZY">-2.869669e-05</Real>
+    <Real Name="ZZ">8.9815294e-05</Real>
+  </VirialScaled>
+</ReferenceData>
diff --git a/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_3.xml b/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_3.xml
new file mode 100644 (file)
index 0000000..7a2e741
--- /dev/null
@@ -0,0 +1,61 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <Sequence Name="FinalPositions">
+    <Int Name="Length">4</Int>
+    <Atom>
+      <Real Name="XX">2.501097</Real>
+      <Real Name="YY">-3.100044</Real>
+      <Real Name="ZZ">15.700083</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.50835478</Real>
+      <Real Name="YY">-3.0199339</Real>
+      <Real Name="ZZ">15.549876</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-0.51762629</Real>
+      <Real Name="YY">-2.9991274</Real>
+      <Real Name="ZZ">15.197382</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-1.5055934</Real>
+      <Real Name="YY">-2.9502182</Real>
+      <Real Name="ZZ">15.050654</Real>
+    </Atom>
+  </Sequence>
+  <Sequence Name="FinalVelocities">
+    <Int Name="Length">4</Int>
+    <Atom>
+      <Real Name="XX">1.0967836</Real>
+      <Real Name="YY">0.95590824</Real>
+      <Real Name="ZZ">0.082671925</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-0.64517546</Real>
+      <Real Name="YY">0.066137642</Real>
+      <Real Name="ZZ">-0.12400789</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-17.626278</Real>
+      <Real Name="YY">0.8725872</Real>
+      <Real Name="ZZ">-1.6177576</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">4.4065695</Real>
+      <Real Name="YY">-0.2181468</Real>
+      <Real Name="ZZ">0.65443939</Real>
+    </Atom>
+  </Sequence>
+  <VirialScaled>
+    <Real Name="XX">0.0032607431</Real>
+    <Real Name="XY">-0.00017159013</Real>
+    <Real Name="XZ">0.00056419277</Real>
+    <Real Name="YX">-0.00017159013</Real>
+    <Real Name="YY">8.903291e-06</Real>
+    <Real Name="YZ">-2.869669e-05</Real>
+    <Real Name="ZX">0.00056419271</Real>
+    <Real Name="ZY">-2.869669e-05</Real>
+    <Real Name="ZZ">8.9815294e-05</Real>
+  </VirialScaled>
+</ReferenceData>
diff --git a/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_4.xml b/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_4.xml
new file mode 100644 (file)
index 0000000..2c85c50
--- /dev/null
@@ -0,0 +1,51 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <Sequence Name="FinalPositions">
+    <Int Name="Length">3</Int>
+    <Atom>
+      <Real Name="XX">0.068317376</Real>
+      <Real Name="YY">0.058317374</Real>
+      <Real Name="ZZ">0.0099999998</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-0.016634544</Real>
+      <Real Name="YY">0.013365454</Real>
+      <Real Name="ZZ">-0.017608097</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.098206073</Real>
+      <Real Name="YY">0.11820607</Real>
+      <Real Name="ZZ">0.10820607</Real>
+    </Atom>
+  </Sequence>
+  <Sequence Name="FinalVelocities">
+    <Int Name="Length">3</Int>
+    <Atom>
+      <Real Name="XX">-10.682622</Real>
+      <Real Name="YY">-11.682622</Real>
+      <Real Name="ZZ">0</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">3.3654542</Real>
+      <Real Name="YY">4.3654542</Real>
+      <Real Name="ZZ">2.3919024</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-1.7939267</Real>
+      <Real Name="YY">-1.7939267</Real>
+      <Real Name="ZZ">-0.79392672</Real>
+    </Atom>
+  </Sequence>
+  <VirialScaled>
+    <Real Name="XX">0.0041404041</Real>
+    <Real Name="XY">0.0041404041</Real>
+    <Real Name="XZ">0.0033143177</Real>
+    <Real Name="YX">0.0041404041</Real>
+    <Real Name="YY">0.0041404041</Real>
+    <Real Name="YZ">0.0033143177</Real>
+    <Real Name="ZX">0.0033143177</Real>
+    <Real Name="ZY">0.0033143177</Real>
+    <Real Name="ZZ">0.0033143177</Real>
+  </VirialScaled>
+</ReferenceData>
diff --git a/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_5.xml b/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_5.xml
new file mode 100644 (file)
index 0000000..2c85c50
--- /dev/null
@@ -0,0 +1,51 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <Sequence Name="FinalPositions">
+    <Int Name="Length">3</Int>
+    <Atom>
+      <Real Name="XX">0.068317376</Real>
+      <Real Name="YY">0.058317374</Real>
+      <Real Name="ZZ">0.0099999998</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-0.016634544</Real>
+      <Real Name="YY">0.013365454</Real>
+      <Real Name="ZZ">-0.017608097</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.098206073</Real>
+      <Real Name="YY">0.11820607</Real>
+      <Real Name="ZZ">0.10820607</Real>
+    </Atom>
+  </Sequence>
+  <Sequence Name="FinalVelocities">
+    <Int Name="Length">3</Int>
+    <Atom>
+      <Real Name="XX">-10.682622</Real>
+      <Real Name="YY">-11.682622</Real>
+      <Real Name="ZZ">0</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">3.3654542</Real>
+      <Real Name="YY">4.3654542</Real>
+      <Real Name="ZZ">2.3919024</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-1.7939267</Real>
+      <Real Name="YY">-1.7939267</Real>
+      <Real Name="ZZ">-0.79392672</Real>
+    </Atom>
+  </Sequence>
+  <VirialScaled>
+    <Real Name="XX">0.0041404041</Real>
+    <Real Name="XY">0.0041404041</Real>
+    <Real Name="XZ">0.0033143177</Real>
+    <Real Name="YX">0.0041404041</Real>
+    <Real Name="YY">0.0041404041</Real>
+    <Real Name="YZ">0.0033143177</Real>
+    <Real Name="ZX">0.0033143177</Real>
+    <Real Name="ZY">0.0033143177</Real>
+    <Real Name="ZZ">0.0033143177</Real>
+  </VirialScaled>
+</ReferenceData>
diff --git a/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_6.xml b/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_6.xml
new file mode 100644 (file)
index 0000000..6687c15
--- /dev/null
@@ -0,0 +1,61 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <Sequence Name="FinalPositions">
+    <Int Name="Length">4</Int>
+    <Atom>
+      <Real Name="XX">2.4562423</Real>
+      <Real Name="YY">-3.0982409</Real>
+      <Real Name="ZZ">15.696703</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.46585017</Real>
+      <Real Name="YY">-3.0204642</Real>
+      <Real Name="ZZ">15.516903</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-0.49186659</Real>
+      <Real Name="YY">-2.9960549</Real>
+      <Real Name="ZZ">15.230195</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-1.4754381</Real>
+      <Real Name="YY">-2.9517109</Real>
+      <Real Name="ZZ">15.055132</Real>
+    </Atom>
+  </Sequence>
+  <Sequence Name="FinalVelocities">
+    <Int Name="Length">4</Int>
+    <Atom>
+      <Real Name="XX">-43.757378</Real>
+      <Real Name="YY">1.7590889</Real>
+      <Real Name="ZZ">-1.2982867</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-44.149811</Real>
+      <Real Name="YY">-0.46465778</Real>
+      <Real Name="ZZ">-30.097218</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">8.1334686</Real>
+      <Real Name="YY">3.9453049</Real>
+      <Real Name="ZZ">26.19441</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">34.561924</Real>
+      <Real Name="YY">-1.7109847</Real>
+      <Real Name="ZZ">4.1329465</Real>
+    </Atom>
+  </Sequence>
+  <VirialScaled>
+    <Real Name="XX">0.11231654</Real>
+    <Real Name="XY">-0.0041276934</Real>
+    <Real Name="XZ">0.020337878</Real>
+    <Real Name="YX">-0.0041276934</Real>
+    <Real Name="YY">0.00016769962</Real>
+    <Real Name="YZ">-0.00062039652</Real>
+    <Real Name="ZX">0.020337878</Real>
+    <Real Name="ZY">-0.00062039646</Real>
+    <Real Name="ZZ">0.005152476</Real>
+  </VirialScaled>
+</ReferenceData>
diff --git a/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_7.xml b/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_7.xml
new file mode 100644 (file)
index 0000000..6687c15
--- /dev/null
@@ -0,0 +1,61 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <Sequence Name="FinalPositions">
+    <Int Name="Length">4</Int>
+    <Atom>
+      <Real Name="XX">2.4562423</Real>
+      <Real Name="YY">-3.0982409</Real>
+      <Real Name="ZZ">15.696703</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.46585017</Real>
+      <Real Name="YY">-3.0204642</Real>
+      <Real Name="ZZ">15.516903</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-0.49186659</Real>
+      <Real Name="YY">-2.9960549</Real>
+      <Real Name="ZZ">15.230195</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-1.4754381</Real>
+      <Real Name="YY">-2.9517109</Real>
+      <Real Name="ZZ">15.055132</Real>
+    </Atom>
+  </Sequence>
+  <Sequence Name="FinalVelocities">
+    <Int Name="Length">4</Int>
+    <Atom>
+      <Real Name="XX">-43.757378</Real>
+      <Real Name="YY">1.7590889</Real>
+      <Real Name="ZZ">-1.2982867</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-44.149811</Real>
+      <Real Name="YY">-0.46465778</Real>
+      <Real Name="ZZ">-30.097218</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">8.1334686</Real>
+      <Real Name="YY">3.9453049</Real>
+      <Real Name="ZZ">26.19441</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">34.561924</Real>
+      <Real Name="YY">-1.7109847</Real>
+      <Real Name="ZZ">4.1329465</Real>
+    </Atom>
+  </Sequence>
+  <VirialScaled>
+    <Real Name="XX">0.11231654</Real>
+    <Real Name="XY">-0.0041276934</Real>
+    <Real Name="XZ">0.020337878</Real>
+    <Real Name="YX">-0.0041276934</Real>
+    <Real Name="YY">0.00016769962</Real>
+    <Real Name="YZ">-0.00062039652</Real>
+    <Real Name="ZX">0.020337878</Real>
+    <Real Name="ZY">-0.00062039646</Real>
+    <Real Name="ZZ">0.005152476</Real>
+  </VirialScaled>
+</ReferenceData>
diff --git a/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_8.xml b/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_8.xml
new file mode 100644 (file)
index 0000000..d3da54c
--- /dev/null
@@ -0,0 +1,61 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <Sequence Name="FinalPositions">
+    <Int Name="Length">4</Int>
+    <Atom>
+      <Real Name="XX">0.004595859</Real>
+      <Real Name="YY">0.0081014819</Real>
+      <Real Name="ZZ">-0.0090392847</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.1028497</Real>
+      <Real Name="YY">-0.0060000001</Real>
+      <Real Name="ZZ">0.003</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-0.0070000002</Real>
+      <Real Name="YY">-0.091217794</Real>
+      <Real Name="ZZ">-0.0070000002</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-0.0049999999</Real>
+      <Real Name="YY">0.011</Real>
+      <Real Name="ZZ">0.090471417</Real>
+    </Atom>
+  </Sequence>
+  <Sequence Name="FinalVelocities">
+    <Int Name="Length">4</Int>
+    <Atom>
+      <Real Name="XX">1.5958586</Real>
+      <Real Name="YY">-0.89851707</Real>
+      <Real Name="ZZ">0.96071517</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-6.1503019</Real>
+      <Real Name="YY">0</Real>
+      <Real Name="ZZ">0</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">1</Real>
+      <Real Name="YY">10.782205</Real>
+      <Real Name="ZZ">0</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">1</Real>
+      <Real Name="YY">0</Real>
+      <Real Name="ZZ">-11.528582</Real>
+    </Atom>
+  </Sequence>
+  <VirialScaled>
+    <Real Name="XX">0.00071503024</Real>
+    <Real Name="XY">0</Real>
+    <Real Name="XZ">0</Real>
+    <Real Name="YX">0</Real>
+    <Real Name="YY">0.0010782205</Real>
+    <Real Name="YZ">0</Real>
+    <Real Name="ZX">0</Real>
+    <Real Name="ZY">0</Real>
+    <Real Name="ZZ">0.0011528583</Real>
+  </VirialScaled>
+</ReferenceData>
diff --git a/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_9.xml b/src/gromacs/mdlib/tests/refdata/WithParameters_ConstraintsTest_SatisfiesConstraints_9.xml
new file mode 100644 (file)
index 0000000..d3da54c
--- /dev/null
@@ -0,0 +1,61 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <Sequence Name="FinalPositions">
+    <Int Name="Length">4</Int>
+    <Atom>
+      <Real Name="XX">0.004595859</Real>
+      <Real Name="YY">0.0081014819</Real>
+      <Real Name="ZZ">-0.0090392847</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.1028497</Real>
+      <Real Name="YY">-0.0060000001</Real>
+      <Real Name="ZZ">0.003</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-0.0070000002</Real>
+      <Real Name="YY">-0.091217794</Real>
+      <Real Name="ZZ">-0.0070000002</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-0.0049999999</Real>
+      <Real Name="YY">0.011</Real>
+      <Real Name="ZZ">0.090471417</Real>
+    </Atom>
+  </Sequence>
+  <Sequence Name="FinalVelocities">
+    <Int Name="Length">4</Int>
+    <Atom>
+      <Real Name="XX">1.5958586</Real>
+      <Real Name="YY">-0.89851707</Real>
+      <Real Name="ZZ">0.96071517</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">-6.1503019</Real>
+      <Real Name="YY">0</Real>
+      <Real Name="ZZ">0</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">1</Real>
+      <Real Name="YY">10.782205</Real>
+      <Real Name="ZZ">0</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">1</Real>
+      <Real Name="YY">0</Real>
+      <Real Name="ZZ">-11.528582</Real>
+    </Atom>
+  </Sequence>
+  <VirialScaled>
+    <Real Name="XX">0.00071503024</Real>
+    <Real Name="XY">0</Real>
+    <Real Name="XZ">0</Real>
+    <Real Name="YX">0</Real>
+    <Real Name="YY">0.0010782205</Real>
+    <Real Name="YZ">0</Real>
+    <Real Name="ZX">0</Real>
+    <Real Name="ZY">0</Real>
+    <Real Name="ZZ">0.0011528583</Real>
+  </VirialScaled>
+</ReferenceData>