Commit 806232c3 authored by Peter Eastman's avatar Peter Eastman
Browse files

Fixed a test case that was failing, and enhanced several others

parent c4933b5e
...@@ -131,6 +131,7 @@ void testConstraints() { ...@@ -131,6 +131,7 @@ void testConstraints() {
CudaPlatform platform; CudaPlatform platform;
System system(numParticles, numConstraints); System system(numParticles, numConstraints);
BrownianIntegrator integrator(temp, 2.0, 0.001); BrownianIntegrator integrator(temp, 2.0, 0.001);
integrator.setConstraintTolerance(1e-5);
NonbondedForce* forceField = new NonbondedForce(numParticles, 0); NonbondedForce* forceField = new NonbondedForce(numParticles, 0);
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.setParticleMass(i, 10.0); system.setParticleMass(i, 10.0);
...@@ -161,7 +162,7 @@ void testConstraints() { ...@@ -161,7 +162,7 @@ void testConstraints() {
Vec3 p1 = state.getPositions()[particle1]; Vec3 p1 = state.getPositions()[particle1];
Vec3 p2 = state.getPositions()[particle2]; Vec3 p2 = state.getPositions()[particle2];
double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2]));
ASSERT_EQUAL_TOL(distance, dist, 2e-4); ASSERT_EQUAL_TOL(distance, dist, 2e-5);
} }
integrator.step(1); integrator.step(1);
} }
......
...@@ -107,7 +107,7 @@ void testForce() { ...@@ -107,7 +107,7 @@ void testForce() {
norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2];
} }
norm = std::sqrt(norm); norm = std::sqrt(norm);
const double delta = 1e-3; const double delta = 1e-2;
double step = delta/norm; double step = delta/norm;
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
Vec3 p = positions[i]; Vec3 p = positions[i];
...@@ -119,7 +119,7 @@ void testForce() { ...@@ -119,7 +119,7 @@ void testForce() {
// See whether the potential energy changed by the expected amount. // See whether the potential energy changed by the expected amount.
State state2 = context.getState(State::Energy); State state2 = context.getState(State::Energy);
ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state.getPotentialEnergy())/delta, 0.01) ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state.getPotentialEnergy())/delta, 0.02)
} }
int main() { int main() {
......
...@@ -136,6 +136,7 @@ void testConstraints() { ...@@ -136,6 +136,7 @@ void testConstraints() {
CudaPlatform platform; CudaPlatform platform;
System system(numParticles, numConstraints); System system(numParticles, numConstraints);
LangevinIntegrator integrator(temp, 2.0, 0.01); LangevinIntegrator integrator(temp, 2.0, 0.01);
integrator.setConstraintTolerance(1e-5);
NonbondedForce* forceField = new NonbondedForce(numParticles, 0); NonbondedForce* forceField = new NonbondedForce(numParticles, 0);
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.setParticleMass(i, 10.0); system.setParticleMass(i, 10.0);
...@@ -166,7 +167,7 @@ void testConstraints() { ...@@ -166,7 +167,7 @@ void testConstraints() {
Vec3 p1 = state.getPositions()[particle1]; Vec3 p1 = state.getPositions()[particle1];
Vec3 p2 = state.getPositions()[particle2]; Vec3 p2 = state.getPositions()[particle2];
double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2]));
ASSERT_EQUAL_TOL(distance, dist, 2e-4); ASSERT_EQUAL_TOL(distance, dist, 2e-5);
} }
integrator.step(1); integrator.step(1);
} }
......
...@@ -92,6 +92,7 @@ void testConstraints() { ...@@ -92,6 +92,7 @@ void testConstraints() {
CudaPlatform platform; CudaPlatform platform;
System system(numParticles, numConstraints); System system(numParticles, numConstraints);
VerletIntegrator integrator(0.001); VerletIntegrator integrator(0.001);
integrator.setConstraintTolerance(1e-5);
NonbondedForce* forceField = new NonbondedForce(numParticles, 0); NonbondedForce* forceField = new NonbondedForce(numParticles, 0);
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.setParticleMass(i, 10.0); system.setParticleMass(i, 10.0);
...@@ -123,7 +124,7 @@ void testConstraints() { ...@@ -123,7 +124,7 @@ void testConstraints() {
Vec3 p1 = state.getPositions()[particle1]; Vec3 p1 = state.getPositions()[particle1];
Vec3 p2 = state.getPositions()[particle2]; Vec3 p2 = state.getPositions()[particle2];
double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2]));
ASSERT_EQUAL_TOL(distance, dist, 2e-4); ASSERT_EQUAL_TOL(distance, dist, 2e-5);
} }
double energy = state.getKineticEnergy()+state.getPotentialEnergy(); double energy = state.getKineticEnergy()+state.getPotentialEnergy();
if (i == 1) if (i == 1)
......
...@@ -128,6 +128,7 @@ void testConstraints() { ...@@ -128,6 +128,7 @@ void testConstraints() {
ReferencePlatform platform; ReferencePlatform platform;
System system(numParticles, numParticles-1); System system(numParticles, numParticles-1);
BrownianIntegrator integrator(temp, 2.0, 0.001); BrownianIntegrator integrator(temp, 2.0, 0.001);
integrator.setConstraintTolerance(1e-5);
NonbondedForce* forceField = new NonbondedForce(numParticles, 0); NonbondedForce* forceField = new NonbondedForce(numParticles, 0);
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.setParticleMass(i, 10.0); system.setParticleMass(i, 10.0);
...@@ -155,7 +156,7 @@ void testConstraints() { ...@@ -155,7 +156,7 @@ void testConstraints() {
Vec3 p1 = state.getPositions()[j]; Vec3 p1 = state.getPositions()[j];
Vec3 p2 = state.getPositions()[j+1]; Vec3 p2 = state.getPositions()[j+1];
double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2]));
ASSERT_EQUAL_TOL(1.0, dist, 2e-4); ASSERT_EQUAL_TOL(1.0, dist, 2e-5);
} }
integrator.step(1); integrator.step(1);
} }
......
...@@ -135,6 +135,7 @@ void testConstraints() { ...@@ -135,6 +135,7 @@ void testConstraints() {
ReferencePlatform platform; ReferencePlatform platform;
System system(numParticles, numParticles-1); System system(numParticles, numParticles-1);
LangevinIntegrator integrator(temp, 2.0, 0.01); LangevinIntegrator integrator(temp, 2.0, 0.01);
integrator.setConstraintTolerance(1e-5);
NonbondedForce* forceField = new NonbondedForce(numParticles, 0); NonbondedForce* forceField = new NonbondedForce(numParticles, 0);
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.setParticleMass(i, 10.0); system.setParticleMass(i, 10.0);
...@@ -162,7 +163,7 @@ void testConstraints() { ...@@ -162,7 +163,7 @@ void testConstraints() {
Vec3 p1 = state.getPositions()[j]; Vec3 p1 = state.getPositions()[j];
Vec3 p2 = state.getPositions()[j+1]; Vec3 p2 = state.getPositions()[j+1];
double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2]));
ASSERT_EQUAL_TOL(1.0, dist, 2e-4); ASSERT_EQUAL_TOL(1.0, dist, 2e-5);
} }
integrator.step(1); integrator.step(1);
} }
......
...@@ -91,6 +91,7 @@ void testConstraints() { ...@@ -91,6 +91,7 @@ void testConstraints() {
ReferencePlatform platform; ReferencePlatform platform;
System system(numParticles, numParticles-1); System system(numParticles, numParticles-1);
VerletIntegrator integrator(0.002); VerletIntegrator integrator(0.002);
integrator.setConstraintTolerance(1e-5);
NonbondedForce* forceField = new NonbondedForce(numParticles, 0); NonbondedForce* forceField = new NonbondedForce(numParticles, 0);
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.setParticleMass(i, 10.0); system.setParticleMass(i, 10.0);
...@@ -119,7 +120,7 @@ void testConstraints() { ...@@ -119,7 +120,7 @@ void testConstraints() {
Vec3 p1 = state.getPositions()[j]; Vec3 p1 = state.getPositions()[j];
Vec3 p2 = state.getPositions()[j+1]; Vec3 p2 = state.getPositions()[j+1];
double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2]));
ASSERT_EQUAL_TOL(1.0, dist, 2e-4); ASSERT_EQUAL_TOL(1.0, dist, 2e-5);
} }
double energy = state.getKineticEnergy()+state.getPotentialEnergy(); double energy = state.getKineticEnergy()+state.getPotentialEnergy();
if (i == 1) if (i == 1)
......
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