Commit 0529f325 authored by Peter Eastman's avatar Peter Eastman
Browse files

Modified some stochastic test cases to fail less often

parent 8e995a20
...@@ -54,9 +54,9 @@ void testTemperature() { ...@@ -54,9 +54,9 @@ void testTemperature() {
const int numParticles = 8; const int numParticles = 8;
const double temp = 100.0; const double temp = 100.0;
const double collisionFreq = 10.0; const double collisionFreq = 10.0;
const int numSteps = 10000; const int numSteps = 5000;
System system; System system;
VerletIntegrator integrator(0.005); VerletIntegrator integrator(0.003);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.addParticle(2.0); system.addParticle(2.0);
...@@ -70,6 +70,7 @@ void testTemperature() { ...@@ -70,6 +70,7 @@ void testTemperature() {
for (int i = 0; i < numParticles; ++i) for (int i = 0; i < numParticles; ++i)
positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2));
context.setPositions(positions); context.setPositions(positions);
context.setVelocitiesToTemperature(temp);
// Let it equilibrate. // Let it equilibrate.
...@@ -81,20 +82,20 @@ void testTemperature() { ...@@ -81,20 +82,20 @@ void testTemperature() {
for (int i = 0; i < numSteps; ++i) { for (int i = 0; i < numSteps; ++i) {
State state = context.getState(State::Energy); State state = context.getState(State::Energy);
ke += state.getKineticEnergy(); ke += state.getKineticEnergy();
integrator.step(1); integrator.step(10);
} }
ke /= numSteps; ke /= numSteps;
double expected = 0.5*numParticles*3*BOLTZ*temp; double expected = 0.5*numParticles*3*BOLTZ*temp;
ASSERT_USUALLY_EQUAL_TOL(expected, ke, 6/std::sqrt((double) numSteps)); ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1);
} }
void testConstraints() { void testConstraints() {
const int numParticles = 8; const int numParticles = 8;
const double temp = 100.0; const double temp = 100.0;
const double collisionFreq = 10.0; const double collisionFreq = 10.0;
const int numSteps = 10000; const int numSteps = 15000;
System system; System system;
VerletIntegrator integrator(0.005); VerletIntegrator integrator(0.004);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.addParticle(2.0); system.addParticle(2.0);
...@@ -122,10 +123,11 @@ void testConstraints() { ...@@ -122,10 +123,11 @@ void testConstraints() {
positions[6] = Vec3(0, 1, 1); positions[6] = Vec3(0, 1, 1);
positions[7] = Vec3(0, 0, 1); positions[7] = Vec3(0, 0, 1);
context.setPositions(positions); context.setPositions(positions);
context.setVelocitiesToTemperature(temp);
// Let it equilibrate. // Let it equilibrate.
integrator.step(10000); integrator.step(5000);
// Now run it for a while and see if the temperature is correct. // Now run it for a while and see if the temperature is correct.
...@@ -137,7 +139,7 @@ void testConstraints() { ...@@ -137,7 +139,7 @@ void testConstraints() {
} }
ke /= numSteps; ke /= numSteps;
double expected = 0.5*(numParticles*3-system.getNumConstraints())*BOLTZ*temp; double expected = 0.5*(numParticles*3-system.getNumConstraints())*BOLTZ*temp;
ASSERT_USUALLY_EQUAL_TOL(expected, ke, 6/std::sqrt((double) numSteps)); ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1);
} }
void testRandomSeed() { void testRandomSeed() {
......
...@@ -99,7 +99,7 @@ void testTemperature() { ...@@ -99,7 +99,7 @@ void testTemperature() {
const int numParticles = 8; const int numParticles = 8;
const double temp = 100.0; const double temp = 100.0;
System system; System system;
VariableLangevinIntegrator integrator(temp, 5.0, 1e-4); VariableLangevinIntegrator integrator(temp, 5.0, 5e-5);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.addParticle(2.0); system.addParticle(2.0);
...@@ -111,20 +111,21 @@ void testTemperature() { ...@@ -111,20 +111,21 @@ void testTemperature() {
for (int i = 0; i < numParticles; ++i) for (int i = 0; i < numParticles; ++i)
positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2));
context.setPositions(positions); context.setPositions(positions);
context.setVelocitiesToTemperature(temp);
// Let it equilibrate. // Let it equilibrate.
integrator.step(10000); integrator.step(5000);
// Now run it for a while and see if the temperature is correct. // Now run it for a while and see if the temperature is correct.
double ke = 0.0; double ke = 0.0;
for (int i = 0; i < 1000; ++i) { for (int i = 0; i < 5000; ++i) {
State state = context.getState(State::Energy); State state = context.getState(State::Energy);
ke += state.getKineticEnergy(); ke += state.getKineticEnergy();
integrator.step(5); integrator.step(5);
} }
ke /= 1000; ke /= 5000;
double expected = 0.5*numParticles*3*BOLTZ*temp; double expected = 0.5*numParticles*3*BOLTZ*temp;
ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1); ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1);
} }
...@@ -276,13 +277,13 @@ void testArgonBox() { ...@@ -276,13 +277,13 @@ void testArgonBox() {
// Make sure the temperature is correct. // Make sure the temperature is correct.
double ke = 0.0; double ke = 0.0;
for (int i = 0; i < 400; ++i) { for (int i = 0; i < 2000; ++i) {
double t = 2.0 + 0.01 * (i + 1); double t = 2.0 + 0.01 * (i + 1);
integrator.stepTo(t); integrator.stepTo(t);
State state = context.getState(State::Energy); State state = context.getState(State::Energy);
ke += state.getKineticEnergy(); ke += state.getKineticEnergy();
} }
ke /= 400; ke /= 2000;
double expected = 1.5 * numParticles * BOLTZ * temp; double expected = 1.5 * numParticles * BOLTZ * temp;
ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.01); ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.01);
} }
......
...@@ -54,9 +54,9 @@ void testTemperature() { ...@@ -54,9 +54,9 @@ void testTemperature() {
const int numParticles = 8; const int numParticles = 8;
const double temp = 100.0; const double temp = 100.0;
const double collisionFreq = 10.0; const double collisionFreq = 10.0;
const int numSteps = 10000; const int numSteps = 5000;
System system; System system;
VerletIntegrator integrator(0.005); VerletIntegrator integrator(0.003);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.addParticle(2.0); system.addParticle(2.0);
...@@ -70,6 +70,7 @@ void testTemperature() { ...@@ -70,6 +70,7 @@ void testTemperature() {
for (int i = 0; i < numParticles; ++i) for (int i = 0; i < numParticles; ++i)
positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2));
context.setPositions(positions); context.setPositions(positions);
context.setVelocitiesToTemperature(temp);
// Let it equilibrate. // Let it equilibrate.
...@@ -81,20 +82,20 @@ void testTemperature() { ...@@ -81,20 +82,20 @@ void testTemperature() {
for (int i = 0; i < numSteps; ++i) { for (int i = 0; i < numSteps; ++i) {
State state = context.getState(State::Energy); State state = context.getState(State::Energy);
ke += state.getKineticEnergy(); ke += state.getKineticEnergy();
integrator.step(1); integrator.step(10);
} }
ke /= numSteps; ke /= numSteps;
double expected = 0.5*numParticles*3*BOLTZ*temp; double expected = 0.5*numParticles*3*BOLTZ*temp;
ASSERT_USUALLY_EQUAL_TOL(expected, ke, 6/std::sqrt((double) numSteps)); ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1);
} }
void testConstraints() { void testConstraints() {
const int numParticles = 8; const int numParticles = 8;
const double temp = 100.0; const double temp = 100.0;
const double collisionFreq = 10.0; const double collisionFreq = 10.0;
const int numSteps = 10000; const int numSteps = 15000;
System system; System system;
VerletIntegrator integrator(0.005); VerletIntegrator integrator(0.004);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.addParticle(2.0); system.addParticle(2.0);
...@@ -122,10 +123,11 @@ void testConstraints() { ...@@ -122,10 +123,11 @@ void testConstraints() {
positions[6] = Vec3(0, 1, 1); positions[6] = Vec3(0, 1, 1);
positions[7] = Vec3(0, 0, 1); positions[7] = Vec3(0, 0, 1);
context.setPositions(positions); context.setPositions(positions);
context.setVelocitiesToTemperature(temp);
// Let it equilibrate. // Let it equilibrate.
integrator.step(10000); integrator.step(5000);
// Now run it for a while and see if the temperature is correct. // Now run it for a while and see if the temperature is correct.
...@@ -137,7 +139,7 @@ void testConstraints() { ...@@ -137,7 +139,7 @@ void testConstraints() {
} }
ke /= numSteps; ke /= numSteps;
double expected = 0.5*(numParticles*3-system.getNumConstraints())*BOLTZ*temp; double expected = 0.5*(numParticles*3-system.getNumConstraints())*BOLTZ*temp;
ASSERT_USUALLY_EQUAL_TOL(expected, ke, 6/std::sqrt((double) numSteps)); ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1);
} }
void testRandomSeed() { void testRandomSeed() {
......
...@@ -99,7 +99,7 @@ void testTemperature() { ...@@ -99,7 +99,7 @@ void testTemperature() {
const int numParticles = 8; const int numParticles = 8;
const double temp = 100.0; const double temp = 100.0;
System system; System system;
VariableLangevinIntegrator integrator(temp, 5.0, 1e-4); VariableLangevinIntegrator integrator(temp, 5.0, 5e-5);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.addParticle(2.0); system.addParticle(2.0);
...@@ -111,20 +111,21 @@ void testTemperature() { ...@@ -111,20 +111,21 @@ void testTemperature() {
for (int i = 0; i < numParticles; ++i) for (int i = 0; i < numParticles; ++i)
positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2));
context.setPositions(positions); context.setPositions(positions);
context.setVelocitiesToTemperature(temp);
// Let it equilibrate. // Let it equilibrate.
integrator.step(10000); integrator.step(5000);
// Now run it for a while and see if the temperature is correct. // Now run it for a while and see if the temperature is correct.
double ke = 0.0; double ke = 0.0;
for (int i = 0; i < 1000; ++i) { for (int i = 0; i < 5000; ++i) {
State state = context.getState(State::Energy); State state = context.getState(State::Energy);
ke += state.getKineticEnergy(); ke += state.getKineticEnergy();
integrator.step(5); integrator.step(5);
} }
ke /= 1000; ke /= 5000;
double expected = 0.5*numParticles*3*BOLTZ*temp; double expected = 0.5*numParticles*3*BOLTZ*temp;
ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1); ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1);
} }
...@@ -276,13 +277,13 @@ void testArgonBox() { ...@@ -276,13 +277,13 @@ void testArgonBox() {
// Make sure the temperature is correct. // Make sure the temperature is correct.
double ke = 0.0; double ke = 0.0;
for (int i = 0; i < 400; ++i) { for (int i = 0; i < 2000; ++i) {
double t = 2.0 + 0.01 * (i + 1); double t = 2.0 + 0.01 * (i + 1);
integrator.stepTo(t); integrator.stepTo(t);
State state = context.getState(State::Energy); State state = context.getState(State::Energy);
ke += state.getKineticEnergy(); ke += state.getKineticEnergy();
} }
ke /= 400; ke /= 2000;
double expected = 1.5 * numParticles * BOLTZ * temp; double expected = 1.5 * numParticles * BOLTZ * temp;
ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.01); ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.01);
} }
......
...@@ -52,10 +52,10 @@ void testTemperature() { ...@@ -52,10 +52,10 @@ void testTemperature() {
const int numParticles = 8; const int numParticles = 8;
const double temp = 100.0; const double temp = 100.0;
const double collisionFreq = 10.0; const double collisionFreq = 10.0;
const int numSteps = 10000; const int numSteps = 5000;
ReferencePlatform platform; ReferencePlatform platform;
System system; System system;
VerletIntegrator integrator(0.005); VerletIntegrator integrator(0.003);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.addParticle(2.0); system.addParticle(2.0);
...@@ -69,6 +69,7 @@ void testTemperature() { ...@@ -69,6 +69,7 @@ void testTemperature() {
for (int i = 0; i < numParticles; ++i) for (int i = 0; i < numParticles; ++i)
positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2));
context.setPositions(positions); context.setPositions(positions);
context.setVelocitiesToTemperature(temp);
// Let it equilibrate. // Let it equilibrate.
...@@ -80,21 +81,21 @@ void testTemperature() { ...@@ -80,21 +81,21 @@ void testTemperature() {
for (int i = 0; i < numSteps; ++i) { for (int i = 0; i < numSteps; ++i) {
State state = context.getState(State::Energy); State state = context.getState(State::Energy);
ke += state.getKineticEnergy(); ke += state.getKineticEnergy();
integrator.step(1); integrator.step(10);
} }
ke /= numSteps; ke /= numSteps;
double expected = 0.5*numParticles*3*BOLTZ*temp; double expected = 0.5*numParticles*3*BOLTZ*temp;
ASSERT_USUALLY_EQUAL_TOL(expected, ke, 6/std::sqrt((double) numSteps)); ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1);
} }
void testConstraints() { void testConstraints() {
const int numParticles = 8; const int numParticles = 8;
const double temp = 100.0; const double temp = 100.0;
const double collisionFreq = 10.0; const double collisionFreq = 10.0;
const int numSteps = 10000; const int numSteps = 15000;
ReferencePlatform platform; ReferencePlatform platform;
System system; System system;
VerletIntegrator integrator(0.005); VerletIntegrator integrator(0.004);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.addParticle(2.0); system.addParticle(2.0);
...@@ -122,10 +123,11 @@ void testConstraints() { ...@@ -122,10 +123,11 @@ void testConstraints() {
positions[6] = Vec3(0, 1, 1); positions[6] = Vec3(0, 1, 1);
positions[7] = Vec3(0, 0, 1); positions[7] = Vec3(0, 0, 1);
context.setPositions(positions); context.setPositions(positions);
context.setVelocitiesToTemperature(temp);
// Let it equilibrate. // Let it equilibrate.
integrator.step(10000); integrator.step(5000);
// Now run it for a while and see if the temperature is correct. // Now run it for a while and see if the temperature is correct.
...@@ -137,7 +139,7 @@ void testConstraints() { ...@@ -137,7 +139,7 @@ void testConstraints() {
} }
ke /= numSteps; ke /= numSteps;
double expected = 0.5*(numParticles*3-system.getNumConstraints())*BOLTZ*temp; double expected = 0.5*(numParticles*3-system.getNumConstraints())*BOLTZ*temp;
ASSERT_USUALLY_EQUAL_TOL(expected, ke, 6/std::sqrt((double) numSteps)); ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1);
} }
void testRandomSeed() { void testRandomSeed() {
......
...@@ -99,7 +99,7 @@ void testTemperature() { ...@@ -99,7 +99,7 @@ void testTemperature() {
const double temp = 100.0; const double temp = 100.0;
ReferencePlatform platform; ReferencePlatform platform;
System system; System system;
VariableLangevinIntegrator integrator(temp, 5.0, 1e-4); VariableLangevinIntegrator integrator(temp, 5.0, 5e-5);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.addParticle(2.0); system.addParticle(2.0);
...@@ -111,20 +111,21 @@ void testTemperature() { ...@@ -111,20 +111,21 @@ void testTemperature() {
for (int i = 0; i < numParticles; ++i) for (int i = 0; i < numParticles; ++i)
positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2));
context.setPositions(positions); context.setPositions(positions);
context.setVelocitiesToTemperature(temp);
// Let it equilibrate. // Let it equilibrate.
integrator.step(10000); integrator.step(5000);
// Now run it for a while and see if the temperature is correct. // Now run it for a while and see if the temperature is correct.
double ke = 0.0; double ke = 0.0;
for (int i = 0; i < 1000; ++i) { for (int i = 0; i < 5000; ++i) {
State state = context.getState(State::Energy); State state = context.getState(State::Energy);
ke += state.getKineticEnergy(); ke += state.getKineticEnergy();
integrator.step(5); integrator.step(5);
} }
ke /= 1000; ke /= 5000;
double expected = 0.5*numParticles*3*BOLTZ*temp; double expected = 0.5*numParticles*3*BOLTZ*temp;
ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1); ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1);
} }
...@@ -279,13 +280,13 @@ void testArgonBox() { ...@@ -279,13 +280,13 @@ void testArgonBox() {
// Make sure the temperature is correct. // Make sure the temperature is correct.
double ke = 0.0; double ke = 0.0;
for (int i = 0; i < 400; ++i) { for (int i = 0; i < 2000; ++i) {
double t = 2.0 + 0.01 * (i + 1); double t = 2.0 + 0.01 * (i + 1);
integrator.stepTo(t); integrator.stepTo(t);
State state = context.getState(State::Energy); State state = context.getState(State::Energy);
ke += state.getKineticEnergy(); ke += state.getKineticEnergy();
} }
ke /= 400; ke /= 2000;
double expected = 1.5 * numParticles * BOLTZ * temp; double expected = 1.5 * numParticles * BOLTZ * temp;
ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.01); ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.01);
} }
......
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