Commit a82b4e4a authored by Mark Friedrichs's avatar Mark Friedrichs
Browse files

Sign on torques was reversed for z-then-x

parent 475f52cb
...@@ -531,7 +531,7 @@ double ReferenceCalcAmoebaMultipoleForceKernel::execute(ContextImpl& context, bo ...@@ -531,7 +531,7 @@ double ReferenceCalcAmoebaMultipoleForceKernel::execute(ContextImpl& context, bo
amoebaReferenceMultipoleForce.setMutualInducedDipoleTargetEpsilon( mutualInducedTargetEpsilon ); amoebaReferenceMultipoleForce.setMutualInducedDipoleTargetEpsilon( mutualInducedTargetEpsilon );
amoebaReferenceMultipoleForce.setMaximumMutualInducedDipoleIterations( mutualInducedMaxIterations ); amoebaReferenceMultipoleForce.setMaximumMutualInducedDipoleIterations( mutualInducedMaxIterations );
RealOpenMM energy = amoebaReferenceMultipoleForce.calculateForceAndEnergy( numMultipoles, posData, RealOpenMM energy = amoebaReferenceMultipoleForce.calculateForceAndEnergy( posData,
charges, dipoles, quadrupoles, tholes, charges, dipoles, quadrupoles, tholes,
dampingFactors, polarity, axisTypes, dampingFactors, polarity, axisTypes,
multipoleAtomZs, multipoleAtomXs, multipoleAtomYs, multipoleAtomZs, multipoleAtomXs, multipoleAtomYs,
......
...@@ -137,7 +137,7 @@ void AmoebaReferenceMultipoleForce::setMutualInducedDipoleTargetEpsilon( RealOpe ...@@ -137,7 +137,7 @@ void AmoebaReferenceMultipoleForce::setMutualInducedDipoleTargetEpsilon( RealOpe
_mutualInducedDipoleTargetEpsilon = mutualInducedDipoleTargetEpsilon; _mutualInducedDipoleTargetEpsilon = mutualInducedDipoleTargetEpsilon;
} }
void AmoebaReferenceMultipoleForce::getDelta( unsigned int particleI, unsigned int particleJ, vector<RealVec>& particlePositions, void AmoebaReferenceMultipoleForce::getDelta( unsigned int particleI, unsigned int particleJ, std::vector<RealVec>& particlePositions,
RealOpenMM* delta ) const { RealOpenMM* delta ) const {
delta[0] = particlePositions[particleJ][0] - particlePositions[particleI][0]; delta[0] = particlePositions[particleJ][0] - particlePositions[particleI][0];
...@@ -335,7 +335,7 @@ void AmoebaReferenceMultipoleForce::getScaleFactors( unsigned int particleI, uns ...@@ -335,7 +335,7 @@ void AmoebaReferenceMultipoleForce::getScaleFactors( unsigned int particleI, uns
scaleFactors[U_SCALE] = getScaleFactor( particleI, particleJ, U_SCALE ); scaleFactors[U_SCALE] = getScaleFactor( particleI, particleJ, U_SCALE );
} }
void AmoebaReferenceMultipoleForce::loadParticleData( vector<RealVec>& particlePositions, void AmoebaReferenceMultipoleForce::loadParticleData( const std::vector<RealVec>& particlePositions,
const std::vector<RealOpenMM>& charges, const std::vector<RealOpenMM>& charges,
const std::vector<RealOpenMM>& dipoles, const std::vector<RealOpenMM>& dipoles,
const std::vector<RealOpenMM>& quadrupoles, const std::vector<RealOpenMM>& quadrupoles,
...@@ -1026,7 +1026,7 @@ fprintf( stderr, "MIb %3u eps=%15.7e %15.7e %15.7e\n", iteration, epsilonDirect, ...@@ -1026,7 +1026,7 @@ fprintf( stderr, "MIb %3u eps=%15.7e %15.7e %15.7e\n", iteration, epsilonDirect,
RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffElectrostaticPairIxn( const MultipoleParticleData& particleI, RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffElectrostaticPairIxn( const MultipoleParticleData& particleI,
const MultipoleParticleData& particleK, const MultipoleParticleData& particleK,
RealOpenMM* scalingFactors, vector<RealVec>& forces, RealOpenMM* scalingFactors, std::vector<RealVec>& forces,
std::vector<Vec3>& torque ) const { std::vector<Vec3>& torque ) const {
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
...@@ -1548,7 +1548,7 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForce( const MultipoleParticleDat ...@@ -1548,7 +1548,7 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForce( const MultipoleParticleDat
const MultipoleParticleData& particleU, const MultipoleParticleData& particleU,
const MultipoleParticleData& particleV, const MultipoleParticleData& particleV,
MultipoleParticleData* particleW, MultipoleParticleData* particleW,
int axisType, const Vec3& torque, vector<RealVec>& forces ) const { int axisType, const Vec3& torque, std::vector<RealVec>& forces ) const {
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
...@@ -1627,6 +1627,9 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForce( const MultipoleParticleDat ...@@ -1627,6 +1627,9 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForce( const MultipoleParticleDat
// branch based on axis type // branch based on axis type
//fprintf( stderr, "mapTorqueToForce: [%3d %3d %3d ] %d [%d %d]",
// particleI.particleIndex, particleU.particleIndex, particleV.particleIndex, axisType, AmoebaMultipoleForce::Bisector, AmoebaMultipoleForce::ZThenX );
if( axisType == AmoebaMultipoleForce::ZThenX || axisType == AmoebaMultipoleForce::Bisector ){ if( axisType == AmoebaMultipoleForce::ZThenX || axisType == AmoebaMultipoleForce::Bisector ){
float factor1; float factor1;
...@@ -1646,10 +1649,13 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForce( const MultipoleParticleDat ...@@ -1646,10 +1649,13 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForce( const MultipoleParticleDat
} }
for( int ii = 0; ii < 3; ii++ ){ for( int ii = 0; ii < 3; ii++ ){
forces[particleU.particleIndex][ii] = vector[UV][ii]*factor1 + factor2*vector[UW][ii]; double forceU = vector[UV][ii]*factor1 + factor2*vector[UW][ii];
forces[particleV.particleIndex][ii] = vector[UV][ii]*factor3 + factor4*vector[VW][ii]; forces[particleU.particleIndex][ii] -= forceU;
forces[particleI.particleIndex][ii] = -(forces[particleU.particleIndex][ii] + forces[particleV.particleIndex][ii]);
if( particleW )forces[particleW->particleIndex][ii] = 0.0f; double forceV = vector[UV][ii]*factor3 + factor4*vector[VW][ii];
forces[particleV.particleIndex][ii] -= forceV;
forces[particleI.particleIndex][ii] += (forceU + forceV);
} }
} else if( axisType == AmoebaMultipoleForce::ZBisect ){ } else if( axisType == AmoebaMultipoleForce::ZBisect ){
...@@ -1710,10 +1716,15 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForce( const MultipoleParticleDat ...@@ -1710,10 +1716,15 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForce( const MultipoleParticleDat
RealOpenMM factor4 = dphi[U]/(norms[W]*(ut1sin+ut2sin)); RealOpenMM factor4 = dphi[U]/(norms[W]*(ut1sin+ut2sin));
for( int ii = 0; ii < 3; ii++ ){ for( int ii = 0; ii < 3; ii++ ){
forces[particleU.particleIndex][ii] = vector[UR][ii]*factor1 + factor2*vector[US][ii]; double forceU = vector[UR][ii]*factor1 + factor2*vector[US][ii];
forces[particleV.particleIndex][ii] = (angles[VS][1]*vector[S][ii] - angles[VS][0]*t1[ii])*factor3; forces[particleU.particleIndex][ii] += forceU;
forces[particleW->particleIndex][ii] = (angles[WS][1]*vector[S][ii] - angles[WS][0]*t2[ii])*factor4;
forces[particleI.particleIndex][ii] = -(forces[particleU.particleIndex][ii] + forces[particleV.particleIndex][ii] + forces[particleW->particleIndex][ii]); double forceV = (angles[VS][1]*vector[S][ii] - angles[VS][0]*t1[ii])*factor3;
forces[particleV.particleIndex][ii] += forceV;
double forceW = (angles[WS][1]*vector[S][ii] - angles[WS][0]*t2[ii])*factor4;
forces[particleW->particleIndex][ii] += forceW;
forces[particleI.particleIndex][ii] -= (forceU + forceV + forceW);
} }
} else if( axisType == AmoebaMultipoleForce::ThreeFold ){ } else if( axisType == AmoebaMultipoleForce::ThreeFold ){
...@@ -1741,11 +1752,11 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForce( const MultipoleParticleDat ...@@ -1741,11 +1752,11 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForce( const MultipoleParticleDat
dv /= 3.0f; dv /= 3.0f;
dw /= 3.0f; dw /= 3.0f;
forces[particleU.particleIndex][ii] = du; forces[particleU.particleIndex][ii] += du;
forces[particleV.particleIndex][ii] = dv; forces[particleV.particleIndex][ii] += dv;
if( particleW ) if( particleW )
forces[particleW->particleIndex][ii] = dw; forces[particleW->particleIndex][ii] += dw;
forces[particleI.particleIndex][ii] = -(du + dv + dw); forces[particleI.particleIndex][ii] -= (du + dv + dw);
} }
} else if( axisType == AmoebaMultipoleForce::ZOnly ){ } else if( axisType == AmoebaMultipoleForce::ZOnly ){
...@@ -1754,14 +1765,12 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForce( const MultipoleParticleDat ...@@ -1754,14 +1765,12 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForce( const MultipoleParticleDat
for( int ii = 0; ii < 3; ii++ ){ for( int ii = 0; ii < 3; ii++ ){
RealOpenMM du = vector[UV][ii]*dphi[V]/(norms[U]*angles[UV][1]); RealOpenMM du = vector[UV][ii]*dphi[V]/(norms[U]*angles[UV][1]);
forces[particleU.particleIndex][ii] = du; forces[particleU.particleIndex][ii] += du;
forces[particleV.particleIndex][ii] = 0.0f; forces[particleI.particleIndex][ii] -= du;
if( particleW )
forces[particleW->particleIndex][ii] = 0.0f;
forces[particleI.particleIndex][ii] = -du;
} }
} else { } else {
/*
for( int ii = 0; ii < 3; ii++ ){ for( int ii = 0; ii < 3; ii++ ){
forces[particleU.particleIndex][ii] = 0.0f; forces[particleU.particleIndex][ii] = 0.0f;
forces[particleV.particleIndex][ii] = 0.0f; forces[particleV.particleIndex][ii] = 0.0f;
...@@ -1769,6 +1778,7 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForce( const MultipoleParticleDat ...@@ -1769,6 +1778,7 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForce( const MultipoleParticleDat
forces[particleW->particleIndex][ii] = 0.0f; forces[particleW->particleIndex][ii] = 0.0f;
forces[particleI.particleIndex][ii] = 0.0f; forces[particleI.particleIndex][ii] = 0.0f;
} }
*/
} }
...@@ -1785,7 +1795,7 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForce( const MultipoleParticleDat ...@@ -1785,7 +1795,7 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForce( const MultipoleParticleDat
void AmoebaReferenceMultipoleForce::mapTorqueToForceOld( const MultipoleParticleData& particleI, void AmoebaReferenceMultipoleForce::mapTorqueToForceOld( const MultipoleParticleData& particleI,
const MultipoleParticleData& particleU, const MultipoleParticleData& particleU,
const MultipoleParticleData& particleV, const MultipoleParticleData& particleV,
int axisType, const Vec3& torque, vector<RealVec>& forces ) const { int axisType, const Vec3& torque, std::vector<RealVec>& forces ) const {
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
...@@ -1848,6 +1858,12 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForceOld( const MultipoleParticle ...@@ -1848,6 +1858,12 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForceOld( const MultipoleParticle
// branch based on axis type // branch based on axis type
/*
fprintf( stderr, "mapTorqueToForceOld: [%3d %3d %3d ] %d [%d %d]",
particleI.particleIndex, particleU.particleIndex, particleV.particleIndex, axisType, AmoebaMultipoleForce::Bisector, AmoebaMultipoleForce::ZThenX );
fprintf( stderr, " Fct[%15.7e %15.7e %15.7e]\n", dphi[V]/uvdis, dphi[W]/norms[U], dphi[U]/vudis );
*/
if( axisType == AmoebaMultipoleForce::Bisector ){ if( axisType == AmoebaMultipoleForce::Bisector ){
// bisector // bisector
...@@ -1865,10 +1881,17 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForceOld( const MultipoleParticle ...@@ -1865,10 +1881,17 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForceOld( const MultipoleParticle
for( int ii = 0; ii < 3; ii++ ){ for( int ii = 0; ii < 3; ii++ ){
RealOpenMM du = -vector[W][ii]*dphi[V]/uvdis + up[ii]*dphi[W]/norms[U]; RealOpenMM du = -vector[W][ii]*dphi[V]/uvdis + up[ii]*dphi[W]/norms[U];
RealOpenMM dv = vector[W][ii]*dphi[U]/vudis; RealOpenMM dv = vector[W][ii]*dphi[U]/vudis;
/*
//double forceU = vector[UV][ii]*factor1 + factor2*vector[UW][ii];
//double forceV = vector[UV][ii]*factor3 + factor4*vector[VW][ii];
fprintf( stderr, " [%d %15.7e %15.7e]", ii, du, dv );
fprintf( stderr, " [%d %15.7e %15.7e] [%15.7e %15.7e ]\n", ii, du, dv, vector[W][ii], up[ii]);
*/
forces[particleU.particleIndex][ii] += du; forces[particleU.particleIndex][ii] += du;
forces[particleV.particleIndex][ii] += dv; forces[particleV.particleIndex][ii] += dv;
forces[particleI.particleIndex][ii] -= (dv + du); forces[particleI.particleIndex][ii] -= (dv + du);
} }
//fprintf( stderr, "\n" );
} }
return; return;
...@@ -1880,7 +1903,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffElectrostatic( std::v ...@@ -1880,7 +1903,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffElectrostatic( std::v
const std::vector<int>& multipoleAtomZs, const std::vector<int>& multipoleAtomZs,
const std::vector<int>& multipoleAtomXs, const std::vector<int>& multipoleAtomXs,
const std::vector<int>& multipoleAtomYs, const std::vector<int>& multipoleAtomYs,
vector<RealVec>& forces ) const { std::vector<RealVec>& forces ) const {
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
...@@ -1889,7 +1912,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffElectrostatic( std::v ...@@ -1889,7 +1912,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffElectrostatic( std::v
static const RealOpenMM zero = 0.0; static const RealOpenMM zero = 0.0;
static const RealOpenMM one = 1.0; static const RealOpenMM one = 1.0;
static const int debug = 1; static const int debug = 0;
FILE* log = stderr; FILE* log = stderr;
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
...@@ -1939,10 +1962,10 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffElectrostatic( std::v ...@@ -1939,10 +1962,10 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffElectrostatic( std::v
// diagnostics // diagnostics
if( log ){ if( debug && log ){
RealOpenMM conversion = 1.0/4.184; RealOpenMM conversion = 1.0/4.184;
RealOpenMM torqueConversion = conversion; RealOpenMM torqueConversion = conversion;
(void) fprintf( log, "Force & torques energy=%15.7e\n", 10.0*energy*conversion ); (void) fprintf( log, "Reference: force & torques energy=%15.7e conversion=%15.7e\n", 10.0*energy*conversion, conversion );
conversion *= -0.1; conversion *= -0.1;
unsigned int maxPrint = 10000; unsigned int maxPrint = 10000;
for( unsigned int ii = 0; ii < particleData.size(); ii++ ){ for( unsigned int ii = 0; ii < particleData.size(); ii++ ){
...@@ -1960,16 +1983,16 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffElectrostatic( std::v ...@@ -1960,16 +1983,16 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffElectrostatic( std::v
for( unsigned int ii = 0; ii < particleData.size(); ii++ ){ for( unsigned int ii = 0; ii < particleData.size(); ii++ ){
mapTorqueToForce( particleData[ii], particleData[multipoleAtomZs[ii]], particleData[multipoleAtomXs[ii]], mapTorqueToForce( particleData[ii], particleData[multipoleAtomZs[ii]], particleData[multipoleAtomXs[ii]],
multipoleAtomYs[ii] > -1 ? &particleData[multipoleAtomYs[ii]] : NULL, axisTypes[ii], torques[ii], forces ); multipoleAtomYs[ii] > -1 ? &particleData[multipoleAtomYs[ii]] : NULL, axisTypes[ii], torques[ii], forces );
// mapTorqueToForceOld( particleData[ii], particleData[multipoleAtomZs[ii]], particleData[multipoleAtomXs[ii]], //mapTorqueToForceOld( particleData[ii], particleData[multipoleAtomZs[ii]], particleData[multipoleAtomXs[ii]],
// axisTypes[ii], torques[ii], forces ); // axisTypes[ii], torques[ii], forces );
} }
// diagnostics // diagnostics
if( log ){ if( debug && log ){
RealOpenMM conversion = 1.0/4.184; RealOpenMM conversion = 1.0/4.184;
RealOpenMM torqueConversion = conversion; RealOpenMM torqueConversion = conversion;
(void) fprintf( log, "Force post torque mapping energy=%15.7e\n", 10.0*energy*conversion ); (void) fprintf( log, "Reference: force post torque mapping energy=%15.7e conversion=%15.7e\n", 10.0*energy*conversion, conversion );
conversion *= -0.1; conversion *= -0.1;
unsigned int maxPrint = 10000; unsigned int maxPrint = 10000;
for( unsigned int ii = 0; ii < particleData.size(); ii++ ){ for( unsigned int ii = 0; ii < particleData.size(); ii++ ){
...@@ -1984,8 +2007,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffElectrostatic( std::v ...@@ -1984,8 +2007,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffElectrostatic( std::v
return energy; return energy;
} }
RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffForceAndEnergy( unsigned int numParticles, RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffForceAndEnergy( const std::vector<RealVec>& particlePositions,
vector<RealVec>& particlePositions,
const std::vector<RealOpenMM>& charges, const std::vector<RealOpenMM>& charges,
const std::vector<RealOpenMM>& dipoles, const std::vector<RealOpenMM>& dipoles,
const std::vector<RealOpenMM>& quadrupoles, const std::vector<RealOpenMM>& quadrupoles,
...@@ -1996,7 +2018,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffForceAndEnergy( unsig ...@@ -1996,7 +2018,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffForceAndEnergy( unsig
const std::vector<int>& multipoleAtomZs, const std::vector<int>& multipoleAtomZs,
const std::vector<int>& multipoleAtomXs, const std::vector<int>& multipoleAtomXs,
const std::vector<int>& multipoleAtomYs, const std::vector<int>& multipoleAtomYs,
vector<RealVec>& forces ){ std::vector<RealVec>& forces ){
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
...@@ -2011,6 +2033,8 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffForceAndEnergy( unsig ...@@ -2011,6 +2033,8 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffForceAndEnergy( unsig
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
unsigned int numParticles = particlePositions.size();
// get lab frame dipole and quadrupoles // get lab frame dipole and quadrupoles
std::vector<MultipoleParticleData> particleData( numParticles ); std::vector<MultipoleParticleData> particleData( numParticles );
...@@ -2036,7 +2060,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffForceAndEnergy( unsig ...@@ -2036,7 +2060,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffForceAndEnergy( unsig
#ifdef AMOEBA_DEBUG #ifdef AMOEBA_DEBUG
if( log ){ if( log ){
std::string header = "labFrameQuadrupole and labFrameDipole\n"; std::string header = "Reference: labFrameQuadrupole and labFrameDipole\n";
unsigned int printFlag = (1 << PARTICLE_DIPOLE) | (1 << PARTICLE_QUADRUPOLE); unsigned int printFlag = (1 << PARTICLE_DIPOLE) | (1 << PARTICLE_QUADRUPOLE);
int maxPrint = 10; int maxPrint = 10;
logParticleData( header, particleData, printFlag, log, maxPrint ); logParticleData( header, particleData, printFlag, log, maxPrint );
...@@ -2066,7 +2090,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffForceAndEnergy( unsig ...@@ -2066,7 +2090,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffForceAndEnergy( unsig
#ifdef AMOEBA_DEBUG #ifdef AMOEBA_DEBUG
if( log ){ if( log ){
std::string header = "Fixed fields\n"; std::string header = "Reference: fixed fields\n";
unsigned int printFlag = (1<<PARTICLE_FIELD) | (1<<PARTICLE_FIELD_POLAR); unsigned int printFlag = (1<<PARTICLE_FIELD) | (1<<PARTICLE_FIELD_POLAR);
int maxPrint = 10; int maxPrint = 10;
logParticleData( header, particleData, printFlag, log, maxPrint ); logParticleData( header, particleData, printFlag, log, maxPrint );
...@@ -2093,8 +2117,8 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffForceAndEnergy( unsig ...@@ -2093,8 +2117,8 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffForceAndEnergy( unsig
} }
RealOpenMM AmoebaReferenceMultipoleForce::calculateForceAndEnergy( int numParticles, RealOpenMM AmoebaReferenceMultipoleForce::calculateForceAndEnergy(
vector<RealVec>& particlePositions, const std::vector<RealVec>& particlePositions,
const std::vector<RealOpenMM>& charges, const std::vector<RealOpenMM>& charges,
const std::vector<RealOpenMM>& dipoles, const std::vector<RealOpenMM>& dipoles,
const std::vector<RealOpenMM>& quadrupoles, const std::vector<RealOpenMM>& quadrupoles,
...@@ -2106,13 +2130,13 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateForceAndEnergy( int numPartic ...@@ -2106,13 +2130,13 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateForceAndEnergy( int numPartic
const std::vector<int>& multipoleAtomXs, const std::vector<int>& multipoleAtomXs,
const std::vector<int>& multipoleAtomYs, const std::vector<int>& multipoleAtomYs,
const std::vector< std::vector< std::vector<int> > >& multipoleParticleCovalentInfo, const std::vector< std::vector< std::vector<int> > >& multipoleParticleCovalentInfo,
vector<RealVec>& forces ){ std::vector<RealVec>& forces ){
setupScaleMaps( multipoleParticleCovalentInfo ); setupScaleMaps( multipoleParticleCovalentInfo );
if( getNonbondedMethod() == NoCutoff || 1 ){ if( getNonbondedMethod() == NoCutoff || 1 ){
return calculateNoCutoffForceAndEnergy( static_cast<unsigned int>(numParticles), particlePositions, charges, dipoles, quadrupoles, tholes, dampingFactors, return calculateNoCutoffForceAndEnergy( particlePositions, charges, dipoles, quadrupoles, tholes, dampingFactors,
polarity, axisTypes, multipoleAtomZs, multipoleAtomXs, multipoleAtomYs, forces ); polarity, axisTypes, multipoleAtomZs, multipoleAtomXs, multipoleAtomYs, forces );
......
...@@ -203,7 +203,7 @@ public: ...@@ -203,7 +203,7 @@ public:
--------------------------------------------------------------------------------------- */ --------------------------------------------------------------------------------------- */
RealOpenMM calculateForceAndEnergy( int numParticles, std::vector<OpenMM::RealVec>& particlePositions, RealOpenMM calculateForceAndEnergy( const std::vector<OpenMM::RealVec>& particlePositions,
const std::vector<RealOpenMM>& charges, const std::vector<RealOpenMM>& charges,
const std::vector<RealOpenMM>& dipoles, const std::vector<RealOpenMM>& dipoles,
const std::vector<RealOpenMM>& quadrupoles, const std::vector<RealOpenMM>& quadrupoles,
...@@ -270,7 +270,7 @@ private: ...@@ -270,7 +270,7 @@ private:
void initialize( void ); void initialize( void );
void loadParticleData( std::vector<OpenMM::RealVec>& particlePositions, void loadParticleData( const std::vector<OpenMM::RealVec>& particlePositions,
const std::vector<RealOpenMM>& charges, const std::vector<RealOpenMM>& charges,
const std::vector<RealOpenMM>& dipoles, const std::vector<RealOpenMM>& dipoles,
const std::vector<RealOpenMM>& quadrupoles, const std::vector<RealOpenMM>& quadrupoles,
...@@ -515,7 +515,7 @@ private: ...@@ -515,7 +515,7 @@ private:
--------------------------------------------------------------------------------------- */ --------------------------------------------------------------------------------------- */
RealOpenMM calculateNoCutoffForceAndEnergy( unsigned int numParticles, std::vector<OpenMM::RealVec>& particlePositions, RealOpenMM calculateNoCutoffForceAndEnergy( const std::vector<OpenMM::RealVec>& particlePositions,
const std::vector<RealOpenMM>& charges, const std::vector<RealOpenMM>& charges,
const std::vector<RealOpenMM>& dipoles, const std::vector<RealOpenMM>& dipoles,
const std::vector<RealOpenMM>& quadrupoles, const std::vector<RealOpenMM>& quadrupoles,
......
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