Add Parrinello-Rahman pressure coupling to CUDA Leap-Frog integrator
authorArtem Zhmurov <zhmurov@gmail.com>
Fri, 9 Aug 2019 10:31:08 +0000 (12:31 +0200)
committerMark Abraham <mark.j.abraham@gmail.com>
Tue, 3 Sep 2019 04:49:22 +0000 (06:49 +0200)
Parrinello-Rahman isotropic pressure coupling scheme is now
added to CUDA version of the Leap-Frog integrator. The
Leap-Frog tests are updated to check the new addition.

Refs. #2887, #2888.

Change-Id: Icf42667621c16a994e68baf5158ea4abac387928

15 files changed:
src/gromacs/mdlib/leapfrog_cuda.cu
src/gromacs/mdlib/leapfrog_cuda.cuh
src/gromacs/mdlib/tests/leapfrog.cpp
src/gromacs/mdlib/tests/leapfrogtestdata.cpp
src/gromacs/mdlib/tests/leapfrogtestdata.h
src/gromacs/mdlib/tests/leapfrogtestrunners.cpp
src/gromacs/mdlib/tests/leapfrogtestrunners.cu
src/gromacs/mdlib/tests/refdata/WithParameters_LeapFrogTest_SimpleIntegration_13.xml [new file with mode: 0644]
src/gromacs/mdlib/tests/refdata/WithParameters_LeapFrogTest_SimpleIntegration_14.xml [new file with mode: 0644]
src/gromacs/mdlib/tests/refdata/WithParameters_LeapFrogTest_SimpleIntegration_15.xml [new file with mode: 0644]
src/gromacs/mdlib/update_constrain_cuda.h
src/gromacs/mdlib/update_constrain_cuda_impl.cpp
src/gromacs/mdlib/update_constrain_cuda_impl.cu
src/gromacs/mdlib/update_constrain_cuda_impl.h
src/gromacs/mdrun/md.cpp

index 1a338fc60b3131f455fea3d582096295e6410a82..c6b16df018c333a61058994446c22bb941c470f0 100644 (file)
@@ -85,6 +85,18 @@ enum class NumTempScaleValues
     Multiple   //!< Multiple T-scaling values, need to use T-group indices
 };
 
+/*! \brief Different variants of the Parrinello-Rahman velocity scaling
+ *
+ *  This is needed to template the kernel
+ *  \todo Unify with similar enum in CPU update module
+ */
+enum class VelocityScalingType
+{
+    None,      //!< Do not apply velocity scaling (not a PR-coupling run or step)
+    Diagonal,  //!< Apply velocity scaling using a diagonal matrix
+    Full       //!< Apply velocity scaling using a full matrix
+};
+
 /*! \brief Main kernel for Leap-Frog integrator.
  *
  *  Each GPU thread works with a single particle. Empty declaration is needed to
@@ -93,18 +105,21 @@ enum class NumTempScaleValues
  *  \todo Check if the force should be set to zero here.
  *  \todo This kernel can also accumulate incidental temperatures for each atom.
  *
- * \tparam        numTempScaleValues    The number of different T-couple values
- * \param[in]     numAtoms              Total number of atoms.
- * \param[in]     gm_x                  Coordinates before the timestep
- * \param[out]    gm_xp                 Coordinates after the timestep.
- * \param[in,out] gm_v                  Velocities to update.
- * \param[in]     gm_f                  Atomic forces.
- * \param[in]     gm_inverseMasses      Reciprocal masses.
- * \param[in]     dt                    Timestep.
- * \param[in]     gm_lambdas            Temperature scaling factors (one per group)
- * \param[in]     gm_tempScaleGroups    Mapping of atoms into groups.
+ * \tparam        numTempScaleValues             The number of different T-couple values.
+ * \tparam        velocityScaling                Type of the Parrinello-Rahman velocity rescaling.
+ * \param[in]     numAtoms                       Total number of atoms.
+ * \param[in]     gm_x                           Coordinates before the timestep
+ * \param[out]    gm_xp                          Coordinates after the timestep.
+ * \param[in,out] gm_v                           Velocities to update.
+ * \param[in]     gm_f                           Atomic forces.
+ * \param[in]     gm_inverseMasses               Reciprocal masses.
+ * \param[in]     dt                             Timestep.
+ * \param[in]     gm_lambdas                     Temperature scaling factors (one per group)
+ * \param[in]     gm_tempScaleGroups             Mapping of atoms into groups.
+ * \param[in]     dtPressureCouple               Time step for pressure coupling
+ * \param[in]     velocityScalingMatrixDiagonal  Diagonal elements of Parrinello-Rahman velocity scaling matrix
  */
-template<NumTempScaleValues numTempScaleValues>
+template<NumTempScaleValues numTempScaleValues, VelocityScalingType velocityScaling>
 __launch_bounds__(c_maxThreadsPerBlock)
 __global__ void leapfrog_kernel(const int                             numAtoms,
                                 const float3* __restrict__            gm_x,
@@ -114,9 +129,10 @@ __global__ void leapfrog_kernel(const int                             numAtoms,
                                 const float*  __restrict__            gm_inverseMasses,
                                 const float                           dt,
                                 const float*  __restrict__            gm_lambdas,
-                                const unsigned short*    __restrict__ gm_tempScaleGroups);
+                                const unsigned short*    __restrict__ gm_tempScaleGroups,
+                                const float3                          velocityScalingMatrixDiagonal);
 
-template<NumTempScaleValues numTempScaleValues>
+template<NumTempScaleValues numTempScaleValues, VelocityScalingType velocityScaling>
 __launch_bounds__(c_maxThreadsPerBlock)
 __global__ void leapfrog_kernel(const int                             numAtoms,
                                 const float3* __restrict__            gm_x,
@@ -126,35 +142,52 @@ __global__ void leapfrog_kernel(const int                             numAtoms,
                                 const float*  __restrict__            gm_inverseMasses,
                                 const float                           dt,
                                 const float*  __restrict__            gm_lambdas,
-                                const unsigned short*    __restrict__ gm_tempScaleGroups)
+                                const unsigned short*    __restrict__ gm_tempScaleGroups,
+                                const float3                          velocityScalingMatrixDiagonal)
 {
     int threadIndex = blockIdx.x*blockDim.x + threadIdx.x;
     if (threadIndex < numAtoms)
     {
-        float3 xi           = gm_x[threadIndex];
-        float3 vi           = gm_v[threadIndex];
-        float3 fi           = gm_f[threadIndex];
-        float  imi          = gm_inverseMasses[threadIndex];
-        float  imidt        = imi*dt;
+        float3 x           = gm_x[threadIndex];
+        float3 v           = gm_v[threadIndex];
+        float3 f           = gm_f[threadIndex];
+        float  im          = gm_inverseMasses[threadIndex];
+        float  imdt        = im*dt;
 
-        if (numTempScaleValues != NumTempScaleValues::None)
+        if (numTempScaleValues != NumTempScaleValues::None || velocityScaling != VelocityScalingType::None)
         {
-            float lambda = 1.0F;
-            if (numTempScaleValues == NumTempScaleValues::Single)
+            float3 vp = v;
+
+            if (numTempScaleValues != NumTempScaleValues::None)
             {
-                lambda    = gm_lambdas[0];
+                float lambda = 1.0F;
+                if (numTempScaleValues == NumTempScaleValues::Single)
+                {
+                    lambda    = gm_lambdas[0];
+                }
+                else if (numTempScaleValues == NumTempScaleValues::Multiple)
+                {
+                    int tempScaleGroup = gm_tempScaleGroups[threadIndex];
+                    lambda             = gm_lambdas[tempScaleGroup];
+                }
+                vp *= lambda;
             }
-            if (numTempScaleValues == NumTempScaleValues::Multiple)
+
+            if (velocityScaling == VelocityScalingType::Diagonal)
             {
-                int tempScaleGroup = gm_tempScaleGroups[threadIndex];
-                lambda             = gm_lambdas[tempScaleGroup];
+                vp.x -= velocityScalingMatrixDiagonal.x*v.x;
+                vp.y -= velocityScalingMatrixDiagonal.y*v.y;
+                vp.z -= velocityScalingMatrixDiagonal.z*v.z;
             }
-            vi           *= lambda;
+
+            v = vp;
         }
-        vi                 += fi*imidt;
-        xi                 += vi*dt;
-        gm_v[threadIndex]   = vi;
-        gm_xp[threadIndex]  = xi;
+
+        v += f*imdt;
+
+        x                  += v*dt;
+        gm_v[threadIndex]   = v;
+        gm_xp[threadIndex]  = x;
     }
     return;
 }
@@ -165,28 +198,56 @@ __global__ void leapfrog_kernel(const int                             numAtoms,
  * If zero is passed as an argument, it is assumed that no temperature coupling groups are used.
  *
  * \param[in]  numTempScaleValues  Numer of temperature coupling groups in the system
+ * \param[in]  velocityScaling     Type of the Parrinello-Rahman velocity scaling
  *
  * \retrun                         Pointer to CUDA kernel
  */
-inline auto selectLeapFrogKernelPtr(int numTempScaleValues)
+inline auto selectLeapFrogKernelPtr(int numTempScaleValues, VelocityScalingType velocityScaling)
 {
-    auto kernelPtr = leapfrog_kernel<NumTempScaleValues::None>;
+    auto kernelPtr = leapfrog_kernel<NumTempScaleValues::None, VelocityScalingType::None>;
 
-    if (numTempScaleValues == 0)
-    {
-        kernelPtr = leapfrog_kernel<NumTempScaleValues::None>;
-    }
-    else if (numTempScaleValues == 1)
+    if (velocityScaling == VelocityScalingType::None)
     {
-        kernelPtr = leapfrog_kernel<NumTempScaleValues::Single>;
+        if (numTempScaleValues == 0)
+        {
+            kernelPtr = leapfrog_kernel<NumTempScaleValues::None, VelocityScalingType::None>;
+        }
+        else if (numTempScaleValues == 1)
+        {
+            kernelPtr = leapfrog_kernel<NumTempScaleValues::Single, VelocityScalingType::None>;
+        }
+        else if (numTempScaleValues > 1)
+        {
+            kernelPtr = leapfrog_kernel<NumTempScaleValues::Multiple, VelocityScalingType::None>;
+        }
+        else
+        {
+            GMX_RELEASE_ASSERT(false, "Number of temperature coupling groups should be greater than zero (zero for no coupling).");
+        }
     }
-    else if (numTempScaleValues > 1)
+    else
+    if (velocityScaling == VelocityScalingType::Diagonal)
     {
-        kernelPtr = leapfrog_kernel<NumTempScaleValues::Multiple>;
+        if (numTempScaleValues == 0)
+        {
+            kernelPtr = leapfrog_kernel<NumTempScaleValues::None, VelocityScalingType::Diagonal>;
+        }
+        else if (numTempScaleValues == 1)
+        {
+            kernelPtr = leapfrog_kernel<NumTempScaleValues::Single, VelocityScalingType::Diagonal>;
+        }
+        else if (numTempScaleValues > 1)
+        {
+            kernelPtr = leapfrog_kernel<NumTempScaleValues::Multiple, VelocityScalingType::Diagonal>;
+        }
+        else
+        {
+            GMX_RELEASE_ASSERT(false, "Number of temperature coupling groups should be greater than zero (zero for no coupling).");
+        }
     }
     else
     {
-        GMX_RELEASE_ASSERT(false, "Number of temperature coupling groups should be greater than zero or zero for no coupling.");
+        GMX_RELEASE_ASSERT(false, "Only isotropic Parrinello-Rahman pressure coupling is supported.");
     }
     return kernelPtr;
 }
@@ -197,23 +258,39 @@ void LeapFrogCuda::integrate(const float3                      *d_x,
                              const float3                      *d_f,
                              const real                         dt,
                              const bool                         doTempCouple,
-                             gmx::ArrayRef<const t_grp_tcstat>  tcstat)
+                             gmx::ArrayRef<const t_grp_tcstat>  tcstat,
+                             const bool                         doPressureCouple,
+                             const float                        dtPressureCouple,
+                             const matrix                       velocityScalingMatrix)
 {
 
     ensureNoPendingCudaError("In CUDA version of Leap-Frog integrator");
 
-    auto kernelPtr          = leapfrog_kernel<NumTempScaleValues::None>;
-
-    if (doTempCouple)
+    auto kernelPtr          = leapfrog_kernel<NumTempScaleValues::None, VelocityScalingType::None>;
+    if (doTempCouple || doPressureCouple)
     {
-        GMX_ASSERT(numTempScaleValues_ == ssize(h_lambdas_), "Number of temperature scaling factors changed since it was set for the last time.");
-        for (int i = 0; i < numTempScaleValues_; i++)
+        if (doTempCouple)
+        {
+            GMX_ASSERT(numTempScaleValues_ == ssize(h_lambdas_), "Number of temperature scaling factors changed since it was set for the last time.");
+            for (int i = 0; i < numTempScaleValues_; i++)
+            {
+                h_lambdas_[i] = tcstat[i].lambda;
+            }
+            copyToDeviceBuffer(&d_lambdas_, h_lambdas_.data(),
+                               0, numTempScaleValues_, stream_, GpuApiCallBehavior::Async, nullptr);
+        }
+        VelocityScalingType velocityScaling = VelocityScalingType::None;
+        if (doPressureCouple)
         {
-            h_lambdas_[i] = tcstat[i].lambda;
+            velocityScaling = VelocityScalingType::Diagonal;
+            GMX_ASSERT(velocityScalingMatrix[YY][XX] == 0 && velocityScalingMatrix[ZZ][XX] == 0 && velocityScalingMatrix[ZZ][YY] == 0 &&
+                       velocityScalingMatrix[XX][YY] == 0 && velocityScalingMatrix[XX][ZZ] == 0 && velocityScalingMatrix[YY][ZZ] == 0,
+                       "Fully anisotropic Parrinello-Rahman pressure coupling is not yet supported in GPU version of Leap-Frog integrator.");
+            velocityScalingMatrixDiagonal_ = make_float3(dtPressureCouple*velocityScalingMatrix[XX][XX],
+                                                         dtPressureCouple*velocityScalingMatrix[YY][YY],
+                                                         dtPressureCouple*velocityScalingMatrix[ZZ][ZZ]);
         }
-        copyToDeviceBuffer(&d_lambdas_, h_lambdas_.data(),
-                           0, numTempScaleValues_, stream_, GpuApiCallBehavior::Async, nullptr);
-        kernelPtr = selectLeapFrogKernelPtr(numTempScaleValues_);
+        kernelPtr = selectLeapFrogKernelPtr(numTempScaleValues_, velocityScaling);
     }
 
     const auto            kernelArgs = prepareGpuKernelArguments(kernelPtr, kernelLaunchConfig_,
@@ -222,7 +299,8 @@ void LeapFrogCuda::integrate(const float3                      *d_x,
                                                                  &d_v,
                                                                  &d_f,
                                                                  &d_inverseMasses_, &dt,
-                                                                 &d_lambdas_, &d_tempScaleGroups_);
+                                                                 &d_lambdas_, &d_tempScaleGroups_,
+                                                                 &velocityScalingMatrixDiagonal_);
     launchGpuKernel(kernelPtr, kernelLaunchConfig_, nullptr, "leapfrog_kernel", kernelArgs);
 
     return;
index d170d1eeb8c38082855be278fcf6209d0b845573..544b16f70edb956f4cec723630b48afadd2a3461 100644 (file)
@@ -80,13 +80,16 @@ class LeapFrogCuda
          * Integrates the equation of motion using Leap-Frog algorithm.
          * Updates coordinates and velocities on the GPU.
          *
-         * \param[in]     d_x           Initial coordinates.
-         * \param[out]    d_xp          Place to save the resulting coordinates to.
-         * \param[in,out] d_v           Velocities (will be updated).
-         * \param[in]     d_f           Forces.
-         * \param[in]     dt            Timestep.
-         * \param[in]     doTempCouple  If the temperature coupling should be applied.
-         * \param[in]     tcstat        Temperature coupling data.
+         * \param[in]     d_x                    Initial coordinates.
+         * \param[out]    d_xp                   Place to save the resulting coordinates to.
+         * \param[in,out] d_v                    Velocities (will be updated).
+         * \param[in]     d_f                    Forces.
+         * \param[in]     dt                     Timestep.
+         * \param[in]     doTempCouple           If the temperature coupling should be applied.
+         * \param[in]     tcstat                 Temperature coupling data.
+         * \param[in]     doPressureCouple       If the temperature coupling should be applied.
+         * \param[in]     dtPressureCouple       Period between pressure coupling steps
+         * \param[in]     velocityScalingMatrix  Parrinello-Rahman velocity scaling matrix
          */
         void integrate(const float3                     *d_x,
                        float3                           *d_xp,
@@ -94,7 +97,10 @@ class LeapFrogCuda
                        const float3                     *d_f,
                        const real                        dt,
                        const bool                        doTempCouple,
-                       gmx::ArrayRef<const t_grp_tcstat> tcstat);
+                       gmx::ArrayRef<const t_grp_tcstat> tcstat,
+                       const bool                        doPressureCouple,
+                       const float                       dtPressureCouple,
+                       const matrix                      velocityScalingMatrix);
 
         /*! \brief Set the integrator
          *
@@ -153,6 +159,9 @@ class LeapFrogCuda
         //! Maximum size of the temperature coupling groups array
         int                    numTempScaleGroupsAlloc_ = -1;
 
+        //! Vector with diagonal elements of the pressure coupling velocity rescale factors
+        float3                 velocityScalingMatrixDiagonal_;
+
 };
 
 } //namespace gmx
index 20da038183b1d980a85e5ccacb4b6441d90c68e6..593fcd476ee9278b111090b17bad5579ecd9a051 100644 (file)
@@ -107,22 +107,28 @@ struct LeapFrogTestParameters
     rvec f;
     //! Number of temperature coupling group (zero for no temperature coupling)
     int  numTCoupleGroups;
+    //! Number of steps between pressure coupling steps (zero for no pressure coupling).
+    int  nstpcouple;
 };
 
 //! The set of parameters combinations to run the test on
-const LeapFrogTestParameters parametersSets[] = {{  1, 0.001,    1, {0.0,  0.0, 0.0}, {0.0, 0.0, 0.0},  0},    // Zero velocity and force
-                                                 {  1, 0.001,    1, {0.0,  0.0, 0.0}, {-3.0, 2.0, -1.0}, 0},   // Zero velocity
-                                                 {  1, 0.001,    1, {1.0, -2.0, 3.0}, {0.0, 0.0, 0.0},  0},    // Zero force
-                                                 {  1, 0.001,    1, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0}, 0},   // 1 particle
-                                                 { 10, 0.001,    1, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0}, 0},   // 10 particles
-                                                 {100, 0.001,    1, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0}, 0},   // 100 particles
-                                                 {300, 0.001,    1, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0}, 0},   // 300 particles
-                                                 {  1, 0.0005,   1, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0}, 0},   // 0.0005 ps timestep
-                                                 {  1, 0.001,   10, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0}, 0},   // 10 step
-                                                 {  1, 0.001,  100, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0}, 0},   // 100 steps
-                                                 {100, 0.001,    1, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0}, 1},   // 1 temperature couple group
-                                                 {100, 0.001,    1, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0}, 2},   // 2 temperature couple groups
-                                                 {100, 0.001,    1, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0}, 10}}; // 10 temperature couple groups
+const LeapFrogTestParameters parametersSets[] = {{  1, 0.001,    1, {0.0,  0.0, 0.0}, { 0.0, 0.0,  0.0},  0, 0},  // Zero velocity and force
+                                                 {  1, 0.001,    1, {0.0,  0.0, 0.0}, {-3.0, 2.0, -1.0},  0, 0},  // Zero velocity
+                                                 {  1, 0.001,    1, {1.0, -2.0, 3.0}, { 0.0, 0.0,  0.0},  0, 0},  // Zero force
+                                                 {  1, 0.001,    1, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0},  0, 0},  // 1 particle
+                                                 { 10, 0.001,    1, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0},  0, 0},  // 10 particles
+                                                 {100, 0.001,    1, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0},  0, 0},  // 100 particles
+                                                 {300, 0.001,    1, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0},  0, 0},  // 300 particles
+                                                 {  1, 0.0005,   1, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0},  0, 0},  // 0.0005 ps timestep
+                                                 {  1, 0.001,   10, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0},  0, 0},  // 10 step
+                                                 {  1, 0.001,  100, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0},  0, 0},  // 100 steps
+                                                 {100, 0.001,    1, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0},  1, 0},  // 1 temperature couple group
+                                                 {100, 0.001,    1, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0},  2, 0},  // 2 temperature couple groups
+                                                 {100, 0.001,    1, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0}, 10, 0},  // 10 temperature couple groups
+                                                 {100, 0.001,   10, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0},  0, 1},  // With pressure coupling
+                                                 {100, 0.001,   10, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0},  2, 1},  // With both temperature and pressure coupling
+                                                 {100, 0.001,   10, {1.0, -2.0, 3.0}, {-3.0, 2.0, -1.0},  0, 3}}; // Do pressure coupling not on every step
+
 
 
 /*! \brief Test fixture for LeapFrog integrator.
@@ -230,15 +236,21 @@ TEST_P(LeapFrogTest, SimpleIntegration)
 
         LeapFrogTestParameters parameters = GetParam();
 
-        std::string            testDescription = formatString("Testing %s with %d atoms for %d timesteps with %d temperature coupling groups (dt = %f, v0=(%f, %f, %f), f0=(%f, %f, %f))",
+        std::string            testDescription = formatString("Testing %s with %d atoms for %d timesteps with %d temperature coupling groups and %s pressure coupling (dt = %f, v0=(%f, %f, %f), f0=(%f, %f, %f), nstpcouple = %d)",
                                                               runnerName.c_str(),
-                                                              parameters.numAtoms, parameters.numSteps, parameters.numTCoupleGroups, parameters.timestep,
+                                                              parameters.numAtoms, parameters.numSteps, parameters.numTCoupleGroups,
+                                                              parameters.nstpcouple == 0 ? "without" : "with",
+                                                              parameters.timestep,
                                                               parameters.v[XX], parameters.v[YY], parameters.v[ZZ],
-                                                              parameters.f[XX], parameters.f[YY], parameters.f[ZZ]);
+                                                              parameters.f[XX], parameters.f[YY], parameters.f[ZZ],
+                                                              parameters.nstpcouple);
         SCOPED_TRACE(testDescription);
 
         std::unique_ptr<LeapFrogTestData> testData =
-            std::make_unique<LeapFrogTestData>(parameters.numAtoms, parameters.timestep, parameters.v, parameters.f, parameters.numTCoupleGroups);
+            std::make_unique<LeapFrogTestData>(parameters.numAtoms, parameters.timestep,
+                                               parameters.v, parameters.f,
+                                               parameters.numTCoupleGroups,
+                                               parameters.nstpcouple);
 
         runner.second(testData.get(), parameters.numSteps);
 
@@ -249,7 +261,7 @@ TEST_P(LeapFrogTest, SimpleIntegration)
         FloatingPointTolerance tolerance = absoluteTolerance(parameters.numSteps*0.000005);
 
         // Test against the analytical solution (without temperature coupling)
-        if (parameters.numTCoupleGroups == 0)
+        if (parameters.numTCoupleGroups == 0 && parameters.nstpcouple == 0)
         {
             testAgainstAnalyticalSolution(tolerance, *testData, totalTime);
         }
index 526794dd9488037f9bc212d60e85fb45debc4f02..e68b893a6b55f99bfde257b1c2c5f82e1cefd57d 100644 (file)
@@ -67,7 +67,7 @@ namespace gmx
 namespace test
 {
 
-LeapFrogTestData::LeapFrogTestData(int numAtoms, real timestep, const rvec v0, const rvec f0, int numTCoupleGroups) :
+LeapFrogTestData::LeapFrogTestData(int numAtoms, real timestep, const rvec v0, const rvec f0, int numTCoupleGroups, int nstpcouple) :
     numAtoms_(numAtoms),
     timestep_(timestep),
     x0_(numAtoms),
@@ -145,10 +145,8 @@ LeapFrogTestData::LeapFrogTestData(int numAtoms, real timestep, const rvec v0, c
         }
     }
 
-    // Data needed for current CPU-based implementation
     inputRecord_.eI      = eiMD;
     inputRecord_.delta_t = timestep_;
-    inputRecord_.epc     = epcNO;
 
     state_.flags = 0;
 
@@ -177,20 +175,45 @@ LeapFrogTestData::LeapFrogTestData(int numAtoms, real timestep, const rvec v0, c
     mdAtoms_.havePartiallyFrozenAtoms = false;
     mdAtoms_.cFREEZE                  = nullptr;
 
-    prVScalingMatrix_[XX][XX] = 1.0;
-    prVScalingMatrix_[XX][YY] = 0.0;
-    prVScalingMatrix_[XX][ZZ] = 0.0;
+    update_ = std::make_unique<Update>(&inputRecord_, nullptr);
+    update_->setNumAtoms(numAtoms);
+
+    doPressureCouple_ = (nstpcouple != 0);
 
-    prVScalingMatrix_[YY][XX] = 0.0;
-    prVScalingMatrix_[YY][YY] = 1.0;
-    prVScalingMatrix_[YY][ZZ] = 0.0;
+    if (doPressureCouple_)
+    {
+        inputRecord_.epc        = epcPARRINELLORAHMAN;
+        inputRecord_.nstpcouple = nstpcouple;
+        dtPressureCouple_       = inputRecord_.nstpcouple*inputRecord_.delta_t;
 
-    prVScalingMatrix_[ZZ][XX] = 0.0;
-    prVScalingMatrix_[ZZ][YY] = 0.0;
-    prVScalingMatrix_[ZZ][ZZ] = 1.0;
+        velocityScalingMatrix_[XX][XX] = 1.2;
+        velocityScalingMatrix_[XX][YY] = 0.0;
+        velocityScalingMatrix_[XX][ZZ] = 0.0;
+
+        velocityScalingMatrix_[YY][XX] = 0.0;
+        velocityScalingMatrix_[YY][YY] = 0.8;
+        velocityScalingMatrix_[YY][ZZ] = 0.0;
+
+        velocityScalingMatrix_[ZZ][XX] = 0.0;
+        velocityScalingMatrix_[ZZ][YY] = 0.0;
+        velocityScalingMatrix_[ZZ][ZZ] = 0.9;
+    }
+    else
+    {
+        inputRecord_.epc               = epcNO;
+        velocityScalingMatrix_[XX][XX] = 1.0;
+        velocityScalingMatrix_[XX][YY] = 0.0;
+        velocityScalingMatrix_[XX][ZZ] = 0.0;
+
+        velocityScalingMatrix_[YY][XX] = 0.0;
+        velocityScalingMatrix_[YY][YY] = 1.0;
+        velocityScalingMatrix_[YY][ZZ] = 0.0;
+
+        velocityScalingMatrix_[ZZ][XX] = 0.0;
+        velocityScalingMatrix_[ZZ][YY] = 0.0;
+        velocityScalingMatrix_[ZZ][ZZ] = 1.0;
+    }
 
-    update_ = std::make_unique<Update>(&inputRecord_, nullptr);
-    update_->setNumAtoms(numAtoms);
 }
 
 LeapFrogTestData::~LeapFrogTestData()
index ce9f528891e6444dc0798df9062ec2c20ba13fce..2eb1ea636efaf4698b98116e1e54a9a62c184324 100644 (file)
@@ -35,7 +35,7 @@
 /*! \internal \file
  * \brief Tests for the Leap-Frog integrator
  *
- * \todo Prepare for temperature and pressure controlled integrators.
+ * \todo Add anisotropic Parrinello-Rahman and other pressure coupling schemes
  * \todo Add PBC handling test.
  * \todo Reference values tests.
  *
@@ -102,14 +102,18 @@ class LeapFrogTestData
         t_fcdata                forceCalculationData_;
         //! Kinetic energy data (to disable non-equilibrium MD integration)
         gmx_ekindata_t          kineticEnergyData_;
-        //! Parrinnello-Rahman velocity rescalling matrix
-        matrix                  prVScalingMatrix_;
         //! Update data
         std::unique_ptr<Update> update_;
 
         //! Number of temperature coupling groups
         int                     numTCoupleGroups_;
 
+        //! If the pressure coupling is enabled
+        bool                    doPressureCouple_;
+        //! Period between pressure coupling steps
+        float                   dtPressureCouple_;
+        //! Matrix for Parrinello-Rahman velocity scaling
+        matrix                  velocityScalingMatrix_;
 
         /*! \brief Constructor.
          *
@@ -118,8 +122,10 @@ class LeapFrogTestData
          * \param[in]  v0                Initial velocity (same for all particles)
          * \param[in]  f0                External constant force, acting on all particles
          * \param[in]  numTCoupleGroups  Number of temperature coupling groups (zero for no temperature coupling)
+         * \param[in]  nstpcouple        Number of steps between pressure coupling steps (zero for no pressure coupling)
          */
-        LeapFrogTestData(int numAtoms, real timestep, const rvec v0, const rvec f0, int numTCoupleGroups);
+        LeapFrogTestData(int numAtoms, real timestep, const rvec v0, const rvec f0,
+                         int numTCoupleGroups, int nstpcouple);
 
         ~LeapFrogTestData();
 };
index 5da88994ca48cb3ca369c7adfed1941ec9acf188..2f1e498ea61a406f443ffdf19bc7a690ab690a3a 100644 (file)
@@ -92,7 +92,7 @@ void integrateLeapFrogSimple(LeapFrogTestData *testData,
                       testData->f_,
                       &testData->forceCalculationData_,
                       &testData->kineticEnergyData_,
-                      testData->prVScalingMatrix_,
+                      testData->velocityScalingMatrix_,
                       testData->update_.get(),
                       etrtNONE,
                       nullptr,
index 59b9da3469a0d9a407ceccafe07d0bb3561964b6..537aa30b137062c86a7f2f357dc41afda1ba2b1b 100644 (file)
@@ -58,6 +58,7 @@
 #include "gromacs/gpu_utils/gpu_utils.h"
 #include "gromacs/math/vec.h"
 #include "gromacs/mdlib/leapfrog_cuda.cuh"
+#include "gromacs/mdlib/stat.h"
 #include "gromacs/mdtypes/group.h"
 
 namespace gmx
@@ -96,8 +97,11 @@ void integrateLeapFrogGpu(LeapFrogTestData *testData,
     bool doTempCouple = testData->numTCoupleGroups_ > 0;
     for (int step = 0; step < numSteps; step++)
     {
-
-        integrator->integrate(d_x, d_xp, d_v, d_f, testData->timestep_, doTempCouple, testData->kineticEnergyData_.tcstat);
+        // This follows the logic of the CPU-based implementation
+        bool doPressureCouple = testData->doPressureCouple_ && do_per_step(step + testData->inputRecord_.nstpcouple - 1, testData->inputRecord_.nstpcouple);
+        integrator->integrate(d_x, d_xp, d_v, d_f, testData->timestep_,
+                              doTempCouple, testData->kineticEnergyData_.tcstat,
+                              doPressureCouple, testData->dtPressureCouple_, testData->velocityScalingMatrix_);
 
         copyFromDeviceBuffer(h_xp, &d_xp, 0, numAtoms, nullptr, GpuApiCallBehavior::Sync, nullptr);
         copyToDeviceBuffer(&d_x,    h_xp, 0, numAtoms, nullptr, GpuApiCallBehavior::Sync, nullptr);
diff --git a/src/gromacs/mdlib/tests/refdata/WithParameters_LeapFrogTest_SimpleIntegration_13.xml b/src/gromacs/mdlib/tests/refdata/WithParameters_LeapFrogTest_SimpleIntegration_13.xml
new file mode 100644 (file)
index 0000000..e73d8e6
--- /dev/null
@@ -0,0 +1,1010 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <Sequence Name="FinalPositions">
+    <Int Name="Length">100</Int>
+    <Atom>
+      <Real Name="XX">0.0097698296075089917</Real>
+      <Real Name="YY">6.4801975255594693</Real>
+      <Real Name="ZZ">0.029797048462235041</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">1.009852033319113</Real>
+      <Real Name="YY">5.480142657348507</Real>
+      <Real Name="ZZ">0.029824474345716775</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">2.0098794345563151</Real>
+      <Real Name="YY">4.4801243679448515</Real>
+      <Real Name="ZZ">0.029833616306877371</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">3.0098931351749147</Real>
+      <Real Name="YY">3.4801152232430232</Real>
+      <Real Name="ZZ">0.029838187287457671</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">4.0099013555460754</Real>
+      <Real Name="YY">2.480109736421928</Real>
+      <Real Name="ZZ">0.029840929875805843</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">5.0099068357935153</Real>
+      <Real Name="YY">1.4801060785411964</Real>
+      <Real Name="ZZ">0.029842758268037943</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">6.0099107502559717</Real>
+      <Real Name="YY">0.48010346576924573</Real>
+      <Real Name="ZZ">0.029844064262489478</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">7.0099136861028146</Real>
+      <Real Name="YY">-0.5198984938097172</Real>
+      <Real Name="ZZ">0.029845043758328086</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">8.0099159695392483</Real>
+      <Real Name="YY">-1.5199000179266884</Real>
+      <Real Name="ZZ">0.029845805588424822</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">9.0099177962883985</Real>
+      <Real Name="YY">-2.5199012372202652</Real>
+      <Real Name="ZZ">0.029846415052502174</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">10.009919290901335</Real>
+      <Real Name="YY">-3.5199022348241016</Real>
+      <Real Name="ZZ">0.029846913704929142</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">11.009920536412116</Real>
+      <Real Name="YY">-4.5199030661606319</Real>
+      <Real Name="ZZ">0.029847329248618246</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">12.009921590305852</Real>
+      <Real Name="YY">-5.5199037695992308</Real>
+      <Real Name="ZZ">0.029847680862509048</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">13.009922493643344</Real>
+      <Real Name="YY">6.4800956274533936</Real>
+      <Real Name="ZZ">0.029847982245843997</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">14.009923276535838</Real>
+      <Real Name="YY">5.4800951048990045</Real>
+      <Real Name="ZZ">0.029848243444734305</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">15.009923961566765</Real>
+      <Real Name="YY">4.4800946476639121</Real>
+      <Real Name="ZZ">0.029848471993763327</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">16.009924566005825</Real>
+      <Real Name="YY">3.4800942442211844</Real>
+      <Real Name="ZZ">0.029848673654671264</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">17.009925103284978</Real>
+      <Real Name="YY">2.4800938856054273</Real>
+      <Real Name="ZZ">0.029848852908811681</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">18.009925584008442</Real>
+      <Real Name="YY">1.4800935647386955</Real>
+      <Real Name="ZZ">0.029849013294095183</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">19.009926016659556</Real>
+      <Real Name="YY">0.48009327595863815</Real>
+      <Real Name="ZZ">0.029849157640850367</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">20.009926408105802</Real>
+      <Real Name="YY">-0.51990698531855695</Real>
+      <Real Name="ZZ">0.029849288240295525</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.0099267639660255893</Real>
+      <Real Name="YY">-1.5199072228432795</Real>
+      <Real Name="ZZ">0.029849406967063823</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">1.0099270888818817</Real>
+      <Real Name="YY">-2.5199074397136791</Real>
+      <Real Name="ZZ">0.02984951536976535</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">2.0099273867214169</Real>
+      <Real Name="YY">-3.5199076385115453</Real>
+      <Real Name="ZZ">0.029849614738908389</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">3.0099276607337888</Real>
+      <Real Name="YY">-4.5199078214055834</Real>
+      <Real Name="ZZ">0.029849706158520003</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">4.0099279136682853</Real>
+      <Real Name="YY">-5.5199079902308457</Real>
+      <Real Name="ZZ">0.029849790545853783</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">5.0099281478668951</Real>
+      <Real Name="YY">6.4800918534494647</Real>
+      <Real Name="ZZ">0.029849868682273972</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">6.0099283653370312</Real>
+      <Real Name="YY">5.4800917082954674</Real>
+      <Real Name="ZZ">0.029849941237521275</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">7.0099285678092258</Real>
+      <Real Name="YY">4.4800915731520909</Real>
+      <Real Name="ZZ">0.029850008788958427</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">8.0099287567832764</Real>
+      <Real Name="YY">3.4800914470182733</Real>
+      <Real Name="ZZ">0.029850071836966405</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">9.0099289335654511</Real>
+      <Real Name="YY">2.48009132902212</Real>
+      <Real Name="ZZ">0.029850130817361008</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">10.00992909929874</Real>
+      <Real Name="YY">1.4800912184007273</Real>
+      <Real Name="ZZ">0.029850186111480926</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">11.009929254987588</Real>
+      <Real Name="YY">0.48009111448366087</Real>
+      <Real Name="ZZ">0.029850238054442077</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">12.009929401518265</Real>
+      <Real Name="YY">-0.51990898332063684</Real>
+      <Real Name="ZZ">0.029850286941934905</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">13.009929539675769</Real>
+      <Real Name="YY">-1.5199090755361171</Real>
+      <Real Name="ZZ">0.029850333035856724</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">14.009929670157849</Real>
+      <Real Name="YY">-2.5199091626285162</Real>
+      <Real Name="ZZ">0.029850376569005087</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">15.009929793586844</Real>
+      <Real Name="YY">-3.519909245013217</Real>
+      <Real Name="ZZ">0.02985041774901033</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">16.009929910519578</Real>
+      <Real Name="YY">-4.5199093230618823</Real>
+      <Real Name="ZZ">0.029850456761646861</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">17.009930021455762</Real>
+      <Real Name="YY">-5.5199093971080497</Real>
+      <Real Name="ZZ">0.029850493773635373</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">18.009930126845131</Real>
+      <Real Name="YY">6.4800905325480898</Real>
+      <Real Name="ZZ">0.029850528935024455</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">19.009930227093559</Real>
+      <Real Name="YY">5.4800904656356364</Real>
+      <Real Name="ZZ">0.029850562381223824</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">20.009930322568263</Real>
+      <Real Name="YY">4.4800904019094929</Real>
+      <Real Name="ZZ">0.029850594234747028</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.0099304136022701581</Real>
+      <Real Name="YY">3.480090341147354</Real>
+      <Real Name="ZZ">0.029850624606711007</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">1.0099305004983714</Real>
+      <Real Name="YY">2.4800902831471303</Real>
+      <Real Name="ZZ">0.029850653598131181</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">2.009930583532423</Real>
+      <Real Name="YY">1.4800902277246957</Real>
+      <Real Name="ZZ">0.029850681301043781</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">3.0099306629562985</Real>
+      <Real Name="YY">0.48009017471193155</Real>
+      <Real Name="ZZ">0.029850707799481933</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">4.009930739000434</Real>
+      <Real Name="YY">-0.51990987604497041</Real>
+      <Real Name="ZZ">0.029850733170326965</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">5.0099308118760675</Real>
+      <Real Name="YY">-1.5199099246870016</Real>
+      <Real Name="ZZ">0.029850757484053487</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">6.0099308817771817</Real>
+      <Real Name="YY">-2.519909971343643</Real>
+      <Real Name="ZZ">0.029850780805382966</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">7.0099309488822525</Real>
+      <Real Name="YY">-3.5199100161340198</Real>
+      <Real Name="ZZ">0.029850803193859268</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">8.0099310133557502</Real>
+      <Real Name="YY">-4.5199100591679109</Real>
+      <Real Name="ZZ">0.029850824704356124</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">9.0099310753495025</Real>
+      <Real Name="YY">-5.5199101005466513</Real>
+      <Real Name="ZZ">0.029850845387526154</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">10.009931135003864</Real>
+      <Real Name="YY">6.4800898596360677</Real>
+      <Real Name="ZZ">0.029850865290199233</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">11.009931192448803</Real>
+      <Real Name="YY">5.480089821293503</Real>
+      <Real Name="ZZ">0.029850884455736242</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">12.009931247804838</Real>
+      <Real Name="YY">4.4800897843452123</Real>
+      <Real Name="ZZ">0.029850902924344662</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">13.009931301183874</Real>
+      <Real Name="YY">3.4800897487165043</Real>
+      <Real Name="ZZ">0.029850920733359893</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">14.009931352689959</Real>
+      <Real Name="YY">2.4800897143379266</Real>
+      <Real Name="ZZ">0.02985093791749743</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">15.009931402419971</Real>
+      <Real Name="YY">1.480089681144817</Real>
+      <Real Name="ZZ">0.029850954509078469</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">16.009931450464222</Real>
+      <Real Name="YY">0.48008964907689655</Real>
+      <Real Name="ZZ">0.029850970538233049</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">17.009931496906997</Real>
+      <Real Name="YY">-0.5199103819220926</Real>
+      <Real Name="ZZ">0.02985098603308247</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">18.009931541827058</Real>
+      <Real Name="YY">-1.5199104119047215</Real>
+      <Real Name="ZZ">0.029851001019904053</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">19.00993158529808</Real>
+      <Real Name="YY">-2.5199104409201691</Real>
+      <Real Name="ZZ">0.029851015523279765</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">20.009931627389079</Real>
+      <Real Name="YY">-3.5199104690144911</Real>
+      <Real Name="ZZ">0.029851029566230879</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.0099316681647292314</Real>
+      <Real Name="YY">-4.5199104962308656</Real>
+      <Real Name="ZZ">0.029851043170339736</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">1.0099317076857446</Real>
+      <Real Name="YY">-5.5199105226098135</Real>
+      <Real Name="ZZ">0.02985105635586063</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">2.0099317460091535</Real>
+      <Real Name="YY">6.4800894518106009</Real>
+      <Real Name="ZZ">0.029851069141820306</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">3.0099317831885797</Real>
+      <Real Name="YY">5.480089426994585</Real>
+      <Real Name="ZZ">0.029851081546109538</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">4.0099318192744944</Real>
+      <Real Name="YY">4.4800894029084519</Real>
+      <Real Name="ZZ">0.029851093585566733</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">5.0099318543144395</Real>
+      <Real Name="YY">3.4800893795204684</Real>
+      <Real Name="ZZ">0.029851105276054148</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">6.0099318883532407</Real>
+      <Real Name="YY">2.4800893568007125</Real>
+      <Real Name="ZZ">0.029851116632527628</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">7.0099319214332079</Real>
+      <Real Name="YY">1.4800893347209494</Real>
+      <Real Name="ZZ">0.02985112766910045</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">8.0099319535942826</Real>
+      <Real Name="YY">0.48008931325451309</Real>
+      <Real Name="ZZ">0.029851138399101831</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">9.0099319848742354</Real>
+      <Real Name="YY">-0.51991070762380165</Real>
+      <Real Name="ZZ">0.029851148835130549</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">10.009932015308781</Real>
+      <Real Name="YY">-1.5199107279378374</Real>
+      <Real Name="ZZ">0.02985115898910444</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">11.009932044931739</Real>
+      <Real Name="YY">-2.5199107477101661</Real>
+      <Real Name="ZZ">0.029851168872305683</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">12.009932073775147</Real>
+      <Real Name="YY">-3.5199107669621701</Real>
+      <Real Name="ZZ">0.029851178495422705</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">13.009932101869376</Real>
+      <Real Name="YY">-4.5199107857141216</Real>
+      <Real Name="ZZ">0.029851187868588636</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">14.009932129243241</Real>
+      <Real Name="YY">-5.5199108039852538</Real>
+      <Real Name="ZZ">0.029851197001416949</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">15.009932155924094</Real>
+      <Real Name="YY">6.4800891782061738</Real>
+      <Real Name="ZZ">0.029851205903034445</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">16.009932181937931</Real>
+      <Real Name="YY">5.4800891608428159</Real>
+      <Real Name="ZZ">0.029851214582111492</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">17.009932207309443</Real>
+      <Real Name="YY">4.4800891439081836</Real>
+      <Real Name="ZZ">0.029851223046890342</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">18.009932232062138</Real>
+      <Real Name="YY">3.4800891273865897</Real>
+      <Real Name="ZZ">0.029851231305211164</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">19.009932256218388</Real>
+      <Real Name="YY">2.4800891112631076</Real>
+      <Real Name="ZZ">0.02985123936453633</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">20.009932279799489</Real>
+      <Real Name="YY">1.4800890955235173</Real>
+      <Real Name="ZZ">0.029851247231972786</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.0099323028257379421</Real>
+      <Real Name="YY">0.48008908015427026</Real>
+      <Real Name="ZZ">0.029851254914293079</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">1.0099323253164934</Real>
+      <Real Name="YY">-0.51991093485755202</Real>
+      <Real Name="ZZ">0.029851262417954771</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">2.0099323472902202</Real>
+      <Real Name="YY">-1.5199109495242751</Real>
+      <Real Name="ZZ">0.029851269749118503</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">3.0099323687645443</Real>
+      <Real Name="YY">-2.5199109638576629</Real>
+      <Real Name="ZZ">0.029851276913664876</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">4.0099323897562993</Real>
+      <Real Name="YY">-3.5199109778689537</Real>
+      <Real Name="ZZ">0.029851283917210179</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">5.0099324102815697</Real>
+      <Real Name="YY">-4.5199109915688807</Real>
+      <Real Name="ZZ">0.029851290765121156</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">6.0099324303557378</Real>
+      <Real Name="YY">-5.5199110049677103</Real>
+      <Real Name="ZZ">0.029851297462528605</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">7.0099324499935092</Real>
+      <Real Name="YY">6.4800889819247374</Real>
+      <Real Name="ZZ">0.029851304014340246</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">8.0099324692089624</Real>
+      <Real Name="YY">5.4800889690990671</Real>
+      <Real Name="ZZ">0.029851310425252704</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">9.0099324880155756</Real>
+      <Real Name="YY">4.480088956546286</Real>
+      <Real Name="ZZ">0.029851316699762757</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">10.009932506426262</Real>
+      <Real Name="YY">3.4800889442577732</Real>
+      <Real Name="ZZ">0.029851322842177855</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">11.009932524453392</Real>
+      <Real Name="YY">2.480088932225271</Real>
+      <Real Name="ZZ">0.029851328856626006</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">12.009932542108828</Real>
+      <Real Name="YY">1.4800889204408607</Real>
+      <Real Name="ZZ">0.029851334747064889</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">13.00993255940395</Real>
+      <Real Name="YY">0.48008890889694922</Real>
+      <Real Name="ZZ">0.029851340517290749</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">14.009932576349676</Real>
+      <Real Name="YY">-0.51991110241375182</Real>
+      <Real Name="ZZ">0.029851346170946393</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">15.009932592956485</Real>
+      <Real Name="YY">-1.519911113498239</Real>
+      <Real Name="ZZ">0.029851351711528893</Real>
+    </Atom>
+  </Sequence>
+  <Sequence Name="FinalVelocities">
+    <Int Name="Length">100</Int>
+    <Atom>
+      <Real Name="XX">0.95822607576190366</Real>
+      <Real Name="YY">-1.9641293239067006</Real>
+      <Real Name="ZZ">2.9631494909258231</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.97314533441836704</Real>
+      <Real Name="YY">-1.9740934005992847</Real>
+      <Real Name="ZZ">2.9681292894493581</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.97811842063718746</Real>
+      <Real Name="YY">-1.9774147594968121</Real>
+      <Real Name="ZZ">2.9697892222905393</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98060496374659767</Real>
+      <Real Name="YY">-1.9790754389455758</Real>
+      <Real Name="ZZ">2.9706191887111291</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98209688961224395</Real>
+      <Real Name="YY">-1.9800718466148342</Real>
+      <Real Name="ZZ">2.9711171685634827</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98309150685600899</Real>
+      <Real Name="YY">-1.9807361183943397</Real>
+      <Real Name="ZZ">2.9714491551317161</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98380194774441132</Real>
+      <Real Name="YY">-1.9812105982368438</Real>
+      <Real Name="ZZ">2.971686288394745</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98433477841071371</Real>
+      <Real Name="YY">-1.9815664581187205</Real>
+      <Real Name="ZZ">2.9718641383420108</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98474920226228269</Real>
+      <Real Name="YY">-1.9818432380268491</Real>
+      <Real Name="ZZ">2.9720024660787798</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98508074134353718</Real>
+      <Real Name="YY">-1.9820646619533508</Real>
+      <Real Name="ZZ">2.9721131282681879</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98535200059183592</Real>
+      <Real Name="YY">-1.9822458269841234</Real>
+      <Real Name="ZZ">2.9722036700595287</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98557804996541931</Real>
+      <Real Name="YY">-1.9823967978431032</Real>
+      <Real Name="ZZ">2.9722791215523063</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98576932251229665</Real>
+      <Real Name="YY">-1.9825245424160847</Real>
+      <Real Name="ZZ">2.9723429651231239</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98593327040962053</Real>
+      <Real Name="YY">-1.9826340377643541</Real>
+      <Real Name="ZZ">2.9723976881838188</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98607535858730133</Real>
+      <Real Name="YY">-1.9827289337328557</Real>
+      <Real Name="ZZ">2.9724451148364253</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98619968574277161</Real>
+      <Real Name="YY">-1.9828119677052949</Real>
+      <Real Name="ZZ">2.9724866131574563</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98630938617406894</Real>
+      <Real Name="YY">-1.9828852329750919</Real>
+      <Real Name="ZZ">2.9725232293230675</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98640689766855616</Real>
+      <Real Name="YY">-1.9829503576593575</Real>
+      <Real Name="ZZ">2.9725557770258386</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98649414479520159</Real>
+      <Real Name="YY">-1.9830086271136995</Real>
+      <Real Name="ZZ">2.9725848986546279</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98657266720918346</Real>
+      <Real Name="YY">-1.9830610696226085</Real>
+      <Real Name="ZZ">2.9726111081205442</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98664371129802375</Real>
+      <Real Name="YY">-1.9831085176068584</Real>
+      <Real Name="ZZ">2.9726348214468481</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98670829683333328</Real>
+      <Real Name="YY">-1.9831516521379953</Real>
+      <Real Name="ZZ">2.9726563790162102</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98676726623513755</Real>
+      <Real Name="YY">-1.9831910358403373</Real>
+      <Real Name="ZZ">2.9726760620143304</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98682132152012403</Real>
+      <Real Name="YY">-1.9832271375674841</Real>
+      <Real Name="ZZ">2.9726941047626014</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98687105238231221</Real>
+      <Real Name="YY">-1.9832603511564595</Real>
+      <Real Name="ZZ">2.972710704091015</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98691695779356303</Real>
+      <Real Name="YY">-1.9832910098539758</Real>
+      <Real Name="ZZ">2.972726026548008</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98695946280398095</Real>
+      <Real Name="YY">-1.9833193975368604</Real>
+      <Real Name="ZZ">2.9727402140081924</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98699893174222497</Real>
+      <Real Name="YY">-1.9833457575281117</Real>
+      <Real Name="ZZ">2.9727533880783601</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98703567868472875</Real>
+      <Real Name="YY">-1.9833702995889295</Real>
+      <Real Name="ZZ">2.9727656535919653</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98706997583106548</Real>
+      <Real Name="YY">-1.9833932055123613</Real>
+      <Real Name="ZZ">2.9727771014046578</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98710206025828384</Real>
+      <Real Name="YY">-1.9834146336342811</Real>
+      <Real Name="ZZ">2.9727878106487986</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98713213940880074</Real>
+      <Real Name="YY">-1.98343472249858</Real>
+      <Real Name="ZZ">2.9727978505651746</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98716039558049806</Real>
+      <Real Name="YY">-1.9834535938559525</Real>
+      <Real Name="ZZ">2.9728072820017757</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98718698962444962</Real>
+      <Real Name="YY">-1.9834713551334804</Real>
+      <Real Name="ZZ">2.9728161586479827</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98721206400874617</Real>
+      <Real Name="YY">-1.983488101480863</Real>
+      <Real Name="ZZ">2.9728245280572656</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98723574537169279</Real>
+      <Real Name="YY">-1.9835039174756131</Real>
+      <Real Name="ZZ">2.9728324324993647</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98725814666096678</Real>
+      <Real Name="YY">-1.9835188785517266</Real>
+      <Real Name="ZZ">2.972839909674327</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98727936893501556</Real>
+      <Real Name="YY">-1.9835330522027843</Real>
+      <Real Name="ZZ">2.9728469933137629</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98729950288731849</Real>
+      <Real Name="YY">-1.9835464989999385</Real>
+      <Real Name="ZZ">2.9728537136896396</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98731863014200594</Real>
+      <Real Name="YY">-1.9835592734572367</Real>
+      <Real Name="ZZ">2.9728600980467208</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98733682435988024</Real>
+      <Real Name="YY">-1.9835714247702776</Real>
+      <Real Name="ZZ">2.9728661709717499</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98735415218642619</Real>
+      <Real Name="YY">-1.9835829974493628</Real>
+      <Real Name="ZZ">2.9728719547098725</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98737067406755197</Real>
+      <Real Name="YY">-1.9835940318643053</Real>
+      <Real Name="ZZ">2.9728774694369169</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98738644495408145</Real>
+      <Real Name="YY">-1.9836045647149323</Real>
+      <Real Name="ZZ">2.9728827334945542</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.9874015149123202</Real>
+      <Real Name="YY">-1.9836146294388621</Real>
+      <Real Name="ZZ">2.9728877635940711</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98741592965498304</Real>
+      <Real Name="YY">-1.9836242565661024</Real>
+      <Real Name="ZZ">2.9728925749936121</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98742973100434139</Real>
+      <Real Name="YY">-1.9836334740283528</Real>
+      <Real Name="ZZ">2.9728971816527445</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98744295729747722</Real>
+      <Real Name="YY">-1.9836423074296752</Real>
+      <Real Name="ZZ">2.9729015963677523</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.9874556437419123</Real>
+      <Real Name="YY">-1.9836507802840062</Real>
+      <Real Name="ZZ">2.9729058308903054</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.9874678227285717</Real>
+      <Real Name="YY">-1.9836589142241632</Real>
+      <Real Name="ZZ">2.9729098960319549</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98747952410790929</Real>
+      <Real Name="YY">-1.9836667291862753</Real>
+      <Real Name="ZZ">2.9729138017562891</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98749077543419694</Real>
+      <Real Name="YY">-1.9836742435729222</Real>
+      <Real Name="ZZ">2.9729175572604518</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98750160218213345</Real>
+      <Real Name="YY">-1.9836814743978068</Real>
+      <Real Name="ZZ">2.9729211710474823</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98751202793940474</Real>
+      <Real Name="YY">-1.9836884374143637</Real>
+      <Real Name="ZZ">2.9729246509905427</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98752207457823127</Real>
+      <Real Name="YY">-1.9836951472303186</Real>
+      <Real Name="ZZ">2.9729280043902238</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98753176240852725</Real>
+      <Real Name="YY">-1.9837016174099882</Real>
+      <Real Name="ZZ">2.9729312380256263</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98754111031495317</Real>
+      <Real Name="YY">-1.9837078605658109</Real>
+      <Real Name="ZZ">2.9729343582001424</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98755013587977869</Real>
+      <Real Name="YY">-1.983713888440398</Real>
+      <Real Name="ZZ">2.9729373707824287</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98755885549325506</Real>
+      <Real Name="YY">-1.9837197119802543</Real>
+      <Real Name="ZZ">2.9729402812432855</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.9875672844529475</Real>
+      <Real Name="YY">-1.9837253414021143</Real>
+      <Real Name="ZZ">2.972943094688778</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98757543705330653</Real>
+      <Real Name="YY">-1.9837307862527662</Real>
+      <Real Name="ZZ">2.9729458158901578</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98758332666655624</Real>
+      <Real Name="YY">-1.9837360554630727</Real>
+      <Real Name="ZZ">2.9729484493108465</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.9875909658158939</Real>
+      <Real Name="YY">-1.9837411573968644</Real>
+      <Real Name="ZZ">2.972950999130882</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98759836624181496</Real>
+      <Real Name="YY">-1.9837460998952248</Real>
+      <Real Name="ZZ">2.9729534692690369</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98760553896232339</Real>
+      <Real Name="YY">-1.98375089031671</Real>
+      <Real Name="ZZ">2.9729558634029414</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98761249432766374</Real>
+      <Real Name="YY">-1.9837555355739096</Real>
+      <Real Name="ZZ">2.9729581849873363</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98761924207015883</Real>
+      <Real Name="YY">-1.9837600421667161</Real>
+      <Real Name="ZZ">2.9729604372707024</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98762579134963968</Real>
+      <Real Name="YY">-1.9837644162126729</Real>
+      <Real Name="ZZ">2.9729626233104423</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98763215079493183</Real>
+      <Real Name="YY">-1.9837686634746905</Real>
+      <Real Name="ZZ">2.972964745986709</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98763832854178801</Real>
+      <Real Name="YY">-1.9837727893863637</Real>
+      <Real Name="ZZ">2.9729668080150815</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.9876443322676054</Real>
+      <Real Name="YY">-1.9837767990751753</Real>
+      <Real Name="ZZ">2.9729688119581481</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98765016922326065</Real>
+      <Real Name="YY">-1.9837806973837402</Real>
+      <Real Name="ZZ">2.9729707602361333</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98765584626232328</Real>
+      <Real Name="YY">-1.9837844888893301</Real>
+      <Real Name="ZZ">2.9729726551366364</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98766136986789765</Real>
+      <Real Name="YY">-1.9837881779217965</Real>
+      <Real Name="ZZ">2.9729744988236124</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98766674617732353</Real>
+      <Real Name="YY">-1.983791768580065</Real>
+      <Real Name="ZZ">2.9729762933456017</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98767198100492259</Real>
+      <Real Name="YY">-1.9837952647473247</Real>
+      <Real Name="ZZ">2.9729780406433308</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98767707986297304</Real>
+      <Real Name="YY">-1.9837986701050463</Real>
+      <Real Name="ZZ">2.9729797425567037</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98768204798107417</Real>
+      <Real Name="YY">-1.9838019881459041</Real>
+      <Real Name="ZZ">2.9729814008312663</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98768689032403356</Real>
+      <Real Name="YY">-1.9838052221857252</Real>
+      <Real Name="ZZ">2.9729830171242</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98769161160841767</Real>
+      <Real Name="YY">-1.983808375374553</Real>
+      <Real Name="ZZ">2.9729845930098082</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98769621631787974</Real>
+      <Real Name="YY">-1.9838114507068654</Real>
+      <Real Name="ZZ">2.9729861299846609</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98770070871735538</Real>
+      <Real Name="YY">-1.9838144510310738</Real>
+      <Real Name="ZZ">2.9729876294723216</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.9877050928662402</Real>
+      <Real Name="YY">-1.9838173790583102</Real>
+      <Real Name="ZZ">2.9729890928277523</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98770937263062841</Real>
+      <Real Name="YY">-1.9838202373706157</Real>
+      <Real Name="ZZ">2.972990521341385</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.987713551694678</Real>
+      <Real Name="YY">-1.9838230284285112</Real>
+      <Real Name="ZZ">2.9729919162429308</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98771763357119124</Real>
+      <Real Name="YY">-1.9838257545780857</Real>
+      <Real Name="ZZ">2.9729932787049074</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98772162161146226</Real>
+      <Real Name="YY">-1.9838284180575536</Real>
+      <Real Name="ZZ">2.9729946098459199</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98772551901445549</Real>
+      <Real Name="YY">-1.9838310210033985</Real>
+      <Real Name="ZZ">2.9729959107337276</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98772932883535847</Real>
+      <Real Name="YY">-1.9838335654560793</Real>
+      <Real Name="ZZ">2.9729971823880983</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98773305399357469</Real>
+      <Real Name="YY">-1.9838360533653658</Real>
+      <Real Name="ZZ">2.9729984257834832</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98773669728018154</Real>
+      <Real Name="YY">-1.9838384865953256</Real>
+      <Real Name="ZZ">2.9729996418514992</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98774026136490678</Real>
+      <Real Name="YY">-1.9838408669289858</Real>
+      <Real Name="ZZ">2.9730008314832568</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98774374880264781</Real>
+      <Real Name="YY">-1.9838431960726708</Real>
+      <Real Name="ZZ">2.9730019955315328</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98774716203958612</Real>
+      <Real Name="YY">-1.9838454756601109</Real>
+      <Real Name="ZZ">2.9730031348128212</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98775050341890447</Real>
+      <Real Name="YY">-1.9838477072562335</Real>
+      <Real Name="ZZ">2.9730042501092413</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98775377518615293</Real>
+      <Real Name="YY">-1.9838498923607712</Real>
+      <Real Name="ZZ">2.9730053421703242</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98775697949428398</Real>
+      <Real Name="YY">-1.9838520324116071</Real>
+      <Real Name="ZZ">2.9730064117146795</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98776011840837097</Real>
+      <Real Name="YY">-1.9838541287879363</Real>
+      <Real Name="ZZ">2.9730074594316016</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.9877631939100523</Real>
+      <Real Name="YY">-1.9838561828132291</Real>
+      <Real Name="ZZ">2.9730084859825245</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98776620790170055</Real>
+      <Real Name="YY">-1.9838581957580159</Real>
+      <Real Name="ZZ">2.9730094920024248</Real>
+    </Atom>
+  </Sequence>
+</ReferenceData>
diff --git a/src/gromacs/mdlib/tests/refdata/WithParameters_LeapFrogTest_SimpleIntegration_14.xml b/src/gromacs/mdlib/tests/refdata/WithParameters_LeapFrogTest_SimpleIntegration_14.xml
new file mode 100644 (file)
index 0000000..d84e208
--- /dev/null
@@ -0,0 +1,1010 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <Sequence Name="FinalPositions">
+    <Int Name="Length">100</Int>
+    <Atom>
+      <Real Name="XX">0.0057019616063928294</Real>
+      <Real Name="YY">6.4884071048988634</Real>
+      <Real Name="ZZ">0.017462904521775045</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">1.0035021509164852</Real>
+      <Real Name="YY">5.4929181342160858</Real>
+      <Real Name="ZZ">0.010649829479888484</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">2.0057844575448498</Real>
+      <Real Name="YY">4.4883520485472008</Real>
+      <Real Name="ZZ">0.017490425310883208</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">3.0035261932786588</Real>
+      <Real Name="YY">3.4929020908303219</Real>
+      <Real Name="ZZ">0.010657849278678317</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">4.0058009567325419</Real>
+      <Real Name="YY">2.4883410372768688</Real>
+      <Real Name="ZZ">0.017495929468704846</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">5.0035342073993831</Real>
+      <Real Name="YY">1.4928967430350684</Real>
+      <Real Name="ZZ">0.010660522544941599</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">6.0058080278129813</Real>
+      <Real Name="YY">0.48833631816101164</Real>
+      <Real Name="ZZ">0.017498288393485537</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">7.0035382144597458</Real>
+      <Real Name="YY">-0.50710593086255873</Real>
+      <Real Name="ZZ">0.010661859178073238</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">8.0058119561909997</Real>
+      <Real Name="YY">-1.5116663035700197</Real>
+      <Real Name="ZZ">0.017499598907252594</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">9.003540618695963</Real>
+      <Real Name="YY">-2.5071075352011349</Real>
+      <Real Name="ZZ">0.010662661157952225</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">10.005814456067927</Real>
+      <Real Name="YY">-3.5116679719443131</Real>
+      <Real Name="ZZ">0.017500432870558903</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">11.003542221520108</Real>
+      <Real Name="YY">-4.5071086047601847</Real>
+      <Real Name="ZZ">0.010663195811204878</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">12.005816186751947</Real>
+      <Real Name="YY">-5.5116691269726701</Real>
+      <Real Name="ZZ">0.01750101022977096</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">13.003543366394496</Real>
+      <Real Name="YY">6.4928906312690637</Real>
+      <Real Name="ZZ">0.010663577706385345</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">14.005817455920232</Real>
+      <Real Name="YY">5.4883300260065377</Real>
+      <Real Name="ZZ">0.017501433626526477</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">15.003544225050288</Real>
+      <Real Name="YY">4.4928900582910005</Real>
+      <Real Name="ZZ">0.010663864127770695</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">16.005818426460682</Real>
+      <Real Name="YY">3.4883293782847518</Real>
+      <Real Name="ZZ">0.017501757400515985</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">17.003544892893679</Real>
+      <Real Name="YY">2.4928896126413962</Real>
+      <Real Name="ZZ">0.010664086899959303</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">18.005819192676825</Real>
+      <Real Name="YY">1.4883288669254482</Real>
+      <Real Name="ZZ">0.017502013011560329</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">19.003545427168397</Real>
+      <Real Name="YY">0.49288925612171247</Real>
+      <Real Name="ZZ">0.010664265117710188</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">20.005819812947053</Real>
+      <Real Name="YY">-0.51167154703208295</Real>
+      <Real Name="ZZ">0.017502219934786702</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.003545864302256022</Real>
+      <Real Name="YY">-1.5071110355762105</Real>
+      <Real Name="ZZ">0.010664410932233642</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">1.0058203253441789</Real>
+      <Real Name="YY">-2.5116718889969998</Real>
+      <Real Name="ZZ">0.017502390871365018</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">2.003546228580471</Real>
+      <Real Name="YY">-3.5071112786578134</Real>
+      <Real Name="ZZ">0.010664532444336518</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">3.005820755757771</Real>
+      <Real Name="YY">-4.5116721762475311</Real>
+      <Real Name="ZZ">0.017502534458090798</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">4.0035465368158833</Real>
+      <Real Name="YY">-5.5071114843422455</Real>
+      <Real Name="ZZ">0.01066463526226972</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">5.0058211224063855</Real>
+      <Real Name="YY">6.4883275790575725</Real>
+      <Real Name="ZZ">0.017502656772709058</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">6.0035468010176647</Real>
+      <Real Name="YY">5.4928883393568126</Real>
+      <Real Name="ZZ">0.010664723391926749</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">7.0058214384827782</Real>
+      <Real Name="YY">4.4883273681136968</Real>
+      <Real Name="ZZ">0.017502762216345492</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">8.0035470299925429</Real>
+      <Real Name="YY">3.492888186562662</Real>
+      <Real Name="ZZ">0.010664799770962845</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">9.0058217137751182</Real>
+      <Real Name="YY">2.4883271843883863</Real>
+      <Real Name="ZZ">0.017502854054351411</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">10.003547230345561</Real>
+      <Real Name="YY">1.4928880528677804</Real>
+      <Real Name="ZZ">0.010664866602619425</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">11.005821955698694</Real>
+      <Real Name="YY">0.48832702293280889</Real>
+      <Real Name="ZZ">0.017502934760477831</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">12.003547407127636</Real>
+      <Real Name="YY">-0.50711206509829143</Real>
+      <Real Name="ZZ">0.010664925571728176</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">13.005822169973859</Real>
+      <Real Name="YY">-1.5116731200707019</Real>
+      <Real Name="ZZ">0.017503006243046938</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">14.003547564267258</Real>
+      <Real Name="YY">-2.5071121699570211</Real>
+      <Real Name="ZZ">0.010664977988713732</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">15.005822361084141</Real>
+      <Real Name="YY">-3.5116732476143739</Real>
+      <Real Name="ZZ">0.017503069997770741</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">16.00354770486587</Real>
+      <Real Name="YY">-4.5071122637779908</Real>
+      <Real Name="ZZ">0.010665024888121856</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">17.005822532593371</Real>
+      <Real Name="YY">-5.5116733620766425</Real>
+      <Real Name="ZZ">0.017503127213548512</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">18.003547831404614</Real>
+      <Real Name="YY">6.4928876517831355</Real>
+      <Real Name="ZZ">0.01066506709758917</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">19.005822687369992</Real>
+      <Real Name="YY">5.488326534628138</Real>
+      <Real Name="ZZ">0.017503178847299183</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">20.003547945892056</Real>
+      <Real Name="YY">4.4928875753860602</Real>
+      <Real Name="ZZ">0.010665105287107218</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.0058228277487832446</Real>
+      <Real Name="YY">3.4883264409417762</Real>
+      <Real Name="ZZ">0.01750322567791026</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">1.003548049971545</Real>
+      <Real Name="YY">2.4928875059341746</Real>
+      <Real Name="ZZ">0.010665140004850899</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">2.0058229556494633</Real>
+      <Real Name="YY">1.4883263555830917</Real>
+      <Real Name="ZZ">0.017503268345800349</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">3.0035481450006443</Real>
+      <Real Name="YY">0.4928874425215829</Real>
+      <Real Name="ZZ">0.010665171703660345</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">4.0058230726649784</Real>
+      <Real Name="YY">-0.51167372251102394</Real>
+      <Real Name="ZZ">0.017503307382380644</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">5.003548232110651</Real>
+      <Real Name="YY">-1.5071126156066263</Real>
+      <Real Name="ZZ">0.010665200760902337</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">6.0058231801282069</Real>
+      <Real Name="YY">-2.5116737942301097</Real>
+      <Real Name="ZZ">0.017503343232301325</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">7.0035483122518585</Real>
+      <Real Name="YY">-3.5071126690845786</Real>
+      <Real Name="ZZ">0.010665227493564968</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">8.0058232791629447</Real>
+      <Real Name="YY">-4.5116738603241693</Real>
+      <Real Name="ZZ">0.017503376270463524</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">9.0035483862283581</Real>
+      <Real Name="YY">-5.507112718448842</Real>
+      <Real Name="ZZ">0.010665252169868937</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">10.005823370723366</Real>
+      <Real Name="YY">6.4883260785700001</Real>
+      <Real Name="ZZ">0.01750340681517951</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">11.003548454725118</Real>
+      <Real Name="YY">5.492887235843507</Real>
+      <Real Name="ZZ">0.010665275018298535</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">12.005823455624846</Real>
+      <Real Name="YY">4.4883260219082333</Real>
+      <Real Name="ZZ">0.017503435138461608</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">13.00354851832925</Real>
+      <Real Name="YY">3.4928871934006858</Real>
+      <Real Name="ZZ">0.010665296234697455</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">14.005823534568329</Real>
+      <Real Name="YY">2.4883259692227289</Real>
+      <Real Name="ZZ">0.017503461474144971</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">15.003548577546891</Real>
+      <Real Name="YY">1.4928871538849573</Real>
+      <Real Name="ZZ">0.01066531598789644</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">16.005823608159705</Real>
+      <Real Name="YY">0.48832592010912385</Real>
+      <Real Name="ZZ">0.017503486024358268</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">17.003548632816688</Real>
+      <Real Name="YY">-0.50711288299638924</Real>
+      <Real Name="ZZ">0.0106653344242155</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">18.005823676925424</Real>
+      <Real Name="YY">-1.511674125783917</Real>
+      <Real Name="ZZ">0.017503508964721519</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">19.003548684520698</Real>
+      <Real Name="YY">-2.5071129174982936</Real>
+      <Real Name="ZZ">0.010665351671094616</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">20.00582374132507</Real>
+      <Real Name="YY">-3.5116741687631143</Real>
+      <Real Name="ZZ">0.01750353044855376</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.0035487329931972178</Real>
+      <Real Name="YY">-4.5071129498438296</Real>
+      <Real Name="ZZ">0.01066536784004379</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">1.0058238017616521</Real>
+      <Real Name="YY">-5.5116742090974391</Real>
+      <Real Name="ZZ">0.017503550610304026</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">2.0035487785279744</Real>
+      <Real Name="YY">6.4928870197709703</Real>
+      <Real Name="ZZ">0.010665383029056648</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">3.0058238585900825</Real>
+      <Real Name="YY">5.4883257529762579</Real>
+      <Real Name="ZZ">0.017503569568367704</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">4.0035488213842347</Real>
+      <Real Name="YY">4.4928869911731342</Real>
+      <Real Name="ZZ">0.010665397324598168</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">5.0058239121241108</Real>
+      <Real Name="YY">3.4883257172485798</Real>
+      <Real Name="ZZ">0.017503587427413196</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">6.0035488617915664</Real>
+      <Real Name="YY">2.4928869642094607</Real>
+      <Real Name="ZZ">0.010665410803251594</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">7.0058239626421388</Real>
+      <Real Name="YY">1.4883256835337288</Real>
+      <Real Name="ZZ">0.017503604280315284</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">8.0035488999540476</Real>
+      <Real Name="YY">0.49288693874376904</Real>
+      <Real Name="ZZ">0.010665423533090941</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">9.0058240103920557</Real>
+      <Real Name="YY">-0.51167434833373315</Real>
+      <Real Name="ZZ">0.017503620209770684</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">10.00354893605369</Real>
+      <Real Name="YY">-1.5071130853453987</Real>
+      <Real Name="ZZ">0.010665435574830868</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">11.005824055595308</Real>
+      <Real Name="YY">-2.5116743785015969</Real>
+      <Real Name="ZZ">0.017503635289655133</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">12.003548970253348</Real>
+      <Real Name="YY">-3.507113108166716</Real>
+      <Real Name="ZZ">0.010665446982795005</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">13.005824098450342</Real>
+      <Real Name="YY">-4.5116744071022987</Real>
+      <Real Name="ZZ">0.017503649586168946</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">14.003549002699183</Real>
+      <Real Name="YY">-5.507113129817709</Real>
+      <Real Name="ZZ">0.010665457805735339</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">15.005824139135502</Real>
+      <Real Name="YY">6.488325565745134</Real>
+      <Real Name="ZZ">0.017503663158808656</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">16.003549033522724</Real>
+      <Real Name="YY">5.4928868496138481</Real>
+      <Real Name="ZZ">0.010665468087528662</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">17.005824177811512</Real>
+      <Real Name="YY">4.4883255399334381</Real>
+      <Real Name="ZZ">0.017503676061194545</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">18.00354906284268</Real>
+      <Real Name="YY">3.4928868300487435</Real>
+      <Real Name="ZZ">0.010665477867771091</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">19.005824214623626</Real>
+      <Real Name="YY">2.4883255153656774</Real>
+      <Real Name="ZZ">0.017503688341778709</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">20.003549090766452</Real>
+      <Real Name="YY">1.4928868114153104</Real>
+      <Real Name="ZZ">0.010665487182287684</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.0058242497033996034</Real>
+      <Real Name="YY">0.48832549195404612</Real>
+      <Real Name="ZZ">0.017503700044453032</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">1.0035491173914302</Real>
+      <Real Name="YY">-0.5071132063514513</Real>
+      <Real Name="ZZ">0.010665496063570954</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">2.0058242831703121</Real>
+      <Real Name="YY">-1.5116745303811876</Real>
+      <Real Name="ZZ">0.017503711209073358</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">3.0035491428061887</Real>
+      <Real Name="YY">-2.5071132233106326</Real>
+      <Real Name="ZZ">0.010665504541159524</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">4.0058243151330917</Real>
+      <Real Name="YY">-3.5116745517125914</Real>
+      <Real Name="ZZ">0.017503721871912993</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">5.0035491670914043</Real>
+      <Real Name="YY">-4.5071132395160731</Real>
+      <Real Name="ZZ">0.010665512641966385</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">6.0058243456909173</Real>
+      <Real Name="YY">-5.51167457210635</Real>
+      <Real Name="ZZ">0.017503732066056384</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">7.0035491903207383</Real>
+      <Real Name="YY">6.4928867449830721</Real>
+      <Real Name="ZZ">0.010665520390564249</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">8.0058243749344236</Real>
+      <Real Name="YY">5.4883254083770412</Real>
+      <Real Name="ZZ">0.017503741821741997</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">9.003549212561591</Real>
+      <Real Name="YY">4.4928867301418265</Real>
+      <Real Name="ZZ">0.010665527809434546</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">10.005824402946629</Real>
+      <Real Name="YY">3.4883253896821858</Real>
+      <Real Name="ZZ">0.017503751166661898</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">11.003549233875745</Real>
+      <Real Name="YY">2.4928867159189667</Real>
+      <Real Name="ZZ">0.010665534919185243</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">12.005824429803692</Real>
+      <Real Name="YY">1.4883253717582512</Real>
+      <Real Name="ZZ">0.017503760126224278</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">13.003549254319926</Real>
+      <Real Name="YY">0.49288670227663189</Real>
+      <Real Name="ZZ">0.010665541738742039</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">14.005824455575617</Real>
+      <Real Name="YY">-0.51167464544148389</Real>
+      <Real Name="ZZ">0.017503768723784133</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">15.003549273946343</Real>
+      <Real Name="YY">-1.5071133108200094</Real>
+      <Real Name="ZZ">0.010665548285516562</Real>
+    </Atom>
+  </Sequence>
+  <Sequence Name="FinalVelocities">
+    <Int Name="Length">100</Int>
+    <Atom>
+      <Real Name="XX">0.32461224458505333</Real>
+      <Real Name="YY">-0.67819859186547571</Real>
+      <Real Name="ZZ">1.029132392117561</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.099107706063012557</Real>
+      <Real Name="YY">-0.20815984808548729</Real>
+      <Real Name="ZZ">0.31629240081392035</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.33757554123409256</Real>
+      <Real Name="YY">-0.68685478969215896</Real>
+      <Real Name="ZZ">1.0334587396269068</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10244105199519188</Real>
+      <Real Name="YY">-0.21038518359457126</Real>
+      <Real Name="ZZ">0.31740468015708434</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34016820056390046</Real>
+      <Real Name="YY">-0.68858602925749546</Real>
+      <Real Name="ZZ">1.034324009128776</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10355216730591829</Real>
+      <Real Name="YY">-0.21112696209759929</Real>
+      <Real Name="ZZ">0.317775439938139</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34127934027667522</Real>
+      <Real Name="YY">-0.68932798907121129</Real>
+      <Real Name="ZZ">1.034694838915291</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10410772496128151</Real>
+      <Real Name="YY">-0.21149785134911336</Real>
+      <Real Name="ZZ">0.31796081982866631</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34189664011710563</Real>
+      <Real Name="YY">-0.68974018896772027</Real>
+      <Real Name="ZZ">1.0349008554633548</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10444105955449941</Real>
+      <Real Name="YY">-0.21172038490002176</Real>
+      <Real Name="ZZ">0.31807204776298292</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.3422894672882888</Real>
+      <Real Name="YY">-0.69000249799277091</Real>
+      <Real Name="ZZ">1.0350319569030322</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10466328261664469</Real>
+      <Real Name="YY">-0.21186874060062735</Real>
+      <Real Name="ZZ">0.31814619971919372</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34256142456064609</Real>
+      <Real Name="YY">-0.6901840965485756</Real>
+      <Real Name="ZZ">1.0351227194381933</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10482201337531996</Real>
+      <Real Name="YY">-0.21197470895820283</Real>
+      <Real Name="ZZ">0.31819916540220156</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.3427608598937083</Real>
+      <Real Name="YY">-0.69031726882283218</Real>
+      <Real Name="ZZ">1.0351892786306451</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10494106144432637</Real>
+      <Real Name="YY">-0.21205418522638442</Real>
+      <Real Name="ZZ">0.31823888966445735</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34291336926604993</Real>
+      <Real Name="YY">-0.69041910644432258</Real>
+      <Real Name="ZZ">1.0352401768366373</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10503365438688685</Real>
+      <Real Name="YY">-0.21211600010163678</Real>
+      <Real Name="ZZ">0.31826978631287861</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.343033771402109</Real>
+      <Real Name="YY">-0.69049950456655174</Real>
+      <Real Name="ZZ">1.0352803596308413</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10510772874093527</Real>
+      <Real Name="YY">-0.21216545200183862</Real>
+      <Real Name="ZZ">0.31829450363161549</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34313123979796645</Real>
+      <Real Name="YY">-0.69056458876073745</Real>
+      <Real Name="ZZ">1.0353128885594829</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10516833503061128</Real>
+      <Real Name="YY">-0.21220591264745828</Real>
+      <Real Name="ZZ">0.31831472689240031</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34321175716845753</Real>
+      <Real Name="YY">-0.69061835396462967</Real>
+      <Real Name="ZZ">1.0353397602831438</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10521884027200792</Real>
+      <Real Name="YY">-0.21223962985214137</Real>
+      <Real Name="ZZ">0.31833157960972103</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34327939175966987</Real>
+      <Real Name="YY">-0.69066351673589954</Real>
+      <Real Name="ZZ">1.0353623325310186</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10526157547626665</Real>
+      <Real Name="YY">-0.21226815979456559</Real>
+      <Real Name="ZZ">0.31834583960130003</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34333700641144344</Real>
+      <Real Name="YY">-0.69070198872624022</Real>
+      <Real Name="ZZ">1.035381560742171</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10529820565134553</Real>
+      <Real Name="YY">-0.21229261403092922</Real>
+      <Real Name="ZZ">0.31835806245122494</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34338667421469632</Real>
+      <Real Name="YY">-0.69073515423515486</Real>
+      <Real Name="ZZ">1.0353981367862684</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10532995180308061</Real>
+      <Real Name="YY">-0.21231380770244426</Real>
+      <Real Name="ZZ">0.31836865558782657</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34342993326914256</Real>
+      <Real Name="YY">-0.69076404032356409</Real>
+      <Real Name="ZZ">1.0354125739859656</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10535772968584874</Real>
+      <Real Name="YY">-0.21233235216501992</Real>
+      <Real Name="ZZ">0.31837792458235276</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34346794880183773</Real>
+      <Real Name="YY">-0.69078942506792407</Real>
+      <Real Name="ZZ">1.035425261222064</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10538223958240887</Real>
+      <Real Name="YY">-0.21234871492611604</Real>
+      <Real Name="ZZ">0.31838610310693494</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34350161970222487</Real>
+      <Real Name="YY">-0.69081190869864262</Real>
+      <Real Name="ZZ">1.0354364984883215</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10540402615712896</Real>
+      <Real Name="YY">-0.2123632596026461</Real>
+      <Real Name="ZZ">0.3183933729065635</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34353165050527268</Real>
+      <Real Name="YY">-0.6908319616665809</Real>
+      <Real Name="ZZ">1.0354465209149841</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10542351940819443</Real>
+      <Real Name="YY">-0.21237627326059394</Real>
+      <Real Name="ZZ">0.31839987746412585</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34355860122595688</Real>
+      <Real Name="YY">-0.69084995791985881</Real>
+      <Real Name="ZZ">1.0354555154004506</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10544106333415322</Real>
+      <Real Name="YY">-0.21238798555274702</Real>
+      <Real Name="ZZ">0.31840573156593199</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34358292260803769</Real>
+      <Real Name="YY">-0.69086619844110986</Real>
+      <Real Name="ZZ">1.0354636323751398</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10545693641002074</Real>
+      <Real Name="YY">-0.21239858238850454</Real>
+      <Real Name="ZZ">0.31841102813423267</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34360498153597124</Real>
+      <Real Name="YY">-0.69088092821619762</Real>
+      <Real Name="ZZ">1.0354709942824163</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10547136647899123</Real>
+      <Real Name="YY">-0.21240821587555692</Real>
+      <Real Name="ZZ">0.31841584319632443</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34362507967031086</Real>
+      <Real Name="YY">-0.69089434867794419</Real>
+      <Real Name="ZZ">1.035477701797934</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10548454175935554</Real>
+      <Real Name="YY">-0.21241701166808274</Real>
+      <Real Name="ZZ">0.31842023955736448</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34364346732513223</Real>
+      <Real Name="YY">-0.69090662697273397</Real>
+      <Real Name="ZZ">1.0354838384610685</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10549661909968956</Real>
+      <Real Name="YY">-0.21242507447789841</Real>
+      <Real Name="ZZ">0.31842426955498465</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.3436603539469068</Real>
+      <Real Name="YY">-0.69091790295774491</Real>
+      <Real Name="ZZ">1.0354894741721097</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10550773025279678</Real>
+      <Real Name="YY">-0.21243249226292868</Real>
+      <Real Name="ZZ">0.31842797715279508</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34367591612775805</Real>
+      <Real Name="YY">-0.69092829455177474</Real>
+      <Real Name="ZZ">1.0354946678665986</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10551798670181889</Real>
+      <Real Name="YY">-0.21243933944911053</Real>
+      <Real Name="ZZ">0.31843139955077426</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34369030380439419</Real>
+      <Real Name="YY">-0.69093790187455661</Real>
+      <Real Name="ZZ">1.0354994695841446</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10552748341387638</Real>
+      <Real Name="YY">-0.21244567943631595</Real>
+      <Real Name="ZZ">0.31843456843779178</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34370364510454754</Real>
+      <Real Name="YY">-0.6909468104829547</Real>
+      <Real Name="ZZ">1.0355039220858697</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10553630178935831</Real>
+      <Real Name="YY">-0.21245156656729222</Real>
+      <Real Name="ZZ">0.31843751097573664</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34371605017311113</Real>
+      <Real Name="YY">-0.69095509392585086</Real>
+      <Real Name="ZZ">1.0355080621313333</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10554451200101396</Real>
+      <Real Name="YY">-0.21245704768923587</Real>
+      <Real Name="ZZ">0.31844025058003012</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34372761422007725</Real>
+      <Real Name="YY">-0.69096281577939844</Real>
+      <Real Name="ZZ">1.0355119214957484</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10555217486522583</Real>
+      <Real Name="YY">-0.21246216340304983</Real>
+      <Real Name="ZZ">0.31844280754403748</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34373841996888171</Real>
+      <Real Name="YY">-0.6909700312818936</Real>
+      <Real Name="ZZ">1.0355155277870878</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10555934335110158</Real>
+      <Real Name="YY">-0.21246694907081129</Real>
+      <Real Name="ZZ">0.31844519954262485</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34374853963839691</Real>
+      <Real Name="YY">-0.69097678865724599</Real>
+      <Real Name="ZZ">1.0355189051075473</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10556606380660995</Real>
+      <Real Name="YY">-0.21247143563433776</Real>
+      <Real Name="ZZ">0.3184474420413006</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34375803655901893</Real>
+      <Real Name="YY">-0.6909831301941155</Real>
+      <Real Name="ZZ">1.0355220745929024</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10557237696178452</Real>
+      <Real Name="YY">-0.21247565028492307</Real>
+      <Real Name="ZZ">0.31844954863096564</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34376696649930538</Real>
+      <Real Name="YY">-0.69098909313176893</Real>
+      <Real Name="ZZ">1.0355250548552506</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10557831875488999</Real>
+      <Real Name="YY">-0.21247961701488574</Real>
+      <Real Name="ZZ">0.31845153130359166</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34377537876189401</Real>
+      <Real Name="YY">-0.69099471039187677</Real>
+      <Real Name="ZZ">1.0355278623487671</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10558392101696092</Real>
+      <Real Name="YY">-0.21248335707456492</Real>
+      <Real Name="ZZ">0.31845340068063882</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34378331709419596</Real>
+      <Real Name="YY">-0.69100001118662713</Real>
+      <Real Name="ZZ">1.0355305116736353</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10558921204225009</Real>
+      <Real Name="YY">-0.2124868893531508</Real>
+      <Real Name="ZZ">0.31845516620340586</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34379082044938541</Real>
+      <Real Name="YY">-0.69100502152686993</Real>
+      <Real Name="ZZ">1.0355330158300173</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10559421706617222</Real>
+      <Real Name="YY">-0.21249023069775902</Real>
+      <Real Name="ZZ">0.31845683629250982</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.3437979236256315</Real>
+      <Real Name="YY">-0.69100976464896691</Real>
+      <Real Name="ZZ">1.0355353864313928</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10559895866778278</Real>
+      <Real Name="YY">-0.21249339618212465</Real>
+      <Real Name="ZZ">0.31845841848218714</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34380465780570885</Real>
+      <Real Name="YY">-0.69101426137511057</Real>
+      <Real Name="ZZ">1.035537633884644</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10560345711033631</Real>
+      <Real Name="YY">-0.21249639933395886</Real>
+      <Real Name="ZZ">0.31845991953393221</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34381105101464315</Real>
+      <Real Name="YY">-0.69101853041891781</Real>
+      <Real Name="ZZ">1.0355397675427944</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10560773063076218</Real>
+      <Real Name="YY">-0.21249925232820124</Real>
+      <Real Name="ZZ">0.31846134553309013</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34381712850955581</Real>
+      <Real Name="YY">-0.69102258864574717</Real>
+      <Real Name="ZZ">1.0355417958351099</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10561179568677703</Real>
+      <Real Name="YY">-0.21250196615199282</Real>
+      <Real Name="ZZ">0.31846270197131354</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34382291311314761</Real>
+      <Real Name="YY">-0.69102645129537954</Real>
+      <Real Name="ZZ">1.0355437263783984</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10561566716869596</Real>
+      <Real Name="YY">-0.21250455074608002</Real>
+      <Real Name="ZZ">0.3184639938172405</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34382842550009962</Real>
+      <Real Name="YY">-0.69103013217326481</Real>
+      <Real Name="ZZ">1.035545566072591</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10561935858168837</Real>
+      <Real Name="YY">-0.21250701512648867</Real>
+      <Real Name="ZZ">0.31846522557731044</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34383368444397372</Real>
+      <Real Name="YY">-0.69103364381538523</Real>
+      <Real Name="ZZ">1.0355473211831425</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10562288220318121</Real>
+      <Real Name="YY">-0.21250936748960619</Real>
+      <Real Name="ZZ">0.31846640134828635</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34383870703081926</Real>
+      <Real Name="YY">-0.69103699763089343</Real>
+      <Real Name="ZZ">1.0355489974123209</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.1056262492192743</Real>
+      <Real Name="YY">-0.21251161530325169</Real>
+      <Real Name="ZZ">0.31846752486277441</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.3438435088446169</Real>
+      <Real Name="YY">-0.6910402040259398</Real>
+      <Real Name="ZZ">1.0355505999610959</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10562946984336337</Real>
+      <Real Name="YY">-0.21251376538586914</Real>
+      <Real Name="ZZ">0.31846859952880641</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34384810412878897</Real>
+      <Real Name="YY">-0.69104327251152131</Real>
+      <Real Name="ZZ">1.0355521335830415</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10563255341961887</Real>
+      <Real Name="YY">-0.21251582397560939</Real>
+      <Real Name="ZZ">0.31846962846436905</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34385250592731154</Real>
+      <Real Name="YY">-0.69104621179771086</Real>
+      <Real Name="ZZ">1.0355536026314318</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10563550851353033</Real>
+      <Real Name="YY">-0.21251779679077695</Real>
+      <Real Name="ZZ">0.31847061452761644</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34385672620836932</Real>
+      <Real Name="YY">-0.69104902987622197</Real>
+      <Real Name="ZZ">1.0355550111005072</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10563834299136383</Real>
+      <Real Name="YY">-0.21251968908287652</Real>
+      <Real Name="ZZ">0.31847156034338453</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.34386077597302078</Real>
+      <Real Name="YY">-0.69105173409297516</Real>
+      <Real Name="ZZ">1.0355563626617408</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.10564106409008397</Real>
+      <Real Name="YY">-0.21252150568329203</Real>
+      <Real Name="ZZ">0.31847246832652182</Real>
+    </Atom>
+  </Sequence>
+</ReferenceData>
diff --git a/src/gromacs/mdlib/tests/refdata/WithParameters_LeapFrogTest_SimpleIntegration_15.xml b/src/gromacs/mdlib/tests/refdata/WithParameters_LeapFrogTest_SimpleIntegration_15.xml
new file mode 100644 (file)
index 0000000..32cf70c
--- /dev/null
@@ -0,0 +1,1010 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <Sequence Name="FinalPositions">
+    <Int Name="Length">100</Int>
+    <Atom>
+      <Real Name="XX">0.0097709377639719052</Real>
+      <Real Name="YY">6.4801960028847807</Real>
+      <Real Name="ZZ">0.02979960790982205</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">1.0098531465720018</Real>
+      <Real Name="YY">5.4801411323638627</Real>
+      <Real Name="ZZ">0.029827035086337512</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">2.0098805495080123</Real>
+      <Real Name="YY">4.4801228421902231</Real>
+      <Real Name="ZZ">0.029836177478509356</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">3.0098942509760169</Real>
+      <Real Name="YY">3.4801136971034032</Real>
+      <Real Name="ZZ">0.029840748674595269</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">4.0099024718568197</Real>
+      <Real Name="YY">2.480108210051311</Real>
+      <Real Name="ZZ">0.029843491392246811</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">5.0099079524440224</Real>
+      <Real Name="YY">1.4801045520165834</Real>
+      <Real Name="ZZ">0.029845319870681165</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">6.0099118671491674</Real>
+      <Real Name="YY">0.48010193913463506</Real>
+      <Real Name="ZZ">0.029846625926705728</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">7.0099148031780247</Real>
+      <Real Name="YY">-0.51990002052682627</Real>
+      <Real Name="ZZ">0.029847605468724128</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">8.0099170867560261</Real>
+      <Real Name="YY">-1.5199015447079631</Real>
+      <Real Name="ZZ">0.029848367334738463</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">9.0099189136184261</Real>
+      <Real Name="YY">-2.5199027640528726</Real>
+      <Real Name="ZZ">0.029848976827549899</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">10.009920408324026</Real>
+      <Real Name="YY">-3.5199037616987083</Real>
+      <Real Name="ZZ">0.029849475503486558</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">11.009921653912027</Real>
+      <Real Name="YY">-4.519904593070236</Real>
+      <Real Name="ZZ">0.029849891066767088</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">12.009922707871105</Real>
+      <Real Name="YY">-5.5199052965384539</Real>
+      <Real Name="ZZ">0.029850242697235248</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">13.009923611264599</Real>
+      <Real Name="YY">6.48009410048879</Real>
+      <Real Name="ZZ">0.029850544094779354</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">14.00992439420563</Real>
+      <Real Name="YY">5.4800935779123989</Real>
+      <Real Name="ZZ">0.029850805305984267</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">15.009925079279029</Real>
+      <Real Name="YY">4.4800931206580588</Real>
+      <Real Name="ZZ">0.029851033865788572</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">16.009925683755558</Real>
+      <Real Name="YY">3.4800927171983451</Real>
+      <Real Name="ZZ">0.029851235536204109</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">17.009926221068028</Real>
+      <Real Name="YY">2.4800923585674908</Real>
+      <Real Name="ZZ">0.029851414798795727</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">18.009926701821293</Real>
+      <Real Name="YY">1.4800920376872515</Real>
+      <Real Name="ZZ">0.029851575191640837</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">19.009927134499225</Real>
+      <Real Name="YY">0.48009174889503592</Real>
+      <Real Name="ZZ">0.029851719545201459</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">20.009927525969744</Real>
+      <Real Name="YY">-0.51990851239315916</Real>
+      <Real Name="ZZ">0.029851850150803917</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.0099278818520292696</Real>
+      <Real Name="YY">-1.5199087499278816</Real>
+      <Real Name="ZZ">0.02985196888316977</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">1.0099282067880293</Real>
+      <Real Name="YY">-2.5199089668074111</Real>
+      <Real Name="ZZ">0.029852077290982101</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">2.0099285046460293</Real>
+      <Real Name="YY">-3.5199091656136461</Real>
+      <Real Name="ZZ">0.029852176664810041</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">3.0099287786753899</Real>
+      <Real Name="YY">-4.519909348515383</Real>
+      <Real Name="ZZ">0.029852268088731773</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">4.0099290316255685</Real>
+      <Real Name="YY">-5.519909517347755</Real>
+      <Real Name="ZZ">0.029852352480044107</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">5.0099292658386965</Real>
+      <Real Name="YY">6.4800903263259766</Real>
+      <Real Name="ZZ">0.029852430620148161</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">6.0099294833223169</Real>
+      <Real Name="YY">5.4800901811658669</Real>
+      <Real Name="ZZ">0.029852503178816193</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">7.0099296858070632</Real>
+      <Real Name="YY">4.4800900460168007</Real>
+      <Real Name="ZZ">0.029852570733438152</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">8.0099298747928298</Real>
+      <Real Name="YY">3.4800899198776718</Real>
+      <Real Name="ZZ">0.029852633784418624</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">9.0099300515859646</Real>
+      <Real Name="YY">2.4800898018765518</Real>
+      <Real Name="ZZ">0.029852692767593943</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">10.009930217329526</Real>
+      <Real Name="YY">1.4800896912505015</Real>
+      <Real Name="ZZ">0.02985274806432078</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">11.009930373028029</Real>
+      <Real Name="YY">0.48008958732906026</Real>
+      <Real Name="ZZ">0.029852800009730857</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">12.009930519567796</Real>
+      <Real Name="YY">-0.51991051047935499</Real>
+      <Real Name="ZZ">0.029852848899528554</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">13.009930657733859</Real>
+      <Real Name="YY">-1.5199106026987179</Real>
+      <Real Name="ZZ">0.02985289499562354</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">14.009930788224031</Real>
+      <Real Name="YY">-2.5199106897947825</Real>
+      <Real Name="ZZ">0.029852938530824352</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">15.009930911660677</Real>
+      <Real Name="YY">-3.5199107721829526</Real>
+      <Real Name="ZZ">0.02985297971277108</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">16.009931028600661</Real>
+      <Real Name="YY">-4.5199108502349024</Real>
+      <Real Name="ZZ">0.029853018727246917</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">17.009931139543724</Real>
+      <Real Name="YY">-5.5199109242841882</Real>
+      <Real Name="ZZ">0.029853055740980416</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">18.009931244939629</Real>
+      <Real Name="YY">6.4800890053689901</Real>
+      <Real Name="ZZ">0.02985309090402723</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">19.009931345194275</Real>
+      <Real Name="YY">5.4800889384537204</Real>
+      <Real Name="ZZ">0.02985312435180347</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">20.009931440674887</Real>
+      <Real Name="YY">4.4800888747248919</Real>
+      <Real Name="ZZ">0.029853156206828459</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.0099315317145422313</Real>
+      <Real Name="YY">3.4800888139601964</Real>
+      <Real Name="ZZ">0.029853186580224362</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">1.0099316186160305</Real>
+      <Real Name="YY">2.4800887559575306</Real>
+      <Real Name="ZZ">0.029853215573011384</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">2.0099317016552312</Real>
+      <Real Name="YY">1.4800887005327623</Real>
+      <Real Name="ZZ">0.029853243277230084</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">3.0099317810840307</Real>
+      <Real Name="YY">0.48008864751776659</Real>
+      <Real Name="ZZ">0.029853269776917539</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">4.0099318571328801</Real>
+      <Real Name="YY">-0.51991140324127216</Real>
+      <Real Name="ZZ">0.029853295148958719</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">5.0099319300130309</Real>
+      <Real Name="YY">-1.5199114518853516</Real>
+      <Real Name="ZZ">0.029853319463831535</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">6.0099319999184795</Real>
+      <Real Name="YY">-2.5199114985439572</Real>
+      <Real Name="ZZ">0.029853342786260541</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">7.0099320670277114</Real>
+      <Real Name="YY">-3.5199115433362187</Real>
+      <Real Name="ZZ">0.029853365175792373</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">8.0099321315052077</Real>
+      <Real Name="YY">-4.5199115863719221</Real>
+      <Real Name="ZZ">0.02985338668730338</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">9.0099321935028023</Real>
+      <Real Name="YY">-5.5199116277524052</Real>
+      <Real Name="ZZ">0.029853407371448558</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">10.009932253160864</Real>
+      <Real Name="YY">6.4800883324286378</Real>
+      <Real Name="ZZ">0.029853427275059984</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">11.009932310609365</Real>
+      <Real Name="YY">5.4800882940844593</Real>
+      <Real Name="ZZ">0.029853446441500571</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">12.009932365968831</Real>
+      <Real Name="YY">4.4800882571346143</Real>
+      <Real Name="ZZ">0.029853464910979718</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">13.009932419351173</Real>
+      <Real Name="YY">3.4800882215044053</Real>
+      <Real Name="ZZ">0.029853482720834584</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">14.009932470860452</Real>
+      <Real Name="YY">2.4800881871243798</Real>
+      <Real Name="ZZ">0.029853499905782288</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">15.009932520593544</Real>
+      <Real Name="YY">1.4800881539298718</Real>
+      <Real Name="ZZ">0.029853516498145563</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">16.009932568640782</Real>
+      <Real Name="YY">0.48008812186060235</Real>
+      <Real Name="ZZ">0.029853532528055868</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">17.009932615086427</Real>
+      <Real Name="YY">-0.5199119091396921</Real>
+      <Real Name="ZZ">0.029853548023635816</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">18.009932660009277</Real>
+      <Real Name="YY">-1.5199119391235834</Real>
+      <Real Name="ZZ">0.029853563011163969</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">19.009932703482999</Real>
+      <Real Name="YY">-2.519911968140252</Real>
+      <Real Name="ZZ">0.02985357751522346</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">20.009932745576602</Real>
+      <Real Name="YY">-3.5199119962357566</Real>
+      <Real Name="ZZ">0.029853591558836649</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.0099327863547810629</Real>
+      <Real Name="YY">-4.5199120234532781</Real>
+      <Real Name="ZZ">0.029853605163586889</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">1.0099328258782463</Real>
+      <Real Name="YY">-5.5199120498333363</Real>
+      <Real Name="ZZ">0.029853618349729442</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">2.0099328642040311</Real>
+      <Real Name="YY">6.4800879245860017</Real>
+      <Real Name="ZZ">0.029853631136291928</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">3.0099329013857625</Real>
+      <Real Name="YY">5.4800878997689413</Real>
+      <Real Name="ZZ">0.029853643541165972</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">4.0099329374739137</Real>
+      <Real Name="YY">4.4800878756817957</Real>
+      <Real Name="ZZ">0.02985365558119079</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">5.0099329725160313</Real>
+      <Real Name="YY">3.4800878522928258</Real>
+      <Real Name="ZZ">0.029853667272229375</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">6.0099330065569445</Real>
+      <Real Name="YY">2.4800878295721134</Real>
+      <Real Name="ZZ">0.029853678629238278</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">7.0099330396389608</Real>
+      <Real Name="YY">1.4800878074914205</Real>
+      <Real Name="ZZ">0.029853689666331427</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">8.0099330718020276</Real>
+      <Real Name="YY">0.48008778602408064</Real>
+      <Real Name="ZZ">0.029853700396838691</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">9.009933103083922</Real>
+      <Real Name="YY">-0.51991223485511306</Real>
+      <Real Name="ZZ">0.029853710833359425</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">10.009933133520356</Real>
+      <Real Name="YY">-1.5199122551700042</Real>
+      <Real Name="ZZ">0.029853720987812041</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">11.009933163145151</Real>
+      <Real Name="YY">-2.5199122749431653</Real>
+      <Real Name="ZZ">0.029853730871479248</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">12.009933191990347</Real>
+      <Real Name="YY">-3.5199122941959788</Real>
+      <Real Name="ZZ">0.029853740495049963</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">13.009933220086316</Real>
+      <Real Name="YY">-4.5199123129487218</Real>
+      <Real Name="ZZ">0.029853749868657808</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">14.009933247461877</Real>
+      <Real Name="YY">-5.5199123312206222</Real>
+      <Real Name="ZZ">0.0298537590019167</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">15.009933274144387</Real>
+      <Real Name="YY">6.4800876509700576</Real>
+      <Real Name="ZZ">0.029853767903953873</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">16.00993330015983</Real>
+      <Real Name="YY">5.480087633605967</Real>
+      <Real Name="ZZ">0.029853776583440118</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">17.009933325532916</Real>
+      <Real Name="YY">4.4800876166706205</Real>
+      <Real Name="ZZ">0.029853785048618048</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">18.009933350287152</Real>
+      <Real Name="YY">3.4800876001483321</Real>
+      <Real Name="ZZ">0.029853793307328225</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">19.009933374444895</Real>
+      <Real Name="YY">2.4800875840241714</Real>
+      <Real Name="ZZ">0.029853801367033358</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">20.009933398027464</Real>
+      <Real Name="YY">1.4800875682839185</Real>
+      <Real Name="ZZ">0.029853809234840732</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.0099334210551371774</Real>
+      <Real Name="YY">0.48008755291402444</Real>
+      <Real Name="ZZ">0.029853816917523222</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">1.0099334435472873</Real>
+      <Real Name="YY">-0.5199124620984299</Real>
+      <Real Name="ZZ">0.029853824421538683</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">2.0099334655223764</Real>
+      <Real Name="YY">-1.5199124767657699</Real>
+      <Real Name="ZZ">0.029853831753048048</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">3.0099334869980314</Real>
+      <Real Name="YY">-2.5199124910997623</Real>
+      <Real Name="ZZ">0.029853838917932203</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">4.0099335079910867</Real>
+      <Real Name="YY">-3.5199125051116416</Real>
+      <Real Name="ZZ">0.02985384592180771</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">5.009933528517629</Real>
+      <Real Name="YY">-4.5199125188121485</Real>
+      <Real Name="ZZ">0.029853852770041545</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">6.0099335485930423</Real>
+      <Real Name="YY">-5.5199125322115403</Real>
+      <Real Name="ZZ">0.02985385946776474</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">7.0099335682320314</Real>
+      <Real Name="YY">6.4800874546803557</Real>
+      <Real Name="ZZ">0.029853866019885277</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">8.009933587448673</Real>
+      <Real Name="YY">5.4800874418541472</Real>
+      <Real Name="ZZ">0.029853872431099989</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">9.0099336062564603</Real>
+      <Real Name="YY">4.4800874293008359</Real>
+      <Real Name="ZZ">0.029853878705905858</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">10.009933624668289</Real>
+      <Real Name="YY">3.4800874170118057</Real>
+      <Real Name="ZZ">0.029853884848610561</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">11.009933642696529</Real>
+      <Real Name="YY">2.4800874049787969</Real>
+      <Real Name="ZZ">0.029853890863342267</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">12.009933660353061</Real>
+      <Real Name="YY">1.4800873931938907</Real>
+      <Real Name="ZZ">0.029853896754058865</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">13.009933677649256</Real>
+      <Real Name="YY">0.48008738164949327</Real>
+      <Real Name="ZZ">0.029853902524556771</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">14.009933694596034</Real>
+      <Real Name="YY">-0.51991262966168394</Real>
+      <Real Name="ZZ">0.029853908178478966</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">15.009933711203871</Real>
+      <Real Name="YY">-1.5199126407466375</Real>
+      <Real Name="ZZ">0.029853913719322688</Real>
+    </Atom>
+  </Sequence>
+  <Sequence Name="FinalVelocities">
+    <Int Name="Length">100</Int>
+    <Atom>
+      <Real Name="XX">0.95936820020396807</Real>
+      <Real Name="YY">-1.965692063259648</Real>
+      <Real Name="ZZ">2.9657979072306837</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.97430351677398452</Real>
+      <Real Name="YY">-1.9756632978058251</Real>
+      <Real Name="ZZ">2.9707817290908398</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.97928195563065601</Real>
+      <Real Name="YY">-1.9789870426545502</Real>
+      <Real Name="ZZ">2.9724430030442281</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.9817711750589917</Real>
+      <Real Name="YY">-1.9806489150789124</Real>
+      <Real Name="ZZ">2.9732736400209223</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98326470671599309</Real>
+      <Real Name="YY">-1.9816460385335299</Real>
+      <Real Name="ZZ">2.9737720222069366</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.9842603944873286</Real>
+      <Real Name="YY">-1.9823107875032751</Real>
+      <Real Name="ZZ">2.974104276997612</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98497160003828099</Real>
+      <Real Name="YY">-1.9827856081959503</Real>
+      <Real Name="ZZ">2.9743416018480988</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98550500420149578</Real>
+      <Real Name="YY">-1.9831417237154552</Real>
+      <Real Name="ZZ">2.9745195954859591</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98591987410621906</Real>
+      <Real Name="YY">-1.9834187024528507</Real>
+      <Real Name="ZZ">2.9746580349820775</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.9862517700299972</Real>
+      <Real Name="YY">-1.983640285442765</Real>
+      <Real Name="ZZ">2.9747687865789665</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98652332124036035</Real>
+      <Real Name="YY">-1.9838215806163306</Real>
+      <Real Name="ZZ">2.9748594015218819</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98674961391566429</Real>
+      <Real Name="YY">-1.9839726599276375</Real>
+      <Real Name="ZZ">2.9749349139743062</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98694109233322802</Real>
+      <Real Name="YY">-1.9841004962679727</Real>
+      <Real Name="ZZ">2.9749988091263622</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98710521669114049</Real>
+      <Real Name="YY">-1.984210070273974</Real>
+      <Real Name="ZZ">2.9750535763995476</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98724745780133139</Real>
+      <Real Name="YY">-1.9843050344125099</Real>
+      <Real Name="ZZ">2.9751010413696455</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98737191877274788</Real>
+      <Real Name="YY">-1.9843881280337288</Real>
+      <Real Name="ZZ">2.9751425732184815</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98748173727693878</Real>
+      <Real Name="YY">-1.9844614459348027</Real>
+      <Real Name="ZZ">2.9751792189674506</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98757935372510952</Real>
+      <Real Name="YY">-1.9845266174024243</Real>
+      <Real Name="ZZ">2.9752117929665389</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98766669475768221</Real>
+      <Real Name="YY">-1.9845849287155595</Real>
+      <Real Name="ZZ">2.9752409381236133</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98774530168699859</Real>
+      <Real Name="YY">-1.9846374088973826</Real>
+      <Real Name="ZZ">2.9752671687649852</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98781642224209409</Real>
+      <Real Name="YY">-1.9846848909666492</Real>
+      <Real Name="ZZ">2.9752909012500344</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98788107729218066</Real>
+      <Real Name="YY">-1.9847280564841654</Real>
+      <Real Name="ZZ">2.9753124762364389</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98794011016399907</Real>
+      <Real Name="YY">-1.9847674684784189</Real>
+      <Real Name="ZZ">2.9753321751370754</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98799422362983158</Real>
+      <Real Name="YY">-1.9848035961398176</Real>
+      <Real Name="ZZ">2.9753502324626533</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98804400801839865</Real>
+      <Real Name="YY">-1.9848368335883051</Real>
+      <Real Name="ZZ">2.9753668452021889</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98808996283861406</Real>
+      <Real Name="YY">-1.9848675143099863</Real>
+      <Real Name="ZZ">2.9753821800386788</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98813251359807341</Real>
+      <Real Name="YY">-1.9848959223856162</Real>
+      <Real Name="ZZ">2.9753963789613604</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98817202501757029</Real>
+      <Real Name="YY">-1.9849223013129882</Real>
+      <Real Name="ZZ">2.9754095636752758</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98820881151158524</Real>
+      <Real Name="YY">-1.9849468610039871</Real>
+      <Real Name="ZZ">2.9754218390985772</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98824314557266568</Real>
+      <Real Name="YY">-1.984969783382255</Real>
+      <Real Name="ZZ">2.9754332961603205</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98827526453303138</Real>
+      <Real Name="YY">-1.9849912268974081</Real>
+      <Real Name="ZZ">2.975444014056797</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98830537605837399</Real>
+      <Real Name="YY">-1.9850113301928631</Real>
+      <Real Name="ZZ">2.9754540620847387</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98833366264278644</Real>
+      <Real Name="YY">-1.9850302151067767</Real>
+      <Real Name="ZZ">2.9754635011412955</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98836028531047004</Real>
+      <Real Name="YY">-1.9850479891434025</Real>
+      <Real Name="ZZ">2.9754723849592248</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98838538668285669</Real>
+      <Real Name="YY">-1.985064747520791</Real>
+      <Real Name="ZZ">2.9754807611304188</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98840909353455475</Real>
+      <Real Name="YY">-1.9850805748772131</Real>
+      <Real Name="ZZ">2.9754886719587672</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98843151893481007</Real>
+      <Real Name="YY">-1.9850955467008546</Real>
+      <Real Name="ZZ">2.9754961551747745</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98845276405084104</Real>
+      <Real Name="YY">-1.9851097305337808</Real>
+      <Real Name="ZZ">2.9755032445373066</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98847291967374273</Real>
+      <Real Name="YY">-1.9851231869906572</Real>
+      <Real Name="ZZ">2.9755099703427872</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98849206751549867</Real>
+      <Real Name="YY">-1.98513597062469</Real>
+      <Real Name="ZZ">2.9755163598579926</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98851028131619434</Real>
+      <Real Name="YY">-1.9851481306668208</Real>
+      <Real Name="ZZ">2.9755224376895302</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98852762779304648</Real>
+      <Real Name="YY">-1.9851597116593247</Real>
+      <Real Name="ZZ">2.9755282261005171</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98854416745702234</Real>
+      <Real Name="YY">-1.9851707540010155</Real>
+      <Real Name="ZZ">2.9755337452830837</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98855995531809038</Real>
+      <Real Name="YY">-1.9851812944180838</Real>
+      <Real Name="ZZ">2.975539013593719</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98857504149644382</Real>
+      <Real Name="YY">-1.9851913663721692</Real>
+      <Real Name="ZZ">2.9755440477572139</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98858947175399892</Real>
+      <Real Name="YY">-1.9852010004152094</Real>
+      <Real Name="ZZ">2.9755488630440352</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98860328795804164</Real>
+      <Real Name="YY">-1.9852102244989709</Real>
+      <Real Name="ZZ">2.9755534734250344</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98861652848691639</Real>
+      <Real Name="YY">-1.9852190642459087</Real>
+      <Real Name="ZZ">2.9755578917068286</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98862922858603985</Real>
+      <Real Name="YY">-1.9852275431868498</Real>
+      <Real Name="ZZ">2.9755621296505876</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98864142068119987</Real>
+      <Real Name="YY">-1.9852356829701525</Real>
+      <Real Name="ZZ">2.9755661980765922</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98865313465497962</Real>
+      <Real Name="YY">-1.9852435035462674</Real>
+      <Real Name="ZZ">2.9755701069564853</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98866439809130757</Real>
+      <Real Name="YY">-1.9852510233309941</Real>
+      <Real Name="ZZ">2.9755738654948396</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98867523649230193</Real>
+      <Real Name="YY">-1.9852582593502572</Real>
+      <Real Name="ZZ">2.9755774822015626</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98868567347103609</Real>
+      <Real Name="YY">-1.9852652273688081</Real>
+      <Real Name="ZZ">2.9755809649561784</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98869573092327256</Real>
+      <Real Name="YY">-1.9852719420048668</Real>
+      <Real Name="ZZ">2.9755843210651771</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98870542918078519</Real>
+      <Real Name="YY">-1.9852784168324931</Real>
+      <Real Name="ZZ">2.9755875573131356</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98871478714856043</Real>
+      <Real Name="YY">-1.9852846644731865</Real>
+      <Real Name="ZZ">2.9755906800085392</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.988723822427792</Real>
+      <Real Name="YY">-1.9852906966779935</Real>
+      <Real Name="ZZ">2.9755936950247865</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98873255142637273</Real>
+      <Real Name="YY">-1.9852965244012826</Real>
+      <Real Name="ZZ">2.9755966078370966</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98874098945833278</Real>
+      <Real Name="YY">-1.9853021578671277</Real>
+      <Real Name="ZZ">2.9755994235556606</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98874915083350801</Real>
+      <Real Name="YY">-1.9853076066291748</Real>
+      <Real Name="ZZ">2.9756021469555853</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98875704893851524</Real>
+      <Real Name="YY">-1.9853128796247028</Real>
+      <Real Name="ZZ">2.9756047825038965</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98876469631003094</Real>
+      <Real Name="YY">-1.9853179852235499</Real>
+      <Real Name="ZZ">2.975607334384013</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98877210470118704</Real>
+      <Real Name="YY">-1.9853229312724328</Real>
+      <Real Name="ZZ">2.9756098065178693</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.9887792851418461</Real>
+      <Real Name="YY">-1.9853277251351942</Real>
+      <Real Name="ZZ">2.9756122025860705</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98878624799339321</Real>
+      <Real Name="YY">-1.9853323737293884</Real>
+      <Real Name="ZZ">2.9756145260461477</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98879300299862616</Real>
+      <Real Name="YY">-1.9853368835595773</Real>
+      <Real Name="ZZ">2.9756167801492044</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98879955932723496</Real>
+      <Real Name="YY">-1.9853412607477001</Real>
+      <Real Name="ZZ">2.975618967955115</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.9888059256173326</Real>
+      <Real Name="YY">-1.9853455110608065</Real>
+      <Real Name="ZZ">2.9756210923463597</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98881211001342828</Real>
+      <Real Name="YY">-1.9853496399363946</Real>
+      <Real Name="ZZ">2.9756231560407094</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98881812020118276</Real>
+      <Real Name="YY">-1.9853536525056297</Real>
+      <Real Name="ZZ">2.9756251616028244</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98882396343927681</Real>
+      <Real Name="YY">-1.9853575536146069</Real>
+      <Real Name="ZZ">2.975627111454886</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98882964658865657</Real>
+      <Real Name="YY">-1.9853613478438852</Real>
+      <Real Name="ZZ">2.9756290078863388</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98883517613940453</Real>
+      <Real Name="YY">-1.9853650395264273</Real>
+      <Real Name="ZZ">2.9756308530628877</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98884055823546591</Real>
+      <Real Name="YY">-1.9853686327641025</Real>
+      <Real Name="ZZ">2.9756326490347282</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98884579869742062</Real>
+      <Real Name="YY">-1.9853721314428894</Real>
+      <Real Name="ZZ">2.9756343977441535</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98885090304347989</Real>
+      <Real Name="YY">-1.9853755392469041</Real>
+      <Real Name="ZZ">2.9756361010325567</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.9888558765088713</Real>
+      <Real Name="YY">-1.9853788596713295</Real>
+      <Real Name="ZZ">2.9756377606468916</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98886072406374681</Real>
+      <Real Name="YY">-1.9853820960343749</Real>
+      <Real Name="ZZ">2.9756393782456789</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98886545042974938</Real>
+      <Real Name="YY">-1.9853852514883461</Real>
+      <Real Name="ZZ">2.9756409554044962</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98887006009535749</Real>
+      <Real Name="YY">-1.9853883290298731</Real>
+      <Real Name="ZZ">2.9756424936211188</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98887455733009777</Real>
+      <Real Name="YY">-1.9853913315094114</Real>
+      <Real Name="ZZ">2.9756439943202628</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98887894619773453</Real>
+      <Real Name="YY">-1.9853942616400433</Real>
+      <Real Name="ZZ">2.975645458857985</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98888323056852379</Real>
+      <Real Name="YY">-1.9853971220056634</Real>
+      <Real Name="ZZ">2.9756468885257585</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98888741413058823</Real>
+      <Real Name="YY">-1.9853999150685602</Real>
+      <Real Name="ZZ">2.97564828455429</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98889150040051166</Real>
+      <Real Name="YY">-1.9854026431765079</Real>
+      <Real Name="ZZ">2.9756496481170416</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98889549273319466</Real>
+      <Real Name="YY">-1.9854053085693284</Real>
+      <Real Name="ZZ">2.9756509803335254</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98889939433104512</Real>
+      <Real Name="YY">-1.9854079133850406</Real>
+      <Real Name="ZZ">2.9756522822723621</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98890320825253886</Real>
+      <Real Name="YY">-1.9854104596655699</Real>
+      <Real Name="ZZ">2.975653554954143</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98890693742022184</Real>
+      <Real Name="YY">-1.9854129493620858</Real>
+      <Real Name="ZZ">2.9756547993541069</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98891058462817516</Real>
+      <Real Name="YY">-1.9854153843399951</Real>
+      <Real Name="ZZ">2.9756560164046215</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98891415254899995</Real>
+      <Real Name="YY">-1.9854177663836059</Real>
+      <Real Name="ZZ">2.97565720699752</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98891764374034385</Real>
+      <Real Name="YY">-1.9854200972004687</Real>
+      <Real Name="ZZ">2.9756583719862673</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98892106065102126</Real>
+      <Real Name="YY">-1.9854223784254865</Real>
+      <Real Name="ZZ">2.9756595121880176</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98892440562673689</Real>
+      <Real Name="YY">-1.9854246116247125</Real>
+      <Real Name="ZZ">2.9756606283855214</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98892768091545769</Real>
+      <Real Name="YY">-1.9854267982989544</Real>
+      <Real Name="ZZ">2.9756617213289145</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98893088867245338</Real>
+      <Real Name="YY">-1.9854289398871297</Real>
+      <Real Name="ZZ">2.9756627917373879</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98893403096501986</Real>
+      <Real Name="YY">-1.9854310377694246</Real>
+      <Real Name="ZZ">2.9756638403007938</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98893710977692872</Real>
+      <Real Name="YY">-1.9854330932702589</Real>
+      <Real Name="ZZ">2.9756648676810999</Real>
+    </Atom>
+    <Atom>
+      <Real Name="XX">0.98894012701259992</Real>
+      <Real Name="YY">-1.9854351076610774</Real>
+      <Real Name="ZZ">2.9756658745137958</Real>
+    </Atom>
+  </Sequence>
+</ReferenceData>
index 819fd465dcf0223a65eafe34e29108e095422229..d77921c8f006266bd9ee2fcd63a0c48c6edfd0a0 100644 (file)
@@ -82,19 +82,25 @@ class UpdateConstrainCuda
          * This will extract temperature scaling factors from tcstat, transform them into the plain
          * array and call the normal integrate method.
          *
-         * \param[in]  dt                 Timestep
-         * \param[in]  updateVelocities   If the velocities should be constrained.
-         * \param[in]  computeVirial      If virial should be updated.
-         * \param[out] virial             Place to save virial tensor.
-         * \param[in]  doTempCouple       If the temperature coupling should be performed.
-         * \param[in]  tcstat             Temperature coupling data.
+         * \param[in]  dt                     Timestep
+         * \param[in]  updateVelocities       If the velocities should be constrained.
+         * \param[in]  computeVirial          If virial should be updated.
+         * \param[out] virial                 Place to save virial tensor.
+         * \param[in]  doTempCouple           If the temperature coupling should be performed.
+         * \param[in]  tcstat                 Temperature coupling data.
+         * \param[in]  doPressureCouple       If the temperature coupling should be applied.
+         * \param[in]  dtPressureCouple       Period between pressure coupling steps
+         * \param[in]  velocityScalingMatrix  Parrinello-Rahman velocity scaling matrix
          */
         void integrate(real                              dt,
                        bool                              updateVelocities,
                        bool                              computeVirial,
                        tensor                            virial,
                        bool                              doTempCouple,
-                       gmx::ArrayRef<const t_grp_tcstat> tcstat);
+                       gmx::ArrayRef<const t_grp_tcstat> tcstat,
+                       bool                              doPressureCouple,
+                       float                             dtPressureCouple,
+                       const matrix                      velocityScalingMatrix);
 
         /*! \brief
          * Update data-structures (e.g. after NB search step).
index 66c43cdb5258a949f849f1bb68d6ea00923c5653..fea55a29591db83d9ef5cf12279eb307d6582d09 100644 (file)
@@ -69,7 +69,10 @@ void UpdateConstrainCuda::integrate(gmx_unused const real
                                     gmx_unused const bool                        computeVirial,
                                     gmx_unused tensor                            virialScaled,
                                     gmx_unused const bool                        doTempCouple,
-                                    gmx_unused gmx::ArrayRef<const t_grp_tcstat> tcstat)
+                                    gmx_unused gmx::ArrayRef<const t_grp_tcstat> tcstat,
+                                    gmx_unused const bool                        doPressureCouple,
+                                    gmx_unused const float                       dtPressureCouple,
+                                    gmx_unused const matrix                      velocityScalingMatrix)
 {
     GMX_ASSERT(false, "A CPU stub for UpdateConstrain was called insted of the correct implementation.");
 }
index df84ce91c969b4db0f69c975a796c449ec9533d7..c576a646e0f7d5b978d6e3df3cbbef24b97ea097 100644 (file)
@@ -76,13 +76,18 @@ void UpdateConstrainCuda::Impl::integrate(const real                        dt,
                                           const bool                        computeVirial,
                                           tensor                            virial,
                                           const bool                        doTempCouple,
-                                          gmx::ArrayRef<const t_grp_tcstat> tcstat)
+                                          gmx::ArrayRef<const t_grp_tcstat> tcstat,
+                                          const bool                        doPressureCouple,
+                                          const float                       dtPressureCouple,
+                                          const matrix                      velocityScalingMatrix)
 {
     // Clearing virial matrix
     // TODO There is no point in having separate virial matrix for constraints
     clear_mat(virial);
 
-    integrator_->integrate(d_x_, d_xp_, d_v_, d_f_, dt, doTempCouple, tcstat);
+    integrator_->integrate(d_x_, d_xp_, d_v_, d_f_, dt,
+                           doTempCouple, tcstat,
+                           doPressureCouple, dtPressureCouple, velocityScalingMatrix);
     lincsCuda_->apply(d_x_, d_xp_,
                       updateVelocities, d_v_, 1.0/dt,
                       computeVirial, virial);
@@ -199,9 +204,14 @@ void UpdateConstrainCuda::integrate(const real                        dt,
                                     const bool                        computeVirial,
                                     tensor                            virialScaled,
                                     const bool                        doTempCouple,
-                                    gmx::ArrayRef<const t_grp_tcstat> tcstat)
+                                    gmx::ArrayRef<const t_grp_tcstat> tcstat,
+                                    const bool                        doPressureCouple,
+                                    const float                       dtPressureCouple,
+                                    const matrix                      pRVScalingMatrix)
 {
-    impl_->integrate(dt, updateVelocities, computeVirial, virialScaled, doTempCouple, tcstat);
+    impl_->integrate(dt, updateVelocities, computeVirial, virialScaled,
+                     doTempCouple, tcstat,
+                     doPressureCouple, dtPressureCouple, pRVScalingMatrix);
 }
 
 void UpdateConstrainCuda::set(const t_idef    &idef,
index 31d1b90cbb80ac06fa5d46e4916d7efe7301ea74..435d30afda80f5fb9e9cf2c97e29a6317e8d9120 100644 (file)
@@ -85,19 +85,25 @@ class UpdateConstrainCuda::Impl
          *   2. This is the temperature coupling step.
          * Parameters virial/lambdas can be nullptr if computeVirial/doTempCouple are false.
          *
-         * \param[in]  dt                Timestep
-         * \param[in]  updateVelocities  If the velocities should be constrained.
-         * \param[in]  computeVirial     If virial should be updated.
-         * \param[out] virial            Place to save virial tensor.
-         * \param[in]  doTempCouple      If the temperature coupling should be performed.
-         * \param[in]  tcstat            Temperature coupling data.
+         * \param[in]  dt                     Timestep
+         * \param[in]  updateVelocities       If the velocities should be constrained.
+         * \param[in]  computeVirial          If virial should be updated.
+         * \param[out] virial                 Place to save virial tensor.
+         * \param[in]  doTempCouple           If the temperature coupling should be performed.
+         * \param[in]  tcstat                 Temperature coupling data.
+         * \param[in]  doPressureCouple       If the temperature coupling should be applied.
+         * \param[in]  dtPressureCouple       Period between pressure coupling steps
+         * \param[in]  velocityScalingMatrix  Parrinello-Rahman velocity scaling matrix
          */
         void integrate(const real                        dt,
                        const bool                        updateVelocities,
                        const bool                        computeVirial,
                        tensor                            virial,
                        const bool                        doTempCouple,
-                       gmx::ArrayRef<const t_grp_tcstat> tcstat);
+                       gmx::ArrayRef<const t_grp_tcstat> tcstat,
+                       const bool                        doPressureCouple,
+                       const float                       dtPressureCouple,
+                       const matrix                      velocityScalingMatrix);
 
         /*! \brief
          * Update data-structures (e.g. after NB search step).
index e55203646d13b4e7d767d992a43f1275e83f5a19..8c9184aff3995cdce200f1fe9d0775ad9b28c7b9 100644 (file)
@@ -321,7 +321,7 @@ void gmx::LegacySimulator::do_md()
     {
         GMX_RELEASE_ASSERT(ir->eI == eiMD, "Only md integrator is supported on the GPU.");
         GMX_RELEASE_ASSERT(ir->etc != etcNOSEHOOVER, "Nose Hoover temperature coupling is not supported on the GPU.");
-        GMX_RELEASE_ASSERT(ir->epc == epcNO, "Pressure coupling is not supported on the GPU.");
+        GMX_RELEASE_ASSERT(ir->epc == epcNO || ir->epc == epcPARRINELLORAHMAN, "Only Parrinello Rahman pressure control is supported on the GPU.");
         GMX_RELEASE_ASSERT(!mdatoms->haveVsites, "Virtual sites are not supported on the GPU");
         GMX_RELEASE_ASSERT(ed == nullptr, "Essential dynamics is not supported with GPU-based update constraints.");
         GMX_LOG(mdlog.info).asParagraph().
@@ -1230,10 +1230,13 @@ void gmx::LegacySimulator::do_md()
             integrator->copyVelocitiesToGpu(state->v.rvec_array());
             integrator->copyForcesToGpu(as_rvec_array(f.data()));
 
-            // This applies Leap-Frog, LINCS and SETTLE in a succession
-            bool doTempCouple = (ir->etc != etcNO && do_per_step(step + ir->nsttcouple - 1, ir->nsttcouple));
+            bool doTempCouple     = (ir->etc != etcNO && do_per_step(step + ir->nsttcouple - 1, ir->nsttcouple));
+            bool doPressureCouple = (ir->epc == epcPARRINELLORAHMAN && do_per_step(step + ir->nstpcouple - 1, ir->nstpcouple));
 
-            integrator->integrate(ir->delta_t, true, bCalcVir, shake_vir, doTempCouple, ekind->tcstat);
+            // This applies Leap-Frog, LINCS and SETTLE in succession
+            integrator->integrate(ir->delta_t, true, bCalcVir, shake_vir,
+                                  doTempCouple, ekind->tcstat,
+                                  doPressureCouple, ir->nstpcouple*ir->delta_t, M);
 
             integrator->copyCoordinatesFromGpu(state->x.rvec_array());
             integrator->copyVelocitiesFromGpu(state->v.rvec_array());