Commit 5003591d authored by Peter Eastman's avatar Peter Eastman
Browse files

Simplified reference code for accumulating energies

parent b8c624fa
...@@ -57,17 +57,13 @@ class ReferenceLJCoulomb14 : public ReferenceBondIxn { ...@@ -57,17 +57,13 @@ class ReferenceLJCoulomb14 : public ReferenceBondIxn {
@param atomCoordinates atom coordinates @param atomCoordinates atom coordinates
@param parameters six RB parameters @param parameters six RB parameters
@param forces force array (forces added to current values) @param forces force array (forces added to current values)
@param energiesByBond energies by bond: energiesByBond[bondIndex] @param totalEnergy if not null, the energy will be added to this
@param energiesByAtom energies by atom: energiesByAtom[atomIndex]
@return ReferenceForce::DefaultReturn
--------------------------------------------------------------------------------------- */ --------------------------------------------------------------------------------------- */
int calculateBondIxn( int* atomIndices, RealOpenMM** atomCoordinates, void calculateBondIxn( int* atomIndices, RealOpenMM** atomCoordinates,
RealOpenMM* parameters, RealOpenMM** forces, RealOpenMM* parameters, RealOpenMM** forces,
RealOpenMM* energiesByBond, RealOpenMM* energiesByAtom ) const; RealOpenMM* totalEnergy ) const;
}; };
......
...@@ -73,25 +73,15 @@ ReferenceProperDihedralBond::~ReferenceProperDihedralBond( ){ ...@@ -73,25 +73,15 @@ ReferenceProperDihedralBond::~ReferenceProperDihedralBond( ){
parameters[1] = ideal bond angle in radians parameters[1] = ideal bond angle in radians
parameters[2] = multiplicity parameters[2] = multiplicity
@param forces force array (forces added to current values) @param forces force array (forces added to current values)
@param energiesByBond energies by bond: energiesByBond[bondIndex] @param totalEnergy if not null, the energy will be added to this
@param energiesByAtom energies by atom: energiesByAtom[atomIndex]
@return ReferenceForce::DefaultReturn
--------------------------------------------------------------------------------------- */ --------------------------------------------------------------------------------------- */
int ReferenceProperDihedralBond::calculateBondIxn( int* atomIndices, void ReferenceProperDihedralBond::calculateBondIxn( int* atomIndices,
RealOpenMM** atomCoordinates, RealOpenMM** atomCoordinates,
RealOpenMM* parameters, RealOpenMM* parameters,
RealOpenMM** forces, RealOpenMM** forces,
RealOpenMM* energiesByBond, RealOpenMM* totalEnergy ) const {
RealOpenMM* energiesByAtom ) const {
// ---------------------------------------------------------------------------------------
// static const char* methodName = "\nReferenceProperDihedralBond::calculateBondIxn";
// ---------------------------------------------------------------------------------------
static const std::string methodName = "\nReferenceProperDihedralBond::calculateBondIxn"; static const std::string methodName = "\nReferenceProperDihedralBond::calculateBondIxn";
...@@ -185,7 +175,6 @@ int ReferenceProperDihedralBond::calculateBondIxn( int* atomIndices, ...@@ -185,7 +175,6 @@ int ReferenceProperDihedralBond::calculateBondIxn( int* atomIndices,
// accumulate energies // accumulate energies
updateEnergy( energy, energiesByBond, LastAtomIndex, atomIndices, energiesByAtom ); if (totalEnergy != NULL)
*totalEnergy += energy;
return ReferenceForce::DefaultReturn;
} }
...@@ -61,17 +61,13 @@ class ReferenceProperDihedralBond : public ReferenceBondIxn { ...@@ -61,17 +61,13 @@ class ReferenceProperDihedralBond : public ReferenceBondIxn {
parameters[1] = ideal bond angle in radians parameters[1] = ideal bond angle in radians
parameters[2] = multiplicity parameters[2] = multiplicity
@param forces force array (forces added to current values) @param forces force array (forces added to current values)
@param energiesByBond energies by bond: energiesByBond[bondIndex] @param totalEnergy if not null, the energy will be added to this
@param energiesByAtom energies by atom: energiesByAtom[atomIndex]
@return ReferenceForce::DefaultReturn
--------------------------------------------------------------------------------------- */ --------------------------------------------------------------------------------------- */
int calculateBondIxn( int* atomIndices, RealOpenMM** atomCoordinates, void calculateBondIxn( int* atomIndices, RealOpenMM** atomCoordinates,
RealOpenMM* parameters, RealOpenMM** forces, RealOpenMM* parameters, RealOpenMM** forces,
RealOpenMM* energiesByBond, RealOpenMM* energiesByAtom ) const; RealOpenMM* totalEnergy ) const;
}; };
......
...@@ -71,25 +71,15 @@ ReferenceRbDihedralBond::~ReferenceRbDihedralBond( ){ ...@@ -71,25 +71,15 @@ ReferenceRbDihedralBond::~ReferenceRbDihedralBond( ){
@param atomCoordinates atom coordinates @param atomCoordinates atom coordinates
@param parameters six RB parameters @param parameters six RB parameters
@param forces force array (forces added to current values) @param forces force array (forces added to current values)
@param energiesByBond energies by bond: energiesByBond[bondIndex] @param totalEnergy if not null, the energy will be added to this
@param energiesByAtom energies by atom: energiesByAtom[atomIndex]
@return ReferenceForce::DefaultReturn
--------------------------------------------------------------------------------------- */ --------------------------------------------------------------------------------------- */
int ReferenceRbDihedralBond::calculateBondIxn( int* atomIndices, void ReferenceRbDihedralBond::calculateBondIxn( int* atomIndices,
RealOpenMM** atomCoordinates, RealOpenMM** atomCoordinates,
RealOpenMM* parameters, RealOpenMM* parameters,
RealOpenMM** forces, RealOpenMM** forces,
RealOpenMM* energiesByBond, RealOpenMM* totalEnergy ) const {
RealOpenMM* energiesByAtom ) const {
// ---------------------------------------------------------------------------------------
// static const char* methodName = "\nReferenceRbDihedralBond::calculateBondIxn";
// ---------------------------------------------------------------------------------------
static const std::string methodName = "\nReferenceRbDihedralBond::calculateBondIxn"; static const std::string methodName = "\nReferenceRbDihedralBond::calculateBondIxn";
...@@ -200,7 +190,6 @@ int ReferenceRbDihedralBond::calculateBondIxn( int* atomIndices, ...@@ -200,7 +190,6 @@ int ReferenceRbDihedralBond::calculateBondIxn( int* atomIndices,
// accumulate energies // accumulate energies
updateEnergy( energy, energiesByBond, LastAtomIndex, atomIndices, energiesByAtom ); if (totalEnergy != NULL)
*totalEnergy += energy;
return ReferenceForce::DefaultReturn;
} }
...@@ -59,17 +59,13 @@ class ReferenceRbDihedralBond : public ReferenceBondIxn { ...@@ -59,17 +59,13 @@ class ReferenceRbDihedralBond : public ReferenceBondIxn {
@param atomCoordinates atom coordinates @param atomCoordinates atom coordinates
@param parameters six RB parameters @param parameters six RB parameters
@param forces force array (forces added to current values) @param forces force array (forces added to current values)
@param energiesByBond energies by bond: energiesByBond[bondIndex] @param totalEnergy if not null, the energy will be added to this
@param energiesByAtom energies by atom: energiesByAtom[atomIndex]
@return ReferenceForce::DefaultReturn
--------------------------------------------------------------------------------------- */ --------------------------------------------------------------------------------------- */
int calculateBondIxn( int* atomIndices, RealOpenMM** atomCoordinates, void calculateBondIxn( int* atomIndices, RealOpenMM** atomCoordinates,
RealOpenMM* parameters, RealOpenMM** forces, RealOpenMM* parameters, RealOpenMM** forces,
RealOpenMM* energiesByBond, RealOpenMM* energiesByAtom ) const; RealOpenMM* totalEnergy ) const;
}; };
......
...@@ -259,7 +259,7 @@ void ReferenceFreeEnergyCalcNonbondedSoftcoreForceKernel::executeForces(ContextI ...@@ -259,7 +259,7 @@ void ReferenceFreeEnergyCalcNonbondedSoftcoreForceKernel::executeForces(ContextI
ReferenceFreeEnergyLJCoulomb14Softcore nonbonded14; ReferenceFreeEnergyLJCoulomb14Softcore nonbonded14;
if (nonbondedMethod == CutoffNonPeriodic || nonbondedMethod == CutoffPeriodic) if (nonbondedMethod == CutoffNonPeriodic || nonbondedMethod == CutoffPeriodic)
nonbonded14.setUseCutoff(nonbondedCutoff, rfDielectric); nonbonded14.setUseCutoff(nonbondedCutoff, rfDielectric);
refBondForce.calculateForce(num14, bonded14IndexArray, posData, bonded14ParamArray, forceData, 0, 0, 0, nonbonded14); refBondForce.calculateForce(num14, bonded14IndexArray, posData, bonded14ParamArray, forceData, 0, nonbonded14);
} }
double ReferenceFreeEnergyCalcNonbondedSoftcoreForceKernel::executeEnergy(ContextImpl& context) { double ReferenceFreeEnergyCalcNonbondedSoftcoreForceKernel::executeEnergy(ContextImpl& context) {
...@@ -289,12 +289,8 @@ double ReferenceFreeEnergyCalcNonbondedSoftcoreForceKernel::executeEnergy(Contex ...@@ -289,12 +289,8 @@ double ReferenceFreeEnergyCalcNonbondedSoftcoreForceKernel::executeEnergy(Contex
if (nonbondedMethod == CutoffNonPeriodic || nonbondedMethod == CutoffPeriodic) if (nonbondedMethod == CutoffNonPeriodic || nonbondedMethod == CutoffPeriodic)
nonbonded14.setUseCutoff(nonbondedCutoff, rfDielectric); nonbonded14.setUseCutoff(nonbondedCutoff, rfDielectric);
RealOpenMM* energyArray = new RealOpenMM[num14]; refBondForce.calculateForce(num14, bonded14IndexArray, posData, bonded14ParamArray, forceData, &energy, nonbonded14);
for (int i = 0; i < num14; ++i)
energyArray[i] = 0;
refBondForce.calculateForce(num14, bonded14IndexArray, posData, bonded14ParamArray, forceData, energyArray, 0, &energy, nonbonded14);
disposeRealArray(forceData, numParticles); disposeRealArray(forceData, numParticles);
delete[] energyArray;
return energy; return energy;
} }
......
...@@ -140,23 +140,13 @@ int ReferenceFreeEnergyLJCoulomb14Softcore::getDerivedParameters( RealOpenMM c6, ...@@ -140,23 +140,13 @@ int ReferenceFreeEnergyLJCoulomb14Softcore::getDerivedParameters( RealOpenMM c6,
parameters[1]= c6*c6/c12 (4*epsilon) parameters[1]= c6*c6/c12 (4*epsilon)
parameters[2]= epsfac*q1*q2 parameters[2]= epsfac*q1*q2
@param forces force array (forces added to current values) @param forces force array (forces added to current values)
@param energiesByBond energies by bond: energiesByBond[bondIndex] @param totalEnergy if not null, the energy will be added to this
@param energiesByAtom energies by atom: energiesByAtom[atomIndex]
@return ReferenceForce::DefaultReturn
--------------------------------------------------------------------------------------- */ --------------------------------------------------------------------------------------- */
int ReferenceFreeEnergyLJCoulomb14Softcore::calculateBondIxn( int* atomIndices, RealOpenMM** atomCoordinates, void ReferenceFreeEnergyLJCoulomb14Softcore::calculateBondIxn( int* atomIndices, RealOpenMM** atomCoordinates,
RealOpenMM* parameters, RealOpenMM** forces, RealOpenMM* parameters, RealOpenMM** forces,
RealOpenMM* energiesByBond, RealOpenMM* totalEnergy ) const {
RealOpenMM* energiesByAtom ) const {
// ---------------------------------------------------------------------------------------
// static const char* methodName = "\nReferenceFreeEnergyLJCoulomb14Softcore::calculateBondIxn";
// ---------------------------------------------------------------------------------------
static const std::string methodName = "\nReferenceFreeEnergyLJCoulomb14Softcore::calculateBondIxn"; static const std::string methodName = "\nReferenceFreeEnergyLJCoulomb14Softcore::calculateBondIxn";
...@@ -193,7 +183,7 @@ int ReferenceFreeEnergyLJCoulomb14Softcore::calculateBondIxn( int* atomIndices, ...@@ -193,7 +183,7 @@ int ReferenceFreeEnergyLJCoulomb14Softcore::calculateBondIxn( int* atomIndices,
ReferenceForce::getDeltaR( atomCoordinates[atomBIndex], atomCoordinates[atomAIndex], deltaR[0] ); ReferenceForce::getDeltaR( atomCoordinates[atomBIndex], atomCoordinates[atomAIndex], deltaR[0] );
if (cutoff && deltaR[0][ReferenceForce::RIndex] > cutoffDistance) if (cutoff && deltaR[0][ReferenceForce::RIndex] > cutoffDistance)
return ReferenceForce::DefaultReturn; return;
RealOpenMM r2 = deltaR[0][ReferenceForce::R2Index]; RealOpenMM r2 = deltaR[0][ReferenceForce::R2Index];
RealOpenMM inverseR = one/(deltaR[0][ReferenceForce::RIndex]); RealOpenMM inverseR = one/(deltaR[0][ReferenceForce::RIndex]);
...@@ -229,7 +219,8 @@ int ReferenceFreeEnergyLJCoulomb14Softcore::calculateBondIxn( int* atomIndices, ...@@ -229,7 +219,8 @@ int ReferenceFreeEnergyLJCoulomb14Softcore::calculateBondIxn( int* atomIndices,
// accumulate energies // accumulate energies
updateEnergy( energy, energiesByBond, LastAtomIndex, atomIndices, energiesByAtom ); if (totalEnergy != NULL)
*totalEnergy += energy;
// debug // debug
...@@ -283,8 +274,6 @@ int ReferenceFreeEnergyLJCoulomb14Softcore::calculateBondIxn( int* atomIndices, ...@@ -283,8 +274,6 @@ int ReferenceFreeEnergyLJCoulomb14Softcore::calculateBondIxn( int* atomIndices,
//SimTKOpenMMLog::printMessage( message ); //SimTKOpenMMLog::printMessage( message );
} }
return ReferenceForce::DefaultReturn;
} }
/**--------------------------------------------------------------------------------------- /**---------------------------------------------------------------------------------------
......
...@@ -98,16 +98,13 @@ class ReferenceFreeEnergyLJCoulomb14Softcore : public ReferenceBondIxn { ...@@ -98,16 +98,13 @@ class ReferenceFreeEnergyLJCoulomb14Softcore : public ReferenceBondIxn {
@param atomCoordinates atom coordinates @param atomCoordinates atom coordinates
@param parameters six RB parameters @param parameters six RB parameters
@param forces force array (forces added to current values) @param forces force array (forces added to current values)
@param energiesByBond energies by bond: energiesByBond[bondIndex] @param totalEnergy if not null, the energy will be added to this
@param energiesByAtom energies by atom: energiesByAtom[atomIndex]
@return ReferenceForce::DefaultReturn
--------------------------------------------------------------------------------------- */ --------------------------------------------------------------------------------------- */
int calculateBondIxn( int* atomIndices, RealOpenMM** atomCoordinates, void calculateBondIxn( int* atomIndices, RealOpenMM** atomCoordinates,
RealOpenMM* parameters, RealOpenMM** forces, RealOpenMM* parameters, RealOpenMM** forces,
RealOpenMM* energiesByBond, RealOpenMM* energiesByAtom ) const; RealOpenMM* totalEnergy ) 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