Commit 6fabca14 authored by Peter Eastman's avatar Peter Eastman
Browse files

Cleaned up reference API for constraints

parent ae847dd7
...@@ -316,14 +316,14 @@ void ReferenceApplyConstraintsKernel::initialize(const System& system) { ...@@ -316,14 +316,14 @@ void ReferenceApplyConstraintsKernel::initialize(const System& system) {
inverseMasses[i] = 1.0/masses[i]; inverseMasses[i] = 1.0/masses[i];
} }
numConstraints = system.getNumConstraints(); numConstraints = system.getNumConstraints();
constraintIndices = allocateIntArray(numConstraints, 2); constraintIndices.resize(numConstraints);
constraintDistances = new RealOpenMM[numConstraints]; constraintDistances.resize(numConstraints);
for (int i = 0; i < numConstraints; ++i) { for (int i = 0; i < numConstraints; ++i) {
int particle1, particle2; int particle1, particle2;
double distance; double distance;
system.getConstraintParameters(i, particle1, particle2, distance); system.getConstraintParameters(i, particle1, particle2, distance);
constraintIndices[i][0] = particle1; constraintIndices[i].first = particle1;
constraintIndices[i][1] = particle2; constraintIndices[i].second = particle2;
constraintDistances[i] = static_cast<RealOpenMM>(distance); constraintDistances[i] = static_cast<RealOpenMM>(distance);
} }
} }
...@@ -331,10 +331,6 @@ void ReferenceApplyConstraintsKernel::initialize(const System& system) { ...@@ -331,10 +331,6 @@ void ReferenceApplyConstraintsKernel::initialize(const System& system) {
ReferenceApplyConstraintsKernel::~ReferenceApplyConstraintsKernel() { ReferenceApplyConstraintsKernel::~ReferenceApplyConstraintsKernel() {
if (constraints) if (constraints)
delete constraints; delete constraints;
if (constraintIndices)
disposeIntArray(constraintIndices, numConstraints);
if (constraintDistances)
delete[] constraintDistances;
} }
void ReferenceApplyConstraintsKernel::apply(ContextImpl& context, double tol) { void ReferenceApplyConstraintsKernel::apply(ContextImpl& context, double tol) {
...@@ -1729,10 +1725,6 @@ ReferenceIntegrateVerletStepKernel::~ReferenceIntegrateVerletStepKernel() { ...@@ -1729,10 +1725,6 @@ ReferenceIntegrateVerletStepKernel::~ReferenceIntegrateVerletStepKernel() {
delete dynamics; delete dynamics;
if (constraints) if (constraints)
delete constraints; delete constraints;
if (constraintIndices)
disposeIntArray(constraintIndices, numConstraints);
if (constraintDistances)
delete[] constraintDistances;
} }
void ReferenceIntegrateVerletStepKernel::initialize(const System& system, const VerletIntegrator& integrator) { void ReferenceIntegrateVerletStepKernel::initialize(const System& system, const VerletIntegrator& integrator) {
...@@ -1741,14 +1733,14 @@ void ReferenceIntegrateVerletStepKernel::initialize(const System& system, const ...@@ -1741,14 +1733,14 @@ void ReferenceIntegrateVerletStepKernel::initialize(const System& system, const
for (int i = 0; i < numParticles; ++i) for (int i = 0; i < numParticles; ++i)
masses[i] = static_cast<RealOpenMM>(system.getParticleMass(i)); masses[i] = static_cast<RealOpenMM>(system.getParticleMass(i));
numConstraints = system.getNumConstraints(); numConstraints = system.getNumConstraints();
constraintIndices = allocateIntArray(numConstraints, 2); vector<pair<int, int> > constraintIndices(numConstraints);
constraintDistances = new RealOpenMM[numConstraints]; vector<RealOpenMM> constraintDistances(numConstraints);
for (int i = 0; i < numConstraints; ++i) { for (int i = 0; i < numConstraints; ++i) {
int particle1, particle2; int particle1, particle2;
double distance; double distance;
system.getConstraintParameters(i, particle1, particle2, distance); system.getConstraintParameters(i, particle1, particle2, distance);
constraintIndices[i][0] = particle1; constraintIndices[i].first = particle1;
constraintIndices[i][1] = particle2; constraintIndices[i].second = particle2;
constraintDistances[i] = static_cast<RealOpenMM>(distance); constraintDistances[i] = static_cast<RealOpenMM>(distance);
} }
vector<ReferenceCCMAAlgorithm::AngleInfo> angles; vector<ReferenceCCMAAlgorithm::AngleInfo> angles;
...@@ -1785,10 +1777,6 @@ ReferenceIntegrateLangevinStepKernel::~ReferenceIntegrateLangevinStepKernel() { ...@@ -1785,10 +1777,6 @@ ReferenceIntegrateLangevinStepKernel::~ReferenceIntegrateLangevinStepKernel() {
delete dynamics; delete dynamics;
if (constraints) if (constraints)
delete constraints; delete constraints;
if (constraintIndices)
disposeIntArray(constraintIndices, numConstraints);
if (constraintDistances)
delete[] constraintDistances;
} }
void ReferenceIntegrateLangevinStepKernel::initialize(const System& system, const LangevinIntegrator& integrator) { void ReferenceIntegrateLangevinStepKernel::initialize(const System& system, const LangevinIntegrator& integrator) {
...@@ -1797,14 +1785,14 @@ void ReferenceIntegrateLangevinStepKernel::initialize(const System& system, cons ...@@ -1797,14 +1785,14 @@ void ReferenceIntegrateLangevinStepKernel::initialize(const System& system, cons
for (int i = 0; i < numParticles; ++i) for (int i = 0; i < numParticles; ++i)
masses[i] = static_cast<RealOpenMM>(system.getParticleMass(i)); masses[i] = static_cast<RealOpenMM>(system.getParticleMass(i));
numConstraints = system.getNumConstraints(); numConstraints = system.getNumConstraints();
constraintIndices = allocateIntArray(numConstraints, 2); vector<pair<int, int> > constraintIndices(numConstraints);
constraintDistances = new RealOpenMM[numConstraints]; vector<RealOpenMM> constraintDistances(numConstraints);
for (int i = 0; i < numConstraints; ++i) { for (int i = 0; i < numConstraints; ++i) {
int particle1, particle2; int particle1, particle2;
double distance; double distance;
system.getConstraintParameters(i, particle1, particle2, distance); system.getConstraintParameters(i, particle1, particle2, distance);
constraintIndices[i][0] = particle1; constraintIndices[i].first = particle1;
constraintIndices[i][1] = particle2; constraintIndices[i].second = particle2;
constraintDistances[i] = static_cast<RealOpenMM>(distance); constraintDistances[i] = static_cast<RealOpenMM>(distance);
} }
SimTKOpenMMUtilities::setRandomNumberSeed((unsigned int) integrator.getRandomNumberSeed()); SimTKOpenMMUtilities::setRandomNumberSeed((unsigned int) integrator.getRandomNumberSeed());
...@@ -1851,10 +1839,6 @@ ReferenceIntegrateBrownianStepKernel::~ReferenceIntegrateBrownianStepKernel() { ...@@ -1851,10 +1839,6 @@ ReferenceIntegrateBrownianStepKernel::~ReferenceIntegrateBrownianStepKernel() {
delete dynamics; delete dynamics;
if (constraints) if (constraints)
delete constraints; delete constraints;
if (constraintIndices)
disposeIntArray(constraintIndices, numConstraints);
if (constraintDistances)
delete[] constraintDistances;
} }
void ReferenceIntegrateBrownianStepKernel::initialize(const System& system, const BrownianIntegrator& integrator) { void ReferenceIntegrateBrownianStepKernel::initialize(const System& system, const BrownianIntegrator& integrator) {
...@@ -1863,14 +1847,14 @@ void ReferenceIntegrateBrownianStepKernel::initialize(const System& system, cons ...@@ -1863,14 +1847,14 @@ void ReferenceIntegrateBrownianStepKernel::initialize(const System& system, cons
for (int i = 0; i < numParticles; ++i) for (int i = 0; i < numParticles; ++i)
masses[i] = static_cast<RealOpenMM>(system.getParticleMass(i)); masses[i] = static_cast<RealOpenMM>(system.getParticleMass(i));
numConstraints = system.getNumConstraints(); numConstraints = system.getNumConstraints();
constraintIndices = allocateIntArray(numConstraints, 2); vector<pair<int, int> > constraintIndices(numConstraints);
constraintDistances = new RealOpenMM[numConstraints]; vector<RealOpenMM> constraintDistances(numConstraints);
for (int i = 0; i < numConstraints; ++i) { for (int i = 0; i < numConstraints; ++i) {
int particle1, particle2; int particle1, particle2;
double distance; double distance;
system.getConstraintParameters(i, particle1, particle2, distance); system.getConstraintParameters(i, particle1, particle2, distance);
constraintIndices[i][0] = particle1; constraintIndices[i].first = particle1;
constraintIndices[i][1] = particle2; constraintIndices[i].second = particle2;
constraintDistances[i] = static_cast<RealOpenMM>(distance); constraintDistances[i] = static_cast<RealOpenMM>(distance);
} }
SimTKOpenMMUtilities::setRandomNumberSeed((unsigned int) integrator.getRandomNumberSeed()); SimTKOpenMMUtilities::setRandomNumberSeed((unsigned int) integrator.getRandomNumberSeed());
...@@ -1916,10 +1900,6 @@ ReferenceIntegrateVariableLangevinStepKernel::~ReferenceIntegrateVariableLangevi ...@@ -1916,10 +1900,6 @@ ReferenceIntegrateVariableLangevinStepKernel::~ReferenceIntegrateVariableLangevi
delete dynamics; delete dynamics;
if (constraints) if (constraints)
delete constraints; delete constraints;
if (constraintIndices)
disposeIntArray(constraintIndices, numConstraints);
if (constraintDistances)
delete[] constraintDistances;
} }
void ReferenceIntegrateVariableLangevinStepKernel::initialize(const System& system, const VariableLangevinIntegrator& integrator) { void ReferenceIntegrateVariableLangevinStepKernel::initialize(const System& system, const VariableLangevinIntegrator& integrator) {
...@@ -1928,14 +1908,14 @@ void ReferenceIntegrateVariableLangevinStepKernel::initialize(const System& syst ...@@ -1928,14 +1908,14 @@ void ReferenceIntegrateVariableLangevinStepKernel::initialize(const System& syst
for (int i = 0; i < numParticles; ++i) for (int i = 0; i < numParticles; ++i)
masses[i] = static_cast<RealOpenMM>(system.getParticleMass(i)); masses[i] = static_cast<RealOpenMM>(system.getParticleMass(i));
numConstraints = system.getNumConstraints(); numConstraints = system.getNumConstraints();
constraintIndices = allocateIntArray(numConstraints, 2); vector<pair<int, int> > constraintIndices(numConstraints);
constraintDistances = new RealOpenMM[numConstraints]; vector<RealOpenMM> constraintDistances(numConstraints);
for (int i = 0; i < numConstraints; ++i) { for (int i = 0; i < numConstraints; ++i) {
int particle1, particle2; int particle1, particle2;
double distance; double distance;
system.getConstraintParameters(i, particle1, particle2, distance); system.getConstraintParameters(i, particle1, particle2, distance);
constraintIndices[i][0] = particle1; constraintIndices[i].first = particle1;
constraintIndices[i][1] = particle2; constraintIndices[i].second = particle2;
constraintDistances[i] = static_cast<RealOpenMM>(distance); constraintDistances[i] = static_cast<RealOpenMM>(distance);
} }
SimTKOpenMMUtilities::setRandomNumberSeed((unsigned int) integrator.getRandomNumberSeed()); SimTKOpenMMUtilities::setRandomNumberSeed((unsigned int) integrator.getRandomNumberSeed());
...@@ -1982,10 +1962,6 @@ ReferenceIntegrateVariableVerletStepKernel::~ReferenceIntegrateVariableVerletSte ...@@ -1982,10 +1962,6 @@ ReferenceIntegrateVariableVerletStepKernel::~ReferenceIntegrateVariableVerletSte
delete dynamics; delete dynamics;
if (constraints) if (constraints)
delete constraints; delete constraints;
if (constraintIndices)
disposeIntArray(constraintIndices, numConstraints);
if (constraintDistances)
delete[] constraintDistances;
} }
void ReferenceIntegrateVariableVerletStepKernel::initialize(const System& system, const VariableVerletIntegrator& integrator) { void ReferenceIntegrateVariableVerletStepKernel::initialize(const System& system, const VariableVerletIntegrator& integrator) {
...@@ -1994,14 +1970,14 @@ void ReferenceIntegrateVariableVerletStepKernel::initialize(const System& system ...@@ -1994,14 +1970,14 @@ void ReferenceIntegrateVariableVerletStepKernel::initialize(const System& system
for (int i = 0; i < numParticles; ++i) for (int i = 0; i < numParticles; ++i)
masses[i] = static_cast<RealOpenMM>(system.getParticleMass(i)); masses[i] = static_cast<RealOpenMM>(system.getParticleMass(i));
numConstraints = system.getNumConstraints(); numConstraints = system.getNumConstraints();
constraintIndices = allocateIntArray(numConstraints, 2); vector<pair<int, int> > constraintIndices(numConstraints);
constraintDistances = new RealOpenMM[numConstraints]; vector<RealOpenMM> constraintDistances(numConstraints);
for (int i = 0; i < numConstraints; ++i) { for (int i = 0; i < numConstraints; ++i) {
int particle1, particle2; int particle1, particle2;
double distance; double distance;
system.getConstraintParameters(i, particle1, particle2, distance); system.getConstraintParameters(i, particle1, particle2, distance);
constraintIndices[i][0] = particle1; constraintIndices[i].first = particle1;
constraintIndices[i][1] = particle2; constraintIndices[i].second = particle2;
constraintDistances[i] = static_cast<RealOpenMM>(distance); constraintDistances[i] = static_cast<RealOpenMM>(distance);
} }
vector<ReferenceCCMAAlgorithm::AngleInfo> angles; vector<ReferenceCCMAAlgorithm::AngleInfo> angles;
...@@ -2042,10 +2018,6 @@ ReferenceIntegrateCustomStepKernel::~ReferenceIntegrateCustomStepKernel() { ...@@ -2042,10 +2018,6 @@ ReferenceIntegrateCustomStepKernel::~ReferenceIntegrateCustomStepKernel() {
delete dynamics; delete dynamics;
if (constraints) if (constraints)
delete constraints; delete constraints;
if (constraintIndices)
disposeIntArray(constraintIndices, numConstraints);
if (constraintDistances)
delete[] constraintDistances;
} }
void ReferenceIntegrateCustomStepKernel::initialize(const System& system, const CustomIntegrator& integrator) { void ReferenceIntegrateCustomStepKernel::initialize(const System& system, const CustomIntegrator& integrator) {
...@@ -2054,14 +2026,14 @@ void ReferenceIntegrateCustomStepKernel::initialize(const System& system, const ...@@ -2054,14 +2026,14 @@ void ReferenceIntegrateCustomStepKernel::initialize(const System& system, const
for (int i = 0; i < numParticles; ++i) for (int i = 0; i < numParticles; ++i)
masses[i] = static_cast<RealOpenMM>(system.getParticleMass(i)); masses[i] = static_cast<RealOpenMM>(system.getParticleMass(i));
numConstraints = system.getNumConstraints(); numConstraints = system.getNumConstraints();
constraintIndices = allocateIntArray(numConstraints, 2); vector<pair<int, int> > constraintIndices(numConstraints);
constraintDistances = new RealOpenMM[numConstraints]; vector<RealOpenMM> constraintDistances(numConstraints);
for (int i = 0; i < numConstraints; ++i) { for (int i = 0; i < numConstraints; ++i) {
int particle1, particle2; int particle1, particle2;
double distance; double distance;
system.getConstraintParameters(i, particle1, particle2, distance); system.getConstraintParameters(i, particle1, particle2, distance);
constraintIndices[i][0] = particle1; constraintIndices[i].first = particle1;
constraintIndices[i][1] = particle2; constraintIndices[i].second = particle2;
constraintDistances[i] = static_cast<RealOpenMM>(distance); constraintDistances[i] = static_cast<RealOpenMM>(distance);
} }
perDofValues.resize(integrator.getNumPerDofVariables()); perDofValues.resize(integrator.getNumPerDofVariables());
......
...@@ -190,7 +190,7 @@ private: ...@@ -190,7 +190,7 @@ private:
class ReferenceApplyConstraintsKernel : public ApplyConstraintsKernel { class ReferenceApplyConstraintsKernel : public ApplyConstraintsKernel {
public: public:
ReferenceApplyConstraintsKernel(std::string name, const Platform& platform, ReferencePlatform::PlatformData& data) : ReferenceApplyConstraintsKernel(std::string name, const Platform& platform, ReferencePlatform::PlatformData& data) :
ApplyConstraintsKernel(name, platform), data(data), constraints(0), constraintDistances(0), constraintIndices(0) { ApplyConstraintsKernel(name, platform), data(data), constraints(0) {
} }
~ReferenceApplyConstraintsKernel(); ~ReferenceApplyConstraintsKernel();
/** /**
...@@ -218,8 +218,8 @@ private: ...@@ -218,8 +218,8 @@ private:
ReferenceConstraintAlgorithm* constraints; ReferenceConstraintAlgorithm* constraints;
std::vector<RealOpenMM> masses; std::vector<RealOpenMM> masses;
std::vector<RealOpenMM> inverseMasses; std::vector<RealOpenMM> inverseMasses;
RealOpenMM* constraintDistances; std::vector<std::pair<int, int> > constraintIndices;
int** constraintIndices; std::vector<RealOpenMM> constraintDistances;
int numConstraints; int numConstraints;
}; };
...@@ -871,7 +871,7 @@ private: ...@@ -871,7 +871,7 @@ private:
class ReferenceIntegrateVerletStepKernel : public IntegrateVerletStepKernel { class ReferenceIntegrateVerletStepKernel : public IntegrateVerletStepKernel {
public: public:
ReferenceIntegrateVerletStepKernel(std::string name, const Platform& platform, ReferencePlatform::PlatformData& data) : IntegrateVerletStepKernel(name, platform), ReferenceIntegrateVerletStepKernel(std::string name, const Platform& platform, ReferencePlatform::PlatformData& data) : IntegrateVerletStepKernel(name, platform),
data(data), dynamics(0), constraints(0), constraintDistances(0), constraintIndices(0) { data(data), dynamics(0), constraints(0) {
} }
~ReferenceIntegrateVerletStepKernel(); ~ReferenceIntegrateVerletStepKernel();
/** /**
...@@ -900,8 +900,6 @@ private: ...@@ -900,8 +900,6 @@ private:
ReferenceVerletDynamics* dynamics; ReferenceVerletDynamics* dynamics;
ReferenceConstraintAlgorithm* constraints; ReferenceConstraintAlgorithm* constraints;
std::vector<RealOpenMM> masses; std::vector<RealOpenMM> masses;
RealOpenMM* constraintDistances;
int** constraintIndices;
int numConstraints; int numConstraints;
double prevStepSize; double prevStepSize;
}; };
...@@ -912,7 +910,7 @@ private: ...@@ -912,7 +910,7 @@ private:
class ReferenceIntegrateLangevinStepKernel : public IntegrateLangevinStepKernel { class ReferenceIntegrateLangevinStepKernel : public IntegrateLangevinStepKernel {
public: public:
ReferenceIntegrateLangevinStepKernel(std::string name, const Platform& platform, ReferencePlatform::PlatformData& data) : IntegrateLangevinStepKernel(name, platform), ReferenceIntegrateLangevinStepKernel(std::string name, const Platform& platform, ReferencePlatform::PlatformData& data) : IntegrateLangevinStepKernel(name, platform),
data(data), dynamics(0), constraints(0), constraintDistances(0), constraintIndices(0) { data(data), dynamics(0), constraints(0) {
} }
~ReferenceIntegrateLangevinStepKernel(); ~ReferenceIntegrateLangevinStepKernel();
/** /**
...@@ -941,8 +939,6 @@ private: ...@@ -941,8 +939,6 @@ private:
ReferenceStochasticDynamics* dynamics; ReferenceStochasticDynamics* dynamics;
ReferenceConstraintAlgorithm* constraints; ReferenceConstraintAlgorithm* constraints;
std::vector<RealOpenMM> masses; std::vector<RealOpenMM> masses;
RealOpenMM* constraintDistances;
int** constraintIndices;
int numConstraints; int numConstraints;
double prevTemp, prevFriction, prevStepSize; double prevTemp, prevFriction, prevStepSize;
}; };
...@@ -953,7 +949,7 @@ private: ...@@ -953,7 +949,7 @@ private:
class ReferenceIntegrateBrownianStepKernel : public IntegrateBrownianStepKernel { class ReferenceIntegrateBrownianStepKernel : public IntegrateBrownianStepKernel {
public: public:
ReferenceIntegrateBrownianStepKernel(std::string name, const Platform& platform, ReferencePlatform::PlatformData& data) : IntegrateBrownianStepKernel(name, platform), ReferenceIntegrateBrownianStepKernel(std::string name, const Platform& platform, ReferencePlatform::PlatformData& data) : IntegrateBrownianStepKernel(name, platform),
data(data), dynamics(0), constraints(0), constraintDistances(0), constraintIndices(0) { data(data), dynamics(0), constraints(0) {
} }
~ReferenceIntegrateBrownianStepKernel(); ~ReferenceIntegrateBrownianStepKernel();
/** /**
...@@ -982,8 +978,6 @@ private: ...@@ -982,8 +978,6 @@ private:
ReferenceBrownianDynamics* dynamics; ReferenceBrownianDynamics* dynamics;
ReferenceConstraintAlgorithm* constraints; ReferenceConstraintAlgorithm* constraints;
std::vector<RealOpenMM> masses; std::vector<RealOpenMM> masses;
RealOpenMM* constraintDistances;
int** constraintIndices;
int numConstraints; int numConstraints;
double prevTemp, prevFriction, prevStepSize; double prevTemp, prevFriction, prevStepSize;
}; };
...@@ -994,7 +988,7 @@ private: ...@@ -994,7 +988,7 @@ private:
class ReferenceIntegrateVariableLangevinStepKernel : public IntegrateVariableLangevinStepKernel { class ReferenceIntegrateVariableLangevinStepKernel : public IntegrateVariableLangevinStepKernel {
public: public:
ReferenceIntegrateVariableLangevinStepKernel(std::string name, const Platform& platform, ReferencePlatform::PlatformData& data) : IntegrateVariableLangevinStepKernel(name, platform), ReferenceIntegrateVariableLangevinStepKernel(std::string name, const Platform& platform, ReferencePlatform::PlatformData& data) : IntegrateVariableLangevinStepKernel(name, platform),
data(data), dynamics(0), constraints(0), constraintDistances(0), constraintIndices(0) { data(data), dynamics(0), constraints(0) {
} }
~ReferenceIntegrateVariableLangevinStepKernel(); ~ReferenceIntegrateVariableLangevinStepKernel();
/** /**
...@@ -1025,8 +1019,6 @@ private: ...@@ -1025,8 +1019,6 @@ private:
ReferenceVariableStochasticDynamics* dynamics; ReferenceVariableStochasticDynamics* dynamics;
ReferenceConstraintAlgorithm* constraints; ReferenceConstraintAlgorithm* constraints;
std::vector<RealOpenMM> masses; std::vector<RealOpenMM> masses;
RealOpenMM* constraintDistances;
int** constraintIndices;
int numConstraints; int numConstraints;
double prevTemp, prevFriction, prevErrorTol; double prevTemp, prevFriction, prevErrorTol;
}; };
...@@ -1037,7 +1029,7 @@ private: ...@@ -1037,7 +1029,7 @@ private:
class ReferenceIntegrateVariableVerletStepKernel : public IntegrateVariableVerletStepKernel { class ReferenceIntegrateVariableVerletStepKernel : public IntegrateVariableVerletStepKernel {
public: public:
ReferenceIntegrateVariableVerletStepKernel(std::string name, const Platform& platform, ReferencePlatform::PlatformData& data) : IntegrateVariableVerletStepKernel(name, platform), ReferenceIntegrateVariableVerletStepKernel(std::string name, const Platform& platform, ReferencePlatform::PlatformData& data) : IntegrateVariableVerletStepKernel(name, platform),
data(data), dynamics(0), constraints(0), constraintDistances(0), constraintIndices(0) { data(data), dynamics(0), constraints(0) {
} }
~ReferenceIntegrateVariableVerletStepKernel(); ~ReferenceIntegrateVariableVerletStepKernel();
/** /**
...@@ -1068,8 +1060,6 @@ private: ...@@ -1068,8 +1060,6 @@ private:
ReferenceVariableVerletDynamics* dynamics; ReferenceVariableVerletDynamics* dynamics;
ReferenceConstraintAlgorithm* constraints; ReferenceConstraintAlgorithm* constraints;
std::vector<RealOpenMM> masses; std::vector<RealOpenMM> masses;
RealOpenMM* constraintDistances;
int** constraintIndices;
int numConstraints; int numConstraints;
double prevErrorTol; double prevErrorTol;
}; };
...@@ -1080,7 +1070,7 @@ private: ...@@ -1080,7 +1070,7 @@ private:
class ReferenceIntegrateCustomStepKernel : public IntegrateCustomStepKernel { class ReferenceIntegrateCustomStepKernel : public IntegrateCustomStepKernel {
public: public:
ReferenceIntegrateCustomStepKernel(std::string name, const Platform& platform, ReferencePlatform::PlatformData& data) : IntegrateCustomStepKernel(name, platform), ReferenceIntegrateCustomStepKernel(std::string name, const Platform& platform, ReferencePlatform::PlatformData& data) : IntegrateCustomStepKernel(name, platform),
data(data), dynamics(0), constraints(0), constraintDistances(0), constraintIndices(0) { data(data), dynamics(0), constraints(0) {
} }
~ReferenceIntegrateCustomStepKernel(); ~ReferenceIntegrateCustomStepKernel();
/** /**
...@@ -1148,8 +1138,6 @@ private: ...@@ -1148,8 +1138,6 @@ private:
ReferenceConstraintAlgorithm* constraints; ReferenceConstraintAlgorithm* constraints;
std::vector<RealOpenMM> masses, globalValues; std::vector<RealOpenMM> masses, globalValues;
std::vector<std::vector<OpenMM::RealVec> > perDofValues; std::vector<std::vector<OpenMM::RealVec> > perDofValues;
RealOpenMM* constraintDistances;
int** constraintIndices;
int numConstraints; int numConstraints;
}; };
......
...@@ -57,8 +57,8 @@ using OpenMM::RealVec; ...@@ -57,8 +57,8 @@ using OpenMM::RealVec;
ReferenceCCMAAlgorithm::ReferenceCCMAAlgorithm( int numberOfAtoms, ReferenceCCMAAlgorithm::ReferenceCCMAAlgorithm( int numberOfAtoms,
int numberOfConstraints, int numberOfConstraints,
int** atomIndices, const vector<pair<int, int> >& atomIndices,
RealOpenMM* distance, const vector<RealOpenMM>& distance,
vector<RealOpenMM>& masses, vector<RealOpenMM>& masses,
vector<AngleInfo>& angles, vector<AngleInfo>& angles,
RealOpenMM tolerance){ RealOpenMM tolerance){
...@@ -108,10 +108,10 @@ ReferenceCCMAAlgorithm::ReferenceCCMAAlgorithm( int numberOfAtoms, ...@@ -108,10 +108,10 @@ ReferenceCCMAAlgorithm::ReferenceCCMAAlgorithm( int numberOfAtoms,
continue; continue;
} }
double scale; double scale;
int atomj0 = _atomIndices[j][0]; int atomj0 = _atomIndices[j].first;
int atomj1 = _atomIndices[j][1]; int atomj1 = _atomIndices[j].second;
int atomk0 = _atomIndices[k][0]; int atomk0 = _atomIndices[k].first;
int atomk1 = _atomIndices[k][1]; int atomk1 = _atomIndices[k].second;
RealOpenMM invMass0 = one/masses[atomj0]; RealOpenMM invMass0 = one/masses[atomj0];
RealOpenMM invMass1 = one/masses[atomj1]; RealOpenMM invMass1 = one/masses[atomj1];
int atoma, atomb, atomc; int atoma, atomb, atomc;
...@@ -146,7 +146,7 @@ ReferenceCCMAAlgorithm::ReferenceCCMAAlgorithm( int numberOfAtoms, ...@@ -146,7 +146,7 @@ ReferenceCCMAAlgorithm::ReferenceCCMAAlgorithm( int numberOfAtoms,
bool foundConstraint = false; bool foundConstraint = false;
for (int other = 0; other < numberOfConstraints; other++) { for (int other = 0; other < numberOfConstraints; other++) {
if ((_atomIndices[other][0] == atoma && _atomIndices[other][1] == atomc) || (_atomIndices[other][0] == atomc && _atomIndices[other][1] == atoma)) { if ((_atomIndices[other].first == atoma && _atomIndices[other].second == atomc) || (_atomIndices[other].first == atomc && _atomIndices[other].second == atoma)) {
double d1 = _distance[j]; double d1 = _distance[j];
double d2 = _distance[k]; double d2 = _distance[k];
double d3 = _distance[other]; double d3 = _distance[other];
...@@ -227,8 +227,6 @@ ReferenceCCMAAlgorithm::~ReferenceCCMAAlgorithm( ){ ...@@ -227,8 +227,6 @@ ReferenceCCMAAlgorithm::~ReferenceCCMAAlgorithm( ){
SimTKOpenMMUtilities::freeOneDRealOpenMMArray( _distanceTolerance, "distanceTolerance" ); SimTKOpenMMUtilities::freeOneDRealOpenMMArray( _distanceTolerance, "distanceTolerance" );
SimTKOpenMMUtilities::freeOneDRealOpenMMArray( _reducedMasses, "reducedMasses" ); SimTKOpenMMUtilities::freeOneDRealOpenMMArray( _reducedMasses, "reducedMasses" );
} }
// for (unsigned int i = 0; i < _matrices.size(); i++)
// SimTKOpenMMUtilities::freeTwoDRealOpenMMArray(_matrices[i], "");
} }
/**--------------------------------------------------------------------------------------- /**---------------------------------------------------------------------------------------
...@@ -393,8 +391,8 @@ int ReferenceCCMAAlgorithm::applyConstraints(int numberOfAtoms, vector<RealVec>& ...@@ -393,8 +391,8 @@ int ReferenceCCMAAlgorithm::applyConstraints(int numberOfAtoms, vector<RealVec>&
if( !_hasInitializedMasses ){ if( !_hasInitializedMasses ){
_hasInitializedMasses = true; _hasInitializedMasses = true;
for( int ii = 0; ii < _numberOfConstraints; ii++ ){ for( int ii = 0; ii < _numberOfConstraints; ii++ ){
int atomI = _atomIndices[ii][0]; int atomI = _atomIndices[ii].first;
int atomJ = _atomIndices[ii][1]; int atomJ = _atomIndices[ii].second;
reducedMasses[ii] = half/( inverseMasses[atomI] + inverseMasses[atomJ] ); reducedMasses[ii] = half/( inverseMasses[atomI] + inverseMasses[atomJ] );
} }
} }
...@@ -404,8 +402,8 @@ int ReferenceCCMAAlgorithm::applyConstraints(int numberOfAtoms, vector<RealVec>& ...@@ -404,8 +402,8 @@ int ReferenceCCMAAlgorithm::applyConstraints(int numberOfAtoms, vector<RealVec>&
RealOpenMM tolerance = getTolerance(); RealOpenMM tolerance = getTolerance();
tolerance *= two; tolerance *= two;
for( int ii = 0; ii < _numberOfConstraints; ii++ ){ for( int ii = 0; ii < _numberOfConstraints; ii++ ){
int atomI = _atomIndices[ii][0]; int atomI = _atomIndices[ii].first;
int atomJ = _atomIndices[ii][1]; int atomJ = _atomIndices[ii].second;
r_ij[ii] = atomCoordinates[atomI] - atomCoordinates[atomJ]; r_ij[ii] = atomCoordinates[atomI] - atomCoordinates[atomJ];
d_ij2[ii] = r_ij[ii].dot(r_ij[ii]); d_ij2[ii] = r_ij[ii].dot(r_ij[ii]);
} }
...@@ -422,8 +420,8 @@ int ReferenceCCMAAlgorithm::applyConstraints(int numberOfAtoms, vector<RealVec>& ...@@ -422,8 +420,8 @@ int ReferenceCCMAAlgorithm::applyConstraints(int numberOfAtoms, vector<RealVec>&
numberConverged = 0; numberConverged = 0;
for( int ii = 0; ii < _numberOfConstraints; ii++ ){ for( int ii = 0; ii < _numberOfConstraints; ii++ ){
int atomI = _atomIndices[ii][0]; int atomI = _atomIndices[ii].first;
int atomJ = _atomIndices[ii][1]; int atomJ = _atomIndices[ii].second;
RealVec rp_ij = atomCoordinatesP[atomI] - atomCoordinatesP[atomJ]; RealVec rp_ij = atomCoordinatesP[atomI] - atomCoordinatesP[atomJ];
if (constrainingVelocities) { if (constrainingVelocities) {
...@@ -466,8 +464,8 @@ int ReferenceCCMAAlgorithm::applyConstraints(int numberOfAtoms, vector<RealVec>& ...@@ -466,8 +464,8 @@ int ReferenceCCMAAlgorithm::applyConstraints(int numberOfAtoms, vector<RealVec>&
} }
for( int ii = 0; ii < _numberOfConstraints; ii++ ){ for( int ii = 0; ii < _numberOfConstraints; ii++ ){
int atomI = _atomIndices[ii][0]; int atomI = _atomIndices[ii].first;
int atomJ = _atomIndices[ii][1]; int atomJ = _atomIndices[ii].second;
RealVec dr = r_ij[ii]*constraintDelta[ii]; RealVec dr = r_ij[ii]*constraintDelta[ii];
atomCoordinatesP[atomI] += dr*inverseMasses[atomI]; atomCoordinatesP[atomI] += dr*inverseMasses[atomI];
atomCoordinatesP[atomJ] -= dr*inverseMasses[atomJ]; atomCoordinatesP[atomJ] -= dr*inverseMasses[atomJ];
...@@ -515,8 +513,8 @@ int ReferenceCCMAAlgorithm::reportCCMA( int numberOfAtoms, vector<RealVec>& atom ...@@ -515,8 +513,8 @@ int ReferenceCCMAAlgorithm::reportCCMA( int numberOfAtoms, vector<RealVec>& atom
RealOpenMM tolerance = getTolerance(); RealOpenMM tolerance = getTolerance();
for( int ii = 0; ii < _numberOfConstraints; ii++ ){ for( int ii = 0; ii < _numberOfConstraints; ii++ ){
int atomI = _atomIndices[ii][0]; int atomI = _atomIndices[ii].first;
int atomJ = _atomIndices[ii][1]; int atomJ = _atomIndices[ii].second;
RealOpenMM rp2 = zero; RealOpenMM rp2 = zero;
for( int jj = 0; jj < 3; jj++ ){ for( int jj = 0; jj < 3; jj++ ){
......
...@@ -40,8 +40,8 @@ class OPENMM_EXPORT ReferenceCCMAAlgorithm : public ReferenceConstraintAlgorithm ...@@ -40,8 +40,8 @@ class OPENMM_EXPORT ReferenceCCMAAlgorithm : public ReferenceConstraintAlgorithm
RealOpenMM _tolerance; RealOpenMM _tolerance;
int _numberOfConstraints; int _numberOfConstraints;
int** _atomIndices; std::vector<std::pair<int, int> > _atomIndices;
RealOpenMM* _distance; std::vector<RealOpenMM> _distance;
std::vector<OpenMM::RealVec> _r_ij; std::vector<OpenMM::RealVec> _r_ij;
RealOpenMM* _d_ij2; RealOpenMM* _d_ij2;
...@@ -72,7 +72,7 @@ class OPENMM_EXPORT ReferenceCCMAAlgorithm : public ReferenceConstraintAlgorithm ...@@ -72,7 +72,7 @@ class OPENMM_EXPORT ReferenceCCMAAlgorithm : public ReferenceConstraintAlgorithm
--------------------------------------------------------------------------------------- */ --------------------------------------------------------------------------------------- */
ReferenceCCMAAlgorithm( int numberOfAtoms, int numberOfConstraints, int** atomIndices, RealOpenMM* distance, std::vector<RealOpenMM>& masses, std::vector<AngleInfo>& angles, RealOpenMM tolerance ); ReferenceCCMAAlgorithm( int numberOfAtoms, int numberOfConstraints, const std::vector<std::pair<int, int> >& atomIndices, const std::vector<RealOpenMM>& distance, std::vector<RealOpenMM>& masses, std::vector<AngleInfo>& angles, RealOpenMM tolerance );
/**--------------------------------------------------------------------------------------- /**---------------------------------------------------------------------------------------
......
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