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

Updated Amoeba plugin based on refactoring of reference platform

parent c27f5d1f
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#ifndef __AmoebaReferenceTorsionTorsionForce_H__ #ifndef __AmoebaReferenceTorsionTorsionForce_H__
#define __AmoebaReferenceTorsionTorsionForce_H__ #define __AmoebaReferenceTorsionTorsionForce_H__
#include "SimTKUtilities/SimTKOpenMMRealType.h" #include "SimTKUtilities/RealVec.h"
#include <vector> #include <vector>
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
...@@ -71,7 +71,7 @@ public: ...@@ -71,7 +71,7 @@ public:
--------------------------------------------------------------------------------------- */ --------------------------------------------------------------------------------------- */
RealOpenMM calculateForceAndEnergy( int numTorsionTorsions, RealOpenMM** posData, RealOpenMM calculateForceAndEnergy( int numTorsionTorsions, std::vector<OpenMM::RealVec>& posData,
const std::vector<int>& particle1, const std::vector<int>& particle1,
const std::vector<int>& particle2, const std::vector<int>& particle2,
const std::vector<int>& particle3, const std::vector<int>& particle3,
...@@ -80,7 +80,7 @@ public: ...@@ -80,7 +80,7 @@ public:
const std::vector<int>& chiralCheckAtom, const std::vector<int>& chiralCheckAtom,
const std::vector<int>& gridIndices, const std::vector<int>& gridIndices,
const std::vector< std::vector< std::vector< std::vector<RealOpenMM> > > >& torsionTorsionGrids, const std::vector< std::vector< std::vector< std::vector<RealOpenMM> > > >& torsionTorsionGrids,
RealOpenMM** forceData ) const; std::vector<OpenMM::RealVec>& forceData ) const;
private: private:
...@@ -185,8 +185,8 @@ private: ...@@ -185,8 +185,8 @@ private:
--------------------------------------------------------------------------------------- */ --------------------------------------------------------------------------------------- */
int checkTorsionSign( const RealOpenMM* positionAtomA, const RealOpenMM* positionAtomB, int checkTorsionSign( const OpenMM::RealVec& positionAtomA, const OpenMM::RealVec& positionAtomB,
const RealOpenMM* positionAtomC, const RealOpenMM* positionAtomD ) const; const OpenMM::RealVec& positionAtomC, const OpenMM::RealVec& positionAtomD ) const;
/**--------------------------------------------------------------------------------------- /**---------------------------------------------------------------------------------------
...@@ -206,11 +206,11 @@ private: ...@@ -206,11 +206,11 @@ private:
--------------------------------------------------------------------------------------- */ --------------------------------------------------------------------------------------- */
RealOpenMM calculateTorsionTorsionIxn( const RealOpenMM* positionAtomA, const RealOpenMM* positionAtomB, RealOpenMM calculateTorsionTorsionIxn( const OpenMM::RealVec& positionAtomA, const OpenMM::RealVec& positionAtomB,
const RealOpenMM* positionAtomC, const RealOpenMM* positionAtomD, const OpenMM::RealVec& positionAtomC, const OpenMM::RealVec& positionAtomD,
const RealOpenMM* positionAtomE, const RealOpenMM* chiralCheckAtom, const OpenMM::RealVec& positionAtomE, const OpenMM::RealVec* chiralCheckAtom,
const std::vector< std::vector< std::vector<RealOpenMM> > >& grid, const std::vector< std::vector< std::vector<RealOpenMM> > >& grid,
RealOpenMM** forces ) const; OpenMM::RealVec* forces ) const;
}; };
......
...@@ -25,6 +25,9 @@ ...@@ -25,6 +25,9 @@
#include "AmoebaReferenceUreyBradleyForce.h" #include "AmoebaReferenceUreyBradleyForce.h"
#include "AmoebaReferenceForce.h" #include "AmoebaReferenceForce.h"
using std::vector;
using OpenMM::RealVec;
/**--------------------------------------------------------------------------------------- /**---------------------------------------------------------------------------------------
Calculate Amoeba UB ixn (force and energy) Calculate Amoeba UB ixn (force and energy)
...@@ -41,10 +44,10 @@ ...@@ -41,10 +44,10 @@
--------------------------------------------------------------------------------------- */ --------------------------------------------------------------------------------------- */
RealOpenMM AmoebaReferenceUreyBradleyForce::calculateUreyBradleyIxn( const RealOpenMM* positionAtomA, const RealOpenMM* positionAtomB, RealOpenMM AmoebaReferenceUreyBradleyForce::calculateUreyBradleyIxn( const RealVec& positionAtomA, const RealVec& positionAtomB,
RealOpenMM idealLength, RealOpenMM kForceConstant, RealOpenMM idealLength, RealOpenMM kForceConstant,
RealOpenMM cubicK, RealOpenMM quarticK, RealOpenMM cubicK, RealOpenMM quarticK,
RealOpenMM** forces ) const { RealVec* forces ) const {
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
...@@ -85,21 +88,21 @@ RealOpenMM AmoebaReferenceUreyBradleyForce::calculateUreyBradleyIxn( const RealO ...@@ -85,21 +88,21 @@ RealOpenMM AmoebaReferenceUreyBradleyForce::calculateUreyBradleyIxn( const RealO
} }
RealOpenMM AmoebaReferenceUreyBradleyForce::calculateForceAndEnergy( int numIxns, RealOpenMM AmoebaReferenceUreyBradleyForce::calculateForceAndEnergy( int numIxns,
RealOpenMM** particlePositions, vector<RealVec>& particlePositions,
const std::vector<int>& particle1, const std::vector<int>& particle1,
const std::vector<int>& particle2, const std::vector<int>& particle2,
const std::vector<RealOpenMM>& length, const std::vector<RealOpenMM>& length,
const std::vector<RealOpenMM>& kQuadratic, const std::vector<RealOpenMM>& kQuadratic,
RealOpenMM globalUreyBradleyCubic, RealOpenMM globalUreyBradleyCubic,
RealOpenMM globalUreyBradleyQuartic, RealOpenMM globalUreyBradleyQuartic,
RealOpenMM** forceData ) const { vector<RealVec>& forceData ) const {
RealOpenMM energy = 0.0; RealOpenMM energy = 0.0;
for( int ii = 0; ii < numIxns; ii++ ){ for( int ii = 0; ii < numIxns; ii++ ){
int particle1Index = particle1[ii]; int particle1Index = particle1[ii];
int particle2Index = particle2[ii]; int particle2Index = particle2[ii];
RealOpenMM idealLength = length[ii]; RealOpenMM idealLength = length[ii];
RealOpenMM kForceConstant = kQuadratic[ii]; RealOpenMM kForceConstant = kQuadratic[ii];
RealOpenMM* forces[2]; RealVec forces[2];
forces[0] = forceData[particle1Index]; forces[0] = forceData[particle1Index];
forces[1] = forceData[particle2Index]; forces[1] = forceData[particle2Index];
energy += calculateUreyBradleyIxn( particlePositions[particle1Index], particlePositions[particle2Index], energy += calculateUreyBradleyIxn( particlePositions[particle1Index], particlePositions[particle2Index],
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#ifndef __AmoebaReferenceUreyBradleyForce_H__ #ifndef __AmoebaReferenceUreyBradleyForce_H__
#define __AmoebaReferenceUreyBradleyForce_H__ #define __AmoebaReferenceUreyBradleyForce_H__
#include "SimTKUtilities/SimTKOpenMMRealType.h" #include "SimTKUtilities/RealVec.h"
#include <vector> #include <vector>
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
...@@ -68,13 +68,13 @@ public: ...@@ -68,13 +68,13 @@ public:
--------------------------------------------------------------------------------------- */ --------------------------------------------------------------------------------------- */
RealOpenMM calculateForceAndEnergy( int numIxns, RealOpenMM** posData, RealOpenMM calculateForceAndEnergy( int numIxns, std::vector<OpenMM::RealVec>& posData,
const std::vector<int>& particle1, const std::vector<int>& particle1,
const std::vector<int>& particle2, const std::vector<int>& particle2,
const std::vector<RealOpenMM>& length, const std::vector<RealOpenMM>& length,
const std::vector<RealOpenMM>& kForce, const std::vector<RealOpenMM>& kForce,
RealOpenMM cubic, RealOpenMM quartic, RealOpenMM cubic, RealOpenMM quartic,
RealOpenMM** forceData ) const; std::vector<OpenMM::RealVec>& forceData ) const;
private: private:
...@@ -94,10 +94,10 @@ private: ...@@ -94,10 +94,10 @@ private:
--------------------------------------------------------------------------------------- */ --------------------------------------------------------------------------------------- */
RealOpenMM calculateUreyBradleyIxn( const RealOpenMM* positionAtomA, const RealOpenMM* positionAtomB, RealOpenMM calculateUreyBradleyIxn( const OpenMM::RealVec& positionAtomA, const OpenMM::RealVec& positionAtomB,
RealOpenMM idealLength, RealOpenMM kForce, RealOpenMM idealLength, RealOpenMM kForce,
RealOpenMM cubic, RealOpenMM quartic, RealOpenMM cubic, RealOpenMM quartic,
RealOpenMM** forces ) const; OpenMM::RealVec* forces ) const;
}; };
......
...@@ -27,6 +27,9 @@ ...@@ -27,6 +27,9 @@
#include <algorithm> #include <algorithm>
#include <cctype> #include <cctype>
using std::vector;
using OpenMM::RealVec;
AmoebaReferenceVdwForce::AmoebaReferenceVdwForce( ) : _nonbondedMethod(NoCutoff) { AmoebaReferenceVdwForce::AmoebaReferenceVdwForce( ) : _nonbondedMethod(NoCutoff) {
setSigmaCombiningRule( "ARITHMETIC" ); setSigmaCombiningRule( "ARITHMETIC" );
...@@ -127,7 +130,7 @@ RealOpenMM AmoebaReferenceVdwForce::hhgEpsilonCombiningRule( RealOpenMM epsilonI ...@@ -127,7 +130,7 @@ RealOpenMM AmoebaReferenceVdwForce::hhgEpsilonCombiningRule( RealOpenMM epsilonI
void AmoebaReferenceVdwForce::addReducedForce( unsigned int particleI, unsigned int particleIV, void AmoebaReferenceVdwForce::addReducedForce( unsigned int particleI, unsigned int particleIV,
RealOpenMM reduction, RealOpenMM sign, RealOpenMM reduction, RealOpenMM sign,
Vec3& force, RealOpenMM** forces ) const { Vec3& force, vector<RealVec>& forces ) const {
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
...@@ -197,14 +200,14 @@ RealOpenMM AmoebaReferenceVdwForce::calculatePairIxn( RealOpenMM combindedSigma, ...@@ -197,14 +200,14 @@ RealOpenMM AmoebaReferenceVdwForce::calculatePairIxn( RealOpenMM combindedSigma,
} }
RealOpenMM AmoebaReferenceVdwForce::calculateNoCutoffForceAndEnergy( int numParticles, RealOpenMM AmoebaReferenceVdwForce::calculateNoCutoffForceAndEnergy( int numParticles,
RealOpenMM** const particlePositions, const vector<RealVec>& particlePositions,
const std::vector<int>& indexIVs, const std::vector<int>& indexIVs,
const std::vector<int>& indexClasses, const std::vector<int>& indexClasses,
const std::vector<RealOpenMM>& sigmas, const std::vector<RealOpenMM>& sigmas,
const std::vector<RealOpenMM>& epsilons, const std::vector<RealOpenMM>& epsilons,
const std::vector<RealOpenMM>& reductions, const std::vector<RealOpenMM>& reductions,
const std::vector< std::vector<int> >& allExclusions, const std::vector< std::vector<int> >& allExclusions,
RealOpenMM** forces ) const { vector<RealVec>& forces ) const {
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
...@@ -282,14 +285,14 @@ RealOpenMM AmoebaReferenceVdwForce::calculateNoCutoffForceAndEnergy( int numPart ...@@ -282,14 +285,14 @@ RealOpenMM AmoebaReferenceVdwForce::calculateNoCutoffForceAndEnergy( int numPart
} }
RealOpenMM AmoebaReferenceVdwForce::calculateForceAndEnergy( int numParticles, RealOpenMM AmoebaReferenceVdwForce::calculateForceAndEnergy( int numParticles,
RealOpenMM** const particlePositions, const vector<RealVec>& particlePositions,
const std::vector<int>& indexIVs, const std::vector<int>& indexIVs,
const std::vector<int>& indexClasses, const std::vector<int>& indexClasses,
const std::vector<RealOpenMM>& sigmas, const std::vector<RealOpenMM>& sigmas,
const std::vector<RealOpenMM>& epsilons, const std::vector<RealOpenMM>& epsilons,
const std::vector<RealOpenMM>& reductions, const std::vector<RealOpenMM>& reductions,
const std::vector< std::vector<int> >& allExclusions, const std::vector< std::vector<int> >& allExclusions,
RealOpenMM** forces ) const { vector<RealVec>& forces ) const {
if( getNonbondedMethod() == NoCutoff || 1 ){ if( getNonbondedMethod() == NoCutoff || 1 ){
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#ifndef __AmoebaReferenceVdwForce_H__ #ifndef __AmoebaReferenceVdwForce_H__
#define __AmoebaReferenceVdwForce_H__ #define __AmoebaReferenceVdwForce_H__
#include "SimTKUtilities/SimTKOpenMMRealType.h" #include "SimTKUtilities/RealVec.h"
#include "openmm/Vec3.h" #include "openmm/Vec3.h"
#include <string> #include <string>
#include <vector> #include <vector>
...@@ -168,13 +168,13 @@ public: ...@@ -168,13 +168,13 @@ public:
--------------------------------------------------------------------------------------- */ --------------------------------------------------------------------------------------- */
RealOpenMM calculateForceAndEnergy( int numParticles, RealOpenMM** const particlePositions, RealOpenMM calculateForceAndEnergy( int numParticles, const std::vector<OpenMM::RealVec>& particlePositions,
const std::vector<int>& indexIVs, const std::vector<int>& indexIVs,
const std::vector<int>& indexClasses, const std::vector<int>& indexClasses,
const std::vector<RealOpenMM>& sigmas, const std::vector<RealOpenMM>& epsilons, const std::vector<RealOpenMM>& sigmas, const std::vector<RealOpenMM>& epsilons,
const std::vector<RealOpenMM>& reductions, const std::vector<RealOpenMM>& reductions,
const std::vector< std::vector<int> >& vdwExclusions, const std::vector< std::vector<int> >& vdwExclusions,
RealOpenMM** forces ) const; std::vector<OpenMM::RealVec>& forces ) const;
private: private:
...@@ -208,7 +208,7 @@ private: ...@@ -208,7 +208,7 @@ private:
void addReducedForce( unsigned int particleI, unsigned int particleIV, void addReducedForce( unsigned int particleI, unsigned int particleIV,
RealOpenMM reduction, RealOpenMM sign, RealOpenMM reduction, RealOpenMM sign,
Vec3& force, RealOpenMM** forces ) const; Vec3& force, std::vector<OpenMM::RealVec>& forces ) const;
/**--------------------------------------------------------------------------------------- /**---------------------------------------------------------------------------------------
...@@ -246,13 +246,13 @@ private: ...@@ -246,13 +246,13 @@ private:
--------------------------------------------------------------------------------------- */ --------------------------------------------------------------------------------------- */
RealOpenMM calculateNoCutoffForceAndEnergy( int numParticles, RealOpenMM** const particlePositions, RealOpenMM calculateNoCutoffForceAndEnergy( int numParticles, const std::vector<OpenMM::RealVec>& particlePositions,
const std::vector<int>& indexIVs, const std::vector<int>& indexIVs,
const std::vector<int>& indexClasses, const std::vector<int>& indexClasses,
const std::vector<RealOpenMM>& sigmas, const std::vector<RealOpenMM>& epsilons, const std::vector<RealOpenMM>& sigmas, const std::vector<RealOpenMM>& epsilons,
const std::vector<RealOpenMM>& reductions, const std::vector<RealOpenMM>& reductions,
const std::vector< std::vector<int> >& vdwExclusions, const std::vector< std::vector<int> >& vdwExclusions,
RealOpenMM** forces ) const; std::vector<OpenMM::RealVec>& forces ) const;
}; };
......
...@@ -25,6 +25,9 @@ ...@@ -25,6 +25,9 @@
#include "AmoebaReferenceForce.h" #include "AmoebaReferenceForce.h"
#include "AmoebaReferenceWcaDispersionForce.h" #include "AmoebaReferenceWcaDispersionForce.h"
using std::vector;
using OpenMM::RealVec;
AmoebaReferenceWcaDispersionForce::AmoebaReferenceWcaDispersionForce( RealOpenMM epso, RealOpenMM epsh, RealOpenMM rmino, RealOpenMM rminh, AmoebaReferenceWcaDispersionForce::AmoebaReferenceWcaDispersionForce( RealOpenMM epso, RealOpenMM epsh, RealOpenMM rmino, RealOpenMM rminh,
RealOpenMM awater, RealOpenMM shctd, RealOpenMM dispoff, RealOpenMM slevy ) : RealOpenMM awater, RealOpenMM shctd, RealOpenMM dispoff, RealOpenMM slevy ) :
_epso(epso), _epsh(epsh), _rmino(rmino), _rminh(rminh), _awater(awater), _shctd(shctd), _dispoff(dispoff), _slevy(slevy) { _epso(epso), _epsh(epsh), _rmino(rmino), _rminh(rminh), _awater(awater), _shctd(shctd), _dispoff(dispoff), _slevy(slevy) {
...@@ -32,8 +35,8 @@ AmoebaReferenceWcaDispersionForce::AmoebaReferenceWcaDispersionForce( RealOpenMM ...@@ -32,8 +35,8 @@ AmoebaReferenceWcaDispersionForce::AmoebaReferenceWcaDispersionForce( RealOpenMM
RealOpenMM AmoebaReferenceWcaDispersionForce::calculatePairIxn( RealOpenMM radiusI, RealOpenMM radiusK, RealOpenMM AmoebaReferenceWcaDispersionForce::calculatePairIxn( RealOpenMM radiusI, RealOpenMM radiusK,
const RealOpenMM* particleIPosition, const RealVec& particleIPosition,
const RealOpenMM* particleJPosition, const RealVec& particleJPosition,
const RealOpenMM* const intermediateValues, const RealOpenMM* const intermediateValues,
Vec3& force ) const { Vec3& force ) const {
...@@ -252,11 +255,11 @@ RealOpenMM AmoebaReferenceWcaDispersionForce::calculatePairIxn( RealOpenMM radiu ...@@ -252,11 +255,11 @@ RealOpenMM AmoebaReferenceWcaDispersionForce::calculatePairIxn( RealOpenMM radiu
} }
RealOpenMM AmoebaReferenceWcaDispersionForce::calculateForceAndEnergy( int numParticles, RealOpenMM AmoebaReferenceWcaDispersionForce::calculateForceAndEnergy( int numParticles,
RealOpenMM** const particlePositions, const vector<RealVec>& particlePositions,
const std::vector<RealOpenMM>& radii, const std::vector<RealOpenMM>& radii,
const std::vector<RealOpenMM>& epsilons, const std::vector<RealOpenMM>& epsilons,
RealOpenMM totalMaximumDispersionEnergy, RealOpenMM totalMaximumDispersionEnergy,
RealOpenMM** forces ) const { vector<RealVec>& forces ) const {
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#ifndef __AmoebaReferenceWcaDispersionForce_H__ #ifndef __AmoebaReferenceWcaDispersionForce_H__
#define __AmoebaReferenceWcaDispersionForce_H__ #define __AmoebaReferenceWcaDispersionForce_H__
#include "SimTKUtilities/SimTKOpenMMRealType.h" #include "SimTKUtilities/RealVec.h"
#include "openmm/Vec3.h" #include "openmm/Vec3.h"
#include <string> #include <string>
#include <vector> #include <vector>
...@@ -79,10 +79,10 @@ public: ...@@ -79,10 +79,10 @@ public:
--------------------------------------------------------------------------------------- */ --------------------------------------------------------------------------------------- */
RealOpenMM calculateForceAndEnergy( int numParticles, RealOpenMM** const particlePositions, RealOpenMM calculateForceAndEnergy( int numParticles, const std::vector<OpenMM::RealVec>& particlePositions,
const std::vector<RealOpenMM>& radii, const std::vector<RealOpenMM>& radii,
const std::vector<RealOpenMM>& epsilons, const std::vector<RealOpenMM>& epsilons,
RealOpenMM totalMaximumDispersionEnergy, RealOpenMM** forces ) const; RealOpenMM totalMaximumDispersionEnergy, std::vector<OpenMM::RealVec>& forces ) const;
private: private:
RealOpenMM _epso; RealOpenMM _epso;
...@@ -112,7 +112,7 @@ private: ...@@ -112,7 +112,7 @@ private:
--------------------------------------------------------------------------------------- */ --------------------------------------------------------------------------------------- */
RealOpenMM calculatePairIxn( RealOpenMM radiusI, RealOpenMM radiusJ, RealOpenMM calculatePairIxn( RealOpenMM radiusI, RealOpenMM radiusJ,
const RealOpenMM* particleIPosition, const RealOpenMM* particleJPosition, const OpenMM::RealVec& particleIPosition, const OpenMM::RealVec& particleJPosition,
const RealOpenMM* const intermediateValues, const RealOpenMM* const intermediateValues,
Vec3& force ) const; Vec3& force ) const;
......
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