Commit 42e695c7 authored by Andy Simmonett's avatar Andy Simmonett
Browse files

Updated tests, to compare to Gromacs

o Added C12 shift term, to match GMX.
o Added tests to compare energies and forces directly to GMX, with and without exclusions.
o Modified set/get LJPME parameters to look similar to electrostatic equivalents.
parent a919ab44
......@@ -600,12 +600,12 @@ public:
/**
* Get the parameters being used for the dispersion terms in LJPME.
*
* @param dalpha the separation parameter
* @param dnx the number of grid points along the X axis
* @param dny the number of grid points along the Y axis
* @param dnz the number of grid points along the Z axis
* @param alpha the separation parameter
* @param nx the number of grid points along the X axis
* @param ny the number of grid points along the Y axis
* @param nz the number of grid points along the Z axis
*/
virtual void getLJPMEParameters(double& dalpha, int& dnx, int& dny, int& dnz) const = 0;
virtual void getLJPMEParameters(double& alpha, int& nx, int& ny, int& nz) const = 0;
};
/**
......
......@@ -216,12 +216,12 @@ public:
* Get the parameters to use for dispersion term in LJ-PME calculations. If alpha is 0 (the default),
* these parameters are ignored and instead their values are chosen based on the Ewald error tolerance.
*
* @param[out] dalpha the separation parameter
* @param[out] dnx the number of dispersion grid points along the X axis
* @param[out] dny the number of dispersion grid points along the Y axis
* @param[out] dnz the number of dispersion grid points along the Z axis
* @param[out] alpha the separation parameter
* @param[out] nx the number of dispersion grid points along the X axis
* @param[out] ny the number of dispersion grid points along the Y axis
* @param[out] nz the number of dispersion grid points along the Z axis
*/
void getLJPMEParameters(double& dalpha, int& dnx, int& dny, int& dnz) const;
void getLJPMEParameters(double& alpha, int& nx, int& ny, int& nz) const;
/**
* Set the parameters to use for PME calculations. If alpha is 0 (the default), these parameters are
* ignored and instead their values are chosen based on the Ewald error tolerance.
......@@ -236,12 +236,12 @@ public:
* Set the parameters to use for the dispersion term in LJPME calculations. If alpha is 0 (the default),
* these parameters are ignored and instead their values are chosen based on the Ewald error tolerance.
*
* @param dalpha the separation parameter
* @param dnx the number of grid points along the X axis
* @param dny the number of grid points along the Y axis
* @param dnz the number of grid points along the Z axis
* @param alpha the separation parameter
* @param nx the number of grid points along the X axis
* @param ny the number of grid points along the Y axis
* @param nz the number of grid points along the Z axis
*/
void setLJPMEParameters(double dalpha, int dnx, int dny, int dnz);
void setLJPMEParameters(double alpha, int nx, int ny, int nz);
/**
* Get the parameters being used for PME in a particular Context. Because some platforms have restrictions
* on the allowed grid sizes, the values that are actually used may be slightly different from those
......@@ -262,12 +262,12 @@ public:
* See the manual for details.
*
* @param context the Context for which to get the parameters
* @param[out] dalpha the separation parameter
* @param[out] dnx the number of grid points along the X axis
* @param[out] dny the number of grid points along the Y axis
* @param[out] dnz the number of grid points along the Z axis
* @param[out] alpha the separation parameter
* @param[out] nx the number of grid points along the X axis
* @param[out] ny the number of grid points along the Y axis
* @param[out] nz the number of grid points along the Z axis
*/
void getLJPMEParametersInContext(const Context& context, double& dalpha, int& dnx, int& dny, int& dnz) const;
void getLJPMEParametersInContext(const Context& context, double& alpha, int& nx, int& ny, int& nz) const;
/**
* Add the nonbonded force parameters for a particle. This should be called once for each particle
* in the System. When it is called for the i'th time, it specifies the parameters for the i'th particle.
......
......@@ -106,11 +106,11 @@ void NonbondedForce::getPMEParameters(double& alpha, int& nx, int& ny, int& nz)
nz = this->nz;
}
void NonbondedForce::getLJPMEParameters(double& dalpha, int& dnx, int& dny, int& dnz) const {
dalpha = this->dalpha;
dnx = this->dnx;
dny = this->dny;
dnz = this->dnz;
void NonbondedForce::getLJPMEParameters(double& alpha, int& nx, int& ny, int& nz) const {
alpha = this->dalpha;
nx = this->dnx;
ny = this->dny;
nz = this->dnz;
}
void NonbondedForce::setPMEParameters(double alpha, int nx, int ny, int nz) {
......@@ -120,19 +120,19 @@ void NonbondedForce::setPMEParameters(double alpha, int nx, int ny, int nz) {
this->nz = nz;
}
void NonbondedForce::setLJPMEParameters(double dalpha, int dnx, int dny, int dnz) {
this->dalpha = dalpha;
this->dnx = dnx;
this->dny = dny;
this->dnz = dnz;
void NonbondedForce::setLJPMEParameters(double alpha, int nx, int ny, int nz) {
this->dalpha = alpha;
this->dnx = nx;
this->dny = ny;
this->dnz = nz;
}
void NonbondedForce::getPMEParametersInContext(const Context& context, double& alpha, int& nx, int& ny, int& nz) const {
dynamic_cast<const NonbondedForceImpl&>(getImplInContext(context)).getPMEParameters(alpha, nx, ny, nz);
}
void NonbondedForce::getLJPMEParametersInContext(const Context& context, double& dalpha, int& dnx, int& dny, int& dnz) const {
dynamic_cast<const NonbondedForceImpl&>(getImplInContext(context)).getLJPMEParameters(dalpha, dnx, dny, dnz);
void NonbondedForce::getLJPMEParametersInContext(const Context& context, double& alpha, int& nx, int& ny, int& nz) const {
dynamic_cast<const NonbondedForceImpl&>(getImplInContext(context)).getLJPMEParameters(alpha, nx, ny, nz);
}
int NonbondedForce::addParticle(double charge, double sigma, double epsilon) {
......
......@@ -261,12 +261,12 @@ public:
/**
* Get the parameters being used for the dispersion term in LJPME.
*
* @param dalpha the separation parameter
* @param dnx the number of grid points along the X axis
* @param dny the number of grid points along the Y axis
* @param dnz the number of grid points along the Z axis
* @param alpha the separation parameter
* @param nx the number of grid points along the X axis
* @param ny the number of grid points along the Y axis
* @param nz the number of grid points along the Z axis
*/
void getLJPMEParameters(double& dalpha, int& dnx, int& dny, int& dnz) const;
void getLJPMEParameters(double& alpha, int& nx, int& ny, int& nz) const;
private:
class PmeIO;
CpuPlatform::PlatformData& data;
......
......@@ -751,16 +751,16 @@ void CpuCalcNonbondedForceKernel::getPMEParameters(double& alpha, int& nx, int&
}
}
void CpuCalcNonbondedForceKernel::getLJPMEParameters(double& dalpha, int& dnx, int& dny, int& dnz) const {
void CpuCalcNonbondedForceKernel::getLJPMEParameters(double& alpha, int& nx, int& ny, int& nz) const {
if (nonbondedMethod != LJPME)
throw OpenMMException("getPMEParametersInContext: This Context is not using PME");
if (useOptimizedPme)
optimizedDispersionPme.getAs<const CalcPmeReciprocalForceKernel>().getPMEParameters(dalpha, dnx, dny, dnz);
optimizedDispersionPme.getAs<const CalcPmeReciprocalForceKernel>().getPMEParameters(alpha, nx, ny, nz);
else {
dalpha = ewaldDispersionAlpha;
dnx = dispersionGridSize[0];
dny = dispersionGridSize[1];
dnz = dispersionGridSize[2];
alpha = ewaldDispersionAlpha;
nx = dispersionGridSize[0];
ny = dispersionGridSize[1];
nz = dispersionGridSize[2];
}
}
......
......@@ -622,7 +622,7 @@ public:
* @param ny the number of grid points along the Y axis
* @param nz the number of grid points along the Z axis
*/
void getLJPMEParameters(double& dalpha, int& dnx, int& dny, int& dnz) const;
void getLJPMEParameters(double& alpha, int& nx, int& ny, int& nz) const;
private:
class SortTrait : public OpenCLSort::SortTrait {
int getDataSize() const {return 8;}
......
......@@ -441,12 +441,12 @@ public:
/**
* Get the parameters being used for the dispersion term in LJPME.
*
* @param dalpha the separation parameter
* @param dnx the number of grid points along the X axis
* @param dny the number of grid points along the Y axis
* @param dnz the number of grid points along the Z axis
* @param alpha the separation parameter
* @param nx the number of grid points along the X axis
* @param ny the number of grid points along the Y axis
* @param nz the number of grid points along the Z axis
*/
void getLJPMEParameters(double& dalpha, int& dnx, int& dny, int& dnz) const;
void getLJPMEParameters(double& alpha, int& nx, int& ny, int& nz) const;
private:
class Task;
OpenCLPlatform::PlatformData& data;
......
......@@ -2205,16 +2205,16 @@ void OpenCLCalcNonbondedForceKernel::getPMEParameters(double& alpha, int& nx, in
}
}
void OpenCLCalcNonbondedForceKernel::getLJPMEParameters(double& dalpha, int& dnx, int& dny, int& dnz) const {
void OpenCLCalcNonbondedForceKernel::getLJPMEParameters(double& alpha, int& nx, int& ny, int& nz) const {
if (nonbondedMethod != LJPME)
throw OpenMMException("getPMEParametersInContext: This Context is not using PME");
if (cl.getPlatformData().useCpuPme)
cpuPme.getAs<CalcPmeReciprocalForceKernel>().getPMEParameters(dalpha, dnx, dny, dnz);
cpuPme.getAs<CalcPmeReciprocalForceKernel>().getPMEParameters(alpha, nx, ny, nz);
else {
dalpha = this->alpha;
dnx = gridSizeX;
dny = gridSizeY;
dnz = gridSizeZ;
alpha = this->alpha;
nx = gridSizeX;
ny = gridSizeY;
nz = gridSizeZ;
}
}
......
......@@ -583,8 +583,8 @@ void OpenCLParallelCalcNonbondedForceKernel::getPMEParameters(double& alpha, int
dynamic_cast<const OpenCLCalcNonbondedForceKernel&>(kernels[0].getImpl()).getPMEParameters(alpha, nx, ny, nz);
}
void OpenCLParallelCalcNonbondedForceKernel::getLJPMEParameters(double& dalpha, int& dnx, int& dny, int& dnz) const {
dynamic_cast<const OpenCLCalcNonbondedForceKernel&>(kernels[0].getImpl()).getLJPMEParameters(dalpha, dnx, dny, dnz);
void OpenCLParallelCalcNonbondedForceKernel::getLJPMEParameters(double& alpha, int& nx, int& ny, int& nz) const {
dynamic_cast<const OpenCLCalcNonbondedForceKernel&>(kernels[0].getImpl()).getLJPMEParameters(alpha, nx, ny, nz);
}
class OpenCLParallelCalcCustomNonbondedForceKernel::Task : public OpenCLContext::WorkTask {
......
......@@ -607,12 +607,12 @@ public:
/**
* Get the dispersion parameters being used for the dispersion term in LJPME.
*
* @param dalpha the separation parameter
* @param dnx the number of grid points along the X axis
* @param dny the number of grid points along the Y axis
* @param dnz the number of grid points along the Z axis
* @param alpha the separation parameter
* @param nx the number of grid points along the X axis
* @param ny the number of grid points along the Y axis
* @param nz the number of grid points along the Z axis
*/
void getLJPMEParameters(double& dalpha, int& dnx, int& dny, int& dnz) const;
void getLJPMEParameters(double& alpha, int& nx, int& ny, int& nz) const;
private:
int numParticles, num14;
int **bonded14IndexArray;
......
......@@ -1080,13 +1080,13 @@ void ReferenceCalcNonbondedForceKernel::getPMEParameters(double& alpha, int& nx,
nz = gridSize[2];
}
void ReferenceCalcNonbondedForceKernel::getLJPMEParameters(double& dalpha, int& dnx, int& dny, int& dnz) const {
void ReferenceCalcNonbondedForceKernel::getLJPMEParameters(double& alpha, int& nx, int& ny, int& nz) const {
if (nonbondedMethod != LJPME)
throw OpenMMException("getPMEParametersInContext: This Context is not using LJPME");
dalpha = ewaldDispersionAlpha;
dnx = dispersionGridSize[0];
dny = dispersionGridSize[1];
dnz = dispersionGridSize[2];
alpha = ewaldDispersionAlpha;
nx = dispersionGridSize[0];
ny = dispersionGridSize[1];
nz = dispersionGridSize[2];
}
ReferenceCalcCustomNonbondedForceKernel::~ReferenceCalcCustomNonbondedForceKernel() {
......
......@@ -166,18 +166,18 @@ void ReferenceLJCoulombIxn::setUsePME(RealOpenMM alpha, int meshSize[3]) {
/**---------------------------------------------------------------------------------------
Set the force to use Particle-Mesh Ewald (PME) summation for dispersion and terms.
Set the force to use Particle-Mesh Ewald (PME) summation for dispersion terms.
@param dalpha the dispersion Ewald separation parameter
@param dgridSize the dimensions of the dispersion mesh
@param alpha the dispersion Ewald separation parameter
@param gridSize the dimensions of the dispersion mesh
--------------------------------------------------------------------------------------- */
void ReferenceLJCoulombIxn::setUseLJPME(RealOpenMM dalpha, int dmeshSize[3]) {
alphaDispersionEwald = dalpha;
dispersionMeshDim[0] = dmeshSize[0];
dispersionMeshDim[1] = dmeshSize[1];
dispersionMeshDim[2] = dmeshSize[2];
void ReferenceLJCoulombIxn::setUseLJPME(RealOpenMM alpha, int meshSize[3]) {
alphaDispersionEwald = alpha;
dispersionMeshDim[0] = meshSize[0];
dispersionMeshDim[1] = meshSize[1];
dispersionMeshDim[2] = meshSize[2];
ljpme = true;
}
......@@ -455,13 +455,14 @@ void ReferenceLJCoulombIxn::calculateEwaldIxn(int numberOfAtoms, vector<RealVec>
// and multiplicative functional forms at the cutoff.
RealOpenMM emult = c6i*c6j*inverseR2*inverseR2*inverseR2*(1.0 - EXP(-dar2) * (1.0 + dar2 + 0.5*dar4));
dEdR += 6.0*c6i*c6j*inverseR2*inverseR2*inverseR2*inverseR2*(1.0 - EXP(-dar2) * (1.0 + dar2 + 0.5*dar4 + dar6/6.0));
// The additive part of the potential shift
RealOpenMM inverseCut2 = 1.0/(cutoffDistance*cutoffDistance);
RealOpenMM inverseCut6 = inverseCut2*inverseCut2*inverseCut2;
sig2 = atomParameters[ii][SigIndex] + atomParameters[jj][SigIndex];
sig2 *= sig2;
sig6 = sig2*sig2*sig2;
RealOpenMM potentialshift = eps*sig6*inverseCut6;
// The additive part of the potential shift
RealOpenMM potentialshift = eps*(one-sig6*inverseCut6)*sig6*inverseCut6;
dalphaR = alphaDispersionEwald * cutoffDistance;
dar2 = dalphaR*dalphaR;
dar4 = dar2*dar2;
......
......@@ -70,381 +70,381 @@ void make_waterbox(int natoms, double boxEdgeLength, NonbondedForce *forceField,
positions.push_back(Vec3(coords[atom][0], coords[atom][1], coords[atom][2])*OpenMM::NmPerAngstrom);
}else if(natoms == 375){
const double coords[375][3] = {
{ -6.227577, -6.257691, -6.242372 },
{ -5.323856, -6.038433, -6.004096 },
{ -6.756728, -5.564157, -5.841659 },
{ -3.045385, -6.233543, -6.190951 },
{ -3.526738, -5.554781, -5.712262 },
{ -3.599325, -6.431115, -6.949685 },
{ 0.021426, -6.231744, -6.149739 },
{ -0.875209, -5.976613, -6.378901 },
{ 0.535110, -6.037842, -6.937199 },
{ 3.100433, -6.203101, -6.272233 },
{ 3.874100, -6.357529, -5.725284 },
{ 2.378191, -6.111572, -5.646492 },
{ 6.186877, -6.143892, -6.207648 },
{ 6.463778, -6.660529, -5.447403 },
{ 6.262846, -6.748390, -6.949519 },
{ -6.215886, -3.157497, -6.242725 },
{ -6.237827, -3.077604, -5.286327 },
{ -6.028329, -2.268904, -6.553829 },
{ -3.143522, -3.072478, -6.164691 },
{ -3.384628, -3.637034, -6.902733 },
{ -2.183705, -3.058977, -6.176044 },
{ -0.001261, -3.162923, -6.234377 },
{ -0.032904, -2.309579, -6.672970 },
{ 0.052913, -2.950816, -5.299691 },
{ 3.087208, -3.110696, -6.143281 },
{ 2.657287, -2.555869, -6.798183 },
{ 3.804920, -3.533514, -6.620435 },
{ 6.169768, -3.141467, -6.167741 },
{ 7.044757, -3.328081, -6.515780 },
{ 5.953438, -2.272871, -6.514589 },
{ -6.207742, -0.041917, -6.155951 },
{ -5.438834, 0.329527, -6.594553 },
{ -6.956596, 0.335819, -6.622957 },
{ -3.102424, -0.064365, -6.193126 },
{ -3.759220, 0.421493, -6.697232 },
{ -2.461457, 0.600160, -5.930203 },
{ 0.057084, -0.011721, -6.176128 },
{ -0.107739, 0.025184, -7.121132 },
{ -0.798344, 0.160864, -5.776104 },
{ 3.038705, 0.009068, -6.198274 },
{ 3.541849, 0.080397, -7.012718 },
{ 3.690240, -0.224328, -5.533000 },
{ 6.176831, 0.057180, -6.193629 },
{ 5.789021, -0.734630, -6.573369 },
{ 7.097056, -0.172982, -6.046071 },
{ -6.202562, 3.152015, -6.250632 },
{ -6.598511, 3.181133, -5.376596 },
{ -5.879135, 2.252396, -6.338049 },
{ -3.097153, 3.045646, -6.175594 },
{ -3.888514, 3.580848, -6.269758 },
{ -2.415842, 3.541069, -6.635956 },
{ 0.004020, 3.065952, -6.260601 },
{ -0.714153, 3.647384, -6.000359 },
{ 0.650339, 3.152212, -5.556049 },
{ 3.148082, 3.065474, -6.236447 },
{ 3.111314, 3.313051, -5.309670 },
{ 2.384648, 3.494128, -6.630129 },
{ 6.195396, 3.144020, -6.257042 },
{ 6.825505, 3.254686, -5.541307 },
{ 5.765894, 2.305751, -6.071584 },
{ -6.224762, 6.269436, -6.199499 },
{ -6.227138, 5.744470, -7.003219 },
{ -5.898129, 5.671700, -5.523050 },
{ -3.049795, 6.244848, -6.205918 },
{ -3.087748, 5.286175, -6.173255 },
{ -3.968304, 6.520275, -6.251129 },
{ -0.053210, 6.218043, -6.169688 },
{ 0.825799, 6.589399, -6.064810 },
{ 0.018791, 5.642523, -6.934642 },
{ 3.109156, 6.250395, -6.157883 },
{ 3.646142, 5.470269, -6.314764 },
{ 2.467680, 6.248139, -6.872071 },
{ 6.221542, 6.201019, -6.270430 },
{ 5.372468, 6.425629, -5.882893 },
{ 6.803922, 6.076521, -5.517505 },
{ -6.192636, -6.150665, -3.134919 },
{ -6.377934, -7.011364, -3.517572 },
{ -6.257279, -6.290045, -2.187314 },
{ -3.109530, -6.270465, -3.117828 },
{ -2.298394, -5.772194, -2.993950 },
{ -3.809490, -5.627637, -2.982220 },
{ -0.038820, -6.182503, -3.150607 },
{ -0.071984, -7.054630, -2.750788 },
{ 0.688173, -5.741421, -2.705086 },
{ 3.102774, -6.145922, -3.077989 },
{ 2.352681, -6.724399, -3.233832 },
{ 3.862449, -6.652292, -3.374712 },
{ 6.221089, -6.201529, -3.167266 },
{ 6.825244, -6.363707, -2.439079 },
{ 5.358331, -6.130338, -2.752367 },
{ -6.262103, -3.132226, -3.123586 },
{ -6.166340, -2.275929, -2.700331 },
{ -5.366218, -3.471706, -3.184445 },
{ -3.111137, -3.051004, -3.142406 },
{ -3.311768, -3.968529, -3.341042 },
{ -2.770611, -3.068346, -2.245019 },
{ 0.005724, -3.130303, -3.163012 },
{ 0.482202, -2.374690, -2.811473 },
{ -0.573062, -3.403472, -2.447507 },
{ 3.095078, -3.099676, -3.168462 },
{ 2.417453, -3.190640, -2.494584 },
{ 3.919837, -3.073655, -2.677893 },
{ 6.196105, -3.040136, -3.088337 },
{ 5.640465, -3.619831, -3.614436 },
{ 6.939673, -3.589544, -2.829842 },
{ -6.182065, -0.003400, -3.042390 },
{ -6.005810, -0.591008, -3.780776 },
{ -6.797182, 0.644978, -3.392815 },
{ -3.055877, -0.038021, -3.078205 },
{ -2.957574, 0.804401, -3.527898 },
{ -4.001938, -0.200904, -3.077218 },
{ -0.034735, 0.036962, -3.061441 },
{ -0.339387, -0.376429, -3.872525 },
{ 0.890739, -0.210258, -2.998671 },
{ 3.137299, -0.056306, -3.103061 },
{ 3.449365, 0.817518, -3.349247 },
{ 2.217754, 0.076224, -2.861330 },
{ 6.202733, -0.057422, -3.135143 },
{ 6.891866, 0.607339, -3.204067 },
{ 5.583070, 0.304112, -2.497277 },
{ -6.235328, 3.091028, -3.161196 },
{ -5.620224, 3.796590, -2.948140 },
{ -6.337344, 2.604974, -2.339669 },
{ -3.100761, 3.085670, -3.040001 },
{ -3.841514, 3.471502, -3.513266 },
{ -2.405567, 3.015122, -3.698249 },
{ 0.017686, 3.040997, -3.114710 },
{ -0.562190, 3.593571, -3.643829 },
{ 0.281457, 3.602138, -2.381834 },
{ 3.040493, 3.118625, -3.091261 },
{ 3.497428, 2.301545, -2.878768 },
{ 3.706278, 3.661985, -3.519106 },
{ 6.153747, 3.141770, -3.110452 },
{ 6.524448, 2.527782, -3.748544 },
{ 6.728033, 3.068367, -2.344704 },
{ -6.228412, 6.153262, -3.134991 },
{ -5.497842, 6.211200, -2.514933 },
{ -6.569498, 7.048988, -3.188810 },
{ -3.114261, 6.247531, -3.052990 },
{ -3.763440, 5.838093, -3.629608 },
{ -2.269351, 5.925773, -3.375729 },
{ 0.033856, 6.255675, -3.075505 },
{ 0.340270, 5.631131, -3.737032 },
{ -0.877663, 6.003468, -2.910926 },
{ 3.072932, 6.151993, -3.082847 },
{ 3.294846, 6.929869, -2.565910 },
{ 3.393954, 6.350465, -3.965522 },
{ 6.229389, 6.147520, -3.121044 },
{ 5.797138, 6.388219, -2.298375 },
{ 6.254689, 6.963103, -3.626757 },
{ -6.218080, -6.208893, -0.064724 },
{ -5.793234, -6.874918, 0.480691 },
{ -6.438098, -5.502241, 0.546665 },
{ -3.161793, -6.216735, -0.028339 },
{ -2.502753, -6.872853, 0.209857 },
{ -2.775567, -5.379832, 0.239959 },
{ -0.002532, -6.140991, -0.003478 },
{ 0.689039, -6.720671, -0.330985 },
{ -0.648843, -6.734293, 0.386184 },
{ 3.039844, -6.205646, -0.017228 },
{ 3.777609, -6.569800, -0.511855 },
{ 3.436401, -5.858902, 0.785313 },
{ 6.257004, -6.165220, -0.008551 },
{ 5.368434, -6.091008, -0.364215 },
{ 6.245060, -6.979374, 0.499948 },
{ -6.246883, -3.055033, -0.019337 },
{ -6.350454, -3.640127, 0.734652 },
{ -5.423699, -3.332793, -0.427723 },
{ -3.094331, -3.063472, 0.051555 },
{ -2.443051, -3.620051, -0.381590 },
{ -3.906094, -3.218919, -0.436745 },
{ 0.059986, -3.108175, 0.026527 },
{ -0.319331, -2.356822, -0.435152 },
{ -0.632825, -3.772569, 0.014099 },
{ 3.056825, -3.094971, -0.045775 },
{ 3.286789, -3.903484, 0.417890 },
{ 3.657675, -2.435504, 0.308690 },
{ 6.204418, -3.046271, -0.032672 },
{ 5.666837, -3.316225, 0.715455 },
{ 6.781360, -3.795765, -0.196864 },
{ -6.187331, 0.042326, -0.046499 },
{ -6.739113, -0.736038, -0.152558 },
{ -5.980298, 0.064208, 0.890635 },
{ -3.111868, -0.045870, -0.046351 },
{ -3.369378, -0.088582, 0.877460 },
{ -2.701406, 0.816674, -0.141741 },
{ -0.028600, -0.027927, -0.052228 },
{ -0.450128, 0.284536, 0.751664 },
{ 0.904097, 0.158746, 0.077351 },
{ 3.043640, 0.022778, -0.015695 },
{ 3.263633, -0.820206, 0.387469 },
{ 3.890123, 0.458652, -0.138341 },
{ 6.198501, 0.054145, -0.036443 },
{ 5.524424, -0.562672, 0.258040 },
{ 7.017693, -0.296767, 0.320414 },
{ -6.142883, 3.087172, 0.001701 },
{ -6.832739, 2.822585, 0.614608 },
{ -6.592184, 3.640199, -0.641611 },
{ -3.054590, 3.097169, -0.043753 },
{ -3.795838, 2.503772, 0.097642 },
{ -3.184109, 3.800316, 0.596849 },
{ 0.025258, 3.140300, 0.048161 },
{ -0.898451, 3.040556, -0.193447 },
{ 0.497539, 2.578923, -0.571006 },
{ 3.142639, 3.155831, 0.004528 },
{ 3.281734, 2.283294, 0.379885 },
{ 2.300622, 3.089671, -0.451752 },
{ 6.271003, 3.089878, -0.000229 },
{ 5.555786, 2.545332, -0.337120 },
{ 5.835504, 3.874496, 0.340762 },
{ -6.186874, 6.153181, -0.032864 },
{ -6.458269, 6.211097, 0.886130 },
{ -6.268404, 7.050370, -0.364476 },
{ -3.063571, 6.194209, -0.050917 },
{ -2.845329, 6.642761, 0.769286 },
{ -3.992058, 5.967481, 0.038907 },
{ -0.005511, 6.203833, 0.065479 },
{ -0.675428, 5.996461, -0.590089 },
{ 0.762902, 6.461025, -0.449259 },
{ 3.107182, 6.260055, -0.038149 },
{ 3.570052, 6.091314, 0.785768 },
{ 2.575104, 5.473755, -0.180227 },
{ 6.264803, 6.186329, 0.022994 },
{ 5.538470, 5.646253, -0.296882 },
{ 5.951245, 7.089071, -0.068103 },
{ -6.267283, -6.211735, 3.078419 },
{ -5.985306, -6.384271, 3.979686 },
{ -5.465039, -5.947785, 2.622023 },
{ -3.107839, -6.241119, 3.047498 },
{ -2.699991, -6.510712, 3.873658 },
{ -3.434740, -5.354930, 3.218863 },
{ -0.033434, -6.169301, 3.060705 },
{ 0.838698, -6.005633, 3.426984 },
{ -0.308002, -6.999962, 3.455898 },
{ 3.150365, -6.250863, 3.115724 },
{ 2.771880, -5.609654, 3.721663 },
{ 2.687846, -6.101322, 2.287910 },
{ 6.204347, -6.213550, 3.168674 },
{ 5.750267, -6.738865, 2.505789 },
{ 6.699059, -5.564375, 2.663310 },
{ -6.172325, -3.107328, 3.047333 },
{ -6.828965, -2.449862, 3.288422 },
{ -6.128632, -3.692984, 3.806714 },
{ -3.080296, -3.042262, 3.111628 },
{ -3.599745, -3.563632, 3.727994 },
{ -2.972174, -3.611996, 2.346596 },
{ 0.018427, -3.040709, 3.111508 },
{ -0.861291, -3.412145, 3.209954 },
{ 0.568794, -3.788138, 2.866545 },
{ 3.076991, -3.074154, 3.156063 },
{ 3.816301, -3.685968, 3.130285 },
{ 2.808084, -2.983447, 2.238990 },
{ 6.202874, -3.044570, 3.132656 },
{ 5.483336, -3.645941, 2.927282 },
{ 6.989368, -3.493060, 2.813525 },
{ -6.185279, -0.059803, 3.120451 },
{ -6.419455, 0.669043, 3.699681 },
{ -6.332522, 0.280211, 2.234860 },
{ -3.050408, 0.039017, 3.105488 },
{ -3.468427, -0.425632, 3.834133 },
{ -3.577897, -0.193686, 2.337916 },
{ 0.036504, -0.020609, 3.153990 },
{ 0.239664, -0.086591, 2.218077 },
{ -0.819081, 0.413707, 3.184104 },
{ 3.091492, 0.008311, 3.039147 },
{ 2.481020, -0.295977, 3.714642 },
{ 3.913193, 0.164051, 3.510436 },
{ 6.191365, -0.063471, 3.111335 },
{ 6.055864, 0.479518, 2.331358 },
{ 6.599523, 0.527950, 3.747880 },
{ -6.205614, 3.054919, 3.058779 },
{ -6.876203, 3.731733, 3.176233 },
{ -5.553000, 3.242989, 3.737223 },
{ -3.118412, 3.069232, 3.157498 },
{ -3.646030, 3.741133, 2.719629 },
{ -2.320885, 3.006400, 2.626871 },
{ 0.024980, 3.055432, 3.065769 },
{ -0.877220, 3.144581, 3.381441 },
{ 0.480709, 3.822007, 3.421065 },
{ 3.070975, 3.105245, 3.160550 },
{ 3.950017, 3.440960, 2.970440 },
{ 2.769856, 2.734952, 2.327620 },
{ 6.198446, 3.079479, 3.164063 },
{ 7.022878, 3.306229, 2.727648 },
{ 5.520109, 3.278660, 2.514642 },
{ -6.193602, 6.242270, 3.157025 },
{ -5.567869, 5.886374, 2.521920 },
{ -7.052009, 5.960994, 2.832091 },
{ -3.103387, 6.145098, 3.080057 },
{ -2.343780, 6.698458, 3.275890 },
{ -3.861615, 6.691317, 3.299822 },
{ -0.045554, 6.242642, 3.134180 },
{ 0.637737, 6.548568, 2.533277 },
{ 0.085332, 5.292898, 3.183344 },
{ 3.128530, 6.249892, 3.145938 },
{ 3.572612, 5.823157, 2.409562 },
{ 2.233691, 5.903232, 3.120423 },
{ 6.255670, 6.195132, 3.061028 },
{ 5.552429, 5.596136, 3.322210 },
{ 6.082243, 6.999450, 3.555555 },
{ -6.208072, -6.163006, 6.157412 },
{ -6.293854, -5.991009, 7.097954 },
{ -6.096342, -7.114505, 6.096361 },
{ -3.093215, -6.194828, 6.270532 },
{ -2.561298, -5.900834, 5.527435 },
{ -3.805554, -6.699586, 5.871339 },
{ 0.028309, -6.255582, 6.240192 },
{ -0.704628, -5.700497, 6.516318 },
{ 0.255286, -5.935581, 5.364040 },
{ 3.112376, -6.185324, 6.145057 },
{ 3.768593, -6.549569, 6.743611 },
{ 2.294122, -6.201701, 6.646808 },
{ 6.221282, -6.173949, 6.151454 },
{ 6.616602, -6.986255, 6.476173 },
{ 5.563911, -5.945569, 6.812716 },
{ -6.214945, -3.105559, 6.141418 },
{ -6.767312, -2.662372, 6.789520 },
{ -5.513791, -3.508545, 6.658668 },
{ -3.134984, -3.050634, 6.183218 },
{ -2.194062, -3.145360, 6.348303 },
{ -3.509793, -3.897382, 6.436395 },
{ 0.019709, -3.066046, 6.156136 },
{ -0.062167, -2.811154, 7.078030 },
{ -0.250671, -3.986954, 6.136538 },
{ 3.047052, -3.093053, 6.174132 },
{ 3.846770, -3.511425, 5.847060 },
{ 3.252831, -2.858011, 7.081861 },
{ 6.264526, -3.131008, 6.192287 },
{ 6.014957, -2.208761, 6.098811 },
{ 5.479151, -3.558207, 6.541928 },
{ -6.202784, 0.012060, 6.271161 },
{ -5.794767, -0.706266, 5.782190 },
{ -6.679360, 0.514844, 5.606597 },
{ -3.132137, 0.011406, 6.148615 },
{ -3.531033, -0.354855, 6.941266 },
{ -2.218018, 0.173816, 6.392684 },
{ -0.048817, -0.044068, 6.207411 },
{ 0.264785, 0.472342, 5.461397 },
{ 0.510082, 0.227141, 6.939285 },
{ 3.104615, -0.056762, 6.239817 },
{ 2.334121, 0.441331, 5.957323 },
{ 3.851786, 0.459650, 5.928986 },
{ 6.191962, -0.011674, 6.269664 },
{ 7.056171, 0.162434, 5.889678 },
{ 5.589740, 0.022864, 5.522872 },
{ -6.227582, 3.048278, 6.177333 },
{ -5.456950, 3.575652, 5.954701 },
{ -6.623561, 3.504488, 6.923412 },
{ -3.095950, 3.167462, 6.219110 },
{ -3.718176, 2.753599, 5.616521 },
{ -2.605272, 2.434738, 6.598467 },
{ -0.028196, 3.102085, 6.266027 },
{ 0.892169, 3.276065, 6.055742 },
{ -0.444613, 2.949998, 5.414541 },
{ 3.122055, 3.044925, 6.230400 },
{ 2.318548, 3.530579, 6.430594 },
{ 3.590528, 3.602778, 5.605184 },
{ 6.235943, 3.056340, 6.242112 },
{ 5.925321, 3.913199, 6.543556 },
{ 6.022471, 3.038970, 5.306329 },
{ -6.152078, 6.212531, 6.242895 },
{ -6.277517, 6.463813, 5.324917 },
{ -7.001466, 5.855602, 6.512529 },
{ -3.075211, 6.151648, 6.229296 },
{ -3.984620, 6.273567, 5.947033 },
{ -2.668015, 7.012240, 6.106276 },
{ 0.047399, 6.200405, 6.251791 },
{ -0.389422, 5.502373, 5.758333 },
{ -0.362937, 7.009521, 5.937917 },
{ 3.121019, 6.156392, 6.245211 },
{ 3.669300, 6.880502, 5.934383 },
{ 2.256232, 6.330001, 5.866310 },
{ 6.204797, 6.271399, 6.195395 },
{ 5.469074, 5.654753, 6.199970 },
{ 6.973096, 5.730251, 6.391449 }
{ -6.22, -6.25, -6.24 },
{ -5.32, -6.03, -6.00 },
{ -6.75, -5.56, -5.84 },
{ -3.04, -6.23, -6.19 },
{ -3.52, -5.55, -5.71 },
{ -3.59, -6.43, -6.94 },
{ 0.02, -6.23, -6.14 },
{ -0.87, -5.97, -6.37 },
{ 0.53, -6.03, -6.93 },
{ 3.10, -6.20, -6.27 },
{ 3.87, -6.35, -5.72 },
{ 2.37, -6.11, -5.64 },
{ 6.18, -6.14, -6.20 },
{ 6.46, -6.66, -5.44 },
{ 6.26, -6.74, -6.94 },
{ -6.21, -3.15, -6.24 },
{ -6.23, -3.07, -5.28 },
{ -6.02, -2.26, -6.55 },
{ -3.14, -3.07, -6.16 },
{ -3.38, -3.63, -6.90 },
{ -2.18, -3.05, -6.17 },
{ -0.00, -3.16, -6.23 },
{ -0.03, -2.30, -6.67 },
{ 0.05, -2.95, -5.29 },
{ 3.08, -3.11, -6.14 },
{ 2.65, -2.55, -6.79 },
{ 3.80, -3.53, -6.62 },
{ 6.16, -3.14, -6.16 },
{ 7.04, -3.32, -6.51 },
{ 5.95, -2.27, -6.51 },
{ -6.20, -0.04, -6.15 },
{ -5.43, 0.32, -6.59 },
{ -6.95, 0.33, -6.62 },
{ -3.10, -0.06, -6.19 },
{ -3.75, 0.42, -6.69 },
{ -2.46, 0.60, -5.93 },
{ 0.05, -0.01, -6.17 },
{ -0.10, 0.02, -7.12 },
{ -0.79, 0.16, -5.77 },
{ 3.03, 0.00, -6.19 },
{ 3.54, 0.08, -7.01 },
{ 3.69, -0.22, -5.53 },
{ 6.17, 0.05, -6.19 },
{ 5.78, -0.73, -6.57 },
{ 7.09, -0.17, -6.04 },
{ -6.20, 3.15, -6.25 },
{ -6.59, 3.18, -5.37 },
{ -5.87, 2.25, -6.33 },
{ -3.09, 3.04, -6.17 },
{ -3.88, 3.58, -6.26 },
{ -2.41, 3.54, -6.63 },
{ 0.00, 3.06, -6.26 },
{ -0.71, 3.64, -6.00 },
{ 0.65, 3.15, -5.55 },
{ 3.14, 3.06, -6.23 },
{ 3.11, 3.31, -5.30 },
{ 2.38, 3.49, -6.63 },
{ 6.19, 3.14, -6.25 },
{ 6.82, 3.25, -5.54 },
{ 5.76, 2.30, -6.07 },
{ -6.22, 6.26, -6.19 },
{ -6.22, 5.74, -7.00 },
{ -5.89, 5.67, -5.52 },
{ -3.04, 6.24, -6.20 },
{ -3.08, 5.28, -6.17 },
{ -3.96, 6.52, -6.25 },
{ -0.05, 6.21, -6.16 },
{ 0.82, 6.58, -6.06 },
{ 0.01, 5.64, -6.93 },
{ 3.10, 6.25, -6.15 },
{ 3.64, 5.47, -6.31 },
{ 2.46, 6.24, -6.87 },
{ 6.22, 6.20, -6.27 },
{ 5.37, 6.42, -5.88 },
{ 6.80, 6.07, -5.51 },
{ -6.19, -6.15, -3.13 },
{ -6.37, -7.01, -3.51 },
{ -6.25, -6.29, -2.18 },
{ -3.10, -6.27, -3.11 },
{ -2.29, -5.77, -2.99 },
{ -3.80, -5.62, -2.98 },
{ -0.03, -6.18, -3.15 },
{ -0.07, -7.05, -2.75 },
{ 0.68, -5.74, -2.70 },
{ 3.10, -6.14, -3.07 },
{ 2.35, -6.72, -3.23 },
{ 3.86, -6.65, -3.37 },
{ 6.22, -6.20, -3.16 },
{ 6.82, -6.36, -2.43 },
{ 5.35, -6.13, -2.75 },
{ -6.26, -3.13, -3.12 },
{ -6.16, -2.27, -2.70 },
{ -5.36, -3.47, -3.18 },
{ -3.11, -3.05, -3.14 },
{ -3.31, -3.96, -3.34 },
{ -2.77, -3.06, -2.24 },
{ 0.00, -3.13, -3.16 },
{ 0.48, -2.37, -2.81 },
{ -0.57, -3.40, -2.44 },
{ 3.09, -3.09, -3.16 },
{ 2.41, -3.19, -2.49 },
{ 3.91, -3.07, -2.67 },
{ 6.19, -3.04, -3.08 },
{ 5.64, -3.61, -3.61 },
{ 6.93, -3.58, -2.82 },
{ -6.18, -0.00, -3.04 },
{ -6.00, -0.59, -3.78 },
{ -6.79, 0.64, -3.39 },
{ -3.05, -0.03, -3.07 },
{ -2.95, 0.80, -3.52 },
{ -4.00, -0.20, -3.07 },
{ -0.03, 0.03, -3.06 },
{ -0.33, -0.37, -3.87 },
{ 0.89, -0.21, -2.99 },
{ 3.13, -0.05, -3.10 },
{ 3.44, 0.81, -3.34 },
{ 2.21, 0.07, -2.86 },
{ 6.20, -0.05, -3.13 },
{ 6.89, 0.60, -3.20 },
{ 5.58, 0.30, -2.49 },
{ -6.23, 3.09, -3.16 },
{ -5.62, 3.79, -2.94 },
{ -6.33, 2.60, -2.33 },
{ -3.10, 3.08, -3.04 },
{ -3.84, 3.47, -3.51 },
{ -2.40, 3.01, -3.69 },
{ 0.01, 3.04, -3.11 },
{ -0.56, 3.59, -3.64 },
{ 0.28, 3.60, -2.38 },
{ 3.04, 3.11, -3.09 },
{ 3.49, 2.30, -2.87 },
{ 3.70, 3.66, -3.51 },
{ 6.15, 3.14, -3.11 },
{ 6.52, 2.52, -3.74 },
{ 6.72, 3.06, -2.34 },
{ -6.22, 6.15, -3.13 },
{ -5.49, 6.21, -2.51 },
{ -6.56, 7.04, -3.18 },
{ -3.11, 6.24, -3.05 },
{ -3.76, 5.83, -3.62 },
{ -2.26, 5.92, -3.37 },
{ 0.03, 6.25, -3.07 },
{ 0.34, 5.63, -3.73 },
{ -0.87, 6.00, -2.91 },
{ 3.07, 6.15, -3.08 },
{ 3.29, 6.92, -2.56 },
{ 3.39, 6.35, -3.96 },
{ 6.22, 6.14, -3.12 },
{ 5.79, 6.38, -2.29 },
{ 6.25, 6.96, -3.62 },
{ -6.21, -6.20, -0.06 },
{ -5.79, -6.87, 0.48 },
{ -6.43, -5.50, 0.54 },
{ -3.16, -6.21, -0.02 },
{ -2.50, -6.87, 0.20 },
{ -2.77, -5.37, 0.23 },
{ -0.00, -6.14, -0.00 },
{ 0.68, -6.72, -0.33 },
{ -0.64, -6.73, 0.38 },
{ 3.03, -6.20, -0.01 },
{ 3.77, -6.56, -0.51 },
{ 3.43, -5.85, 0.78 },
{ 6.25, -6.16, -0.00 },
{ 5.36, -6.09, -0.36 },
{ 6.24, -6.97, 0.49 },
{ -6.24, -3.05, -0.01 },
{ -6.35, -3.64, 0.73 },
{ -5.42, -3.33, -0.42 },
{ -3.09, -3.06, 0.05 },
{ -2.44, -3.62, -0.38 },
{ -3.90, -3.21, -0.43 },
{ 0.05, -3.10, 0.02 },
{ -0.31, -2.35, -0.43 },
{ -0.63, -3.77, 0.01 },
{ 3.05, -3.09, -0.04 },
{ 3.28, -3.90, 0.41 },
{ 3.65, -2.43, 0.30 },
{ 6.20, -3.04, -0.03 },
{ 5.66, -3.31, 0.71 },
{ 6.78, -3.79, -0.19 },
{ -6.18, 0.04, -0.04 },
{ -6.73, -0.73, -0.15 },
{ -5.98, 0.06, 0.89 },
{ -3.11, -0.04, -0.04 },
{ -3.36, -0.08, 0.87 },
{ -2.70, 0.81, -0.14 },
{ -0.02, -0.02, -0.05 },
{ -0.45, 0.28, 0.75 },
{ 0.90, 0.15, 0.07 },
{ 3.04, 0.02, -0.01 },
{ 3.26, -0.82, 0.38 },
{ 3.89, 0.45, -0.13 },
{ 6.19, 0.05, -0.03 },
{ 5.52, -0.56, 0.25 },
{ 7.01, -0.29, 0.32 },
{ -6.14, 3.08, 0.00 },
{ -6.83, 2.82, 0.61 },
{ -6.59, 3.64, -0.64 },
{ -3.05, 3.09, -0.04 },
{ -3.79, 2.50, 0.09 },
{ -3.18, 3.80, 0.59 },
{ 0.02, 3.14, 0.04 },
{ -0.89, 3.04, -0.19 },
{ 0.49, 2.57, -0.57 },
{ 3.14, 3.15, 0.00 },
{ 3.28, 2.28, 0.37 },
{ 2.30, 3.08, -0.45 },
{ 6.27, 3.08, -0.00 },
{ 5.55, 2.54, -0.33 },
{ 5.83, 3.87, 0.34 },
{ -6.18, 6.15, -0.03 },
{ -6.45, 6.21, 0.88 },
{ -6.26, 7.05, -0.36 },
{ -3.06, 6.19, -0.05 },
{ -2.84, 6.64, 0.76 },
{ -3.99, 5.96, 0.03 },
{ -0.00, 6.20, 0.06 },
{ -0.67, 5.99, -0.59 },
{ 0.76, 6.46, -0.44 },
{ 3.10, 6.26, -0.03 },
{ 3.57, 6.09, 0.78 },
{ 2.57, 5.47, -0.18 },
{ 6.26, 6.18, 0.02 },
{ 5.53, 5.64, -0.29 },
{ 5.95, 7.08, -0.06 },
{ -6.26, -6.21, 3.07 },
{ -5.98, -6.38, 3.97 },
{ -5.46, -5.94, 2.62 },
{ -3.10, -6.24, 3.04 },
{ -2.69, -6.51, 3.87 },
{ -3.43, -5.35, 3.21 },
{ -0.03, -6.16, 3.06 },
{ 0.83, -6.00, 3.42 },
{ -0.30, -6.99, 3.45 },
{ 3.15, -6.25, 3.11 },
{ 2.77, -5.60, 3.72 },
{ 2.68, -6.10, 2.28 },
{ 6.20, -6.21, 3.16 },
{ 5.75, -6.73, 2.50 },
{ 6.69, -5.56, 2.66 },
{ -6.17, -3.10, 3.04 },
{ -6.82, -2.44, 3.28 },
{ -6.12, -3.69, 3.80 },
{ -3.08, -3.04, 3.11 },
{ -3.59, -3.56, 3.72 },
{ -2.97, -3.61, 2.34 },
{ 0.01, -3.04, 3.11 },
{ -0.86, -3.41, 3.20 },
{ 0.56, -3.78, 2.86 },
{ 3.07, -3.07, 3.15 },
{ 3.81, -3.68, 3.13 },
{ 2.80, -2.98, 2.23 },
{ 6.20, -3.04, 3.13 },
{ 5.48, -3.64, 2.92 },
{ 6.98, -3.49, 2.81 },
{ -6.18, -0.05, 3.12 },
{ -6.41, 0.66, 3.69 },
{ -6.33, 0.28, 2.23 },
{ -3.05, 0.03, 3.10 },
{ -3.46, -0.42, 3.83 },
{ -3.57, -0.19, 2.33 },
{ 0.03, -0.02, 3.15 },
{ 0.23, -0.08, 2.21 },
{ -0.81, 0.41, 3.18 },
{ 3.09, 0.00, 3.03 },
{ 2.48, -0.29, 3.71 },
{ 3.91, 0.16, 3.51 },
{ 6.19, -0.06, 3.11 },
{ 6.05, 0.47, 2.33 },
{ 6.59, 0.52, 3.74 },
{ -6.20, 3.05, 3.05 },
{ -6.87, 3.73, 3.17 },
{ -5.55, 3.24, 3.73 },
{ -3.11, 3.06, 3.15 },
{ -3.64, 3.74, 2.71 },
{ -2.32, 3.00, 2.62 },
{ 0.02, 3.05, 3.06 },
{ -0.87, 3.14, 3.38 },
{ 0.48, 3.82, 3.42 },
{ 3.07, 3.10, 3.16 },
{ 3.95, 3.44, 2.97 },
{ 2.76, 2.73, 2.32 },
{ 6.19, 3.07, 3.16 },
{ 7.02, 3.30, 2.72 },
{ 5.52, 3.27, 2.51 },
{ -6.19, 6.24, 3.15 },
{ -5.56, 5.88, 2.52 },
{ -7.05, 5.96, 2.83 },
{ -3.10, 6.14, 3.08 },
{ -2.34, 6.69, 3.27 },
{ -3.86, 6.69, 3.29 },
{ -0.04, 6.24, 3.13 },
{ 0.63, 6.54, 2.53 },
{ 0.08, 5.29, 3.18 },
{ 3.12, 6.24, 3.14 },
{ 3.57, 5.82, 2.40 },
{ 2.23, 5.90, 3.12 },
{ 6.25, 6.19, 3.06 },
{ 5.55, 5.59, 3.32 },
{ 6.08, 6.99, 3.55 },
{ -6.20, -6.16, 6.15 },
{ -6.29, -5.99, 7.09 },
{ -6.09, -7.11, 6.09 },
{ -3.09, -6.19, 6.27 },
{ -2.56, -5.90, 5.52 },
{ -3.80, -6.69, 5.87 },
{ 0.02, -6.25, 6.24 },
{ -0.70, -5.70, 6.51 },
{ 0.25, -5.93, 5.36 },
{ 3.11, -6.18, 6.14 },
{ 3.76, -6.54, 6.74 },
{ 2.29, -6.20, 6.64 },
{ 6.22, -6.17, 6.15 },
{ 6.61, -6.98, 6.47 },
{ 5.56, -5.94, 6.81 },
{ -6.21, -3.10, 6.14 },
{ -6.76, -2.66, 6.78 },
{ -5.51, -3.50, 6.65 },
{ -3.13, -3.05, 6.18 },
{ -2.19, -3.14, 6.34 },
{ -3.50, -3.89, 6.43 },
{ 0.01, -3.06, 6.15 },
{ -0.06, -2.81, 7.07 },
{ -0.25, -3.98, 6.13 },
{ 3.04, -3.09, 6.17 },
{ 3.84, -3.51, 5.84 },
{ 3.25, -2.85, 7.08 },
{ 6.26, -3.13, 6.19 },
{ 6.01, -2.20, 6.09 },
{ 5.47, -3.55, 6.54 },
{ -6.20, 0.01, 6.27 },
{ -5.79, -0.70, 5.78 },
{ -6.67, 0.51, 5.60 },
{ -3.13, 0.01, 6.14 },
{ -3.53, -0.35, 6.94 },
{ -2.21, 0.17, 6.39 },
{ -0.04, -0.04, 6.20 },
{ 0.26, 0.47, 5.46 },
{ 0.51, 0.22, 6.93 },
{ 3.10, -0.05, 6.23 },
{ 2.33, 0.44, 5.95 },
{ 3.85, 0.45, 5.92 },
{ 6.19, -0.01, 6.26 },
{ 7.05, 0.16, 5.88 },
{ 5.58, 0.02, 5.52 },
{ -6.22, 3.04, 6.17 },
{ -5.45, 3.57, 5.95 },
{ -6.62, 3.50, 6.92 },
{ -3.09, 3.16, 6.21 },
{ -3.71, 2.75, 5.61 },
{ -2.60, 2.43, 6.59 },
{ -0.02, 3.10, 6.26 },
{ 0.89, 3.27, 6.05 },
{ -0.44, 2.94, 5.41 },
{ 3.12, 3.04, 6.23 },
{ 2.31, 3.53, 6.43 },
{ 3.59, 3.60, 5.60 },
{ 6.23, 3.05, 6.24 },
{ 5.92, 3.91, 6.54 },
{ 6.02, 3.03, 5.30 },
{ -6.15, 6.21, 6.24 },
{ -6.27, 6.46, 5.32 },
{ -7.00, 5.85, 6.51 },
{ -3.07, 6.15, 6.22 },
{ -3.98, 6.27, 5.94 },
{ -2.66, 7.01, 6.10 },
{ 0.04, 6.20, 6.25 },
{ -0.38, 5.50, 5.75 },
{ -0.36, 7.00, 5.93 },
{ 3.12, 6.15, 6.24 },
{ 3.66, 6.88, 5.93 },
{ 2.25, 6.33, 5.86 },
{ 6.20, 6.27, 6.19 },
{ 5.46, 5.65, 6.19 },
{ 6.97, 5.73, 6.39 }
};
for(int atom = 0; atom < natoms; ++atom)
positions.push_back(Vec3(coords[atom][0], coords[atom][1], coords[atom][2])*OpenMM::NmPerAngstrom);
......@@ -488,8 +488,8 @@ void print_forces(const vector<Vec3>& forces){
void test_water2_dpme_energies_forces_no_exclusions() {
const double cutoff = 7.0*OpenMM::NmPerAngstrom;
const double alpha = 0.45*OpenMM::AngstromsPerNm;
const double dalpha = 0.45*OpenMM::AngstromsPerNm;
const double alpha = 4.0124063605;
const double dalpha = 4.0124063605;
const int grid = 32;
NonbondedForce* forceField = new NonbondedForce();
......@@ -503,7 +503,6 @@ void test_water2_dpme_energies_forces_no_exclusions() {
double boxEdgeLength = 25*OpenMM::NmPerAngstrom;
make_waterbox(NATOMS, boxEdgeLength, forceField, positions, epsvals, sigvals, bonds, system, false);
forceField->setNonbondedMethod(OpenMM::NonbondedForce::LJPME);
forceField->setPMEParameters(alpha, grid, grid, grid);
forceField->setLJPMEParameters(dalpha, grid, grid, grid);
......@@ -515,31 +514,141 @@ void test_water2_dpme_energies_forces_no_exclusions() {
Context context(system, integrator, platform);
context.setPositions(positions);
double refenergy = 322.193557*OpenMM::KJPerKcal;
/**
* Gromacs reference values from the following inputs
*
------------------------------------------------
water2.gro
------------------------------------------------
MD of 2 waters, t= 0.0
6
1SOL OW1 1 0.200 0.200 0.200
1SOL HW1 2 0.250 0.200 0.300
1SOL HW2 3 0.150 0.200 0.300
2SOL OW1 4 0.000 0.000 0.000
2SOL HW1 5 0.050 0.000 0.100
2SOL HW2 6 -0.050 0.000 0.100
2.50000 2.50000 2.50000
------------------------------------------------
------------------------------------------------
water2.gro
------------------------------------------------
[ defaults ]
; nbfunc comb-rule gen-pairs fudgeLJ fudgeQQ
1 2 no 1.0 1.0
[ atomtypes ]
; full atom descriptions are available in ffoplsaa.atp
; name bond_type mass charge ptype sigma epsilon
OW OW 8 15.99940 -0.834 A 3.15057e-01 6.36386e-01
HW HW 1 1.00800 0.417 A 4.00014e-02 1.92464e-01
#ifdef NOEXCLUDE
[ moleculetype ]
; molname nrexcl
SOL 0
#else
[ moleculetype ]
; molname nrexcl
SOL 3
#endif
#ifdef NOCHARGE
[ atoms ]
; id at type res nr residu name at name cg nr charge
1 OW 1 SOL OW1 1 0.000
2 HW 1 SOL HW1 1 0.000
3 HW 1 SOL HW2 1 0.000
#else
[ atoms ]
; id at type res nr residu name at name cg nr charge
1 OW 1 SOL OW1 1 -0.834
2 HW 1 SOL HW1 1 0.417
3 HW 1 SOL HW2 1 0.417
#endif
[ settles ]
; i j funct length
1 1 0.09572 0.15139
#ifndef NOEXCLUDE
[ exclusions ]
1 2 3
2 1 3
3 1 2
#endif
------------------------------------------------
------------------------------------------------
water2.top
------------------------------------------------
#include "tip3p.tpi"
[ system ]
Water dimer
[ molecules ]
SOL 2
------------------------------------------------
------------------------------------------------
water2.mdp
------------------------------------------------
define = -DNOCHARGE -DNOEXCLUDE
;define = -DNOCHARGE
rvdw = 0.7
vdw-modifier = Potential-Shift
;vdw-modifier = None
rlist = 0.9
rcoulomb = 0.7
nstfout = 1
fourierspacing = 0.08
pme-order = 5
ewald-rtol = 1.5E-2
ewald-rtol-lj = 1.5E-2
vdwtype = PME
lj-pme-comb-rule = geometric
continuation = yes
------------------------------------------------
run commands:-
gmx grompp -c water2.gro -p water2.top -f water2.mdp -o run.tpr
gmx mdrun -s run.tpr -o traj.trr -pforce 1E-16
gmx dump -f traj.trr
*/
double refenergy = 1.34804e+03;
vector<Vec3> refforces(6);
refforces[0] = Vec3( -0.0075112601, 0.0001181820, 1598.8884050404 )*-OpenMM::AngstromsPerNm*OpenMM::KJPerKcal;
refforces[1] = Vec3( -399.7221412167, 0.0009078954, -799.4541619659 )*-OpenMM::AngstromsPerNm*OpenMM::KJPerKcal;
refforces[2] = Vec3( 399.7249891850, 0.0022847756, -799.4520972788 )*-OpenMM::AngstromsPerNm*OpenMM::KJPerKcal;
refforces[3] = Vec3( 0.0425828202, 0.0422389115, 1598.9516906516 )*-OpenMM::AngstromsPerNm*OpenMM::KJPerKcal;
refforces[4] = Vec3( -399.7517916369, -0.0380211838, -799.4745351713 )*-OpenMM::AngstromsPerNm*OpenMM::KJPerKcal;
refforces[5] = Vec3( 399.7138981618, -0.0075023610, -799.4592751266 )*-OpenMM::AngstromsPerNm*OpenMM::KJPerKcal;
refforces[0] = Vec3( 3.15301e-01, -3.91114e-03, -6.68965e+04);
refforces[1] = Vec3( 1.67241e+04, -3.79846e-02, 3.34487e+04);
refforces[2] = Vec3(-1.67243e+04, -9.55931e-02, 3.34486e+04);
refforces[3] = Vec3(-1.71643e+00, -1.76696e+00, -6.68993e+04);
refforces[4] = Vec3( 1.67254e+04, 1.59080e+00, 3.34495e+04);
refforces[5] = Vec3(-1.67239e+04, 3.13897e-01, 3.34491e+04);
State state = context.getState(State::Forces | State::Energy);
double energy = state.getPotentialEnergy();
// std::cout << "Energy " << energy*OpenMM::KcalPerKJ << std::endl;
// std::cout << "Energy " << energy << std::endl;
const vector<Vec3>& forces = state.getForces();
// print_forces(forces);
ASSERT_EQUAL_TOL(refenergy, energy, 1E-8);
ASSERT_EQUAL_TOL(refenergy, energy, 1E-4);
for(int n = 0; n < NATOMS; ++n)
ASSERT_EQUAL_VEC(refforces[n], forces[n], 1E-8);
ASSERT_EQUAL_VEC(refforces[n], forces[n], 1E-4);
}
void test_water2_dpme_energies_forces_with_exclusions() {
const double cutoff = 7.0*OpenMM::NmPerAngstrom;
const double alpha = 0.45*OpenMM::AngstromsPerNm;
const double dalpha = 0.45*OpenMM::AngstromsPerNm;
const double alpha = 4.0124063605;
const double dalpha = 4.0124063605;
const int grid = 32;
NonbondedForce* forceField = new NonbondedForce();
......@@ -559,6 +668,9 @@ void test_water2_dpme_energies_forces_with_exclusions() {
forceField->setPMEParameters(alpha, grid, grid, grid);
forceField->setLJPMEParameters(dalpha, grid, grid, grid);
forceField->setCutoffDistance(cutoff);
forceField->setUseSwitchingFunction(false);
forceField->setUseDispersionCorrection(false);
forceField->setReactionFieldDielectric(1.0);
system.addForce(forceField);
......@@ -566,25 +678,27 @@ void test_water2_dpme_energies_forces_with_exclusions() {
Context context(system, integrator, platform);
context.setPositions(positions);
double refenergy = -0.186059064*OpenMM::KJPerKcal;
double refenergy = -7.78060e-01;
vector<Vec3> refforces(6);
refforces[0] = Vec3( -0.0075112601, 0.0001181820, -0.0226423064 )*-OpenMM::AngstromsPerNm*OpenMM::KJPerKcal;
refforces[1] = Vec3( 0.0011347776, 0.0009078954, 0.0013617075 )*-OpenMM::AngstromsPerNm*OpenMM::KJPerKcal;
refforces[2] = Vec3( 0.0017131906, 0.0022847756, 0.0034263946 )*-OpenMM::AngstromsPerNm*OpenMM::KJPerKcal;
refforces[3] = Vec3( 0.0425828202, 0.0422389115, 0.0406433048 )*-OpenMM::AngstromsPerNm*OpenMM::KJPerKcal;
refforces[4] = Vec3( -0.0285156425, -0.0380211838, -0.0190114979 )*-OpenMM::AngstromsPerNm*OpenMM::KJPerKcal;
refforces[5] = Vec3( -0.0093778326, -0.0075023610, -0.0037514532 )*-OpenMM::AngstromsPerNm*OpenMM::KJPerKcal;
// Gromacs reference values. See comments in test_water2_dpme_energies_forces_no_exclusions() for details.
refforces[0] = Vec3( 3.15301e-01, -3.91114e-03, 9.48373e-01);
refforces[1] = Vec3(-4.74745e-02, -3.79846e-02, -5.69616e-02);
refforces[2] = Vec3(-7.16866e-02, -9.55931e-02, -1.43348e-01);
refforces[3] = Vec3(-1.78136e+00, -1.76696e+00, -1.70022e+00);
refforces[4] = Vec3( 1.19309e+00, 1.59080e+00, 7.95443e-01);
refforces[5] = Vec3( 3.92366e-01, 3.13897e-01, 1.56962e-01);
State state = context.getState(State::Forces | State::Energy);
double energy = state.getPotentialEnergy();
// std::cout << "Energy " << energy*OpenMM::KcalPerKJ << std::endl;
// std::cout << "Energy " << energy << std::endl;
const vector<Vec3>& forces = state.getForces();
// print_forces(forces);
ASSERT_EQUAL_TOL(refenergy, energy, 1E-8);
ASSERT_EQUAL_TOL(refenergy, energy, 1E-4);
for(int n = 0; n < NATOMS; ++n)
ASSERT_EQUAL_VEC(refforces[n], forces[n], 1E-8);
ASSERT_EQUAL_VEC(refforces[n], forces[n], 5E-4);
}
......@@ -619,9 +733,406 @@ void test_water125_dpme_vs_long_cutoff_no_exclusions() {
State state = context.getState(State::Forces | State::Energy);
double energy = state.getPotentialEnergy();
// std::cout << "Energy " << energy*OpenMM::KcalPerKJ << std::endl;
/*
* Gromacs reference values. See comments in test_water2_dpme_energies_forces_no_exclusions() for details.
* Coordinates are from make_waterbox, and the .gro file looks like
*
;define = -DNOCHARGE -DNOEXCLUDE
define = -DNOCHARGE
vdw-modifier = Potential-Shift
rvdw = 1.15
rlist = 1.15
rcoulomb = 1.15
fourierspacing = 0.04
nstfout = 1
pme-order = 5
ewald-rtol = 1E-8
ewald-rtol-lj = 1E-8
vdwtype = PME
lj-pme-comb-rule = geometric
continuation = yes
*/
double gromacs_energy = 5.63157e+05;
// std::cout << "Energy " << energy << std::endl;
const vector<Vec3>& forces = state.getForces();
// print_forces(forces);
vector<Vec3> refforces(NATOMS);
refforces[ 0] = Vec3(-1.12446e+05, -2.71952e+05, -1.91471e+05);
refforces[ 1] = Vec3( 2.70479e+05, 6.61172e+04, 7.21277e+04);
refforces[ 2] = Vec3(-1.58058e+05, 2.05779e+05, 1.19292e+05);
refforces[ 3] = Vec3( 3.16438e+05, -1.27994e+05, 1.08811e+05);
refforces[ 4] = Vec3(-1.36520e+05, 1.93405e+05, 1.36521e+05);
refforces[ 5] = Vec3(-1.79957e+05, -6.54374e+04, -2.45393e+05);
refforces[ 6] = Vec3( 1.30626e+05, -1.36728e+05, 2.93833e+05);
refforces[ 7] = Vec3(-2.74564e+05, 8.02095e+04, -7.09524e+04);
refforces[ 8] = Vec3( 1.43952e+05, 5.64523e+04, -2.22980e+05);
refforces[ 9] = Vec3(-4.22852e+04, 2.14660e+04, -3.23254e+05);
refforces[ 10] = Vec3( 2.28059e+05, -4.44251e+04, 1.62898e+05);
refforces[ 11] = Vec3(-1.85776e+05, 2.29044e+04, 1.60326e+05);
refforces[ 12] = Vec3(-1.02075e+05, 3.27346e+05, 1.47993e+04);
refforces[ 13] = Vec3( 7.77195e+04, -1.44336e+05, 2.10959e+05);
refforces[ 14] = Vec3( 2.44142e+04, -1.83111e+05, -2.25837e+05);
refforces[ 15] = Vec3(-4.81843e+04, -2.72889e+05, -1.75068e+05);
refforces[ 16] = Vec3(-5.46666e+03, 2.18711e+04, 2.62456e+05);
refforces[ 17] = Vec3( 5.35890e+04, 2.51021e+05, -8.74311e+04);
refforces[ 18] = Vec3(-2.04721e+05, 1.58918e+05, 2.20448e+05);
refforces[ 19] = Vec3(-7.05932e+04, -1.64717e+05, -2.17659e+05);
refforces[ 20] = Vec3( 2.75339e+05, 5.73611e+03, -2.86718e+03);
refforces[ 21] = Vec3(-5.65480e+03, -2.81809e+05, -1.38358e+05);
refforces[ 22] = Vec3(-7.85576e+03, 2.25204e+05, -1.15217e+05);
refforces[ 23] = Vec3( 1.34846e+04, 5.66345e+04, 2.53512e+05);
refforces[ 24] = Vec3(-7.73167e+04, -4.43114e+04, 3.22354e+05);
refforces[ 25] = Vec3(-1.24372e+05, 1.61973e+05, -1.88001e+05);
refforces[ 26] = Vec3( 2.01689e+05, -1.17651e+05, -1.34455e+05);
refforces[ 27] = Vec3(-1.79300e+05, -1.97922e+05, 1.94294e+05);
refforces[ 28] = Vec3( 2.38945e+05, -4.88761e+04, -9.50350e+04);
refforces[ 29] = Vec3(-5.95911e+04, 2.46878e+05, -9.93159e+04);
refforces[ 30] = Vec3(-1.31892e+04, -2.15675e+05, 2.68757e+05);
refforces[ 31] = Vec3( 2.31232e+05, 1.08107e+05, -1.32129e+05);
refforces[ 32] = Vec3(-2.18089e+05, 1.07592e+05, -1.36669e+05);
refforces[ 33] = Vec3( 1.90632e+04, -3.62889e+05, 8.61608e+04);
refforces[ 34] = Vec3(-2.16178e+05, 1.59639e+05, -1.66288e+05);
refforces[ 35] = Vec3( 1.97134e+05, 2.03295e+05, 8.00862e+04);
refforces[ 36] = Vec3( 3.40071e+05, -6.87734e+04, 1.22584e+05);
refforces[ 37] = Vec3(-4.17943e+04, 8.35901e+03, -2.64693e+05);
refforces[ 38] = Vec3(-2.98358e+05, 6.03813e+04, 1.42075e+05);
refforces[ 39] = Vec3(-3.21693e+05, 4.40885e+04, 1.41154e+04);
refforces[ 40] = Vec3( 1.28817e+05, 2.02067e+04, -2.07114e+05);
refforces[ 41] = Vec3( 1.92948e+05, -6.43160e+04, 1.92949e+05);
refforces[ 42] = Vec3(-1.46001e+05, 3.20840e+05, 7.97305e+04);
refforces[ 43] = Vec3(-1.27705e+05, -2.55411e+05, -1.24428e+05);
refforces[ 44] = Vec3( 2.73737e+05, -6.54594e+04, 4.46323e+04);
refforces[ 45] = Vec3( 1.50212e+04, 2.43629e+05, -2.20084e+05);
refforces[ 46] = Vec3(-1.07432e+05, 8.26408e+03, 2.42419e+05);
refforces[ 47] = Vec3( 9.23685e+04, -2.51915e+05, -2.23909e+04);
refforces[ 48] = Vec3( 3.14327e+04, -2.94199e+05, 1.55484e+05);
refforces[ 49] = Vec3(-2.23665e+05, 1.52883e+05, -2.54793e+04);
refforces[ 50] = Vec3( 1.92227e+05, 1.41342e+05, -1.30033e+05);
refforces[ 51] = Vec3( 5.73542e+04, -2.08689e+05, -2.68170e+05);
refforces[ 52] = Vec3(-2.26784e+05, 1.85259e+05, 8.30474e+04);
refforces[ 53] = Vec3( 1.69446e+05, 2.34613e+04, 1.85087e+05);
refforces[ 54] = Vec3( 2.25490e+05, -1.91311e+05, -1.40103e+05);
refforces[ 55] = Vec3(-8.20802e+03, 6.83988e+04, 2.54448e+05);
refforces[ 56] = Vec3(-2.17315e+05, 1.22953e+05, -1.14373e+05);
refforces[ 57] = Vec3(-7.09510e+04, 2.05639e+05, -2.69540e+05);
refforces[ 58] = Vec3( 1.93603e+05, 3.38041e+04, 2.18192e+05);
refforces[ 59] = Vec3(-1.22579e+05, -2.39458e+05, 5.13124e+04);
refforces[ 60] = Vec3(-1.07250e+05, 3.35982e+05, 6.89600e+03);
refforces[ 61] = Vec3( 6.90672e-01, -1.44228e+05, -2.24659e+05);
refforces[ 62] = Vec3( 1.07222e+05, -1.91701e+05, 2.17695e+05);
refforces[ 63] = Vec3( 2.64846e+05, 1.94002e+05, 5.27262e+03);
refforces[ 64] = Vec3(-1.12985e+04, -2.71176e+05, 8.47510e+03);
refforces[ 65] = Vec3(-2.53630e+05, 7.71894e+04, -1.37831e+04);
refforces[ 66] = Vec3(-3.04551e+05, 4.21918e+04, 1.88948e+05);
refforces[ 67] = Vec3( 2.87326e+05, 1.22193e+05, 3.30263e+04);
refforces[ 68] = Vec3( 1.73006e+04, -1.64358e+05, -2.22023e+05);
refforces[ 69] = Vec3( 2.45556e+04, 2.20596e+05, 2.41913e+05);
refforces[ 70] = Vec3( 1.50804e+05, -2.17829e+05, -4.46813e+04);
refforces[ 71] = Vec3(-1.75369e+05, -2.74087e+03, -1.97287e+05);
refforces[ 72] = Vec3( 8.65787e+04, -2.77188e+04, -3.15014e+05);
refforces[ 73] = Vec3(-2.42127e+05, 6.26659e+04, 1.11092e+05);
refforces[ 74] = Vec3( 1.55591e+05, -3.48752e+04, 2.03883e+05);
refforces[ 75] = Vec3( 7.06224e+04, 2.96642e+05, -1.51267e+05);
refforces[ 76] = Vec3(-5.39280e+04, -2.57657e+05, -1.13850e+05);
refforces[ 77] = Vec3(-1.67422e+04, -3.90659e+04, 2.65102e+05);
refforces[ 78] = Vec3(-4.52577e+04, -3.21552e+05, -7.01075e+04);
refforces[ 79] = Vec3( 2.35182e+05, 1.45173e+05, 3.48411e+04);
refforces[ 80] = Vec3(-1.89931e+05, 1.76363e+05, 3.52722e+04);
refforces[ 81] = Vec3(-2.29347e+05, 1.06977e+05, -2.70703e+05);
refforces[ 82] = Vec3(-1.17929e+04, -2.56493e+05, 1.17929e+05);
refforces[ 83] = Vec3( 2.41161e+05, 1.49452e+05, 1.52847e+05);
refforces[ 84] = Vec3( 2.32633e+03, 3.03443e+05, 1.27473e+05);
refforces[ 85] = Vec3(-2.11215e+05, -1.63335e+05, -4.50583e+04);
refforces[ 86] = Vec3( 2.08887e+05, -1.40170e+05, -8.24544e+04);
refforces[ 87] = Vec3( 5.83172e+04, 2.82133e+04, -3.26001e+05);
refforces[ 88] = Vec3( 1.76890e+05, -4.71698e+04, 2.15220e+05);
refforces[ 89] = Vec3(-2.35168e+05, 1.89225e+04, 1.10825e+05);
refforces[ 90] = Vec3(-2.72444e+05, -1.46998e+05, -1.00637e+05);
refforces[ 91] = Vec3( 2.78426e+04, 2.39442e+05, 1.16936e+05);
refforces[ 92] = Vec3( 2.44570e+05, -9.23920e+04, -1.63042e+04);
refforces[ 93] = Vec3(-3.10100e+04, 2.93390e+05, -1.87196e+05);
refforces[ 94] = Vec3(-6.38830e+04, -2.90671e+05, -6.38833e+04);
refforces[ 95] = Vec3( 9.48775e+04, -2.79002e+03, 2.51149e+05);
refforces[ 96] = Vec3( 4.18753e+04, -1.23438e+05, -3.10188e+05);
refforces[ 97] = Vec3( 1.29157e+05, 2.04500e+05, 9.41770e+04);
refforces[ 98] = Vec3(-1.71038e+05, -8.10180e+04, 2.16049e+05);
refforces[ 99] = Vec3(-5.61490e+04, 2.26993e+04, -3.44090e+05);
refforces[100] = Vec3(-1.96230e+05, -2.88572e+04, 1.93344e+05);
refforces[101] = Vec3( 2.52383e+05, 6.15570e+03, 1.50813e+05);
refforces[102] = Vec3(-6.33126e+04, 3.55941e+05, 8.51300e+04);
refforces[103] = Vec3(-1.75405e+05, -1.81783e+05, -1.69027e+05);
refforces[104] = Vec3( 2.38759e+05, -1.74232e+05, 8.38891e+04);
refforces[105] = Vec3( 1.51480e+05, -4.90606e+04, 3.17956e+05);
refforces[106] = Vec3( 4.93229e+04, -1.61668e+05, -2.02771e+05);
refforces[107] = Vec3(-2.00831e+05, 2.10712e+05, -1.15233e+05);
refforces[108] = Vec3( 2.20204e+05, -2.33820e+05, 1.51386e+05);
refforces[109] = Vec3( 3.36498e+04, 2.79296e+05, -1.51424e+05);
refforces[110] = Vec3(-2.53896e+05, -4.54334e+04, 2.10242e-01);
refforces[111] = Vec3(-1.94665e+05, 2.05890e+05, 2.40510e+05);
refforces[112] = Vec3(-9.73233e+04, -1.29764e+05, -2.62775e+05);
refforces[113] = Vec3( 2.92049e+05, -7.61856e+04, 2.22208e+04);
refforces[114] = Vec3( 1.60261e+05, -3.43716e+05, 1.52456e+04);
refforces[115] = Vec3( 1.11151e+05, 3.08358e+05, -8.60527e+04);
refforces[116] = Vec3(-2.71443e+05, 3.54056e+04, 7.08103e+04);
refforces[117] = Vec3(-4.27331e+04, -3.19871e+05, -1.68415e+05);
refforces[118] = Vec3( 2.28408e+05, 2.15171e+05, -2.31720e+04);
refforces[119] = Vec3(-1.85616e+05, 1.04782e+05, 1.91602e+05);
refforces[120] = Vec3(-1.66057e+05, -9.58191e+04, -2.78448e+05);
refforces[121] = Vec3( 1.91258e+05, 2.19476e+05, 6.89779e+04);
refforces[122] = Vec3(-2.52379e+04, -1.23674e+05, 2.09489e+05);
refforces[123] = Vec3( 6.55172e+03, -9.23173e+04, 3.29554e+05);
refforces[124] = Vec3(-2.14685e+05, 1.13143e+05, -1.36353e+05);
refforces[125] = Vec3( 2.08124e+05, -2.08124e+04, -1.93257e+05);
refforces[126] = Vec3( 1.02696e+05, -3.39299e+05, -4.47114e+04);
refforces[127] = Vec3(-1.81786e+05, 1.75407e+05, -1.69029e+05);
refforces[128] = Vec3( 7.90534e+04, 1.63962e+05, 2.13738e+05);
refforces[129] = Vec3(-3.45588e+05, 9.36838e+04, 5.67939e+04);
refforces[130] = Vec3( 1.44967e+05, -2.60943e+05, 7.08730e+04);
refforces[131] = Vec3( 2.00649e+05, 1.67207e+05, -1.27685e+05);
refforces[132] = Vec3(-2.70181e+05, 2.05707e+05, -3.11852e+04);
refforces[133] = Vec3( 1.09331e+05, -1.83207e+05, -1.86162e+05);
refforces[134] = Vec3( 1.60883e+05, -2.25804e+04, 2.17340e+05);
refforces[135] = Vec3(-1.04496e+05, -2.97000e+05, -1.63733e+05);
refforces[136] = Vec3( 2.11303e+05, 1.73661e+04, 1.79462e+05);
refforces[137] = Vec3(-1.06849e+05, 2.79694e+05, -1.57134e+04);
refforces[138] = Vec3(-3.82271e+04, 2.11942e+05, 2.60118e+05);
refforces[139] = Vec3(-1.96098e+05, -1.23692e+05, -1.71962e+05);
refforces[140] = Vec3( 2.34334e+05, -8.82195e+04, -8.82188e+04);
refforces[141] = Vec3( 2.17634e+05, 2.72527e+05, 1.42967e+05);
refforces[142] = Vec3( 9.30924e+04, -1.86185e+05, -1.98197e+05);
refforces[143] = Vec3(-3.10770e+05, -8.63246e+04, 5.52480e+04);
refforces[144] = Vec3(-1.63880e+05, -2.98869e+05, 1.01299e+05);
refforces[145] = Vec3( 6.83424e+04, 2.39196e+05, 1.61538e+05);
refforces[146] = Vec3( 9.55787e+04, 5.97354e+04, -2.62846e+05);
refforces[147] = Vec3( 1.06430e+05, -2.97083e+05, -7.97261e+04);
refforces[148] = Vec3(-1.14920e+05, 6.41394e+04, 2.21823e+05);
refforces[149] = Vec3( 8.52531e+03, 2.33043e+05, -1.42101e+05);
refforces[150] = Vec3(-4.96390e+04, -4.12076e+04, -3.67834e+05);
refforces[151] = Vec3( 1.25352e+05, -1.99962e+05, 1.61166e+05);
refforces[152] = Vec3(-7.57841e+04, 2.41138e+05, 2.06689e+05);
refforces[153] = Vec3(-3.06397e+05, -5.15222e+04, -1.37080e+05);
refforces[154] = Vec3( 1.92949e+05, -1.92945e+05, 6.43163e+04);
refforces[155] = Vec3( 1.13490e+05, 2.44443e+05, 7.27504e+04);
refforces[156] = Vec3(-3.74471e+03, 3.83223e+05, -2.14754e+04);
refforces[157] = Vec3( 2.17881e+05, -1.85835e+05, -1.05735e+05);
refforces[158] = Vec3(-2.14191e+05, -1.97454e+05, 1.27176e+05);
refforces[159] = Vec3(-3.33357e+05, -1.38307e+04, -1.17320e+05);
refforces[160] = Vec3( 2.04157e+05, -9.93173e+04, -1.37945e+05);
refforces[161] = Vec3( 1.29262e+05, 1.13105e+05, 2.55294e+05);
refforces[162] = Vec3( 2.50185e+05, 2.64217e+05, -7.18219e+04);
refforces[163] = Vec3(-2.46668e+05, 1.94013e+04, -9.97745e+04);
refforces[164] = Vec3(-3.50266e+03, -2.83658e+05, 1.71598e+05);
refforces[165] = Vec3(-2.05824e+05, 2.71177e+05, -1.16442e+05);
refforces[166] = Vec3(-3.52163e+04, -1.88897e+05, 2.36923e+05);
refforces[167] = Vec3( 2.41012e+05, -8.22954e+04, -1.20505e+05);
refforces[168] = Vec3( 6.89329e+04, 2.09489e+05, 2.76583e+05);
refforces[169] = Vec3( 1.87999e+05, -1.61968e+05, -1.24368e+05);
refforces[170] = Vec3(-2.56932e+05, -4.75793e+04, -1.52255e+05);
refforces[171] = Vec3( 3.39431e+05, -5.75509e+04, 1.62795e+05);
refforces[172] = Vec3(-1.27767e+05, 2.66184e+05, -1.59709e+05);
refforces[173] = Vec3(-2.11726e+05, -2.08613e+05, -3.11349e+03);
refforces[174] = Vec3(-2.58601e+05, 4.61975e+04, -2.46016e+05);
refforces[175] = Vec3( 7.15587e+04, -2.52015e+05, 1.40007e+05);
refforces[176] = Vec3( 1.87109e+05, 2.05820e+05, 1.06028e+05);
refforces[177] = Vec3( 3.92176e+03, 2.94819e+05, -1.84065e+05);
refforces[178] = Vec3(-1.67230e+05, -8.36141e+04, 2.29167e+05);
refforces[179] = Vec3( 1.63334e+05, -2.11213e+05, -4.50586e+04);
refforces[180] = Vec3( 1.11151e+05, 2.40551e+05, -2.68210e+05);
refforces[181] = Vec3(-1.76495e+05, -2.47099e+05, -3.53002e+04);
refforces[182] = Vec3( 6.52872e+04, 6.52855e+03, 3.03586e+05);
refforces[183] = Vec3(-4.84049e+04, -2.73305e+05, -2.95224e+05);
refforces[184] = Vec3(-9.04206e+04, -1.44672e+04, 3.29135e+05);
refforces[185] = Vec3( 1.38830e+05, 2.87820e+05, -3.38610e+04);
refforces[186] = Vec3(-2.09072e+05, -1.53610e+05, -2.86654e+05);
refforces[187] = Vec3(-1.30322e+05, 9.09223e+04, 2.42461e+05);
refforces[188] = Vec3( 3.39380e+05, 6.27113e+04, 4.42669e+04);
refforces[189] = Vec3(-3.15692e+05, 1.48900e+05, -9.20420e+04);
refforces[190] = Vec3( 7.13687e+04, -2.72503e+05, 1.26518e+05);
refforces[191] = Vec3( 2.44351e+05, 1.23612e+05, -3.44964e+04);
refforces[192] = Vec3(-2.80727e+04, 3.15077e+05, -2.05427e+05);
refforces[193] = Vec3(-2.29004e+05, -2.08496e+05, 9.57028e+04);
refforces[194] = Vec3( 2.57096e+05, -1.06603e+05, 1.09738e+05);
refforces[195] = Vec3( 3.33213e+05, -7.80040e+04, -5.04749e+03);
refforces[196] = Vec3(-2.07680e+05, -7.82574e+04, 1.83605e+05);
refforces[197] = Vec3(-1.25574e+05, 1.56274e+05, -1.78599e+05);
refforces[198] = Vec3( 2.66795e+05, -2.82879e+04, -2.26620e+05);
refforces[199] = Vec3(-2.28291e+05, -1.82015e+05, 4.01046e+04);
refforces[200] = Vec3(-3.85027e+04, 2.10288e+05, 1.86592e+05);
refforces[201] = Vec3( 1.93076e+05, 2.05300e+05, 2.64591e+05);
refforces[202] = Vec3(-3.32259e+05, -3.65117e+04, -8.39768e+04);
refforces[203] = Vec3( 1.39204e+05, -1.68822e+05, -1.80669e+05);
refforces[204] = Vec3( 2.15422e+05, 2.88264e+05, 2.49786e+04);
refforces[205] = Vec3( 4.29235e+04, -2.66744e+05, 1.13441e+05);
refforces[206] = Vec3(-2.58339e+05, -2.15280e+04, -1.38395e+05);
refforces[207] = Vec3( 3.27580e+05, -4.93781e+04, 7.43625e+03);
refforces[208] = Vec3(-2.11622e+05, -1.58716e+05, -9.69925e+04);
refforces[209] = Vec3(-1.15917e+05, 2.08125e+05, 8.95715e+04);
refforces[210] = Vec3( 1.10967e+05, -2.71544e+05, -2.06279e+05);
refforces[211] = Vec3(-8.86155e+04, 1.96918e+04, 2.98676e+05);
refforces[212] = Vec3(-2.23913e+04, 2.51912e+05, -9.23690e+04);
refforces[213] = Vec3( 1.91611e+05, -7.99998e+04, -2.83463e+05);
refforces[214] = Vec3( 7.08725e+04, 1.44963e+05, 2.60941e+05);
refforces[215] = Vec3(-2.62503e+05, -6.49202e+04, 2.25808e+04);
refforces[216] = Vec3(-6.63168e+04, -2.84265e+04, 3.72700e+05);
refforces[217] = Vec3(-2.02131e+05, -6.33547e+04, -1.96097e+05);
refforces[218] = Vec3( 2.68466e+05, 9.18414e+04, -1.76621e+05);
refforces[219] = Vec3(-6.80052e+03, 2.72744e+05, -2.21849e+05);
refforces[220] = Vec3( 1.52709e+05, -5.52356e+04, 2.63181e+05);
refforces[221] = Vec3(-1.45890e+05, -2.17461e+05, -4.12893e+04);
refforces[222] = Vec3( 3.07522e+05, -1.21146e+05, 1.14593e+05);
refforces[223] = Vec3(-2.11787e+05, -1.56664e+05, -8.99363e+04);
refforces[224] = Vec3(-9.57076e+04, 2.77857e+05, -2.46987e+04);
refforces[225] = Vec3(-3.24882e+05, -3.09840e+04, -1.31947e+05);
refforces[226] = Vec3( 8.33124e+04, -5.05809e+04, 2.67793e+05);
refforces[227] = Vec3( 2.41536e+05, 8.15185e+04, -1.35863e+05);
refforces[228] = Vec3(-2.16561e+04, -1.67607e+05, -2.70252e+05);
refforces[229] = Vec3( 1.10825e+05, -7.29802e+04, 2.24354e+05);
refforces[230] = Vec3(-8.91995e+04, 2.40572e+05, 4.59512e+04);
refforces[231] = Vec3(-2.22246e+05, 1.96766e+05, -2.46638e+05);
refforces[232] = Vec3( 3.04748e+05, 5.66971e+04, 1.27568e+05);
refforces[233] = Vec3(-8.24632e+04, -2.53495e+05, 1.19113e+05);
refforces[234] = Vec3( 2.20621e+05, -2.03896e+05, 6.63128e+04);
refforces[235] = Vec3(-9.59082e+04, 1.64055e+05, 1.53960e+05);
refforces[236] = Vec3(-1.24758e+05, 3.98170e+04, -2.20320e+05);
refforces[237] = Vec3(-7.79583e+03, -3.49688e+04, 3.64330e+05);
refforces[238] = Vec3(-1.43293e+05, -1.65580e+05, -2.10163e+05);
refforces[239] = Vec3( 1.51159e+05, 2.00522e+05, -1.54247e+05);
refforces[240] = Vec3( 1.82058e+05, -3.72909e+04, -2.80373e+05);
refforces[241] = Vec3(-1.95792e+05, 1.98809e+05, 7.22936e+04);
refforces[242] = Vec3( 1.36910e+04, -1.61546e+05, 2.08094e+05);
refforces[243] = Vec3( 1.40288e+05, 3.27379e+05, 4.78569e+03);
refforces[244] = Vec3(-1.70016e+05, -1.73349e+05, 2.03353e+05);
refforces[245] = Vec3( 2.97331e+04, -1.54072e+05, -2.08134e+05);
refforces[246] = Vec3( 1.21932e+05, 3.52267e+05, 4.69291e+04);
refforces[247] = Vec3(-2.91621e+05, -1.24021e+05, 3.01674e+04);
refforces[248] = Vec3( 1.69673e+05, -2.28288e+05, -7.71238e+04);
refforces[249] = Vec3(-1.41105e+05, 1.52818e+05, 2.59197e+05);
refforces[250] = Vec3( 2.15511e+05, -1.77650e+05, -5.82442e+03);
refforces[251] = Vec3(-7.43779e+04, 2.47926e+04, -2.53438e+05);
refforces[252] = Vec3(-3.34214e+04, 3.09554e+05, 1.58194e+05);
refforces[253] = Vec3(-2.05877e+05, -1.71563e+05, -6.00467e+04);
refforces[254] = Vec3( 2.39329e+05, -1.38076e+05, -9.81875e+04);
refforces[255] = Vec3( 1.32793e+05, -3.72271e+05, 2.88491e+04);
refforces[256] = Vec3(-9.02633e+04, 2.78646e+05, 2.23700e+05);
refforces[257] = Vec3(-4.25632e+04, 9.36427e+04, -2.52553e+05);
refforces[258] = Vec3( 2.97252e+05, 2.17294e+05, -2.50945e+03);
refforces[259] = Vec3(-1.35724e+05, -1.48966e+05, 2.41658e+05);
refforces[260] = Vec3(-1.61536e+05, -6.83423e+04, -2.39199e+05);
refforces[261] = Vec3( 2.50550e+05, -1.39926e+05, 2.48375e+05);
refforces[262] = Vec3( 5.51783e+04, -1.65530e+04, -2.59341e+05);
refforces[263] = Vec3(-3.05734e+05, 1.56505e+05, 1.09189e+04);
refforces[264] = Vec3(-4.44616e+04, 4.17040e+04, -3.31507e+05);
refforces[265] = Vec3(-1.79702e+05, -8.54319e+04, 2.00323e+05);
refforces[266] = Vec3( 2.24182e+05, 4.37421e+04, 1.31227e+05);
refforces[267] = Vec3(-9.89367e+04, -3.76136e+05, 2.17157e+04);
refforces[268] = Vec3(-4.44424e+04, 1.68244e+05, -2.47606e+05);
refforces[269] = Vec3( 1.43421e+05, 2.07965e+05, 2.25893e+05);
refforces[270] = Vec3(-1.09030e+03, -2.44686e+05, -2.30145e+05);
refforces[271] = Vec3(-1.86963e+05, 1.89757e+05, 3.34863e+04);
refforces[272] = Vec3( 1.88003e+05, 5.49541e+04, 1.96680e+05);
refforces[273] = Vec3(-1.15452e+05, -1.55243e+05, 2.81412e+05);
refforces[274] = Vec3(-1.35893e+05, 1.74355e+05, -1.12817e+05);
refforces[275] = Vec3( 2.51361e+05, -1.90905e+04, -1.68633e+05);
refforces[276] = Vec3( 1.76202e+05, -2.31601e+05, -2.00886e+05);
refforces[277] = Vec3(-2.96697e+05, 3.00025e+04, 1.06676e+05);
refforces[278] = Vec3( 1.20457e+05, 2.01635e+05, 9.42700e+04);
refforces[279] = Vec3(-1.66320e+05, -9.08355e+02, 2.65478e+05);
refforces[280] = Vec3( 2.44823e+05, 9.45895e+04, -5.28589e+04);
refforces[281] = Vec3(-7.84765e+04, -9.36654e+04, -2.12648e+05);
refforces[282] = Vec3(-6.58002e+03, -1.21918e+05, 3.16459e+05);
refforces[283] = Vec3( 2.15225e+05, 5.96416e+04, -1.14097e+05);
refforces[284] = Vec3(-2.08615e+05, 6.22725e+04, -2.02387e+05);
refforces[285] = Vec3( 7.09186e+04, 1.83619e+05, 2.71862e+05);
refforces[286] = Vec3( 1.78911e+05, -1.02234e+05, -1.78910e+05);
refforces[287] = Vec3(-2.49882e+05, -8.13582e+04, -9.29803e+04);
refforces[288] = Vec3(-1.35529e+04, -3.20226e+05, -1.16293e+05);
refforces[289] = Vec3( 2.28053e+05, 1.65034e+05, 5.70125e+04);
refforces[290] = Vec3(-2.14515e+05, 1.55237e+05, 5.92732e+04);
refforces[291] = Vec3(-2.65006e+05, 1.75233e+05, 1.91268e+05);
refforces[292] = Vec3( 2.29905e+05, 1.02940e+05, -2.05886e+05);
refforces[293] = Vec3( 3.51345e+04, -2.78156e+05, 1.46393e+04);
refforces[294] = Vec3( 1.59458e+05, 2.25128e+05, 2.11611e+05);
refforces[295] = Vec3( 1.24813e+05, -1.16492e+05, -2.05249e+05);
refforces[296] = Vec3(-2.84281e+05, -1.08601e+05, -6.38824e+03);
refforces[297] = Vec3( 2.61767e+05, -7.55993e+04, -2.32576e+05);
refforces[298] = Vec3(-2.07803e+05, -1.78116e+05, 7.71831e+04);
refforces[299] = Vec3(-5.39242e+04, 2.53755e+05, 1.55427e+05);
refforces[300] = Vec3(-6.44117e+03, 2.31328e+05, -2.54922e+05);
refforces[301] = Vec3(-2.61097e+04, 4.93208e+04, 2.72709e+05);
refforces[302] = Vec3( 3.25053e+04, -2.80718e+05, -1.77304e+04);
refforces[303] = Vec3( 7.06280e+04, 7.26140e+04, 3.28446e+05);
refforces[304] = Vec3( 1.45890e+05, 7.98271e+04, -2.06449e+05);
refforces[305] = Vec3(-2.16516e+05, -1.52473e+05, -1.21980e+05);
refforces[306] = Vec3( 1.94879e+05, -2.83084e+05, 1.41824e+05);
refforces[307] = Vec3(-2.57149e+05, 1.96432e+05, 9.64284e+04);
refforces[308] = Vec3( 6.22633e+04, 8.66280e+04, -2.38228e+05);
refforces[309] = Vec3( 3.26456e+04, 1.17141e+05, -3.28374e+05);
refforces[310] = Vec3( 2.01298e+05, -1.11486e+05, 1.85810e+05);
refforces[311] = Vec3(-2.33937e+05, -5.70482e+03, 1.42641e+05);
refforces[312] = Vec3( 6.42964e+04, 1.88719e+05, -2.86572e+05);
refforces[313] = Vec3( 1.22184e+05, -2.53768e+05, 1.00254e+05);
refforces[314] = Vec3(-1.86433e+05, 6.49694e+04, 1.86429e+05);
refforces[315] = Vec3(-4.12317e+04, -1.73607e+04, -3.68620e+05);
refforces[316] = Vec3(-1.78981e+05, 1.43186e+05, 2.08269e+05);
refforces[317] = Vec3( 2.20155e+05, -1.25802e+05, 1.60395e+05);
refforces[318] = Vec3(-1.58613e+05, 3.01594e+05, -1.29345e+05);
refforces[319] = Vec3( 2.79698e+05, -2.67790e+04, 4.76063e+04);
refforces[320] = Vec3(-1.21063e+05, -2.74847e+05, 8.17976e+04);
refforces[321] = Vec3( 1.00451e+05, 2.03427e+05, -2.75044e+05);
refforces[322] = Vec3(-2.13956e+04, 7.64144e+04, 2.81199e+05);
refforces[323] = Vec3(-7.91039e+04, -2.79910e+05, -6.08590e+03);
refforces[324] = Vec3(-2.80664e+05, 5.26142e+04, -1.53706e+05);
refforces[325] = Vec3( 2.23923e+05, -1.17559e+05, -9.23685e+04);
refforces[326] = Vec3( 5.68062e+04, 6.49218e+04, 2.46158e+05);
refforces[327] = Vec3( 2.88911e+05, -1.17893e+05, -7.40828e+04);
refforces[328] = Vec3(-6.38612e+04, 2.37565e+05, -2.55450e+04);
refforces[329] = Vec3(-2.25033e+05, -1.19637e+05, 9.96952e+04);
refforces[330] = Vec3( 1.03510e+04, 7.35559e+04, 3.47129e+05);
refforces[331] = Vec3( 1.26778e+05, -2.19542e+05, -1.51515e+05);
refforces[332] = Vec3(-1.37190e+05, 1.45950e+05, -1.95573e+05);
refforces[333] = Vec3(-1.31816e+05, 5.57951e+04, -2.81935e+05);
refforces[334] = Vec3(-1.08367e+05, -9.75306e+04, 2.16731e+05);
refforces[335] = Vec3( 2.40191e+05, 4.17715e+04, 6.52667e+04);
refforces[336] = Vec3(-2.86680e+05, -2.63007e+05, 1.37964e+04);
refforces[337] = Vec3( 1.03914e+05, 1.76653e+05, -2.56324e+05);
refforces[338] = Vec3( 1.82779e+05, 8.64040e+04, 2.42594e+05);
refforces[339] = Vec3( 1.09800e+03, -3.11636e+05, 1.85833e+05);
refforces[340] = Vec3(-2.39750e+05, 1.52568e+05, -8.71817e+04);
refforces[341] = Vec3( 2.38635e+05, 1.59089e+05, -9.86351e+04);
refforces[342] = Vec3(-8.76706e+04, -6.10520e+04, 3.31680e+05);
refforces[343] = Vec3( 2.64692e+05, 5.23233e+04, -1.16959e+05);
refforces[344] = Vec3(-1.76973e+05, 8.70353e+03, -2.14689e+05);
refforces[345] = Vec3(-1.15976e+05, -2.72303e+05, -1.33307e+05);
refforces[346] = Vec3( 2.20682e+05, 1.51896e+05, -6.30516e+04);
refforces[347] = Vec3(-1.04744e+05, 1.20457e+05, 1.96395e+05);
refforces[348] = Vec3( 4.57064e+04, 3.43550e+05, 7.23245e+04);
refforces[349] = Vec3(-1.91414e+05, -1.26580e+05, -1.85241e+05);
refforces[350] = Vec3( 1.45684e+05, -2.17040e+05, 1.12977e+05);
refforces[351] = Vec3(-1.88623e+05, -1.22936e+04, 3.10223e+05);
refforces[352] = Vec3( 3.06931e+05, 5.73380e+04, -7.08300e+04);
refforces[353] = Vec3(-1.18279e+05, -4.50586e+04, -2.39376e+05);
refforces[354] = Vec3( 8.31603e+04, -2.75958e+05, 1.16877e+05);
refforces[355] = Vec3(-2.08784e+05, 1.26300e+05, 5.15494e+04);
refforces[356] = Vec3( 1.25608e+05, 1.49661e+05, -1.68370e+05);
refforces[357] = Vec3( 1.44100e+05, -2.34453e+05, 1.73916e+05);
refforces[358] = Vec3(-8.65072e+04, 2.39988e+05, 8.37141e+04);
refforces[359] = Vec3(-5.75432e+04, -5.48037e+03, -2.57574e+05);
refforces[360] = Vec3( 2.72504e+05, 2.99781e+04, 1.85778e+05);
refforces[361] = Vec3(-3.41026e+04, 7.10483e+04, -2.61466e+05);
refforces[362] = Vec3(-2.38458e+05, -1.00996e+05, 7.57451e+04);
refforces[363] = Vec3( 1.45826e+05, -2.81284e+05, 1.15502e+05);
refforces[364] = Vec3(-2.63407e+05, 3.47332e+04, -8.10477e+04);
refforces[365] = Vec3( 1.17594e+05, 2.46657e+05, -3.44181e+04);
refforces[366] = Vec3( 2.59381e+05, -5.73297e+04, 2.56690e+05);
refforces[367] = Vec3(-1.25834e+05, -2.09725e+05, -1.49803e+05);
refforces[368] = Vec3(-1.33554e+05, 2.67105e+05, -1.06844e+05);
refforces[369] = Vec3( 7.18473e+04, -2.59021e+05, 1.89797e+05);
refforces[370] = Vec3( 1.56664e+05, 2.11783e+05, -8.99369e+04);
refforces[371] = Vec3(-2.28511e+05, 4.72761e+04, -9.98083e+04);
refforces[372] = Vec3(-1.99083e+04, 3.17042e+05, -5.62792e+04);
refforces[373] = Vec3(-1.96875e+05, -1.64948e+05, -7.96758e-01);
refforces[374] = Vec3( 2.16840e+05, -1.52072e+05, 5.63215e+04);
const double longcutoff = 30.0*OpenMM::NmPerAngstrom;
......@@ -676,16 +1187,21 @@ void test_water125_dpme_vs_long_cutoff_no_exclusions() {
// For this test the reference energy is 545636 kJ/mol, while the difference between DPME and 30A cutoffs
// is just 1.062 kJ/mol. The difference is due to the fact that arithmetic mean combination rules are used
// up to the cutoff, while the reciprocal space uses the geometric mean. See DOI: 10.1021/acs.jctc.5b00726
ASSERT_EQUAL_TOL(refenergy, energy, 5E-6);
ASSERT_EQUAL_TOL(gromacs_energy, energy, 5E-4);
for(int n = 0; n < NATOMS; ++n)
ASSERT_EQUAL_VEC(refforces[n], forces[n], 5E-4);
}
void test_water125_dpme_vs_long_cutoff_with_exclusions() {
const double cutoff = 8.5*OpenMM::NmPerAngstrom;
const double cutoff = 11.5*OpenMM::NmPerAngstrom;
const double alpha = 0.45*OpenMM::AngstromsPerNm;
const double dalpha = 0.45*OpenMM::AngstromsPerNm;
const int grid = 32;
const double dalpha = 4.2760443169;
const int grid = 60;
NonbondedForce* forceField = new NonbondedForce();
vector<Vec3> positions;
......@@ -695,7 +1211,7 @@ void test_water125_dpme_vs_long_cutoff_with_exclusions() {
System system;
const int NATOMS = 375;
double boxEdgeLength = 17.01*OpenMM::NmPerAngstrom;
double boxEdgeLength = 23.01*OpenMM::NmPerAngstrom;
make_waterbox(NATOMS, boxEdgeLength, forceField, positions, epsvals, sigvals, bonds, system, false);
......@@ -713,10 +1229,387 @@ void test_water125_dpme_vs_long_cutoff_with_exclusions() {
State state = context.getState(State::Forces | State::Energy);
double energy = state.getPotentialEnergy();
// std::cout << "Energy " << energy*OpenMM::KcalPerKJ << std::endl;
// std::cout << "Energy " << energy << std::endl;
const vector<Vec3>& forces = state.getForces();
// print_forces(forces);
// Gromacs reference values. See comments in test_water2_dpme_energies_forces_no_exclusions() for details.
double gromacs_energy = -2.17481e+02;
vector<Vec3> refforces(NATOMS);
refforces[ 0] = Vec3(-3.10130e+01, -6.01219e+01, -5.31302e+01);
refforces[ 1] = Vec3( 4.21376e+00, 9.13811e-01, 9.61319e-01);
refforces[ 2] = Vec3( 1.42363e+00, 2.97219e+00, 1.27185e+00);
refforces[ 3] = Vec3(-3.70172e+01, -2.95228e+01, -6.27987e+01);
refforces[ 4] = Vec3(-6.57386e-01, 2.39279e+00, 1.53243e+00);
refforces[ 5] = Vec3(-1.61426e+00, 7.11728e-01, 9.99752e-01);
refforces[ 6] = Vec3( 1.60813e+01, -6.77979e+01, -1.01302e+02);
refforces[ 7] = Vec3(-4.23118e+00, 9.25550e-01, 1.28003e+00);
refforces[ 8] = Vec3( 1.81589e+00, 1.10083e+00, 1.28615e+00);
refforces[ 9] = Vec3(-2.24427e+00, -5.71071e+01, -3.18064e+01);
refforces[ 10] = Vec3( 3.41715e+00, 1.32918e+00, 1.27908e+00);
refforces[ 11] = Vec3(-3.09930e+00, 9.91868e-01, 1.69245e+00);
refforces[ 12] = Vec3( 6.08033e+01, -1.02990e+02, -8.26733e+01);
refforces[ 13] = Vec3(-1.01346e+00, 1.35475e+00, 4.13725e+00);
refforces[ 14] = Vec3(-6.71645e-01, 4.69536e-01, 4.64774e-01);
refforces[ 15] = Vec3(-6.39056e+01, -9.85756e-01, -4.97837e+01);
refforces[ 16] = Vec3( 9.97113e-01, 1.13195e-01, 4.49387e+00);
refforces[ 17] = Vec3( 9.48864e-01, 4.22217e+00, 1.56364e+00);
refforces[ 18] = Vec3( 2.18124e+01, -6.14078e+01, -8.10129e+01);
refforces[ 19] = Vec3(-5.59701e-01, -1.47528e+00, 1.40157e+00);
refforces[ 20] = Vec3( 4.29539e+00, 4.27738e-02, 1.03009e+00);
refforces[ 21] = Vec3(-2.62377e+01, 2.55532e+01, -6.89576e+01);
refforces[ 22] = Vec3( 1.17222e-01, 3.81618e+00, 1.74502e+00);
refforces[ 23] = Vec3( 1.46448e-01, 1.06214e-01, 4.27946e+00);
refforces[ 24] = Vec3(-1.90819e+00, 9.86513e+00, -1.05364e+02);
refforces[ 25] = Vec3(-1.18537e+00, 1.75021e+00, 1.54448e+00);
refforces[ 26] = Vec3( 2.96182e+00, -9.48323e-01, 1.61299e+00);
refforces[ 27] = Vec3( 5.61257e+01, 7.69427e+01, -5.84534e+01);
refforces[ 28] = Vec3(-8.11821e-01, -7.15455e-01, 6.60049e-01);
refforces[ 29] = Vec3(-9.20901e-01, 3.76217e+00, 1.35685e+00);
refforces[ 30] = Vec3(-5.03791e+01, 2.24324e+01, -4.31606e+01);
refforces[ 31] = Vec3( 3.72530e+00, 3.48275e-01, 1.40060e+00);
refforces[ 32] = Vec3( 7.61265e-01, 8.56416e-01, 6.23359e-01);
refforces[ 33] = Vec3( 1.95683e+01, 4.16950e+01, -4.33266e+01);
refforces[ 34] = Vec3(-2.19677e+00, 1.06287e+00, 1.58260e+00);
refforces[ 35] = Vec3( 1.70923e+00, 2.09511e+00, 9.84492e-01);
refforces[ 36] = Vec3(-7.84273e+01, -3.34396e+01, -3.66486e+01);
refforces[ 37] = Vec3(-1.53567e-01, 1.74934e-01, 1.15266e+00);
refforces[ 38] = Vec3(-3.45548e+00, 1.68633e-01, 1.15923e+00);
refforces[ 39] = Vec3( 6.90725e+01, -2.09426e+01, -5.31532e+01);
refforces[ 40] = Vec3( 1.33274e+00, 3.09504e-01, 1.40065e+00);
refforces[ 41] = Vec3( 1.65828e+00, -1.96378e-01, 2.68350e+00);
refforces[ 42] = Vec3( 3.39954e+01, -2.65418e+01, -6.81184e+01);
refforces[ 43] = Vec3(-1.17491e+00, -2.88793e+00, 1.40541e+00);
refforces[ 44] = Vec3(-9.63132e-01, -3.78178e-01, 1.06756e+00);
refforces[ 45] = Vec3(-4.44610e+01, -1.81736e+01, -6.19409e+01);
refforces[ 46] = Vec3( 1.48529e+00, 8.95548e-06, 4.60732e+00);
refforces[ 47] = Vec3( 1.00451e+00, -3.88830e+00, 1.27726e+00);
refforces[ 48] = Vec3(-4.23022e+00, 2.52963e+01, -3.04756e+01);
refforces[ 49] = Vec3(-3.45228e+00, 7.61191e-01, 9.40731e-01);
refforces[ 50] = Vec3( 2.78622e+00, 8.32081e-01, 1.37588e+00);
refforces[ 51] = Vec3( 1.63360e+01, 3.02230e+01, -3.91446e+01);
refforces[ 52] = Vec3(-2.64761e+00, 1.18509e+00, 9.81393e-01);
refforces[ 53] = Vec3( 1.74883e+00, -1.51958e-01, 2.56504e+00);
refforces[ 54] = Vec3(-3.01111e+01, 4.08021e+01, -3.45058e+01);
refforces[ 55] = Vec3(-1.17129e-01, 9.74282e-02, 4.56402e+00);
refforces[ 56] = Vec3(-3.03696e+00, 4.44012e-01, 1.44269e+00);
refforces[ 57] = Vec3( 7.57956e+01, -1.12043e+01, -3.92084e+01);
refforces[ 58] = Vec3(-1.55617e+00, 2.26444e-01, 2.88234e+00);
refforces[ 59] = Vec3(-1.37287e+00, -3.79045e+00, 8.55326e-01);
refforces[ 60] = Vec3(-2.88831e+01, 5.72484e+01, -7.17030e+01);
refforces[ 61] = Vec3( 6.88458e-01, -2.06343e+00, 1.03552e+00);
refforces[ 62] = Vec3( 6.94194e-01, -1.83673e+00, 2.90979e+00);
refforces[ 63] = Vec3(-7.87489e+01, 2.17729e+01, -3.72371e+01);
refforces[ 64] = Vec3( 1.39267e-01, -4.55150e+00, 9.53893e-01);
refforces[ 65] = Vec3(-4.27928e+00, -1.14139e+00, 9.25405e-01);
refforces[ 66] = Vec3( 7.13947e+01, 3.02722e+01, -5.16551e+01);
refforces[ 67] = Vec3( 4.07933e+00, -1.28199e+00, 9.34707e-01);
refforces[ 68] = Vec3(-7.53668e-02, -2.14888e+00, 1.27713e+00);
refforces[ 69] = Vec3(-9.36762e+00, 2.98321e+01, -5.70761e+01);
refforces[ 70] = Vec3( 1.35989e+00, -3.09988e+00, 9.89945e-01);
refforces[ 71] = Vec3(-2.20314e+00, -7.81892e-01, 1.21781e+00);
refforces[ 72] = Vec3( 4.89194e+01, 7.40749e+01, -4.22017e+01);
refforces[ 73] = Vec3(-4.25696e+00, -1.18954e+00, 1.04383e+00);
refforces[ 74] = Vec3(-1.40510e+00, -9.87719e-01, 3.30559e+00);
refforces[ 75] = Vec3(-4.95912e+01, -8.24838e+01, -1.82510e+01);
refforces[ 76] = Vec3( 7.39933e-01, 9.29483e-01, -1.09883e+00);
refforces[ 77] = Vec3( 9.70359e-01, 1.03012e+00, 4.01759e+00);
refforces[ 78] = Vec3(-7.87499e+00, -1.87981e+01, 5.77017e+00);
refforces[ 79] = Vec3( 3.82847e+00, 1.01191e+00, -7.30715e-02);
refforces[ 80] = Vec3(-2.64831e+00, 1.68402e+00, 1.06474e-01);
refforces[ 81] = Vec3( 1.81335e+01, -6.72766e+01, 7.21397e+01);
refforces[ 82] = Vec3(-1.89188e-01, 1.27803e+00, 8.45103e-01);
refforces[ 83] = Vec3( 2.47584e+00, 1.54044e+00, 6.55440e-01);
refforces[ 84] = Vec3(-1.05824e+00, -6.50833e+01, -3.88413e+01);
refforces[ 85] = Vec3(-3.21762e+00, 1.58809e+00, -1.32879e-01);
refforces[ 86] = Vec3( 3.30285e+00, 1.52154e+00, -3.56471e-01);
refforces[ 87] = Vec3( 4.41972e+01, -3.58815e+01, 4.01227e+01);
refforces[ 88] = Vec3(-1.22923e+00, 8.91826e-01, 2.84505e+00);
refforces[ 89] = Vec3(-4.31649e+00, 1.00895e+00, 4.43366e-01);
refforces[ 90] = Vec3(-3.65176e+01, 4.86616e+01, -6.44163e+00);
refforces[ 91] = Vec3( 1.03989e+00, 3.91910e+00, 7.93373e-01);
refforces[ 92] = Vec3( 4.11089e+00, -4.60733e-01, -7.78461e-02);
refforces[ 93] = Vec3(-1.58332e+01, -6.82045e+01, 6.62934e+01);
refforces[ 94] = Vec3(-7.75645e-02, -3.66897e+00, -3.55044e-01);
refforces[ 95] = Vec3( 4.08399e-01, 2.84950e-01, 3.80641e+00);
refforces[ 96] = Vec3(-5.05975e+00, 4.20346e+01, 3.49518e+01);
refforces[ 97] = Vec3( 9.82673e-01, 2.64451e+00, 4.02971e-01);
refforces[ 98] = Vec3(-1.24992e+00, -3.34479e-01, 1.95012e+00);
refforces[ 99] = Vec3( 2.31815e+00, -2.30056e+00, 6.49918e+01);
refforces[100] = Vec3(-2.16986e+00, -1.05184e-01, 1.89395e+00);
refforces[101] = Vec3( 3.51302e+00, 1.83706e-01, 7.08534e-01);
refforces[102] = Vec3( 4.46929e+01, -7.11604e+01, -6.62201e+00);
refforces[103] = Vec3(-1.87730e+00, -1.10206e+00, -1.47504e+00);
refforces[104] = Vec3(-1.41639e+00, -1.36347e+00, 6.10811e-01);
refforces[105] = Vec3(-3.12256e+01, -1.73923e+01, -4.47428e+01);
refforces[106] = Vec3( 7.92004e-01, -1.39066e+00, -2.68309e+00);
refforces[107] = Vec3( 1.54891e+00, 2.50018e+00, -6.21395e-01);
refforces[108] = Vec3(-3.83585e+01, 3.90231e+01, -3.68876e+01);
refforces[109] = Vec3( 1.86446e-01, 3.49120e+00, -4.00101e-01);
refforces[110] = Vec3(-4.05592e+00, -2.21609e-01, 2.13257e-01);
refforces[111] = Vec3( 5.70991e+01, -5.95502e+01, -4.08285e+01);
refforces[112] = Vec3(-4.25039e-01, -3.96206e-01, -3.23550e+00);
refforces[113] = Vec3( 4.14811e+00, -1.47859e-01, 1.11071e-01);
refforces[114] = Vec3(-2.74979e+01, 4.40260e+01, 3.06766e+00);
refforces[115] = Vec3( 2.22804e-01, 3.48934e+00, -1.96162e-01);
refforces[116] = Vec3(-4.21754e+00, 1.18655e-01, 3.36974e-01);
refforces[117] = Vec3( 6.32783e+01, 8.02719e+01, 1.38219e+01);
refforces[118] = Vec3(-1.49058e+00, 1.87045e+00, -1.32164e-01);
refforces[119] = Vec3(-2.30776e+00, 1.73240e-01, 1.92445e+00);
refforces[120] = Vec3(-4.04272e+01, -1.77143e+01, 1.57461e+01);
refforces[121] = Vec3( 1.82378e+00, 2.60376e+00, 2.33866e-01);
refforces[122] = Vec3( 1.33379e+00, -1.16675e+00, 3.34265e+00);
refforces[123] = Vec3(-8.78170e+00, 1.35313e+01, -5.40700e+01);
refforces[124] = Vec3(-2.72817e+00, 3.27413e-01, -6.95012e-01);
refforces[125] = Vec3( 2.41935e+00, -2.66049e-01, -1.62940e+00);
refforces[126] = Vec3(-3.63273e+01, 6.91610e+01, -3.72663e+00);
refforces[127] = Vec3(-1.40546e+00, 7.48503e-01, -9.73230e-01);
refforces[128] = Vec3( 5.39530e-01, 8.56302e-01, 2.57617e+00);
refforces[129] = Vec3( 2.54426e+01, -5.04169e+01, -1.76229e+01);
refforces[130] = Vec3( 6.82595e-01, -3.17362e+00, 2.20610e-01);
refforces[131] = Vec3( 1.94539e+00, 1.53325e+00, -4.24624e-01);
refforces[132] = Vec3( 3.61678e+01, -7.89030e+01, -9.61808e+00);
refforces[133] = Vec3(-1.29295e+00, -1.55223e+00, -1.88241e+00);
refforces[134] = Vec3(-1.51438e+00, 3.14594e-02, 3.60043e+00);
refforces[135] = Vec3(-4.60860e+01, 6.18971e+01, 1.38188e+01);
refforces[136] = Vec3( 3.07506e+00, -9.60659e-01, 1.81485e+00);
refforces[137] = Vec3( 6.46515e-01, -7.30203e-01, -2.17471e-01);
refforces[138] = Vec3( 7.76539e+00, 3.18751e+01, -6.18739e+01);
refforces[139] = Vec3(-2.12790e+00, -1.06577e+00, -1.03098e+00);
refforces[140] = Vec3( 3.70469e+00, -7.70591e-01, -2.00619e-01);
refforces[141] = Vec3(-4.02748e+01, 1.93804e+01, 1.92911e+01);
refforces[142] = Vec3( 5.74429e-01, -1.58840e+00, -2.07083e+00);
refforces[143] = Vec3(-4.21689e+00, -7.25280e-01, 1.61839e-01);
refforces[144] = Vec3( 4.10890e+01, 6.50772e+01, -6.64661e+00);
refforces[145] = Vec3( 2.02022e-01, -1.46124e+00, 1.99785e+00);
refforces[146] = Vec3( 1.91733e-01, -1.14906e+00, -4.18291e+00);
refforces[147] = Vec3( 3.77785e+01, 1.01191e+02, -6.07436e+00);
refforces[148] = Vec3(-1.03030e+00, -1.26650e+00, 3.57188e+00);
refforces[149] = Vec3(-7.42295e-01, -1.05437e+00, -1.47491e+00);
refforces[150] = Vec3(-7.40150e+01, -3.53477e+01, 1.81946e+01);
refforces[151] = Vec3( 1.65267e+00, 1.39873e+00, 1.46780e+00);
refforces[152] = Vec3( 1.18632e+00, 2.66165e+00, 1.61236e+00);
refforces[153] = Vec3( 3.89536e+01, -2.96071e+01, -1.38610e+01);
refforces[154] = Vec3( 2.05061e+00, 1.54050e+00, 5.35476e-01);
refforces[155] = Vec3( 4.98336e-01, 3.85036e+00, 4.21301e-01);
refforces[156] = Vec3(-5.53456e+01, -6.87157e+01, -3.55693e+01);
refforces[157] = Vec3( 3.17070e+00, 1.65800e+00, -3.99476e-01);
refforces[158] = Vec3(-2.02395e+00, 1.48143e+00, 1.00879e+00);
refforces[159] = Vec3( 5.94087e+01, -4.57694e+01, 2.77585e+01);
refforces[160] = Vec3( 2.05570e+00, 1.46552e+00, -1.41447e+00);
refforces[161] = Vec3( 2.97741e-01, 9.12876e-01, 3.27902e+00);
refforces[162] = Vec3( 1.93442e+01, -4.16391e+01, 3.34803e-01);
refforces[163] = Vec3(-3.93865e+00, 8.46322e-01, -4.47285e-01);
refforces[164] = Vec3(-7.34898e-01, 9.82679e-01, 1.44017e+00);
refforces[165] = Vec3(-3.34824e+01, -1.38834e+01, -2.62952e+01);
refforces[166] = Vec3( 1.26693e+00, -1.10171e+00, 3.22806e+00);
refforces[167] = Vec3( 3.49758e+00, -1.84534e-01, -4.62412e-01);
refforces[168] = Vec3( 1.82122e+00, -5.69776e+01, -3.86605e+01);
refforces[169] = Vec3( 1.92404e+00, -1.05303e+00, -4.52186e-01);
refforces[170] = Vec3(-3.25172e+00, 9.44050e-02, -5.87318e-01);
refforces[171] = Vec3(-5.98475e+01, 1.85708e+01, -2.67060e+01);
refforces[172] = Vec3(-3.77230e-01, 3.29609e+00, -4.81590e-01);
refforces[173] = Vec3(-1.66002e+00, -2.41098e+00, 1.03425e-01);
refforces[174] = Vec3( 6.47852e+01, 4.38661e+00, 1.77482e+01);
refforces[175] = Vec3(-1.29162e-01, -3.40031e+00, 3.91521e-01);
refforces[176] = Vec3( 1.28253e+00, 2.14633e+00, 2.64792e-01);
refforces[177] = Vec3( 2.95010e+01, -5.60376e+00, 4.16733e+01);
refforces[178] = Vec3(-1.43378e+00, -1.96178e-01, 2.40594e+00);
refforces[179] = Vec3(-1.56255e+00, -3.08967e+00, -3.14335e-01);
refforces[180] = Vec3(-6.02384e+01, -1.59585e+01, 7.16798e+01);
refforces[181] = Vec3( 1.68669e+00, -3.54228e+00, -2.98122e-01);
refforces[182] = Vec3( 9.46412e-01, -8.03852e-02, 4.17305e+00);
refforces[183] = Vec3( 3.87313e+00, 4.46632e+01, 4.59130e+01);
refforces[184] = Vec3(-9.83299e-02, -8.11669e-02, 4.04515e+00);
refforces[185] = Vec3( 6.64172e-01, 3.66814e+00, -2.58278e-01);
refforces[186] = Vec3(-1.65450e+01, 2.35336e+01, 7.09485e+01);
refforces[187] = Vec3(-6.98821e-01, 2.45516e-01, 2.69560e+00);
refforces[188] = Vec3( 4.04145e+00, 5.46258e-02, -1.82210e-02);
refforces[189] = Vec3( 2.39311e+01, 1.22785e+01, -2.13260e+01);
refforces[190] = Vec3(-3.33802e-02, -3.60205e+00, 6.21747e-01);
refforces[191] = Vec3( 3.50616e+00, 6.09623e-01, -7.40284e-02);
refforces[192] = Vec3( 2.32693e+01, -1.88836e+01, 1.24193e+01);
refforces[193] = Vec3(-2.25948e+00, -1.74718e+00, 2.65705e-01);
refforces[194] = Vec3(-1.32949e+00, -8.67446e-01, 7.75386e-01);
refforces[195] = Vec3(-4.40626e+01, 1.17032e+01, -4.18284e+01);
refforces[196] = Vec3( 1.61723e+00, -6.18309e-01, 2.45312e+00);
refforces[197] = Vec3( 1.42535e+00, 1.71801e+00, -1.86477e+00);
refforces[198] = Vec3( 3.37157e+00, -1.65818e+01, 7.59773e+01);
refforces[199] = Vec3(-2.81989e+00, -1.37877e+00, -9.60015e-02);
refforces[200] = Vec3(-8.77602e-02, 2.44299e+00, 1.17362e+00);
refforces[201] = Vec3( 2.44644e+01, -3.26831e+01, -5.34506e+01);
refforces[202] = Vec3(-4.14853e+00, -9.48873e-02, -2.18126e-01);
refforces[203] = Vec3( 8.13810e-01, -1.30429e+00, -1.62539e+00);
refforces[204] = Vec3( 1.03414e+01, -4.14898e+00, 2.56841e+01);
refforces[205] = Vec3(-1.50990e-01, -3.90514e+00, 2.98649e-01);
refforces[206] = Vec3(-3.60035e+00, -7.83546e-02, -7.95300e-01);
refforces[207] = Vec3( 4.49059e+01, 2.88959e+01, 1.53626e+01);
refforces[208] = Vec3(-2.55855e+00, -1.55231e+00, -3.96734e-01);
refforces[209] = Vec3(-1.14072e+00, 3.25255e+00, 2.39860e-01);
refforces[210] = Vec3(-4.12850e+01, 6.11654e+01, 2.43179e+01);
refforces[211] = Vec3( 1.20781e+00, -8.28196e-01, 4.26212e+00);
refforces[212] = Vec3( 7.30387e-01, -9.26965e-01, -9.32605e-01);
refforces[213] = Vec3(-1.64972e+01, 4.58667e+01, 5.58154e+01);
refforces[214] = Vec3( 4.43484e-01, -1.67205e+00, 3.42164e+00);
refforces[215] = Vec3(-4.14170e+00, -9.68400e-01, -9.21231e-02);
refforces[216] = Vec3( 1.79252e+01, 6.24205e+01, -1.47777e+01);
refforces[217] = Vec3(-2.53437e+00, -9.16373e-01, -1.63636e+00);
refforces[218] = Vec3( 3.32247e+00, -1.29776e+00, -1.07427e+00);
refforces[219] = Vec3( 1.79752e+01, 5.16430e+01, 3.90249e+01);
refforces[220] = Vec3( 7.14180e-01, -1.00018e+00, 3.14118e+00);
refforces[221] = Vec3(-1.07965e+00, -3.41285e+00, -2.24161e-01);
refforces[222] = Vec3( 3.16317e+01, 4.98025e+01, -4.17518e+01);
refforces[223] = Vec3(-2.55899e+00, -1.63433e+00, -3.76149e-01);
refforces[224] = Vec3(-1.19443e+00, -1.02227e+00, -5.37349e-02);
refforces[225] = Vec3(-3.77249e+01, -4.85845e+01, -2.11073e+01);
refforces[226] = Vec3( 7.98995e-01, 1.26056e+00, 4.28442e+00);
refforces[227] = Vec3( 3.35648e+00, 9.11653e-01, -8.07025e-01);
refforces[228] = Vec3(-3.16004e+01, -2.04156e+01, 5.01542e+01);
refforces[229] = Vec3( 8.97766e-01, 1.34997e+00, 2.86585e+00);
refforces[230] = Vec3(-2.09603e-01, 4.05651e+00, -1.91043e-02);
refforces[231] = Vec3( 3.61582e+01, -3.35593e+01, 4.19940e+01);
refforces[232] = Vec3( 3.66075e+00, 7.71021e-01, 3.45598e-01);
refforces[233] = Vec3(-7.50361e-01, 1.22549e+00, 7.98677e-01);
refforces[234] = Vec3(-4.42511e+01, -2.71049e+01, -4.56576e+01);
refforces[235] = Vec3(-3.30181e-01, 1.98824e+00, 2.21005e+00);
refforces[236] = Vec3(-7.68719e-01, 9.09063e-01, -3.77633e+00);
refforces[237] = Vec3( 7.33817e+01, -3.03886e+01, -7.59758e+01);
refforces[238] = Vec3(-1.71701e+00, 1.41048e+00, -1.84182e+00);
refforces[239] = Vec3(-1.35491e+00, 2.27816e+00, -1.08799e+00);
refforces[240] = Vec3(-4.58218e+01, -2.91931e+01, 1.12369e+01);
refforces[241] = Vec3( 1.68546e+00, 2.81258e+00, 3.93755e-01);
refforces[242] = Vec3( 8.28917e-01, -1.32237e+00, 2.91182e+00);
refforces[243] = Vec3( 5.44446e+00, -3.99466e+01, 6.77923e+00);
refforces[244] = Vec3(-1.09231e+00, -5.21927e-01, 1.83581e+00);
refforces[245] = Vec3( 5.24849e-02, -7.21832e-01, -3.35896e+00);
refforces[246] = Vec3(-1.29863e+01, -3.94851e+01, -2.70347e+01);
refforces[247] = Vec3(-3.94725e+00, -2.01688e-01, 5.93703e-02);
refforces[248] = Vec3( 1.30447e+00, -2.35362e+00, -2.94278e-01);
refforces[249] = Vec3( 2.56542e+01, -3.79434e+01, -6.19782e+01);
refforces[250] = Vec3( 2.48025e+00, -1.19994e+00, 1.41640e-01);
refforces[251] = Vec3(-5.01379e-01, 2.48607e-01, -3.97535e+00);
refforces[252] = Vec3( 3.46461e+01, -8.37214e+01, -3.92225e+01);
refforces[253] = Vec3(-2.80216e+00, -1.13524e+00, 1.85582e-02);
refforces[254] = Vec3(-1.28421e+00, -9.50174e-01, -5.56828e-01);
refforces[255] = Vec3(-3.56755e+01, 1.44176e+01, -7.63345e-01);
refforces[256] = Vec3( 1.25547e+00, 2.64846e+00, 1.29226e+00);
refforces[257] = Vec3( 1.22691e+00, 5.72301e-01, -4.09853e+00);
refforces[258] = Vec3(-6.02997e+00, -1.31579e+01, -5.03304e+01);
refforces[259] = Vec3(-4.59947e-01, -8.09031e-01, 3.08383e+00);
refforces[260] = Vec3(-8.93872e-01, -3.70797e-01, -2.89773e+00);
refforces[261] = Vec3(-1.92458e+00, 2.50787e+01, -4.30937e+01);
refforces[262] = Vec3( 2.10381e-01, -1.24125e-01, -4.01554e+00);
refforces[263] = Vec3(-3.85853e+00, 6.72311e-01, 4.06873e-02);
refforces[264] = Vec3( 1.66952e+01, 1.47383e+01, 4.13458e+01);
refforces[265] = Vec3(-2.12261e+00, -5.40916e-01, 1.54532e+00);
refforces[266] = Vec3( 3.54041e+00, -4.73740e-02, 4.73489e-01);
refforces[267] = Vec3( 4.43789e+01, 6.96271e+01, 4.06335e+00);
refforces[268] = Vec3(-9.59563e-01, 9.94730e-01, -3.12464e+00);
refforces[269] = Vec3(-1.42363e+00, 1.62107e+00, 1.87365e+00);
refforces[270] = Vec3(-5.38380e+01, 2.27365e+01, 1.95666e+01);
refforces[271] = Vec3( 1.47405e+00, 2.11523e+00, 1.97777e-01);
refforces[272] = Vec3( 2.54377e+00, -4.04439e-02, 1.97927e+00);
refforces[273] = Vec3( 1.33568e+01, 1.88750e+01, -3.59233e+01);
refforces[274] = Vec3(-1.09293e+00, 2.25841e+00, -4.61222e-01);
refforces[275] = Vec3( 3.27762e+00, -1.71208e-01, -8.67824e-01);
refforces[276] = Vec3(-3.41864e+01, 3.38579e+01, 5.95219e+01);
refforces[277] = Vec3(-4.18249e+00, -8.81154e-02, 1.97498e-01);
refforces[278] = Vec3( 1.06177e+00, 2.34089e+00, 2.42037e-01);
refforces[279] = Vec3( 2.35073e+01, 1.61625e+01, -2.58858e+01);
refforces[280] = Vec3( 3.87903e+00, 1.67313e-01, -4.03473e-02);
refforces[281] = Vec3(-5.12341e-01, -5.62857e-01, -3.19237e+00);
refforces[282] = Vec3( 3.39154e+01, -5.09470e+00, -2.29146e+01);
refforces[283] = Vec3(-1.24992e+00, 5.24960e-01, -1.16022e+00);
refforces[284] = Vec3(-2.39537e+00, 1.82818e-01, -1.53421e+00);
refforces[285] = Vec3(-5.56195e+01, 2.89266e+01, -2.61137e+01);
refforces[286] = Vec3( 2.49596e+00, -1.03213e+00, -1.51258e+00);
refforces[287] = Vec3( 1.02471e+00, -1.05342e+00, -6.79809e-01);
refforces[288] = Vec3(-1.52895e+01, 4.83734e+01, -7.33233e+00);
refforces[289] = Vec3( 3.77837e+00, -1.59224e+00, 2.02675e-01);
refforces[290] = Vec3(-3.51854e+00, -1.54234e+00, 2.89348e-01);
refforces[291] = Vec3( 3.22262e+01, 2.32542e+01, 2.37269e+01);
refforces[292] = Vec3( 1.88520e+00, -1.38396e+00, -1.98750e+00);
refforces[293] = Vec3( 4.99036e-02, -4.53129e+00, -2.13859e-01);
refforces[294] = Vec3(-7.48274e+00, 3.71318e+01, -2.35667e+01);
refforces[295] = Vec3( 7.81671e-01, -1.07371e+00, -2.37009e+00);
refforces[296] = Vec3(-3.98896e+00, -9.36146e-01, 2.62843e-02);
refforces[297] = Vec3( 4.33081e+01, 4.24806e+01, 3.21190e+01);
refforces[298] = Vec3(-2.52531e+00, -1.90285e+00, 2.72091e-01);
refforces[299] = Vec3(-9.70927e-01, -1.13219e+00, 1.47351e+00);
refforces[300] = Vec3(-4.71070e+01, -7.19253e+01, 5.82986e+01);
refforces[301] = Vec3( 6.82929e-01, 1.00679e+00, -6.94522e-01);
refforces[302] = Vec3( 8.31359e-01, 7.09804e-01, -8.12652e-01);
refforces[303] = Vec3( 3.62309e+00, -3.42931e+01, 1.98231e+01);
refforces[304] = Vec3( 1.23138e+00, 8.49297e-01, -2.39283e+00);
refforces[305] = Vec3(-2.87428e+00, 1.41050e+00, -1.03948e+00);
refforces[306] = Vec3(-3.83149e+00, -2.61638e+01, 2.98550e+01);
refforces[307] = Vec3(-2.90010e+00, 1.38356e+00, -1.22906e+00);
refforces[308] = Vec3( 2.62337e-01, 9.72795e-01, -4.02660e+00);
refforces[309] = Vec3( 7.84655e+00, -5.09531e+01, 7.96762e+01);
refforces[310] = Vec3( 2.46967e+00, 9.48901e-01, -1.17317e+00);
refforces[311] = Vec3(-4.11596e+00, 7.95633e-01, -1.39335e+00);
refforces[312] = Vec3( 5.03705e+01, -8.09993e+01, 1.13172e+02);
refforces[313] = Vec3(-4.48925e-01, 4.29309e-01, -5.50572e-01);
refforces[314] = Vec3(-2.66201e+00, 1.05662e+00, -1.44247e+00);
refforces[315] = Vec3(-6.12660e+01, 2.31218e+01, 4.57287e+01);
refforces[316] = Vec3( 8.42017e-01, 1.41042e+00, -7.78795e-01);
refforces[317] = Vec3( 3.11298e+00, -8.04273e-01, -1.51273e+00);
refforces[318] = Vec3( 1.83823e+01, -2.83588e+01, 6.13597e+01);
refforces[319] = Vec3( 4.37781e+00, 8.12091e-02, -1.33992e+00);
refforces[320] = Vec3(-5.81396e-01, -3.61991e+00, -1.22489e+00);
refforces[321] = Vec3(-4.85270e+01, -6.50314e+01, 7.16441e+01);
refforces[322] = Vec3(-3.40093e-02, 9.01514e-01, -1.26573e+00);
refforces[323] = Vec3(-8.67193e-02, -3.94828e+00, -8.97127e-01);
refforces[324] = Vec3( 6.25833e+01, -2.31957e+01, 8.66089e+01);
refforces[325] = Vec3( 2.49809e+00, -7.64197e-01, -1.27775e+00);
refforces[326] = Vec3( 2.11019e-01, 7.81764e-01, -1.23664e+00);
refforces[327] = Vec3( 2.04801e+01, 3.14002e+01, 6.96727e+01);
refforces[328] = Vec3(-7.99932e-01, 4.35586e+00, -8.77957e-01);
refforces[329] = Vec3(-2.87129e+00, -1.02321e+00, -1.42702e+00);
refforces[330] = Vec3(-6.36347e+01, -3.58428e+01, 4.52682e+01);
refforces[331] = Vec3( 1.32210e+00, -2.58500e+00, -1.43327e+00);
refforces[332] = Vec3( 1.52218e+00, 1.63513e+00, -2.29784e+00);
refforces[333] = Vec3( 4.36105e+00, 3.70776e+01, 6.46133e+01);
refforces[334] = Vec3(-1.19452e+00, -1.01252e+00, -1.43172e+00);
refforces[335] = Vec3( 4.34983e+00, -6.52342e-02, -1.33662e+00);
refforces[336] = Vec3( 1.13050e+01, 4.99187e+01, 7.16119e+01);
refforces[337] = Vec3( 2.29221e-01, 6.35843e-01, -3.59259e+00);
refforces[338] = Vec3( 1.65239e+00, 4.20995e-01, -1.42878e+00);
refforces[339] = Vec3(-1.79210e+01, 1.92423e+01, 1.77516e+01);
refforces[340] = Vec3(-2.91278e+00, 9.22214e-01, -8.41281e-01);
refforces[341] = Vec3( 2.96465e+00, 1.05962e+00, -6.85280e-01);
refforces[342] = Vec3( 5.19378e+01, -2.55266e+01, 3.63518e+01);
refforces[343] = Vec3(-1.13088e+00, 4.54600e-01, -1.30862e+00);
refforces[344] = Vec3(-2.05369e+00, -9.69459e-03, -2.69351e+00);
refforces[345] = Vec3(-4.22214e+01, 4.88282e+01, 3.76741e+01);
refforces[346] = Vec3( 3.46996e+00, 9.57280e-01, -7.60128e-01);
refforces[347] = Vec3( 7.62585e-01, 1.14548e+00, -8.06697e-01);
refforces[348] = Vec3(-2.35024e+01, -6.73585e+01, 6.49050e+01);
refforces[349] = Vec3(-1.58984e+00, -6.44551e-01, -2.37758e+00);
refforces[350] = Vec3( 1.32604e+00, -2.37576e+00, -1.54939e+00);
refforces[351] = Vec3( 2.57776e+01, -1.40743e+01, 2.06580e+01);
refforces[352] = Vec3( 4.24916e+00, 6.10665e-02, -8.19360e-01);
refforces[353] = Vec3(-7.94423e-01, -1.75764e-01, -3.51414e+00);
refforces[354] = Vec3(-1.24260e+01, 6.96334e-01, 5.97705e+01);
refforces[355] = Vec3(-3.38899e+00, 9.44919e-01, -1.25780e+00);
refforces[356] = Vec3( 6.81664e-01, 1.16965e+00, -2.34256e+00);
refforces[357] = Vec3( 5.15292e+01, 5.13086e+01, 6.16724e+01);
refforces[358] = Vec3(-1.04216e+00, 3.34685e+00, -1.33787e+00);
refforces[359] = Vec3(-9.57017e-01, -1.59610e-01, -4.31963e+00);
refforces[360] = Vec3(-5.88173e+01, 3.30524e+01, 6.23031e+01);
refforces[361] = Vec3( 9.35413e-01, -1.09829e+00, -4.65202e+00);
refforces[362] = Vec3( 6.95250e-01, -1.24375e+00, -6.50832e-01);
refforces[363] = Vec3( 1.64454e+01, 1.08071e+02, 3.76968e+01);
refforces[364] = Vec3(-4.25249e+00, -1.10053e+00, -7.56357e-01);
refforces[365] = Vec3( 1.17898e+00, -1.10215e+00, -8.21366e-01);
refforces[366] = Vec3(-5.20527e+00, 5.49522e+01, 4.55303e+01);
refforces[367] = Vec3(-7.98794e-01, -2.78246e+00, -1.27815e+00);
refforces[368] = Vec3(-1.02109e+00, -1.21921e+00, -1.26706e+00);
refforces[369] = Vec3( 3.05185e+00, 3.99846e+01, 5.39902e+01);
refforces[370] = Vec3( 1.93675e+00, -1.28986e+00, -1.21655e+00);
refforces[371] = Vec3(-4.14952e+00, -1.06509e+00, -9.52154e-01);
refforces[372] = Vec3( 6.06000e+01, 2.50872e+01, 4.29623e+01);
refforces[373] = Vec3(-3.50284e+00, -1.47848e+00, -7.98049e-01);
refforces[374] = Vec3(-8.66087e-01, -1.73056e+00, -6.59554e-01);
// Find the exclusion information
vector<set<int> > exclusions(NATOMS);
......@@ -796,11 +1689,15 @@ void test_water125_dpme_vs_long_cutoff_with_exclusions() {
}
}
refenergy *= 0.5;
// For this test the reference energy is -294.078 kJ/mol, while the difference between DPME and 30A cutoffs
// is just 0.064 kJ/mol. The difference is due to the fact that arithmetic mean combination rules are used
// up to the cutoff, while the reciprocal space uses the geometric mean. See DOI: 10.1021/acs.jctc.5b00726
ASSERT_EQUAL_TOL(refenergy, energy, 5E-3);
ASSERT_EQUAL_TOL(refenergy, energy, 5E-4);
ASSERT_EQUAL_TOL(gromacs_energy, energy, 5E-5);
for(int n = 0; n < NATOMS; ++n)
ASSERT_EQUAL_VEC(refforces[n], forces[n], 5E-5);
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment