#include "gromacs/pbcutil/pbc.h"
#include "gromacs/utility/stringutil.h"
+#include "testutils/refdata.h"
#include "testutils/test_hardware_environment.h"
#include "testutils/testasserts.h"
//! 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.
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
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);
}
{
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);
}
{
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);
}
{
{ 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);
}
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);
}
{
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);
}
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.
*
*
* 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;
}
};
-TEST_P(ConstraintsTest, ConstraintsTest)
+TEST_P(ConstraintsTest, SatisfiesConstraints)
{
auto params = GetParam();
ConstraintsTestSystem constraintsTestSystem = std::get<0>(params);
constraintsTestSystem.constraints,
constraintsTestSystem.constraintsR0,
true,
- constraintsTestSystem.virialScaledRef,
false,
0,
real(0.0),
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())
{
// 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);
}
}
std::vector<int> constraints,
std::vector<real> constraintsR0,
bool computeVirial,
- tensor virialScaledRef,
bool compute_dHdLambda,
float dHdLambdaRef,
real initialTime,
{
for (int j = 0; j < DIM; j++)
{
- virialScaled_[i][j] = 0;
- virialScaledRef_[i][j] = virialScaledRef[i][j];
+ virialScaled_[i][j] = 0;
}
}
}
/*
* 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.
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
* 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.
std::vector<int> constraints,
std::vector<real> constraintsR0,
bool computeVirial,
- tensor virialScaledRef,
bool compute_dHdLambda,
float dHdLambdaRef,
real initialTime,
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>