"plugins/drude/vscode:/vscode.git/clone" did not exist on "a24385093409749f137426cf1b05f9de7b79e76f"
Commit a9c75e52 authored by peastman's avatar peastman
Browse files

Merge pull request #776 from peastman/bug

Fixed bug in reference CustomCompoundBondForce
parents c66e086e 5ae844b2
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Biological Structures at Stanford, funded under the NIH Roadmap for * * Biological Structures at Stanford, funded under the NIH Roadmap for *
* Medical Research, grant U54 GM072970. See https://simtk.org. * * Medical Research, grant U54 GM072970. See https://simtk.org. *
* * * *
* Portions copyright (c) 2012 Stanford University and the Authors. * * Portions copyright (c) 2012-2015 Stanford University and the Authors. *
* Authors: Peter Eastman * * Authors: Peter Eastman *
* Contributors: * * Contributors: *
* * * *
...@@ -152,21 +152,21 @@ void testPositionDependence() { ...@@ -152,21 +152,21 @@ void testPositionDependence() {
custom->addGlobalParameter("scale1", 0.3); custom->addGlobalParameter("scale1", 0.3);
custom->addGlobalParameter("scale2", 0.2); custom->addGlobalParameter("scale2", 0.2);
vector<int> particles(2); vector<int> particles(2);
particles[0] = 0; particles[0] = 1;
particles[1] = 1; particles[1] = 0;
vector<double> parameters; vector<double> parameters;
custom->addBond(particles, parameters); custom->addBond(particles, parameters);
customSystem.addForce(custom); customSystem.addForce(custom);
vector<Vec3> positions(2); vector<Vec3> positions(2);
positions[0] = Vec3(0.5, 1, 0); positions[0] = Vec3(1.5, 1, 0);
positions[1] = Vec3(1.5, 1, 0); positions[1] = Vec3(0.5, 1, 0);
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
Context context(customSystem, integrator, platform); Context context(customSystem, integrator, platform);
context.setPositions(positions); context.setPositions(positions);
State state = context.getState(State::Forces | State::Energy); State state = context.getState(State::Forces | State::Energy);
ASSERT_EQUAL_TOL(0.3*1.0+0.2*0.5+2*1, state.getPotentialEnergy(), 1e-5); ASSERT_EQUAL_TOL(0.3*1.0+0.2*0.5+2*1, state.getPotentialEnergy(), 1e-5);
ASSERT_EQUAL_VEC(Vec3(0.3-0.2, 0, 0), state.getForces()[0], 1e-5); ASSERT_EQUAL_VEC(Vec3(-0.3, -2, 0), state.getForces()[0], 1e-5);
ASSERT_EQUAL_VEC(Vec3(-0.3, -2, 0), state.getForces()[1], 1e-5); ASSERT_EQUAL_VEC(Vec3(0.3-0.2, 0, 0), state.getForces()[1], 1e-5);
} }
void testParallelComputation() { void testParallelComputation() {
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Biological Structures at Stanford, funded under the NIH Roadmap for * * Biological Structures at Stanford, funded under the NIH Roadmap for *
* Medical Research, grant U54 GM072970. See https://simtk.org. * * Medical Research, grant U54 GM072970. See https://simtk.org. *
* * * *
* Portions copyright (c) 2012 Stanford University and the Authors. * * Portions copyright (c) 2012-2015 Stanford University and the Authors. *
* Authors: Peter Eastman * * Authors: Peter Eastman *
* Contributors: * * Contributors: *
* * * *
...@@ -152,21 +152,21 @@ void testPositionDependence() { ...@@ -152,21 +152,21 @@ void testPositionDependence() {
custom->addGlobalParameter("scale1", 0.3); custom->addGlobalParameter("scale1", 0.3);
custom->addGlobalParameter("scale2", 0.2); custom->addGlobalParameter("scale2", 0.2);
vector<int> particles(2); vector<int> particles(2);
particles[0] = 0; particles[0] = 1;
particles[1] = 1; particles[1] = 0;
vector<double> parameters; vector<double> parameters;
custom->addBond(particles, parameters); custom->addBond(particles, parameters);
customSystem.addForce(custom); customSystem.addForce(custom);
vector<Vec3> positions(2); vector<Vec3> positions(2);
positions[0] = Vec3(0.5, 1, 0); positions[0] = Vec3(1.5, 1, 0);
positions[1] = Vec3(1.5, 1, 0); positions[1] = Vec3(0.5, 1, 0);
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
Context context(customSystem, integrator, platform); Context context(customSystem, integrator, platform);
context.setPositions(positions); context.setPositions(positions);
State state = context.getState(State::Forces | State::Energy); State state = context.getState(State::Forces | State::Energy);
ASSERT_EQUAL_TOL(0.3*1.0+0.2*0.5+2*1, state.getPotentialEnergy(), 1e-5); ASSERT_EQUAL_TOL(0.3*1.0+0.2*0.5+2*1, state.getPotentialEnergy(), 1e-5);
ASSERT_EQUAL_VEC(Vec3(0.3-0.2, 0, 0), state.getForces()[0], 1e-5); ASSERT_EQUAL_VEC(Vec3(-0.3, -2, 0), state.getForces()[0], 1e-5);
ASSERT_EQUAL_VEC(Vec3(-0.3, -2, 0), state.getForces()[1], 1e-5); ASSERT_EQUAL_VEC(Vec3(0.3-0.2, 0, 0), state.getForces()[1], 1e-5);
} }
void testParallelComputation() { void testParallelComputation() {
......
/* Portions copyright (c) 2009-2010 Stanford University and Simbios. /* Portions copyright (c) 2009-2015 Stanford University and Simbios.
* Contributors: Peter Eastman * Contributors: Peter Eastman
* *
* Permission is hereby granted, free of charge, to any person obtaining * Permission is hereby granted, free of charge, to any person obtaining
...@@ -127,7 +127,7 @@ void ReferenceCustomCompoundBondIxn::calculateOneIxn(int bond, vector<RealVec>& ...@@ -127,7 +127,7 @@ void ReferenceCustomCompoundBondIxn::calculateOneIxn(int bond, vector<RealVec>&
const vector<int>& atoms = bondAtoms[bond]; const vector<int>& atoms = bondAtoms[bond];
for (int i = 0; i < (int) particleTerms.size(); i++) { for (int i = 0; i < (int) particleTerms.size(); i++) {
const ParticleTermInfo& term = particleTerms[i]; const ParticleTermInfo& term = particleTerms[i];
variables[term.name] = atomCoordinates[term.atom][term.component]; variables[term.name] = atomCoordinates[atoms[term.atom]][term.component];
} }
for (int i = 0; i < (int) distanceTerms.size(); i++) { for (int i = 0; i < (int) distanceTerms.size(); i++) {
const DistanceTermInfo& term = distanceTerms[i]; const DistanceTermInfo& term = distanceTerms[i];
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Biological Structures at Stanford, funded under the NIH Roadmap for * * Biological Structures at Stanford, funded under the NIH Roadmap for *
* Medical Research, grant U54 GM072970. See https://simtk.org. * * Medical Research, grant U54 GM072970. See https://simtk.org. *
* * * *
* Portions copyright (c) 2012 Stanford University and the Authors. * * Portions copyright (c) 2012-2015 Stanford University and the Authors. *
* Authors: Peter Eastman * * Authors: Peter Eastman *
* Contributors: * * Contributors: *
* * * *
...@@ -155,21 +155,21 @@ void testPositionDependence() { ...@@ -155,21 +155,21 @@ void testPositionDependence() {
custom->addGlobalParameter("scale1", 0.3); custom->addGlobalParameter("scale1", 0.3);
custom->addGlobalParameter("scale2", 0.2); custom->addGlobalParameter("scale2", 0.2);
vector<int> particles(2); vector<int> particles(2);
particles[0] = 0; particles[0] = 1;
particles[1] = 1; particles[1] = 0;
vector<double> parameters; vector<double> parameters;
custom->addBond(particles, parameters); custom->addBond(particles, parameters);
customSystem.addForce(custom); customSystem.addForce(custom);
vector<Vec3> positions(2); vector<Vec3> positions(2);
positions[0] = Vec3(0.5, 1, 0); positions[0] = Vec3(1.5, 1, 0);
positions[1] = Vec3(1.5, 1, 0); positions[1] = Vec3(0.5, 1, 0);
VerletIntegrator integrator(0.01); VerletIntegrator integrator(0.01);
Context context(customSystem, integrator, platform); Context context(customSystem, integrator, platform);
context.setPositions(positions); context.setPositions(positions);
State state = context.getState(State::Forces | State::Energy); State state = context.getState(State::Forces | State::Energy);
ASSERT_EQUAL_TOL(0.3*1.0+0.2*0.5+2*1, state.getPotentialEnergy(), 1e-5); ASSERT_EQUAL_TOL(0.3*1.0+0.2*0.5+2*1, state.getPotentialEnergy(), 1e-5);
ASSERT_EQUAL_VEC(Vec3(0.3-0.2, 0, 0), state.getForces()[0], 1e-5); ASSERT_EQUAL_VEC(Vec3(-0.3, -2, 0), state.getForces()[0], 1e-5);
ASSERT_EQUAL_VEC(Vec3(-0.3, -2, 0), state.getForces()[1], 1e-5); ASSERT_EQUAL_VEC(Vec3(0.3-0.2, 0, 0), state.getForces()[1], 1e-5);
} }
void testContinuous2DFunction() { void testContinuous2DFunction() {
......
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