Commit 93900ab2 authored by Peter Eastman's avatar Peter Eastman
Browse files

Updated Amoeba plugin based on refactoring of reference platform

parent c27f5d1f
......@@ -51,24 +51,24 @@
using namespace OpenMM;
using namespace std;
static RealOpenMM** extractPositions(ContextImpl& context) {
static vector<RealVec>& extractPositions(ContextImpl& context) {
ReferencePlatform::PlatformData* data = reinterpret_cast<ReferencePlatform::PlatformData*>(context.getPlatformData());
return (RealOpenMM**) data->positions;
return *((vector<RealVec>*) data->positions);
}
static RealOpenMM** extractVelocities(ContextImpl& context) {
static vector<RealVec>& extractVelocities(ContextImpl& context) {
ReferencePlatform::PlatformData* data = reinterpret_cast<ReferencePlatform::PlatformData*>(context.getPlatformData());
return (RealOpenMM**) data->velocities;
return *((vector<RealVec>*) data->velocities);
}
static RealOpenMM** extractForces(ContextImpl& context) {
static vector<RealVec>& extractForces(ContextImpl& context) {
ReferencePlatform::PlatformData* data = reinterpret_cast<ReferencePlatform::PlatformData*>(context.getPlatformData());
return (RealOpenMM**) data->forces;
return *((vector<RealVec>*) data->forces);
}
static RealOpenMM* extractBoxSize(ContextImpl& context) {
static RealVec& extractBoxSize(ContextImpl& context) {
ReferencePlatform::PlatformData* data = reinterpret_cast<ReferencePlatform::PlatformData*>(context.getPlatformData());
return (RealOpenMM*) data->periodicBoxSize;
return *(RealVec*) data->periodicBoxSize;
}
// ***************************************************************************
......@@ -99,8 +99,8 @@ void ReferenceCalcAmoebaHarmonicBondForceKernel::initialize(const System& system
}
double ReferenceCalcAmoebaHarmonicBondForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) {
RealOpenMM** posData = extractPositions(context);
RealOpenMM** forceData = extractForces(context);
vector<RealVec>& posData = extractPositions(context);
vector<RealVec>& forceData = extractForces(context);
AmoebaReferenceHarmonicBondForce amoebaReferenceHarmonicBondForce;
RealOpenMM energy = amoebaReferenceHarmonicBondForce.calculateForceAndEnergy( numBonds, posData, particle1, particle2, length, kQuadratic,
globalHarmonicBondCubic, globalHarmonicBondQuartic,
......@@ -136,8 +136,8 @@ void ReferenceCalcAmoebaUreyBradleyForceKernel::initialize(const System& system,
}
double ReferenceCalcAmoebaUreyBradleyForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) {
RealOpenMM** posData = extractPositions(context);
RealOpenMM** forceData = extractForces(context);
vector<RealVec>& posData = extractPositions(context);
vector<RealVec>& forceData = extractForces(context);
AmoebaReferenceUreyBradleyForce amoebaReferenceUreyBradleyForce;
RealOpenMM energy = amoebaReferenceUreyBradleyForce.calculateForceAndEnergy( numIxns, posData, particle1, particle2, length, kQuadratic,
globalUreyBradleyCubic, globalUreyBradleyQuartic,
......@@ -173,8 +173,8 @@ void ReferenceCalcAmoebaHarmonicAngleForceKernel::initialize(const System& syste
}
double ReferenceCalcAmoebaHarmonicAngleForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) {
RealOpenMM** posData = extractPositions(context);
RealOpenMM** forceData = extractForces(context);
vector<RealVec>& posData = extractPositions(context);
vector<RealVec>& forceData = extractForces(context);
AmoebaReferenceHarmonicAngleForce amoebaReferenceHarmonicAngleForce;
RealOpenMM energy = amoebaReferenceHarmonicAngleForce.calculateForceAndEnergy( numAngles,
posData, particle1, particle2, particle3, angle, kQuadratic, globalHarmonicAngleCubic, globalHarmonicAngleQuartic, globalHarmonicAnglePentic, globalHarmonicAngleSextic, forceData );
......@@ -210,8 +210,8 @@ void ReferenceCalcAmoebaHarmonicInPlaneAngleForceKernel::initialize(const System
double ReferenceCalcAmoebaHarmonicInPlaneAngleForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) {
RealOpenMM** posData = extractPositions(context);
RealOpenMM** forceData = extractForces(context);
vector<RealVec>& posData = extractPositions(context);
vector<RealVec>& forceData = extractForces(context);
AmoebaReferenceHarmonicInPlaneAngleForce amoebaReferenceHarmonicInPlaneAngleForce;
RealOpenMM energy = amoebaReferenceHarmonicInPlaneAngleForce.calculateForceAndEnergy( numAngles, posData, particle1, particle2, particle3, particle4,
angle, kQuadratic, globalHarmonicInPlaneAngleCubic, globalHarmonicInPlaneAngleQuartic,
......@@ -260,8 +260,8 @@ void ReferenceCalcAmoebaTorsionForceKernel::initialize(const System& system, con
}
double ReferenceCalcAmoebaTorsionForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) {
RealOpenMM** posData = extractPositions(context);
RealOpenMM** forceData = extractForces(context);
vector<RealVec>& posData = extractPositions(context);
vector<RealVec>& forceData = extractForces(context);
AmoebaReferenceTorsionForce amoebaReferenceTorsionForce;
RealOpenMM energy = amoebaReferenceTorsionForce.calculateForceAndEnergy( numTorsions, posData, particle1, particle2, particle3, particle4,
torsionParameters1, torsionParameters2, torsionParameters3, forceData );
......@@ -294,8 +294,8 @@ void ReferenceCalcAmoebaPiTorsionForceKernel::initialize(const System& system, c
}
double ReferenceCalcAmoebaPiTorsionForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) {
RealOpenMM** posData = extractPositions(context);
RealOpenMM** forceData = extractForces(context);
vector<RealVec>& posData = extractPositions(context);
vector<RealVec>& forceData = extractForces(context);
AmoebaReferencePiTorsionForce amoebaReferencePiTorsionForce;
RealOpenMM energy = amoebaReferencePiTorsionForce.calculateForceAndEnergy( numPiTorsions, posData, particle1, particle2,
particle3, particle4, particle5, particle6,
......@@ -328,8 +328,8 @@ void ReferenceCalcAmoebaStretchBendForceKernel::initialize(const System& system,
}
double ReferenceCalcAmoebaStretchBendForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) {
RealOpenMM** posData = extractPositions(context);
RealOpenMM** forceData = extractForces(context);
vector<RealVec>& posData = extractPositions(context);
vector<RealVec>& forceData = extractForces(context);
AmoebaReferenceStretchBendForce amoebaReferenceStretchBendForce;
RealOpenMM energy = amoebaReferenceStretchBendForce.calculateForceAndEnergy( numStretchBends, posData, particle1, particle2, particle3,
lengthABParameters, lengthCBParameters, angleParameters, kParameters, forceData );
......@@ -366,8 +366,8 @@ void ReferenceCalcAmoebaOutOfPlaneBendForceKernel::initialize(const System& syst
}
double ReferenceCalcAmoebaOutOfPlaneBendForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) {
RealOpenMM** posData = extractPositions(context);
RealOpenMM** forceData = extractForces(context);
vector<RealVec>& posData = extractPositions(context);
vector<RealVec>& forceData = extractForces(context);
AmoebaReferenceOutOfPlaneBendForce amoebaReferenceOutOfPlaneBendForce;
RealOpenMM energy = amoebaReferenceOutOfPlaneBendForce.calculateForceAndEnergy( numOutOfPlaneBends, posData,
particle1, particle2, particle3, particle4,
......@@ -430,8 +430,8 @@ void ReferenceCalcAmoebaTorsionTorsionForceKernel::initialize(const System& syst
double ReferenceCalcAmoebaTorsionTorsionForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) {
RealOpenMM** posData = extractPositions(context);
RealOpenMM** forceData = extractForces(context);
vector<RealVec>& posData = extractPositions(context);
vector<RealVec>& forceData = extractForces(context);
AmoebaReferenceTorsionTorsionForce amoebaReferenceTorsionTorsionForce;
RealOpenMM energy = amoebaReferenceTorsionTorsionForce.calculateForceAndEnergy( numTorsionTorsions, posData,
particle1, particle2, particle3, particle4, particle5,
......@@ -524,8 +524,8 @@ void ReferenceCalcAmoebaMultipoleForceKernel::initialize(const System& system, c
}
double ReferenceCalcAmoebaMultipoleForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) {
RealOpenMM** posData = extractPositions(context);
RealOpenMM** forceData = extractForces(context);
vector<RealVec>& posData = extractPositions(context);
vector<RealVec>& forceData = extractForces(context);
AmoebaReferenceMultipoleForce amoebaReferenceMultipoleForce( AmoebaReferenceMultipoleForce::NoCutoff );
amoebaReferenceMultipoleForce.setMutualInducedDipoleTargetEpsilon( mutualInducedTargetEpsilon );
......@@ -627,8 +627,8 @@ void ReferenceCalcAmoebaVdwForceKernel::initialize(const System& system, const A
double ReferenceCalcAmoebaVdwForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) {
RealOpenMM** posData = extractPositions(context);
RealOpenMM** forceData = extractForces(context);
vector<RealVec>& posData = extractPositions(context);
vector<RealVec>& forceData = extractForces(context);
AmoebaReferenceVdwForce vdwForce( sigmaCombiningRule, epsilonCombiningRule, AmoebaReferenceVdwForce::NoCutoff );
RealOpenMM energy = vdwForce.calculateForceAndEnergy( numParticles, posData, indexIVs, indexClasses, sigmas, epsilons, reductions, allExclusions, forceData);
return static_cast<double>(energy);
......@@ -674,8 +674,8 @@ void ReferenceCalcAmoebaWcaDispersionForceKernel::initialize(const System& syste
}
double ReferenceCalcAmoebaWcaDispersionForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) {
RealOpenMM** posData = extractPositions(context);
RealOpenMM** forceData = extractForces(context);
vector<RealVec>& posData = extractPositions(context);
vector<RealVec>& forceData = extractForces(context);
AmoebaReferenceWcaDispersionForce amoebaReferenceWcaDispersionForce( epso, epsh, rmino, rminh, awater, shctd, dispoff, slevy );
RealOpenMM energy = amoebaReferenceWcaDispersionForce.calculateForceAndEnergy( numParticles, posData, radii, epsilons, totalMaximumDispersionEnergy, forceData);
return static_cast<double>(energy);
......
......@@ -25,6 +25,8 @@
#include "AmoebaReferenceForce.h"
#include <vector>
using OpenMM::RealVec;
/**---------------------------------------------------------------------------------------
Load delta of two vectors
......@@ -35,7 +37,7 @@
--------------------------------------------------------------------------------------- */
void AmoebaReferenceForce::loadDeltaR( const RealOpenMM* xVector, const RealOpenMM* yVector,
void AmoebaReferenceForce::loadDeltaR( const RealVec& xVector, const RealVec& yVector,
std::vector<RealOpenMM>& deltaR ){
......
......@@ -25,7 +25,7 @@
#ifndef __AmoebaReferenceForce_H__
#define __AmoebaReferenceForce_H__
#include "SimTKUtilities/SimTKOpenMMRealType.h"
#include "SimTKUtilities/RealVec.h"
#include "openmm/Vec3.h"
#include <vector>
......@@ -62,7 +62,7 @@ public:
--------------------------------------------------------------------------------------- */
static void loadDeltaR( const RealOpenMM* xVector, const RealOpenMM* yVector,
static void loadDeltaR( const OpenMM::RealVec& xVector, const OpenMM::RealVec& yVector,
std::vector<RealOpenMM>& deltaR );
/**---------------------------------------------------------------------------------------
......
......@@ -25,6 +25,9 @@
#include "AmoebaReferenceForce.h"
#include "AmoebaReferenceHarmonicAngleForce.h"
using std::vector;
using OpenMM::RealVec;
/**---------------------------------------------------------------------------------------
Get dEdT and energy prefactor given cosine of angle :: the calculation for different
......@@ -110,12 +113,12 @@ RealOpenMM AmoebaReferenceHarmonicAngleForce::getPrefactorsGivenAngleCosine( Rea
--------------------------------------------------------------------------------------- */
RealOpenMM AmoebaReferenceHarmonicAngleForce::calculateAngleIxn( const RealOpenMM* positionAtomA, const RealOpenMM* positionAtomB,
const RealOpenMM* positionAtomC,
RealOpenMM AmoebaReferenceHarmonicAngleForce::calculateAngleIxn( const RealVec& positionAtomA, const RealVec& positionAtomB,
const RealVec& positionAtomC,
RealOpenMM angle, RealOpenMM angleK,
RealOpenMM angleCubic, RealOpenMM angleQuartic,
RealOpenMM anglePentic, RealOpenMM angleSextic,
RealOpenMM** forces ) const {
RealVec* forces ) const {
// ---------------------------------------------------------------------------------------
......@@ -180,7 +183,7 @@ RealOpenMM AmoebaReferenceHarmonicAngleForce::calculateAngleIxn( const RealOpenM
return energy;
}
RealOpenMM AmoebaReferenceHarmonicAngleForce::calculateForceAndEnergy( int numAngles, RealOpenMM** posData,
RealOpenMM AmoebaReferenceHarmonicAngleForce::calculateForceAndEnergy( int numAngles, vector<RealVec>& posData,
const std::vector<int>& particle1,
const std::vector<int>& particle2,
const std::vector<int>& particle3,
......@@ -190,7 +193,7 @@ RealOpenMM AmoebaReferenceHarmonicAngleForce::calculateForceAndEnergy( int numAn
RealOpenMM angleQuartic,
RealOpenMM anglePentic,
RealOpenMM angleSextic,
RealOpenMM** forceData) const {
vector<RealVec>& forceData) const {
RealOpenMM energy = 0.0;
for (unsigned int ii = 0; ii < numAngles; ii++) {
int particle1Index = particle1[ii];
......@@ -198,7 +201,7 @@ RealOpenMM AmoebaReferenceHarmonicAngleForce::calculateForceAndEnergy( int numAn
int particle3Index = particle3[ii];
RealOpenMM idealAngle = angle[ii];
RealOpenMM angleK = kQuadratic[ii];
RealOpenMM* forces[3];
RealVec forces[3];
forces[0] = forceData[particle1Index];
forces[1] = forceData[particle2Index];
forces[2] = forceData[particle3Index];
......
......@@ -25,7 +25,7 @@
#ifndef __AmoebaReferenceHarmonicAngleForce_H__
#define __AmoebaReferenceHarmonicAngleForce_H__
#include "SimTKUtilities/SimTKOpenMMRealType.h"
#include "SimTKUtilities/RealVec.h"
#include <vector>
// ---------------------------------------------------------------------------------------
......@@ -72,7 +72,7 @@ public:
--------------------------------------------------------------------------------------- */
RealOpenMM calculateForceAndEnergy( int numAngles, RealOpenMM** posData,
RealOpenMM calculateForceAndEnergy( int numAngles, std::vector<OpenMM::RealVec>& posData,
const std::vector<int>& particle1,
const std::vector<int>& particle2,
const std::vector<int>& particle3,
......@@ -82,7 +82,7 @@ public:
RealOpenMM globalHarmonicAngleQuartic,
RealOpenMM globalHarmonicAnglePentic,
RealOpenMM globalHarmonicAngleSextic,
RealOpenMM** forceData ) const;
std::vector<OpenMM::RealVec>& forceData ) const;
private:
......@@ -128,12 +128,12 @@ private:
--------------------------------------------------------------------------------------- */
RealOpenMM calculateAngleIxn( const RealOpenMM* positionAtomA, const RealOpenMM* positionAtomB,
const RealOpenMM* positionAtomC,
RealOpenMM calculateAngleIxn( const OpenMM::RealVec& positionAtomA, const OpenMM::RealVec& positionAtomB,
const OpenMM::RealVec& positionAtomC,
RealOpenMM angle, RealOpenMM angleK,
RealOpenMM angleCubic, RealOpenMM angleQuartic,
RealOpenMM anglePentic, RealOpenMM angleSextic,
RealOpenMM** forces ) const;
OpenMM::RealVec* forces ) const;
};
......
......@@ -25,6 +25,9 @@
#include "AmoebaReferenceHarmonicBondForce.h"
#include "AmoebaReferenceForce.h"
using std::vector;
using OpenMM::RealVec;
/**---------------------------------------------------------------------------------------
Calculate Amoeba harmonic bond ixn (force and energy)
......@@ -41,10 +44,10 @@
--------------------------------------------------------------------------------------- */
RealOpenMM AmoebaReferenceHarmonicBondForce::calculateBondIxn( const RealOpenMM* positionAtomA, const RealOpenMM* positionAtomB,
RealOpenMM AmoebaReferenceHarmonicBondForce::calculateBondIxn( const RealVec& positionAtomA, const RealVec& positionAtomB,
RealOpenMM bondLength, RealOpenMM bondK,
RealOpenMM bondCubic, RealOpenMM bondQuartic,
RealOpenMM** forces ) const {
RealVec* forces ) const {
// ---------------------------------------------------------------------------------------
......@@ -85,21 +88,21 @@ RealOpenMM AmoebaReferenceHarmonicBondForce::calculateBondIxn( const RealOpenMM*
}
RealOpenMM AmoebaReferenceHarmonicBondForce::calculateForceAndEnergy( int numBonds,
RealOpenMM** particlePositions,
vector<RealVec>& particlePositions,
const std::vector<int>& particle1,
const std::vector<int>& particle2,
const std::vector<RealOpenMM>& length,
const std::vector<RealOpenMM>& kQuadratic,
RealOpenMM globalHarmonicBondCubic,
RealOpenMM globalHarmonicBondQuartic,
RealOpenMM** forceData ) const {
vector<RealVec>& forceData ) const {
RealOpenMM energy = 0.0;
for( int ii = 0; ii < numBonds; ii++ ){
int particle1Index = particle1[ii];
int particle2Index = particle2[ii];
RealOpenMM bondLength = length[ii];
RealOpenMM bondK = kQuadratic[ii];
RealOpenMM* forces[2];
RealVec forces[2];
forces[0] = forceData[particle1Index];
forces[1] = forceData[particle2Index];
energy += calculateBondIxn( particlePositions[particle1Index], particlePositions[particle2Index],
......
......@@ -25,7 +25,7 @@
#ifndef __AmoebaReferenceHarmonicBondForce_H__
#define __AmoebaReferenceHarmonicBondForce_H__
#include "SimTKUtilities/SimTKOpenMMRealType.h"
#include "SimTKUtilities/RealVec.h"
#include <vector>
// ---------------------------------------------------------------------------------------
......@@ -69,13 +69,13 @@ public:
--------------------------------------------------------------------------------------- */
RealOpenMM calculateForceAndEnergy( int numBonds, RealOpenMM** posData,
RealOpenMM calculateForceAndEnergy( int numBonds, std::vector<OpenMM::RealVec>& posData,
const std::vector<int>& particle1,
const std::vector<int>& particle2,
const std::vector<RealOpenMM>& bondLength,
const std::vector<RealOpenMM>& bondK,
RealOpenMM bondCubic, RealOpenMM bondQuartic,
RealOpenMM** forceData ) const;
std::vector<OpenMM::RealVec>& forceData ) const;
private:
......@@ -95,10 +95,10 @@ private:
--------------------------------------------------------------------------------------- */
RealOpenMM calculateBondIxn( const RealOpenMM* positionAtomA, const RealOpenMM* positionAtomB,
RealOpenMM calculateBondIxn( const OpenMM::RealVec& positionAtomA, const OpenMM::RealVec& positionAtomB,
RealOpenMM bondLength, RealOpenMM bondK,
RealOpenMM bondCubic, RealOpenMM bondQuartic,
RealOpenMM** forces ) const;
OpenMM::RealVec* forces ) const;
};
......
......@@ -25,6 +25,9 @@
#include "AmoebaReferenceForce.h"
#include "AmoebaReferenceHarmonicInPlaneAngleForce.h"
using std::vector;
using OpenMM::RealVec;
/**---------------------------------------------------------------------------------------
Get dEdT and energy prefactor given cosine of angle :: the calculation for different
......@@ -111,12 +114,12 @@ RealOpenMM AmoebaReferenceHarmonicInPlaneAngleForce::getPrefactorsGivenAngleCosi
--------------------------------------------------------------------------------------- */
RealOpenMM AmoebaReferenceHarmonicInPlaneAngleForce::calculateAngleIxn( const RealOpenMM* positionAtomA, const RealOpenMM* positionAtomB,
const RealOpenMM* positionAtomC, const RealOpenMM* positionAtomD,
RealOpenMM AmoebaReferenceHarmonicInPlaneAngleForce::calculateAngleIxn( const RealVec& positionAtomA, const RealVec& positionAtomB,
const RealVec& positionAtomC, const RealVec& positionAtomD,
RealOpenMM angle, RealOpenMM angleK,
RealOpenMM angleCubic, RealOpenMM angleQuartic,
RealOpenMM anglePentic, RealOpenMM angleSextic,
RealOpenMM** forces ) const {
RealVec* forces ) const {
// ---------------------------------------------------------------------------------------
......@@ -242,7 +245,7 @@ RealOpenMM AmoebaReferenceHarmonicInPlaneAngleForce::calculateAngleIxn( const Re
}
RealOpenMM AmoebaReferenceHarmonicInPlaneAngleForce::calculateForceAndEnergy( int numAngles, RealOpenMM** posData,
RealOpenMM AmoebaReferenceHarmonicInPlaneAngleForce::calculateForceAndEnergy( int numAngles, vector<RealVec>& posData,
const std::vector<int>& particle1,
const std::vector<int>& particle2,
const std::vector<int>& particle3,
......@@ -253,7 +256,7 @@ RealOpenMM AmoebaReferenceHarmonicInPlaneAngleForce::calculateForceAndEnergy( in
RealOpenMM angleQuartic,
RealOpenMM anglePentic,
RealOpenMM angleSextic,
RealOpenMM** forceData) const {
vector<RealVec>& forceData) const {
RealOpenMM energy = 0.0;
for (unsigned int ii = 0; ii < numAngles; ii++) {
int particle1Index = particle1[ii];
......@@ -262,7 +265,7 @@ RealOpenMM AmoebaReferenceHarmonicInPlaneAngleForce::calculateForceAndEnergy( in
int particle4Index = particle4[ii];
RealOpenMM idealAngle = angle[ii];
RealOpenMM angleK = kQuadratic[ii];
RealOpenMM* forces[4];
RealVec forces[4];
forces[0] = forceData[particle1Index];
forces[1] = forceData[particle2Index];
forces[2] = forceData[particle3Index];
......
......@@ -25,7 +25,7 @@
#ifndef __AmoebaReferenceHarmonicInPlaneAngleForce_H__
#define __AmoebaReferenceHarmonicInPlaneAngleForce_H__
#include "SimTKUtilities/SimTKOpenMMRealType.h"
#include "SimTKUtilities/RealVec.h"
#include <vector>
// ---------------------------------------------------------------------------------------
......@@ -73,7 +73,7 @@ public:
--------------------------------------------------------------------------------------- */
RealOpenMM calculateForceAndEnergy( int numAngles, RealOpenMM** posData,
RealOpenMM calculateForceAndEnergy( int numAngles, std::vector<OpenMM::RealVec>& posData,
const std::vector<int>& particle1,
const std::vector<int>& particle2,
const std::vector<int>& particle3,
......@@ -84,7 +84,7 @@ public:
RealOpenMM globalHarmonicAngleQuartic,
RealOpenMM globalHarmonicAnglePentic,
RealOpenMM globalHarmonicAngleSextic,
RealOpenMM** forceData ) const;
std::vector<OpenMM::RealVec>& forceData ) const;
private:
......@@ -131,12 +131,12 @@ private:
--------------------------------------------------------------------------------------- */
RealOpenMM calculateAngleIxn( const RealOpenMM* positionAtomA, const RealOpenMM* positionAtomB,
const RealOpenMM* positionAtomC, const RealOpenMM* positionAtomD,
RealOpenMM calculateAngleIxn( const OpenMM::RealVec& positionAtomA, const OpenMM::RealVec& positionAtomB,
const OpenMM::RealVec& positionAtomC, const OpenMM::RealVec& positionAtomD,
RealOpenMM angle, RealOpenMM angleK,
RealOpenMM angleCubic, RealOpenMM angleQuartic,
RealOpenMM anglePentic, RealOpenMM angleSextic,
RealOpenMM** forces ) const;
OpenMM::RealVec* forces ) const;
};
......
......@@ -27,6 +27,9 @@
#include <sstream>
#include <algorithm>
using std::vector;
using OpenMM::RealVec;
#define AMOEBA_DEBUG
AmoebaReferenceMultipoleForce::AmoebaReferenceMultipoleForce( ) : _nonbondedMethod(NoCutoff) {
......@@ -134,7 +137,7 @@ void AmoebaReferenceMultipoleForce::setMutualInducedDipoleTargetEpsilon( RealOpe
_mutualInducedDipoleTargetEpsilon = mutualInducedDipoleTargetEpsilon;
}
void AmoebaReferenceMultipoleForce::getDelta( unsigned int particleI, unsigned int particleJ, RealOpenMM** particlePositions,
void AmoebaReferenceMultipoleForce::getDelta( unsigned int particleI, unsigned int particleJ, vector<RealVec>& particlePositions,
RealOpenMM* delta ) const {
delta[0] = particlePositions[particleJ][0] - particlePositions[particleI][0];
......@@ -332,7 +335,7 @@ void AmoebaReferenceMultipoleForce::getScaleFactors( unsigned int particleI, uns
scaleFactors[U_SCALE] = getScaleFactor( particleI, particleJ, U_SCALE );
}
void AmoebaReferenceMultipoleForce::loadParticleData( RealOpenMM** particlePositions,
void AmoebaReferenceMultipoleForce::loadParticleData( vector<RealVec>& particlePositions,
const std::vector<RealOpenMM>& charges,
const std::vector<RealOpenMM>& dipoles,
const std::vector<RealOpenMM>& quadrupoles,
......@@ -1023,7 +1026,7 @@ fprintf( stderr, "MIb %3u eps=%15.7e %15.7e %15.7e\n", iteration, epsilonDirect,
RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffElectrostaticPairIxn( const MultipoleParticleData& particleI,
const MultipoleParticleData& particleK,
RealOpenMM* scalingFactors, RealOpenMM** forces,
RealOpenMM* scalingFactors, vector<RealVec>& forces,
std::vector<Vec3>& torque ) const {
// ---------------------------------------------------------------------------------------
......@@ -1545,7 +1548,7 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForce( const MultipoleParticleDat
const MultipoleParticleData& particleU,
const MultipoleParticleData& particleV,
MultipoleParticleData* particleW,
int axisType, const Vec3& torque, RealOpenMM** forces ) const {
int axisType, const Vec3& torque, vector<RealVec>& forces ) const {
// ---------------------------------------------------------------------------------------
......@@ -1782,7 +1785,7 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForce( const MultipoleParticleDat
void AmoebaReferenceMultipoleForce::mapTorqueToForceOld( const MultipoleParticleData& particleI,
const MultipoleParticleData& particleU,
const MultipoleParticleData& particleV,
int axisType, const Vec3& torque, RealOpenMM** forces ) const {
int axisType, const Vec3& torque, vector<RealVec>& forces ) const {
// ---------------------------------------------------------------------------------------
......@@ -1877,7 +1880,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffElectrostatic( std::v
const std::vector<int>& multipoleAtomZs,
const std::vector<int>& multipoleAtomXs,
const std::vector<int>& multipoleAtomYs,
RealOpenMM** forces ) const {
vector<RealVec>& forces ) const {
// ---------------------------------------------------------------------------------------
......@@ -1982,7 +1985,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffElectrostatic( std::v
}
RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffForceAndEnergy( unsigned int numParticles,
RealOpenMM** particlePositions,
vector<RealVec>& particlePositions,
const std::vector<RealOpenMM>& charges,
const std::vector<RealOpenMM>& dipoles,
const std::vector<RealOpenMM>& quadrupoles,
......@@ -1993,7 +1996,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffForceAndEnergy( unsig
const std::vector<int>& multipoleAtomZs,
const std::vector<int>& multipoleAtomXs,
const std::vector<int>& multipoleAtomYs,
RealOpenMM** forces ){
vector<RealVec>& forces ){
// ---------------------------------------------------------------------------------------
......@@ -2091,7 +2094,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffForceAndEnergy( unsig
}
RealOpenMM AmoebaReferenceMultipoleForce::calculateForceAndEnergy( int numParticles,
RealOpenMM** particlePositions,
vector<RealVec>& particlePositions,
const std::vector<RealOpenMM>& charges,
const std::vector<RealOpenMM>& dipoles,
const std::vector<RealOpenMM>& quadrupoles,
......@@ -2103,7 +2106,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateForceAndEnergy( int numPartic
const std::vector<int>& multipoleAtomXs,
const std::vector<int>& multipoleAtomYs,
const std::vector< std::vector< std::vector<int> > >& multipoleParticleCovalentInfo,
RealOpenMM** forces ){
vector<RealVec>& forces ){
setupScaleMaps( multipoleParticleCovalentInfo );
......
......@@ -25,7 +25,7 @@
#ifndef __AmoebaReferenceMultipoleForce_H__
#define __AmoebaReferenceMultipoleForce_H__
#include "SimTKUtilities/SimTKOpenMMRealType.h"
#include "SimTKUtilities/RealVec.h"
#include "openmm/Vec3.h"
#include "AmoebaMultipoleForce.h"
#include <string>
......@@ -203,7 +203,7 @@ public:
--------------------------------------------------------------------------------------- */
RealOpenMM calculateForceAndEnergy( int numParticles, RealOpenMM** particlePositions,
RealOpenMM calculateForceAndEnergy( int numParticles, std::vector<OpenMM::RealVec>& particlePositions,
const std::vector<RealOpenMM>& charges,
const std::vector<RealOpenMM>& dipoles,
const std::vector<RealOpenMM>& quadrupoles,
......@@ -215,7 +215,7 @@ public:
const std::vector<int>& multipoleAtomXs,
const std::vector<int>& multipoleAtomYs,
const std::vector< std::vector< std::vector<int> > >& multipoleAtomCovalentInfo,
RealOpenMM** forces );
std::vector<OpenMM::RealVec>& forces );
......@@ -270,7 +270,7 @@ private:
void initialize( void );
void loadParticleData( RealOpenMM** particlePositions,
void loadParticleData( std::vector<OpenMM::RealVec>& particlePositions,
const std::vector<RealOpenMM>& charges,
const std::vector<RealOpenMM>& dipoles,
const std::vector<RealOpenMM>& quadrupoles,
......@@ -319,7 +319,7 @@ private:
--------------------------------------------------------------------------------------- */
void getDelta( unsigned int particleI, unsigned int particleJ, RealOpenMM** particlePositions, RealOpenMM* delta ) const;
void getDelta( unsigned int particleI, unsigned int particleJ, std::vector<OpenMM::RealVec>& particlePositions, RealOpenMM* delta ) const;
/**---------------------------------------------------------------------------------------
......@@ -464,7 +464,7 @@ private:
RealOpenMM calculateNoCutoffElectrostaticPairIxn( const MultipoleParticleData& particleI,
const MultipoleParticleData& particleK,
RealOpenMM* scalingFactors, RealOpenMM** forces, std::vector<Vec3>& torque ) const;
RealOpenMM* scalingFactors, std::vector<OpenMM::RealVec>& forces, std::vector<Vec3>& torque ) const;
/**---------------------------------------------------------------------------------------
......@@ -483,19 +483,19 @@ private:
const MultipoleParticleData& particleU,
const MultipoleParticleData& particleV,
MultipoleParticleData* particleW,
int axisType, const Vec3& torque, RealOpenMM** forces ) const;
int axisType, const Vec3& torque, std::vector<OpenMM::RealVec>& forces ) const;
void mapTorqueToForceOld( const MultipoleParticleData& particleI,
const MultipoleParticleData& particleU,
const MultipoleParticleData& particleV,
int axisType, const Vec3& torque, RealOpenMM** forces ) const;
int axisType, const Vec3& torque, std::vector<OpenMM::RealVec>& forces ) const;
RealOpenMM calculateNoCutoffElectrostatic( std::vector<MultipoleParticleData>& particleData,
const std::vector<int>& axisTypes,
const std::vector<int>& multipoleAtomZs,
const std::vector<int>& multipoleAtomXs,
const std::vector<int>& multipoleAtomYs,
RealOpenMM** forces ) const;
std::vector<OpenMM::RealVec>& forces ) const;
/**---------------------------------------------------------------------------------------
......@@ -515,7 +515,7 @@ private:
--------------------------------------------------------------------------------------- */
RealOpenMM calculateNoCutoffForceAndEnergy( unsigned int numParticles, RealOpenMM** particlePositions,
RealOpenMM calculateNoCutoffForceAndEnergy( unsigned int numParticles, std::vector<OpenMM::RealVec>& particlePositions,
const std::vector<RealOpenMM>& charges,
const std::vector<RealOpenMM>& dipoles,
const std::vector<RealOpenMM>& quadrupoles,
......@@ -526,7 +526,7 @@ private:
const std::vector<int>& multipoleAtomZs,
const std::vector<int>& multipoleAtomXs,
const std::vector<int>& multipoleAtomYs,
RealOpenMM** forces );
std::vector<OpenMM::RealVec>& forces );
};
......
......@@ -25,6 +25,9 @@
#include "AmoebaReferenceForce.h"
#include "AmoebaReferenceOutOfPlaneBendForce.h"
using std::vector;
using OpenMM::RealVec;
/**---------------------------------------------------------------------------------------
Calculate Amoeba Out-Of-Plane-Bend ixn (force and energy)
......@@ -45,12 +48,12 @@
--------------------------------------------------------------------------------------- */
RealOpenMM AmoebaReferenceOutOfPlaneBendForce::calculateOutOfPlaneBendIxn( const RealOpenMM* positionAtomA, const RealOpenMM* positionAtomB,
const RealOpenMM* positionAtomC, const RealOpenMM* positionAtomD,
RealOpenMM AmoebaReferenceOutOfPlaneBendForce::calculateOutOfPlaneBendIxn( const RealVec& positionAtomA, const RealVec& positionAtomB,
const RealVec& positionAtomC, const RealVec& positionAtomD,
RealOpenMM angleK,
RealOpenMM angleCubic, RealOpenMM angleQuartic,
RealOpenMM anglePentic, RealOpenMM angleSextic,
RealOpenMM** forces ) const {
RealVec* forces ) const {
// ---------------------------------------------------------------------------------------
......@@ -193,7 +196,7 @@ RealOpenMM AmoebaReferenceOutOfPlaneBendForce::calculateOutOfPlaneBendIxn( const
return energy;
}
RealOpenMM AmoebaReferenceOutOfPlaneBendForce::calculateForceAndEnergy( int numOutOfPlaneBends, RealOpenMM** posData,
RealOpenMM AmoebaReferenceOutOfPlaneBendForce::calculateForceAndEnergy( int numOutOfPlaneBends, vector<RealVec>& posData,
const std::vector<int>& particle1,
const std::vector<int>& particle2,
const std::vector<int>& particle3,
......@@ -203,7 +206,7 @@ RealOpenMM AmoebaReferenceOutOfPlaneBendForce::calculateForceAndEnergy( int numO
RealOpenMM angleQuartic,
RealOpenMM anglePentic,
RealOpenMM angleSextic,
RealOpenMM** forceData) const {
vector<RealVec>& forceData) const {
RealOpenMM energy = 0.0;
for (unsigned int ii = 0; ii < static_cast<unsigned int>(numOutOfPlaneBends); ii++) {
int particle1Index = particle1[ii];
......@@ -211,7 +214,7 @@ RealOpenMM AmoebaReferenceOutOfPlaneBendForce::calculateForceAndEnergy( int numO
int particle3Index = particle3[ii];
int particle4Index = particle4[ii];
RealOpenMM kAngle = kQuadratic[ii];
RealOpenMM* forces[4];
RealVec forces[4];
forces[0] = forceData[particle1Index];
forces[1] = forceData[particle2Index];
forces[2] = forceData[particle3Index];
......
......@@ -25,7 +25,7 @@
#ifndef __AmoebaReferenceOutOfPlaneBendForce_H__
#define __AmoebaReferenceOutOfPlaneBendForce_H__
#include "SimTKUtilities/SimTKOpenMMRealType.h"
#include "SimTKUtilities/RealVec.h"
#include <vector>
// ---------------------------------------------------------------------------------------
......@@ -72,7 +72,7 @@ public:
--------------------------------------------------------------------------------------- */
RealOpenMM calculateForceAndEnergy( int numOutOfPlaneBends, RealOpenMM** posData,
RealOpenMM calculateForceAndEnergy( int numOutOfPlaneBends, std::vector<OpenMM::RealVec>& posData,
const std::vector<int>& particle1,
const std::vector<int>& particle2,
const std::vector<int>& particle3,
......@@ -82,7 +82,7 @@ public:
RealOpenMM angleQuartic,
RealOpenMM anglePentic,
RealOpenMM angleSextic,
RealOpenMM** forceData) const;
std::vector<OpenMM::RealVec>& forceData) const;
private:
......@@ -105,12 +105,12 @@ private:
--------------------------------------------------------------------------------------- */
RealOpenMM calculateOutOfPlaneBendIxn( const RealOpenMM* positionAtomA, const RealOpenMM* positionAtomB,
const RealOpenMM* positionAtomC, const RealOpenMM* positionAtomD,
RealOpenMM calculateOutOfPlaneBendIxn( const OpenMM::RealVec& positionAtomA, const OpenMM::RealVec& positionAtomB,
const OpenMM::RealVec& positionAtomC, const OpenMM::RealVec& positionAtomD,
RealOpenMM angleK,
RealOpenMM angleCubic, RealOpenMM angleQuartic,
RealOpenMM anglePentic, RealOpenMM angleSextic,
RealOpenMM** forces ) const;
OpenMM::RealVec* forces ) const;
};
......
......@@ -26,6 +26,9 @@
#include "AmoebaReferencePiTorsionForce.h"
#include <vector>
using std::vector;
using OpenMM::RealVec;
/**---------------------------------------------------------------------------------------
Calculate Amoeba pi-torsion ixn (force and energy)
......@@ -43,10 +46,10 @@
--------------------------------------------------------------------------------------- */
RealOpenMM AmoebaReferencePiTorsionForce::calculatePiTorsionIxn( const RealOpenMM* positionAtomA, const RealOpenMM* positionAtomB,
const RealOpenMM* positionAtomC, const RealOpenMM* positionAtomD,
const RealOpenMM* positionAtomE, const RealOpenMM* positionAtomF,
RealOpenMM piTorsionK, RealOpenMM** forces ) const {
RealOpenMM AmoebaReferencePiTorsionForce::calculatePiTorsionIxn( const RealVec& positionAtomA, const RealVec& positionAtomB,
const RealVec& positionAtomC, const RealVec& positionAtomD,
const RealVec& positionAtomE, const RealVec& positionAtomF,
RealOpenMM piTorsionK, RealVec* forces ) const {
// ---------------------------------------------------------------------------------------
......@@ -183,7 +186,7 @@ RealOpenMM AmoebaReferencePiTorsionForce::calculatePiTorsionIxn( const RealOpenM
}
RealOpenMM AmoebaReferencePiTorsionForce::calculateForceAndEnergy( int numPiTorsions, RealOpenMM** posData,
RealOpenMM AmoebaReferencePiTorsionForce::calculateForceAndEnergy( int numPiTorsions, vector<RealVec>& posData,
const std::vector<int>& particle1,
const std::vector<int>& particle2,
const std::vector<int>& particle3,
......@@ -191,7 +194,7 @@ RealOpenMM AmoebaReferencePiTorsionForce::calculateForceAndEnergy( int numPiTors
const std::vector<int>& particle5,
const std::vector<int>& particle6,
const std::vector<RealOpenMM>& kTorsion,
RealOpenMM** forceData ) const {
vector<RealVec>& forceData ) const {
RealOpenMM energy = 0.0;
for (unsigned int ii = 0; ii < static_cast<unsigned int>(numPiTorsions); ii++) {
......@@ -202,7 +205,7 @@ RealOpenMM AmoebaReferencePiTorsionForce::calculateForceAndEnergy( int numPiTors
int particle5Index = particle5[ii];
int particle6Index = particle6[ii];
RealOpenMM* forces[6];
RealVec forces[6];
forces[0] = forceData[particle1Index];
forces[1] = forceData[particle2Index];
forces[2] = forceData[particle3Index];
......
......@@ -25,7 +25,7 @@
#ifndef __AmoebaReferencePiTorsionForce_H__
#define __AmoebaReferencePiTorsionForce_H__
#include "SimTKUtilities/SimTKOpenMMRealType.h"
#include "SimTKUtilities/RealVec.h"
#include <vector>
// ---------------------------------------------------------------------------------------
......@@ -72,7 +72,7 @@ public:
--------------------------------------------------------------------------------------- */
RealOpenMM calculateForceAndEnergy( int numPiTorsions, RealOpenMM** posData,
RealOpenMM calculateForceAndEnergy( int numPiTorsions, std::vector<OpenMM::RealVec>& posData,
const std::vector<int>& particle1,
const std::vector<int>& particle2,
const std::vector<int>& particle3,
......@@ -80,7 +80,7 @@ public:
const std::vector<int>& particle5,
const std::vector<int>& particle6,
const std::vector<RealOpenMM>& kTorsion,
RealOpenMM** forceData ) const;
std::vector<OpenMM::RealVec>& forceData ) const;
private:
......@@ -102,10 +102,10 @@ private:
--------------------------------------------------------------------------------------- */
RealOpenMM calculatePiTorsionIxn( const RealOpenMM* positionAtomA, const RealOpenMM* positionAtomB,
const RealOpenMM* positionAtomC, const RealOpenMM* positionAtomD,
const RealOpenMM* positionAtomE, const RealOpenMM* positionAtomF,
RealOpenMM kTorsion, RealOpenMM** forces ) const;
RealOpenMM calculatePiTorsionIxn( const OpenMM::RealVec& positionAtomA, const OpenMM::RealVec& positionAtomB,
const OpenMM::RealVec& positionAtomC, const OpenMM::RealVec& positionAtomD,
const OpenMM::RealVec& positionAtomE, const OpenMM::RealVec& positionAtomF,
RealOpenMM kTorsion, OpenMM::RealVec* forces ) const;
};
......
......@@ -26,6 +26,9 @@
#include "AmoebaReferenceStretchBendForce.h"
#include <vector>
using std::vector;
using OpenMM::RealVec;
/**---------------------------------------------------------------------------------------
Calculate Amoeba stretch bend angle ixn (force and energy)
......@@ -46,11 +49,11 @@
--------------------------------------------------------------------------------------- */
RealOpenMM AmoebaReferenceStretchBendForce::calculateStretchBendIxn( const RealOpenMM* positionAtomA, const RealOpenMM* positionAtomB,
const RealOpenMM* positionAtomC,
RealOpenMM AmoebaReferenceStretchBendForce::calculateStretchBendIxn( const RealVec& positionAtomA, const RealVec& positionAtomB,
const RealVec& positionAtomC,
RealOpenMM lengthAB, RealOpenMM lengthCB,
RealOpenMM idealAngle, RealOpenMM kParameter,
RealOpenMM** forces ) const {
RealVec* forces ) const {
// ---------------------------------------------------------------------------------------
......@@ -144,7 +147,7 @@ RealOpenMM AmoebaReferenceStretchBendForce::calculateStretchBendIxn( const RealO
return (kParameter*dt*dr);
}
RealOpenMM AmoebaReferenceStretchBendForce::calculateForceAndEnergy( int numStretchBends, RealOpenMM** posData,
RealOpenMM AmoebaReferenceStretchBendForce::calculateForceAndEnergy( int numStretchBends, vector<RealVec>& posData,
const std::vector<int>& particle1,
const std::vector<int>& particle2,
const std::vector<int>& particle3,
......@@ -152,7 +155,7 @@ RealOpenMM AmoebaReferenceStretchBendForce::calculateForceAndEnergy( int numStre
const std::vector<RealOpenMM>& lengthCBParameters,
const std::vector<RealOpenMM>& angle,
const std::vector<RealOpenMM>& kQuadratic,
RealOpenMM** forceData) const {
vector<RealVec>& forceData) const {
RealOpenMM energy = 0.0;
for (unsigned int ii = 0; ii < static_cast<unsigned int>(numStretchBends); ii++) {
int particle1Index = particle1[ii];
......@@ -162,7 +165,7 @@ RealOpenMM AmoebaReferenceStretchBendForce::calculateForceAndEnergy( int numStre
RealOpenMM cbLength = lengthCBParameters[ii];
RealOpenMM idealAngle = angle[ii];
RealOpenMM angleK = kQuadratic[ii];
RealOpenMM* forces[3];
RealVec forces[3];
forces[0] = forceData[particle1Index];
forces[1] = forceData[particle2Index];
forces[2] = forceData[particle3Index];
......
......@@ -25,7 +25,7 @@
#ifndef __AmoebaReferenceStretchBendForce_H__
#define __AmoebaReferenceStretchBendForce_H__
#include "SimTKUtilities/SimTKOpenMMRealType.h"
#include "SimTKUtilities/RealVec.h"
#include <vector>
// ---------------------------------------------------------------------------------------
......@@ -70,7 +70,7 @@ public:
--------------------------------------------------------------------------------------- */
RealOpenMM calculateForceAndEnergy( int numAngles, RealOpenMM** posData,
RealOpenMM calculateForceAndEnergy( int numAngles, std::vector<OpenMM::RealVec>& posData,
const std::vector<int>& particle1,
const std::vector<int>& particle2,
const std::vector<int>& particle3,
......@@ -78,7 +78,7 @@ public:
const std::vector<RealOpenMM>& lengthCBParameters,
const std::vector<RealOpenMM>& angle,
const std::vector<RealOpenMM>& kQuadratic,
RealOpenMM** forceData ) const;
std::vector<OpenMM::RealVec>& forceData ) const;
private:
......@@ -100,11 +100,11 @@ private:
--------------------------------------------------------------------------------------- */
RealOpenMM calculateStretchBendIxn( const RealOpenMM* positionAtomA, const RealOpenMM* positionAtomB,
const RealOpenMM* positionAtomC,
RealOpenMM calculateStretchBendIxn( const OpenMM::RealVec& positionAtomA, const OpenMM::RealVec& positionAtomB,
const OpenMM::RealVec& positionAtomC,
RealOpenMM lengthAB, RealOpenMM lengthCB,
RealOpenMM idealAngle, RealOpenMM kParameter,
RealOpenMM** forces ) const;
OpenMM::RealVec* forces ) const;
};
......
......@@ -24,6 +24,9 @@
#include "AmoebaReferenceForce.h"
#include "AmoebaReferenceTorsionForce.h"
using std::vector;
using OpenMM::RealVec;
/**---------------------------------------------------------------------------------------
Calculate Amoeba torsion ixn (force and energy)
......@@ -41,12 +44,12 @@
--------------------------------------------------------------------------------------- */
RealOpenMM AmoebaReferenceTorsionForce::calculateTorsionIxn( const RealOpenMM* positionAtomA, const RealOpenMM* positionAtomB,
const RealOpenMM* positionAtomC, const RealOpenMM* positionAtomD,
RealOpenMM AmoebaReferenceTorsionForce::calculateTorsionIxn( const RealVec& positionAtomA, const RealVec& positionAtomB,
const RealVec& positionAtomC, const RealVec& positionAtomD,
const std::vector<RealOpenMM>& torsionParameters1,
const std::vector<RealOpenMM>& torsionParameters2,
const std::vector<RealOpenMM>& torsionParameters3,
RealOpenMM** forces ) const {
RealVec* forces ) const {
// ---------------------------------------------------------------------------------------
......@@ -209,7 +212,7 @@ RealOpenMM AmoebaReferenceTorsionForce::calculateTorsionIxn( const RealOpenMM* p
return energy;
}
RealOpenMM AmoebaReferenceTorsionForce::calculateForceAndEnergy( int numTorsions, RealOpenMM** posData,
RealOpenMM AmoebaReferenceTorsionForce::calculateForceAndEnergy( int numTorsions, vector<RealVec>& posData,
const std::vector<int>& particle1,
const std::vector<int>& particle2,
const std::vector<int>& particle3,
......@@ -217,14 +220,14 @@ RealOpenMM AmoebaReferenceTorsionForce::calculateForceAndEnergy( int numTorsions
const std::vector< std::vector<RealOpenMM> >& torsionParameters1,
const std::vector< std::vector<RealOpenMM> >& torsionParameters2,
const std::vector< std::vector<RealOpenMM> >& torsionParameters3,
RealOpenMM** forceData ) const {
vector<RealVec>& forceData ) const {
RealOpenMM energy = 0.0;
for (unsigned int ii = 0; ii < static_cast<unsigned int>(numTorsions); ii++) {
int particle1Index = particle1[ii];
int particle2Index = particle2[ii];
int particle3Index = particle3[ii];
int particle4Index = particle4[ii];
RealOpenMM* forces[4];
RealVec forces[4];
forces[0] = forceData[particle1Index];
forces[1] = forceData[particle2Index];
forces[2] = forceData[particle3Index];
......
......@@ -25,7 +25,7 @@
#ifndef __AmoebaReferenceTorsionForce_H__
#define __AmoebaReferenceTorsionForce_H__
#include "SimTKUtilities/SimTKOpenMMRealType.h"
#include "SimTKUtilities/RealVec.h"
#include <vector>
// ---------------------------------------------------------------------------------------
......@@ -70,7 +70,7 @@ public:
--------------------------------------------------------------------------------------- */
RealOpenMM calculateForceAndEnergy( int numTorsions, RealOpenMM** posData,
RealOpenMM calculateForceAndEnergy( int numTorsions, std::vector<OpenMM::RealVec>& posData,
const std::vector<int>& particle1,
const std::vector<int>& particle2,
const std::vector<int>& particle3,
......@@ -78,7 +78,7 @@ public:
const std::vector< std::vector<RealOpenMM> >& torsionParameters1,
const std::vector< std::vector<RealOpenMM> >& torsionParameters2,
const std::vector< std::vector<RealOpenMM> >& torsionParameters3,
RealOpenMM** forceData ) const;
std::vector<OpenMM::RealVec>& forceData ) const;
private:
......@@ -99,12 +99,12 @@ private:
--------------------------------------------------------------------------------------- */
RealOpenMM calculateTorsionIxn( const RealOpenMM* positionAtomA, const RealOpenMM* positionAtomB,
const RealOpenMM* positionAtomC, const RealOpenMM* positionAtomD,
RealOpenMM calculateTorsionIxn( const OpenMM::RealVec& positionAtomA, const OpenMM::RealVec& positionAtomB,
const OpenMM::RealVec& positionAtomC, const OpenMM::RealVec& positionAtomD,
const std::vector<RealOpenMM>& torsionParameters1,
const std::vector<RealOpenMM>& torsionParameters2,
const std::vector<RealOpenMM>& torsionParameters3,
RealOpenMM** forces ) const;
OpenMM::RealVec* forces ) const;
};
......
......@@ -25,6 +25,9 @@
#include "AmoebaReferenceForce.h"
#include "AmoebaReferenceTorsionTorsionForce.h"
using std::vector;
using OpenMM::RealVec;
/**---------------------------------------------------------------------------------------
Load grid values from rectenclosing angles
......@@ -273,8 +276,8 @@ void AmoebaReferenceTorsionTorsionForce::getBicubicValues(
--------------------------------------------------------------------------------------- */
int AmoebaReferenceTorsionTorsionForce::checkTorsionSign(
const RealOpenMM* positionAtomA, const RealOpenMM* positionAtomB,
const RealOpenMM* positionAtomC, const RealOpenMM* positionAtomD ) const {
const RealVec& positionAtomA, const RealVec& positionAtomB,
const RealVec& positionAtomC, const RealVec& positionAtomD ) const {
// ---------------------------------------------------------------------------------------
......@@ -323,11 +326,11 @@ int AmoebaReferenceTorsionTorsionForce::checkTorsionSign(
--------------------------------------------------------------------------------------- */
RealOpenMM AmoebaReferenceTorsionTorsionForce::calculateTorsionTorsionIxn( const RealOpenMM* positionAtomA, const RealOpenMM* positionAtomB,
const RealOpenMM* positionAtomC, const RealOpenMM* positionAtomD,
const RealOpenMM* positionAtomE, const RealOpenMM* positionChiralCheckAtom,
RealOpenMM AmoebaReferenceTorsionTorsionForce::calculateTorsionTorsionIxn( const RealVec& positionAtomA, const RealVec& positionAtomB,
const RealVec& positionAtomC, const RealVec& positionAtomD,
const RealVec& positionAtomE, const RealVec* positionChiralCheckAtom,
const std::vector< std::vector< std::vector<RealOpenMM> > >& grid,
RealOpenMM** forces ) const {
RealVec* forces ) const {
// ---------------------------------------------------------------------------------------
......@@ -421,7 +424,7 @@ RealOpenMM AmoebaReferenceTorsionTorsionForce::calculateTorsionTorsionIxn( const
// is 'negative'
if( positionChiralCheckAtom ){
sign = checkTorsionSign( positionChiralCheckAtom, positionAtomB, positionAtomC, positionAtomD );
sign = checkTorsionSign( *positionChiralCheckAtom, positionAtomB, positionAtomC, positionAtomD );
if( sign < zero ){
angle1 = -angle1;
angle2 = -angle2;
......@@ -549,7 +552,7 @@ RealOpenMM AmoebaReferenceTorsionTorsionForce::calculateTorsionTorsionIxn( const
return gridEnergy;
}
RealOpenMM AmoebaReferenceTorsionTorsionForce::calculateForceAndEnergy( int numTorsionTorsions, RealOpenMM** posData,
RealOpenMM AmoebaReferenceTorsionTorsionForce::calculateForceAndEnergy( int numTorsionTorsions, vector<RealVec>& posData,
const std::vector<int>& particle1,
const std::vector<int>& particle2,
const std::vector<int>& particle3,
......@@ -558,7 +561,7 @@ RealOpenMM AmoebaReferenceTorsionTorsionForce::calculateForceAndEnergy( int numT
const std::vector<int>& chiralCheckAtom,
const std::vector<int>& gridIndices,
const std::vector< std::vector< std::vector< std::vector<RealOpenMM> > > >& torsionTorsionGrids,
RealOpenMM** forceData ) const {
vector<RealVec>& forceData ) const {
RealOpenMM energy = 0.0;
for (unsigned int ii = 0; ii < static_cast<unsigned int>(numTorsionTorsions); ii++) {
......@@ -572,16 +575,16 @@ RealOpenMM AmoebaReferenceTorsionTorsionForce::calculateForceAndEnergy( int numT
int gridIndex = gridIndices[ii];
RealOpenMM* forces[5];
RealVec forces[5];
forces[0] = forceData[particle1Index];
forces[1] = forceData[particle2Index];
forces[2] = forceData[particle3Index];
forces[3] = forceData[particle4Index];
forces[4] = forceData[particle5Index];
RealOpenMM* chiralCheckAtom;
RealVec* chiralCheckAtom;
if( chiralCheckAtomIndex >= 0 ){
chiralCheckAtom = posData[chiralCheckAtomIndex];
chiralCheckAtom = &posData[chiralCheckAtomIndex];
} else {
chiralCheckAtom = NULL;
}
......
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