Commit 64493da6 authored by Peter Eastman's avatar Peter Eastman
Browse files

Modified the API for lots of classes so that the number of...

Modified the API for lots of classes so that the number of particles/bonds/etc. need not be specified in the constructor.
parent 29e3fa57
...@@ -52,13 +52,13 @@ const double TOL = 1e-5; ...@@ -52,13 +52,13 @@ const double TOL = 1e-5;
void testSingleBond() { void testSingleBond() {
ReferencePlatform platform; ReferencePlatform platform;
System system(2, 0); System system;
system.setParticleMass(0, 2.0); system.addParticle(2.0);
system.setParticleMass(1, 2.0); system.addParticle(2.0);
double dt = 0.01; double dt = 0.01;
BrownianIntegrator integrator(0, 0.1, dt); BrownianIntegrator integrator(0, 0.1, dt);
HarmonicBondForce* forceField = new HarmonicBondForce(1); HarmonicBondForce* forceField = new HarmonicBondForce();
forceField->setBondParameters(0, 0, 1, 1.5, 1); forceField->addBond(0, 1, 1.5, 1);
system.addForce(forceField); system.addForce(forceField);
OpenMMContext context(system, integrator, platform); OpenMMContext context(system, integrator, platform);
vector<Vec3> positions(2); vector<Vec3> positions(2);
...@@ -89,14 +89,14 @@ void testTemperature() { ...@@ -89,14 +89,14 @@ void testTemperature() {
const int numBonds = numParticles-1; const int numBonds = numParticles-1;
const double temp = 10.0; const double temp = 10.0;
ReferencePlatform platform; ReferencePlatform platform;
System system(numParticles, 0); System system;
BrownianIntegrator integrator(temp, 2.0, 0.01); BrownianIntegrator integrator(temp, 2.0, 0.01);
HarmonicBondForce* forceField = new HarmonicBondForce(numBonds); HarmonicBondForce* forceField = new HarmonicBondForce();
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.setParticleMass(i, 2.0); system.addParticle(2.0);
} }
for (int i = 0; i < numBonds; ++i) for (int i = 0; i < numBonds; ++i)
forceField->setBondParameters(i, i, i+1, 1.0, 5.0); forceField->addBond(i, i+1, 1.0, 5.0);
system.addForce(forceField); system.addForce(forceField);
OpenMMContext context(system, integrator, platform); OpenMMContext context(system, integrator, platform);
vector<Vec3> positions(numParticles); vector<Vec3> positions(numParticles);
...@@ -126,16 +126,16 @@ void testConstraints() { ...@@ -126,16 +126,16 @@ void testConstraints() {
const int numParticles = 8; const int numParticles = 8;
const double temp = 100.0; const double temp = 100.0;
ReferencePlatform platform; ReferencePlatform platform;
System system(numParticles, numParticles-1); System system;
BrownianIntegrator integrator(temp, 2.0, 0.001); BrownianIntegrator integrator(temp, 2.0, 0.001);
integrator.setConstraintTolerance(1e-5); integrator.setConstraintTolerance(1e-5);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.setParticleMass(i, 10.0); system.addParticle(10.0);
forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0);
} }
for (int i = 0; i < numParticles-1; ++i) for (int i = 0; i < numParticles-1; ++i)
system.setConstraintParameters(i, i, i+1, 1.0); system.addConstraint(i, i+1, 1.0);
system.addForce(forceField); system.addForce(forceField);
OpenMMContext context(system, integrator, platform); OpenMMContext context(system, integrator, platform);
vector<Vec3> positions(numParticles); vector<Vec3> positions(numParticles);
...@@ -167,11 +167,11 @@ void testRandomSeed() { ...@@ -167,11 +167,11 @@ void testRandomSeed() {
const double temp = 100.0; const double temp = 100.0;
const double collisionFreq = 10.0; const double collisionFreq = 10.0;
ReferencePlatform platform; ReferencePlatform platform;
System system(numParticles, 0); System system;
BrownianIntegrator integrator(temp, 2.0, 0.001); BrownianIntegrator integrator(temp, 2.0, 0.001);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.setParticleMass(i, 2.0); system.addParticle(2.0);
forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0);
} }
system.addForce(forceField); system.addForce(forceField);
......
...@@ -64,14 +64,14 @@ void testMotionRemoval() { ...@@ -64,14 +64,14 @@ void testMotionRemoval() {
const double temp = 100.0; const double temp = 100.0;
const double collisionFreq = 10.0; const double collisionFreq = 10.0;
ReferencePlatform platform; ReferencePlatform platform;
System system(numParticles, 0); System system;
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
HarmonicBondForce* bonds = new HarmonicBondForce(1); HarmonicBondForce* bonds = new HarmonicBondForce();
bonds->setBondParameters(0, 2, 3, 2.0, 0.5); bonds->addBond(2, 3, 2.0, 0.5);
system.addForce(bonds); system.addForce(bonds);
NonbondedForce* nonbonded = new NonbondedForce(); NonbondedForce* nonbonded = new NonbondedForce();
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.setParticleMass(i, i+1); system.addParticle(i+1);
nonbonded->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); nonbonded->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0);
} }
system.addForce(nonbonded); system.addForce(nonbonded);
......
...@@ -51,7 +51,9 @@ const double TOL = 1e-5; ...@@ -51,7 +51,9 @@ const double TOL = 1e-5;
void testEwald() { void testEwald() {
ReferencePlatform platform; ReferencePlatform platform;
System system(2, 0); System system;
system.addParticle(1.0);
system.addParticle(1.0);
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
NonbondedForce* nonbonded = new NonbondedForce(); NonbondedForce* nonbonded = new NonbondedForce();
nonbonded->addParticle(1.0, 1, 0); nonbonded->addParticle(1.0, 1, 0);
......
...@@ -52,11 +52,11 @@ const double TOL = 1e-5; ...@@ -52,11 +52,11 @@ const double TOL = 1e-5;
void testSingleParticle() { void testSingleParticle() {
ReferencePlatform platform; ReferencePlatform platform;
System system(1, 0); System system;
system.setParticleMass(0, 2.0); system.addParticle(2.0);
LangevinIntegrator integrator(0, 0.1, 0.01); LangevinIntegrator integrator(0, 0.1, 0.01);
GBSAOBCForce* forceField = new GBSAOBCForce(1); GBSAOBCForce* forceField = new GBSAOBCForce();
forceField->setParticleParameters(0, 0.5, 0.15, 1); forceField->addParticle(0.5, 0.15, 1);
system.addForce(forceField); system.addForce(forceField);
OpenMMContext context(system, integrator, platform); OpenMMContext context(system, integrator, platform);
vector<Vec3> positions(1); vector<Vec3> positions(1);
...@@ -73,13 +73,15 @@ void testSingleParticle() { ...@@ -73,13 +73,15 @@ void testSingleParticle() {
void testCutoffAndPeriodic() { void testCutoffAndPeriodic() {
ReferencePlatform platform; ReferencePlatform platform;
System system(2, 0); System system;
system.addParticle(1.0);
system.addParticle(1.0);
LangevinIntegrator integrator(0, 0.1, 0.01); LangevinIntegrator integrator(0, 0.1, 0.01);
GBSAOBCForce* gbsa = new GBSAOBCForce(2); GBSAOBCForce* gbsa = new GBSAOBCForce();
NonbondedForce* nonbonded = new NonbondedForce(); NonbondedForce* nonbonded = new NonbondedForce();
gbsa->setParticleParameters(0, -1, 0.15, 1); gbsa->addParticle(-1, 0.15, 1);
nonbonded->addParticle(-1, 1, 0); nonbonded->addParticle(-1, 1, 0);
gbsa->setParticleParameters(1, 1, 0.15, 1); gbsa->addParticle(1, 0.15, 1);
nonbonded->addParticle(1, 1, 0); nonbonded->addParticle(1, 1, 0);
const double cutoffDistance = 3.0; const double cutoffDistance = 3.0;
const double boxSize = 10.0; const double boxSize = 10.0;
...@@ -124,11 +126,13 @@ void testCutoffAndPeriodic() { ...@@ -124,11 +126,13 @@ void testCutoffAndPeriodic() {
void testForce() { void testForce() {
ReferencePlatform platform; ReferencePlatform platform;
const int numParticles = 10; const int numParticles = 10;
System system(numParticles, 0); System system;
LangevinIntegrator integrator(0, 0.1, 0.01); LangevinIntegrator integrator(0, 0.1, 0.01);
GBSAOBCForce* forceField = new GBSAOBCForce(numParticles); GBSAOBCForce* forceField = new GBSAOBCForce();
for (int i = 0; i < numParticles; ++i) for (int i = 0; i < numParticles; ++i) {
forceField->setParticleParameters(i, i%2 == 0 ? -1 : 1, 0.15, 1); system.addParticle(1.0);
forceField->addParticle(i%2 == 0 ? -1 : 1, 0.15, 1);
}
system.addForce(forceField); system.addForce(forceField);
OpenMMContext context(system, integrator, platform); OpenMMContext context(system, integrator, platform);
......
...@@ -54,16 +54,16 @@ const double TOL = 1e-5; ...@@ -54,16 +54,16 @@ const double TOL = 1e-5;
void testSingleParticle() { void testSingleParticle() {
ReferencePlatform platform; ReferencePlatform platform;
System system(1, 0); System system;
system.setParticleMass(0, 2.0); system.addParticle(2.0);
LangevinIntegrator integrator(0, 0.1, 0.01); LangevinIntegrator integrator(0, 0.1, 0.01);
GBVIForce* forceField = new GBVIForce(1); GBVIForce* forceField = new GBVIForce();
double charge = 0.0; double charge = 0.0;
double radius = 0.15; double radius = 0.15;
double gamma = 1.0; double gamma = 1.0;
forceField->setParticleParameters(0, charge, radius, gamma); forceField->addParticle(charge, radius, gamma);
system.addForce(forceField); system.addForce(forceField);
OpenMMContext context(system, integrator, platform); OpenMMContext context(system, integrator, platform);
...@@ -143,22 +143,22 @@ void testEnergyEthane() { ...@@ -143,22 +143,22 @@ void testEnergyEthane() {
ReferencePlatform platform; ReferencePlatform platform;
const int numParticles = 8; const int numParticles = 8;
System system(numParticles, 0); System system;
LangevinIntegrator integrator(0, 0.1, 0.01); LangevinIntegrator integrator(0, 0.1, 0.01);
//void HarmonicBondForce::getBondParameters(int index, int& particle1, int& particle2, double& length, double& k) //void HarmonicBondForce::getBondParameters(int index, int& particle1, int& particle2, double& length, double& k)
double C_HBondDistance = 0.1097; double C_HBondDistance = 0.1097;
double C_CBondDistance = 0.1504; double C_CBondDistance = 0.1504;
HarmonicBondForce* bonds = new HarmonicBondForce(7); HarmonicBondForce* bonds = new HarmonicBondForce();
bonds->setBondParameters(0, 0, 1, C_HBondDistance, 0.0); bonds->addBond(0, 1, C_HBondDistance, 0.0);
bonds->setBondParameters(1, 2, 1, C_HBondDistance, 0.0); bonds->addBond(2, 1, C_HBondDistance, 0.0);
bonds->setBondParameters(2, 3, 1, C_HBondDistance, 0.0); bonds->addBond(3, 1, C_HBondDistance, 0.0);
bonds->setBondParameters(3, 1, 4, C_CBondDistance, 0.0); bonds->addBond(1, 4, C_CBondDistance, 0.0);
bonds->setBondParameters(4, 5, 4, C_HBondDistance, 0.0); bonds->addBond(5, 4, C_HBondDistance, 0.0);
bonds->setBondParameters(5, 6, 4, C_HBondDistance, 0.0); bonds->addBond(6, 4, C_HBondDistance, 0.0);
bonds->setBondParameters(6, 7, 4, C_HBondDistance, 0.0); bonds->addBond(7, 4, C_HBondDistance, 0.0);
system.addForce(bonds); system.addForce(bonds);
...@@ -182,20 +182,22 @@ void testEnergyEthane() { ...@@ -182,20 +182,22 @@ void testEnergyEthane() {
int VI = 1; int VI = 1;
if( VI ){ if( VI ){
(void) fprintf( stderr, "Applying GB/VI\n" ); (void) fprintf( stderr, "Applying GB/VI\n" );
GBVIForce* forceField = new GBVIForce(numParticles); GBVIForce* forceField = new GBVIForce();
for( int i = 0; i < numParticles; i++ ){ for( int i = 0; i < numParticles; i++ ){
forceField->setParticleParameters(i, H_charge, H_radius, H_gamma); system.addParticle(1.0);
forceField->addParticle( H_charge, H_radius, H_gamma);
} }
forceField->setParticleParameters(1, C_charge, C_radius, C_gamma); forceField->setParticleParameters(1, C_charge, C_radius, C_gamma);
forceField->setParticleParameters(4, C_charge, C_radius, C_gamma); forceField->setParticleParameters(4, C_charge, C_radius, C_gamma);
system.addForce(forceField); system.addForce(forceField);
} else { } else {
(void) fprintf( stderr, "Applying GBSA OBC\n" ); (void) fprintf( stderr, "Applying GBSA OBC\n" );
GBSAOBCForce* forceField = new GBSAOBCForce(numParticles); GBSAOBCForce* forceField = new GBSAOBCForce();
double H_scale = 0.85; double H_scale = 0.85;
double C_scale = 0.72; double C_scale = 0.72;
for( int i = 0; i < numParticles; i++ ){ for( int i = 0; i < numParticles; i++ ){
forceField->setParticleParameters(i, H_charge, H_radius, H_scale ); system.addParticle(1.0);
forceField->addParticle(H_charge, H_radius, H_scale );
} }
forceField->setParticleParameters(1, C_charge, C_radius, C_scale); forceField->setParticleParameters(1, C_charge, C_radius, C_scale);
forceField->setParticleParameters(4, C_charge, C_radius, C_scale); forceField->setParticleParameters(4, C_charge, C_radius, C_scale);
...@@ -266,13 +268,15 @@ void testEnergyTwoParticle() { ...@@ -266,13 +268,15 @@ void testEnergyTwoParticle() {
ReferencePlatform platform; ReferencePlatform platform;
const int numParticles = 2; const int numParticles = 2;
System system(numParticles, 0); System system;
system.addParticle(1.0);
system.addParticle(1.0);
LangevinIntegrator integrator(0, 0.1, 0.01); LangevinIntegrator integrator(0, 0.1, 0.01);
//void HarmonicBondForce::getBondParameters(int index, int& particle1, int& particle2, double& length, double& k) //void HarmonicBondForce::getBondParameters(int index, int& particle1, int& particle2, double& length, double& k)
double C_HBondDistance = 3.0; double C_HBondDistance = 3.0;
HarmonicBondForce* bonds = new HarmonicBondForce(1); HarmonicBondForce* bonds = new HarmonicBondForce();
bonds->setBondParameters(0, 0, 1, C_HBondDistance, 0.0); bonds->addBond(0, 1, C_HBondDistance, 0.0);
system.addForce(bonds); system.addForce(bonds);
double C_radius, C_gamma, C_charge, H_radius, H_gamma, H_charge; double C_radius, C_gamma, C_charge, H_radius, H_gamma, H_charge;
...@@ -298,15 +302,15 @@ void testEnergyTwoParticle() { ...@@ -298,15 +302,15 @@ void testEnergyTwoParticle() {
int VI = 1; int VI = 1;
if( VI ){ if( VI ){
(void) fprintf( stderr, "Applying GB/VI\n" ); (void) fprintf( stderr, "Applying GB/VI\n" );
GBVIForce* forceField = new GBVIForce(numParticles); GBVIForce* forceField = new GBVIForce();
forceField->setParticleParameters(0, H_charge, H_radius, H_gamma); forceField->addParticle(H_charge, H_radius, H_gamma);
forceField->setParticleParameters(1, C_charge, C_radius, C_gamma); forceField->addParticle(C_charge, C_radius, C_gamma);
system.addForce(forceField); system.addForce(forceField);
} else { } else {
(void) fprintf( stderr, "Applying GBSA OBC\n" ); (void) fprintf( stderr, "Applying GBSA OBC\n" );
GBSAOBCForce* forceField = new GBSAOBCForce(numParticles); GBSAOBCForce* forceField = new GBSAOBCForce();
forceField->setParticleParameters(0, H_charge, H_radius, 1.0); forceField->addParticle(H_charge, H_radius, 1.0);
forceField->setParticleParameters(1, C_charge, C_radius, 1.0); forceField->addParticle(C_charge, C_radius, 1.0);
system.addForce(forceField); system.addForce(forceField);
} }
......
...@@ -50,11 +50,15 @@ const double TOL = 1e-5; ...@@ -50,11 +50,15 @@ const double TOL = 1e-5;
void testAngles() { void testAngles() {
ReferencePlatform platform; ReferencePlatform platform;
System system(4, 0); System system;
system.addParticle(1.0);
system.addParticle(1.0);
system.addParticle(1.0);
system.addParticle(1.0);
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
HarmonicAngleForce* forceField = new HarmonicAngleForce(2); HarmonicAngleForce* forceField = new HarmonicAngleForce();
forceField->setAngleParameters(0, 0, 1, 2, PI_M/3, 1.1); forceField->addAngle(0, 1, 2, PI_M/3, 1.1);
forceField->setAngleParameters(1, 1, 2, 3, PI_M/2, 1.2); forceField->addAngle(1, 2, 3, PI_M/2, 1.2);
system.addForce(forceField); system.addForce(forceField);
OpenMMContext context(system, integrator, platform); OpenMMContext context(system, integrator, platform);
vector<Vec3> positions(4); vector<Vec3> positions(4);
......
...@@ -50,11 +50,14 @@ const double TOL = 1e-5; ...@@ -50,11 +50,14 @@ const double TOL = 1e-5;
void testBonds() { void testBonds() {
ReferencePlatform platform; ReferencePlatform platform;
System system(3, 0); System system;
system.addParticle(1.0);
system.addParticle(1.0);
system.addParticle(1.0);
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
HarmonicBondForce* forceField = new HarmonicBondForce(2); HarmonicBondForce* forceField = new HarmonicBondForce();
forceField->setBondParameters(0, 0, 1, 1.5, 0.8); forceField->addBond(0, 1, 1.5, 0.8);
forceField->setBondParameters(1, 1, 2, 1.2, 0.7); forceField->addBond(1, 2, 1.2, 0.7);
system.addForce(forceField); system.addForce(forceField);
OpenMMContext context(system, integrator, platform); OpenMMContext context(system, integrator, platform);
vector<Vec3> positions(3); vector<Vec3> positions(3);
......
...@@ -48,9 +48,9 @@ const double TOL = 1e-5; ...@@ -48,9 +48,9 @@ const double TOL = 1e-5;
void testCalcKE() { void testCalcKE() {
ReferencePlatform platform; ReferencePlatform platform;
System system(4, 0); System system;
for (int i = 0; i < 4; ++i) for (int i = 0; i < 4; ++i)
system.setParticleMass(i, i+1); system.addParticle(i+1);
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
OpenMMContext context(system, integrator, platform); OpenMMContext context(system, integrator, platform);
vector<Vec3> velocities(4); vector<Vec3> velocities(4);
......
...@@ -52,12 +52,12 @@ const double TOL = 1e-5; ...@@ -52,12 +52,12 @@ const double TOL = 1e-5;
void testSingleBond() { void testSingleBond() {
ReferencePlatform platform; ReferencePlatform platform;
System system(2, 0); System system;
system.setParticleMass(0, 2.0); system.addParticle(2.0);
system.setParticleMass(1, 2.0); system.addParticle(2.0);
LangevinIntegrator integrator(0, 0.1, 0.01); LangevinIntegrator integrator(0, 0.1, 0.01);
HarmonicBondForce* forceField = new HarmonicBondForce(1); HarmonicBondForce* forceField = new HarmonicBondForce();
forceField->setBondParameters(0, 0, 1, 1.5, 1); forceField->addBond(0, 1, 1.5, 1);
system.addForce(forceField); system.addForce(forceField);
OpenMMContext context(system, integrator, platform); OpenMMContext context(system, integrator, platform);
vector<Vec3> positions(2); vector<Vec3> positions(2);
...@@ -98,11 +98,11 @@ void testTemperature() { ...@@ -98,11 +98,11 @@ void testTemperature() {
const int numParticles = 8; const int numParticles = 8;
const double temp = 100.0; const double temp = 100.0;
ReferencePlatform platform; ReferencePlatform platform;
System system(numParticles, 0); System system;
LangevinIntegrator integrator(temp, 2.0, 0.01); LangevinIntegrator integrator(temp, 2.0, 0.01);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.setParticleMass(i, 2.0); system.addParticle(2.0);
forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0);
} }
system.addForce(forceField); system.addForce(forceField);
...@@ -133,16 +133,16 @@ void testConstraints() { ...@@ -133,16 +133,16 @@ void testConstraints() {
const int numParticles = 8; const int numParticles = 8;
const double temp = 100.0; const double temp = 100.0;
ReferencePlatform platform; ReferencePlatform platform;
System system(numParticles, numParticles-1); System system;
LangevinIntegrator integrator(temp, 2.0, 0.01); LangevinIntegrator integrator(temp, 2.0, 0.01);
integrator.setConstraintTolerance(1e-5); integrator.setConstraintTolerance(1e-5);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.setParticleMass(i, 10.0); system.addParticle(10.0);
forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0);
} }
for (int i = 0; i < numParticles-1; ++i) for (int i = 0; i < numParticles-1; ++i)
system.setConstraintParameters(i, i, i+1, 1.0); system.addConstraint(i, i+1, 1.0);
system.addForce(forceField); system.addForce(forceField);
OpenMMContext context(system, integrator, platform); OpenMMContext context(system, integrator, platform);
vector<Vec3> positions(numParticles); vector<Vec3> positions(numParticles);
...@@ -174,11 +174,11 @@ void testRandomSeed() { ...@@ -174,11 +174,11 @@ void testRandomSeed() {
const double temp = 100.0; const double temp = 100.0;
const double collisionFreq = 10.0; const double collisionFreq = 10.0;
ReferencePlatform platform; ReferencePlatform platform;
System system(numParticles, 0); System system;
LangevinIntegrator integrator(temp, 2.0, 0.01); LangevinIntegrator integrator(temp, 2.0, 0.01);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.setParticleMass(i, 2.0); system.addParticle(2.0);
forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0);
} }
system.addForce(forceField); system.addForce(forceField);
......
...@@ -51,7 +51,9 @@ const double TOL = 1e-5; ...@@ -51,7 +51,9 @@ const double TOL = 1e-5;
void testCoulomb() { void testCoulomb() {
ReferencePlatform platform; ReferencePlatform platform;
System system(2, 0); System system;
system.addParticle(1.0);
system.addParticle(1.0);
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
forceField->addParticle(0.5, 1, 0); forceField->addParticle(0.5, 1, 0);
...@@ -72,7 +74,9 @@ void testCoulomb() { ...@@ -72,7 +74,9 @@ void testCoulomb() {
void testLJ() { void testLJ() {
ReferencePlatform platform; ReferencePlatform platform;
System system(2, 0); System system;
system.addParticle(1.0);
system.addParticle(1.0);
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
forceField->addParticle(0, 1.2, 1); forceField->addParticle(0, 1.2, 1);
...@@ -95,11 +99,13 @@ void testLJ() { ...@@ -95,11 +99,13 @@ void testLJ() {
void testExclusionsAnd14() { void testExclusionsAnd14() {
ReferencePlatform platform; ReferencePlatform platform;
System system(5, 0); System system;
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
NonbondedForce* nonbonded = new NonbondedForce(); NonbondedForce* nonbonded = new NonbondedForce();
for (int i = 0; i < 5; i++) for (int i = 0; i < 5; i++) {
system.addParticle(1.0);
nonbonded->addParticle(0, 1.5, 0); nonbonded->addParticle(0, 1.5, 0);
}
vector<pair<int, int> > bonds; vector<pair<int, int> > bonds;
bonds.push_back(pair<int, int>(0, 1)); bonds.push_back(pair<int, int>(0, 1));
bonds.push_back(pair<int, int>(1, 2)); bonds.push_back(pair<int, int>(1, 2));
...@@ -181,7 +187,10 @@ void testExclusionsAnd14() { ...@@ -181,7 +187,10 @@ void testExclusionsAnd14() {
void testCutoff() { void testCutoff() {
ReferencePlatform platform; ReferencePlatform platform;
System system(3, 0); System system;
system.addParticle(1.0);
system.addParticle(1.0);
system.addParticle(1.0);
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
forceField->addParticle(1.0, 1, 0); forceField->addParticle(1.0, 1, 0);
...@@ -214,11 +223,13 @@ void testCutoff() { ...@@ -214,11 +223,13 @@ void testCutoff() {
void testCutoff14() { void testCutoff14() {
ReferencePlatform platform; ReferencePlatform platform;
System system(5, 0); System system;
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
NonbondedForce* nonbonded = new NonbondedForce(); NonbondedForce* nonbonded = new NonbondedForce();
for (int i = 0; i < 5; i++) for (int i = 0; i < 5; i++) {
system.addParticle(1.0);
nonbonded->addParticle(0, 1.5, 0); nonbonded->addParticle(0, 1.5, 0);
}
nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic);
const double cutoff = 3.5; const double cutoff = 3.5;
nonbonded->setCutoffDistance(cutoff); nonbonded->setCutoffDistance(cutoff);
...@@ -309,7 +320,10 @@ void testCutoff14() { ...@@ -309,7 +320,10 @@ void testCutoff14() {
void testPeriodic() { void testPeriodic() {
ReferencePlatform platform; ReferencePlatform platform;
System system(3, 0); System system;
system.addParticle(1.0);
system.addParticle(1.0);
system.addParticle(1.0);
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
NonbondedForce* nonbonded = new NonbondedForce(); NonbondedForce* nonbonded = new NonbondedForce();
nonbonded->addParticle(1.0, 1, 0); nonbonded->addParticle(1.0, 1, 0);
......
...@@ -50,10 +50,14 @@ const double TOL = 1e-5; ...@@ -50,10 +50,14 @@ const double TOL = 1e-5;
void testPeriodicTorsions() { void testPeriodicTorsions() {
ReferencePlatform platform; ReferencePlatform platform;
System system(4, 0); System system;
system.addParticle(1.0);
system.addParticle(1.0);
system.addParticle(1.0);
system.addParticle(1.0);
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
PeriodicTorsionForce* forceField = new PeriodicTorsionForce(1); PeriodicTorsionForce* forceField = new PeriodicTorsionForce();
forceField->setTorsionParameters(0, 0, 1, 2, 3, 2, PI_M/3, 1.1); forceField->addTorsion(0, 1, 2, 3, 2, PI_M/3, 1.1);
system.addForce(forceField); system.addForce(forceField);
OpenMMContext context(system, integrator, platform); OpenMMContext context(system, integrator, platform);
vector<Vec3> positions(4); vector<Vec3> positions(4);
......
...@@ -50,10 +50,14 @@ const double TOL = 1e-5; ...@@ -50,10 +50,14 @@ const double TOL = 1e-5;
void testRBTorsions() { void testRBTorsions() {
ReferencePlatform platform; ReferencePlatform platform;
System system(4, 0); System system;
system.addParticle(1.0);
system.addParticle(1.0);
system.addParticle(1.0);
system.addParticle(1.0);
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
RBTorsionForce* forceField = new RBTorsionForce(1); RBTorsionForce* forceField = new RBTorsionForce();
forceField->setTorsionParameters(0, 0, 1, 2, 3, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6); forceField->addTorsion(0, 1, 2, 3, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6);
system.addForce(forceField); system.addForce(forceField);
OpenMMContext context(system, integrator, platform); OpenMMContext context(system, integrator, platform);
vector<Vec3> positions(4); vector<Vec3> positions(4);
......
...@@ -52,12 +52,12 @@ const double TOL = 1e-5; ...@@ -52,12 +52,12 @@ const double TOL = 1e-5;
void testSingleBond() { void testSingleBond() {
ReferencePlatform platform; ReferencePlatform platform;
System system(2, 0); System system;
system.setParticleMass(0, 2.0); system.addParticle(2.0);
system.setParticleMass(1, 2.0); system.addParticle(2.0);
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
HarmonicBondForce* forceField = new HarmonicBondForce(1); HarmonicBondForce* forceField = new HarmonicBondForce();
forceField->setBondParameters(0, 0, 1, 1.5, 1); forceField->addBond(0, 1, 1.5, 1);
system.addForce(forceField); system.addForce(forceField);
OpenMMContext context(system, integrator, platform); OpenMMContext context(system, integrator, platform);
vector<Vec3> positions(2); vector<Vec3> positions(2);
...@@ -89,16 +89,16 @@ void testConstraints() { ...@@ -89,16 +89,16 @@ void testConstraints() {
const int numParticles = 8; const int numParticles = 8;
const double temp = 100.0; const double temp = 100.0;
ReferencePlatform platform; ReferencePlatform platform;
System system(numParticles, numParticles-1); System system;
VerletIntegrator integrator(0.002); VerletIntegrator integrator(0.002);
integrator.setConstraintTolerance(1e-5); integrator.setConstraintTolerance(1e-5);
NonbondedForce* forceField = new NonbondedForce(); NonbondedForce* forceField = new NonbondedForce();
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
system.setParticleMass(i, 10.0); system.addParticle(10.0);
forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0);
} }
for (int i = 0; i < numParticles-1; ++i) for (int i = 0; i < numParticles-1; ++i)
system.setConstraintParameters(i, i, i+1, 1.0); system.addConstraint(i, i+1, 1.0);
system.addForce(forceField); system.addForce(forceField);
OpenMMContext context(system, integrator, platform); OpenMMContext context(system, integrator, platform);
vector<Vec3> positions(numParticles); vector<Vec3> positions(numParticles);
......
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