Commit 7ed51ce4 authored by Mark Friedrichs's avatar Mark Friedrichs
Browse files

Bonded forces ok

parent 08c2e027
...@@ -521,8 +521,8 @@ int BrookBonded::matchTorsion( int i, int j, int k, int l, int nbondeds, int *pa ...@@ -521,8 +521,8 @@ int BrookBonded::matchTorsion( int i, int j, int k, int l, int nbondeds, int *pa
* in the fourth component and match the middle two components * in the fourth component and match the middle two components
* *
* The last bit will not be needed as long as gromacs generates * The last bit will not be needed as long as gromacs generates
* all dihedrals. But I think there are force fields that don't * all torsions. But I think there are force fields that don't
* use all dihedrals. * use all torsions.
* *
* @return ErrorReturnValue if error; else particle index * @return ErrorReturnValue if error; else particle index
* *
...@@ -711,9 +711,9 @@ int BrookBonded::matchPair( int i, int j, int nbondeds, int *particles ){ ...@@ -711,9 +711,9 @@ int BrookBonded::matchPair( int i, int j, int nbondeds, int *particles ){
* *
*/ */
int BrookBonded::addRBDihedrals( int *nbondeds, int *particles, float *params[], int BrookBonded::addRBTorsions( int *nbondeds, int *particles, float *params[],
const vector<vector<int> >& rbTorsionIndices, const vector<vector<int> >& rbTorsionIndices,
const vector<vector<double> >& rbTorsionParameters ){ const vector<vector<double> >& rbTorsionParameters ){
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
...@@ -779,13 +779,13 @@ int BrookBonded::addRBDihedrals( int *nbondeds, int *particles, float *params[], ...@@ -779,13 +779,13 @@ int BrookBonded::addRBDihedrals( int *nbondeds, int *particles, float *params[],
* *
*/ */
int BrookBonded::addPDihedrals( int *nbondeds, int *particles, BrookOpenMMFloat* params[], int BrookBonded::addPTorsions( int *nbondeds, int *particles, BrookOpenMMFloat* params[],
const vector<vector<int> >& periodicTorsionIndices, const vector<vector<int> >& periodicTorsionIndices,
const vector<vector<double> >& periodicTorsionParameters ){ const vector<vector<double> >& periodicTorsionParameters ){
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
static const std::string methodName = "BrookBonded::addPDihedrals"; static const std::string methodName = "BrookBonded::addPTorsion";
static const int debug = 0; static const int debug = 0;
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
...@@ -815,9 +815,12 @@ int BrookBonded::addPDihedrals( int *nbondeds, int *particles, BrookOpenMMFloat* ...@@ -815,9 +815,12 @@ int BrookBonded::addPDihedrals( int *nbondeds, int *particles, BrookOpenMMFloat*
ATOMS( ibonded, 3 ) = l; ATOMS( ibonded, 3 ) = l;
(*nbondeds)++; (*nbondeds)++;
} }
PARAMS( ibonded, 1, 1 ) = (BrookOpenMMFloat) pTParameters[0];
// note: parameters 0 & 2 switched
PARAMS( ibonded, 1, 1 ) = (BrookOpenMMFloat) pTParameters[2];
PARAMS( ibonded, 1, 2 ) = (BrookOpenMMFloat) pTParameters[1]; PARAMS( ibonded, 1, 2 ) = (BrookOpenMMFloat) pTParameters[1];
PARAMS( ibonded, 1, 3 ) = (BrookOpenMMFloat) pTParameters[2]; PARAMS( ibonded, 1, 3 ) = (BrookOpenMMFloat) pTParameters[0];
if( debug && getLog() ){ if( debug && getLog() ){
(void) fprintf( getLog(), " %d [%d %d %d %d] %.3e %.3e %.3e\n", ibonded, i, j, k, l, (void) fprintf( getLog(), " %d [%d %d %d %d] %.3e %.3e %.3e\n", ibonded, i, j, k, l,
...@@ -910,7 +913,7 @@ int BrookBonded::addBonds( int *nbondeds, int *particles, float *params[], const ...@@ -910,7 +913,7 @@ int BrookBonded::addBonds( int *nbondeds, int *particles, float *params[], const
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
static const std::string methodName = "BrookBonded::addBonds"; static const std::string methodName = "BrookBonded::addBonds";
static const int debug = 1; static const int debug = 0;
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
...@@ -1228,7 +1231,7 @@ int BrookBonded::setup( int numberOfParticles, ...@@ -1228,7 +1231,7 @@ int BrookBonded::setup( int numberOfParticles,
// allocate temp memory // allocate temp memory
int maxBonds = 10*numberOfParticles; int maxBonds = 10*numberOfParticles;
int* particles = new int[5*maxBonds]; int* particles = new int[5*maxBonds];
BrookOpenMMFloat** params = new BrookOpenMMFloat*[getNumberOfParameterStreams()]; BrookOpenMMFloat** params = new BrookOpenMMFloat*[getNumberOfParameterStreams()];
...@@ -1269,17 +1272,25 @@ int BrookBonded::setup( int numberOfParticles, ...@@ -1269,17 +1272,25 @@ int BrookBonded::setup( int numberOfParticles,
int nbondeds = 0; int nbondeds = 0;
addRBDihedrals( &nbondeds, particles, params, rbTorsionBrookBondParameters->getParticleIndices(), rbTorsionBrookBondParameters->getBondParameters() ); if( rbTorsionBrookBondParameters ){
addPDihedrals ( &nbondeds, particles, params, periodicTorsionBrookBondParameters->getParticleIndices(), periodicTorsionBrookBondParameters->getBondParameters() ); addRBTorsions( &nbondeds, particles, params, rbTorsionBrookBondParameters->getParticleIndices(), rbTorsionBrookBondParameters->getBondParameters() );
addAngles( &nbondeds, particles, params, harmonicAngleBrookBondParameters->getParticleIndices(), harmonicAngleBrookBondParameters->getBondParameters() ); }
addBonds( &nbondeds, particles, params, harmonicBondBrookBondParameters->getParticleIndices(), harmonicBondBrookBondParameters->getBondParameters() ); if( periodicTorsionBrookBondParameters ){
addPTorsions( &nbondeds, particles, params, periodicTorsionBrookBondParameters->getParticleIndices(), periodicTorsionBrookBondParameters->getBondParameters() );
}
if( harmonicAngleBrookBondParameters ){
addAngles( &nbondeds, particles, params, harmonicAngleBrookBondParameters->getParticleIndices(), harmonicAngleBrookBondParameters->getBondParameters() );
}
if( harmonicBondBrookBondParameters ){
addBonds( &nbondeds, particles, params, harmonicBondBrookBondParameters->getParticleIndices(), harmonicBondBrookBondParameters->getBondParameters() );
}
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
// charge stream // charge stream
_chargeStream = new BrookFloatStreamInternal( BrookCommon::BondedChargeStream, numberOfParticles, particleStreamWidth, _chargeStream = new BrookFloatStreamInternal( BrookCommon::BondedChargeStream, numberOfParticles, particleStreamWidth,
BrookStreamInternal::Float, dangleValue ); BrookStreamInternal::Float, dangleValue );
BrookOpenMMFloat* charges = new BrookOpenMMFloat[_chargeStream->getStreamSize()]; BrookOpenMMFloat* charges = new BrookOpenMMFloat[_chargeStream->getStreamSize()];
memset( charges, 0, _chargeStream->getStreamSize()*sizeof( BrookOpenMMFloat ) ); memset( charges, 0, _chargeStream->getStreamSize()*sizeof( BrookOpenMMFloat ) );
...@@ -1287,13 +1298,15 @@ int BrookBonded::setup( int numberOfParticles, ...@@ -1287,13 +1298,15 @@ int BrookBonded::setup( int numberOfParticles,
//(void) fprintf( getLog(), "%s Post addBonds particles=%d number of bonds=%d maxBonds=%d\n", methodName.c_str(), numberOfParticles, nbondeds, maxBonds ); //(void) fprintf( getLog(), "%s Post addBonds particles=%d number of bonds=%d maxBonds=%d\n", methodName.c_str(), numberOfParticles, nbondeds, maxBonds );
addPairs( &nbondeds, particles, params, charges, nonBonded14ForceParameters->getParticleIndices(), nonBonded14ForceParameters->getBondParameters(), lj14Scale, coulombScale ); if( nonBonded14ForceParameters ){
addPairs( &nbondeds, particles, params, charges, nonBonded14ForceParameters->getParticleIndices(), nonBonded14ForceParameters->getBondParameters(), lj14Scale, coulombScale );
}
// check that number of bonds not too large for memory allocated // check that number of bonds not too large for memory allocated
if( nbondeds >= maxBonds ){ if( nbondeds >= maxBonds ){
std::stringstream message; std::stringstream message;
message << methodName << " number of bonds=" << nbondeds << " is greater than maxBonds=" << maxBonds; message << methodName << " number of bonds=" << nbondeds << " is greater than maxBonds=" << maxBonds << " numberOfParticles=" << numberOfParticles;
throw OpenMMException( message.str() ); throw OpenMMException( message.str() );
} else if( PrintOn && getLog() ){ } else if( PrintOn && getLog() ){
(void) fprintf( getLog(), "%s particles=%d number of bonds=%d maxBonds=%d\n", methodName.c_str(), numberOfParticles, nbondeds, maxBonds ); (void) fprintf( getLog(), "%s particles=%d number of bonds=%d maxBonds=%d\n", methodName.c_str(), numberOfParticles, nbondeds, maxBonds );
...@@ -1307,10 +1320,10 @@ int BrookBonded::setup( int numberOfParticles, ...@@ -1307,10 +1320,10 @@ int BrookBonded::setup( int numberOfParticles,
_particleIndicesStream = new BrookFloatStreamInternal( BrookCommon::BondedParticleIndicesStream, nbondeds, particleStreamWidth, _particleIndicesStream = new BrookFloatStreamInternal( BrookCommon::BondedParticleIndicesStream, nbondeds, particleStreamWidth,
BrookStreamInternal::Float4, dangleValue ); BrookStreamInternal::Float4, dangleValue );
int* buffer = new int[4*_particleIndicesStream->getStreamSize()]; int* buffer = new int[4*_particleIndicesStream->getStreamSize()];
memset( buffer, 0, sizeof( int )*4*_particleIndicesStream->getStreamSize() ); memset( buffer, 0, sizeof( int )*4*_particleIndicesStream->getStreamSize() );
int index = 0; int index = 0;
for( int ii = 0; ii < nbondeds; ii++ ){ for( int ii = 0; ii < nbondeds; ii++ ){
for( int jj = 0; jj < 4; jj++ ){ for( int jj = 0; jj < 4; jj++ ){
buffer[index++] = ATOMS( ii, jj ); buffer[index++] = ATOMS( ii, jj );
...@@ -1515,7 +1528,7 @@ std::string BrookBonded::getContentsString( int level ) const { ...@@ -1515,7 +1528,7 @@ std::string BrookBonded::getContentsString( int level ) const {
* forces are to be picked up from and stores the position * forces are to be picked up from and stores the position
* in the appropriate index. * in the appropriate index.
* *
* Input: number of dihedrals, the particle indices, and a flag indicating * Input: number of torsions, the particle indices, and a flag indicating
* whether we're doing i(0), j(1), k(2) or l(3) * whether we're doing i(0), j(1), k(2) or l(3)
* Output: an array of counts per particle * Output: an array of counts per particle
* arrays of inversemaps * arrays of inversemaps
...@@ -1595,12 +1608,12 @@ if( particle > particleRange[1] ){ ...@@ -1595,12 +1608,12 @@ if( particle > particleRange[1] ){
//Check to make sure we're inside the limits //Check to make sure we're inside the limits
if ( counts[particle] > nmaps * 4 ){ if ( counts[particle] > nmaps * 4 ){
if( PrintOn && getLog() ){ if( PrintOn && getLog() ){
(void) fprintf( getLog(), "%s Particle %d has too many proper dihedrals(%d, max %d)\n", (void) fprintf( getLog(), "%s Particle %d has too many proper torsions (%d, max %d)\n",
methodName.c_str(), particle, counts[particle], nmaps*4 ); methodName.c_str(), particle, counts[particle], nmaps*4 );
(void) fflush( getLog() ); (void) fflush( getLog() );
} }
std::stringstream message; std::stringstream message;
message << methodName << " Particle " << particle << " has too many proper dihedrals; valid range:(" << counts[particle] << ", " << nmaps*4 << ")"; message << methodName << " Particle " << particle << " has too many proper torsions; valid range:(" << counts[particle] << ", " << nmaps*4 << ")";
throw OpenMMException( message.str() ); throw OpenMMException( message.str() );
} }
...@@ -1869,8 +1882,9 @@ void BrookBonded::computeForces( BrookStreamImpl& positionStream, BrookStreamImp ...@@ -1869,8 +1882,9 @@ void BrookBonded::computeForces( BrookStreamImpl& positionStream, BrookStreamImp
brookStreamInternalF->printToFile( getLog() ); brookStreamInternalF->printToFile( getLog() );
*/ */
(void) fprintf( getLog(), "\nInverse map streams -- K_Stream cnt=%d\n", getInverseMapStreamCount( K_Stream ) ); (void) fprintf( getLog(), "\nInverse map streams\n" );
for( int ii = 0; ii < 4; ii++ ){ for( int ii = 0; ii < 4; ii++ ){
(void) fprintf( getLog(), "\nInverse map streams -- StreamIndex=%d cnt=%d\n", ii, getInverseMapStreamCount( ii ) );
for( int jj = 0; jj < countPrintInvMap[ii]; jj++ ){ for( int jj = 0; jj < countPrintInvMap[ii]; jj++ ){
(void) fprintf( getLog(), "\n Inverse map streams index=%d %d\n", ii, jj ); (void) fprintf( getLog(), "\n Inverse map streams index=%d %d\n", ii, jj );
inverseStreamMaps[ii][jj]->printToFile( getLog() ); inverseStreamMaps[ii][jj]->printToFile( getLog() );
...@@ -1928,11 +1942,20 @@ void BrookBonded::computeForces( BrookStreamImpl& positionStream, BrookStreamImp ...@@ -1928,11 +1942,20 @@ void BrookBonded::computeForces( BrookStreamImpl& positionStream, BrookStreamImp
bondedForceStreams[K_Stream]->getBrookStream(), bondedForceStreams[K_Stream]->getBrookStream(),
forceStream.getBrookStream(), forceStream.getBrookStream() ); forceStream.getBrookStream(), forceStream.getBrookStream() );
} else if( getInverseMapStreamCount( I_Stream ) == 1 && getInverseMapStreamCount( K_Stream ) == 1 ){
kinvmap_gather1_1( width,
inverseStreamMaps[I_Stream][0]->getBrookStream(),
bondedForceStreams[I_Stream]->getBrookStream(),
inverseStreamMaps[K_Stream][0]->getBrookStream(),
bondedForceStreams[K_Stream]->getBrookStream(),
forceStream.getBrookStream(), forceStream.getBrookStream() );
} else { } else {
// case not handled -- throw an exception // case not handled -- throw an exception
if( getLog() && ErrorMessages++ < MaxErrorMessages ){ if( getLog() && ErrorMessages++ < MaxErrorMessages && getInverseMapStreamCount( I_Stream ) > 0 && getInverseMapStreamCount( K_Stream ) > 0 ){
(void) fprintf( getLog(), "%s case: I-map=%d K-map=%d -- not handled.\n", (void) fprintf( getLog(), "%s case: I-map=%d K-map=%d -- not handled.\n",
methodName.c_str(), getInverseMapStreamCount( I_Stream ), methodName.c_str(), getInverseMapStreamCount( I_Stream ),
getInverseMapStreamCount( K_Stream ) ); getInverseMapStreamCount( K_Stream ) );
...@@ -1988,13 +2011,16 @@ void BrookBonded::computeForces( BrookStreamImpl& positionStream, BrookStreamImp ...@@ -1988,13 +2011,16 @@ void BrookBonded::computeForces( BrookStreamImpl& positionStream, BrookStreamImp
// case not handled -- throw an exception // case not handled -- throw an exception
if( getLog() && ErrorMessages++ < MaxErrorMessages ){ if( getLog() && ErrorMessages++ < MaxErrorMessages && getInverseMapStreamCount( J_Stream ) > 0 && getInverseMapStreamCount( L_Stream ) > 0 ){
(void) fprintf( getLog(), "%s case: J-map=%d L-map=%d -- not handled.\n", (void) fprintf( getLog(), "%s case: J-map=%d L-map=%d -- not handled.\n",
methodName.c_str(), getInverseMapStreamCount( J_Stream ), methodName.c_str(), getInverseMapStreamCount( J_Stream ),
getInverseMapStreamCount( L_Stream ) ); getInverseMapStreamCount( L_Stream ) );
(void) fflush( getLog() ); (void) fflush( getLog() );
} }
// this is for testing purposes a-- may need to be cleaned
// or add new gather functions
kinvmap_gather5_2( width, kinvmap_gather5_2( width,
inverseStreamMaps[J_Stream][0]->getBrookStream(), inverseStreamMaps[J_Stream][0]->getBrookStream(),
inverseStreamMaps[J_Stream][1]->getBrookStream(), inverseStreamMaps[J_Stream][1]->getBrookStream(),
...@@ -2006,6 +2032,7 @@ void BrookBonded::computeForces( BrookStreamImpl& positionStream, BrookStreamImp ...@@ -2006,6 +2032,7 @@ void BrookBonded::computeForces( BrookStreamImpl& positionStream, BrookStreamImp
inverseStreamMaps[L_Stream][1]->getBrookStream(), inverseStreamMaps[L_Stream][1]->getBrookStream(),
bondedForceStreams[L_Stream]->getBrookStream(), bondedForceStreams[L_Stream]->getBrookStream(),
forceStream.getBrookStream(), forceStream.getBrookStream() ); forceStream.getBrookStream(), forceStream.getBrookStream() );
/* /*
std::stringstream message; std::stringstream message;
message << methodName << "J-maps=" << getInverseMapStreamCount( J_Stream ) << " and " << message << methodName << "J-maps=" << getInverseMapStreamCount( J_Stream ) << " and " <<
......
...@@ -347,7 +347,7 @@ class BrookBonded : public BrookCommon { ...@@ -347,7 +347,7 @@ class BrookBonded : public BrookCommon {
* *
*/ */
int addRBDihedrals( int *nbondeds, int *particles, BrookOpenMMFloat* params[], const std::vector<std::vector<int> >& rbTorsionIndices, int addRBTorsions( int *nbondeds, int *particles, BrookOpenMMFloat* params[], const std::vector<std::vector<int> >& rbTorsionIndices,
const std::vector<std::vector<double> >& rbTorsionParameters ); const std::vector<std::vector<double> >& rbTorsionParameters );
/** /**
...@@ -363,7 +363,7 @@ class BrookBonded : public BrookCommon { ...@@ -363,7 +363,7 @@ class BrookBonded : public BrookCommon {
* *
*/ */
int addPDihedrals( int *nbondeds, int *particles, BrookOpenMMFloat* params[], const std::vector<std::vector<int> >& periodicTorsionIndices, int addPTorsions( int *nbondeds, int *particles, BrookOpenMMFloat* params[], const std::vector<std::vector<int> >& periodicTorsionIndices,
const std::vector<std::vector<double> >& periodicTorsionParameters ); const std::vector<std::vector<double> >& periodicTorsionParameters );
/** /**
...@@ -456,7 +456,7 @@ class BrookBonded : public BrookCommon { ...@@ -456,7 +456,7 @@ class BrookBonded : public BrookCommon {
* forces are to be picked up from and stores the position * forces are to be picked up from and stores the position
* in the appropriate index. * in the appropriate index.
* *
* Input: number of dihedrals, the particle indices, and a flag indicating * Input: number of torsions, the particle indices, and a flag indicating
* whether we're doing i(0), j(1), k(2) or l(3) * whether we're doing i(0), j(1), k(2) or l(3)
* Output: an array of counts per particle * Output: an array of counts per particle
* arrays of inversemaps * arrays of inversemaps
......
...@@ -64,7 +64,6 @@ BrookCalcGBSAOBCForceKernel::BrookCalcGBSAOBCForceKernel( std::string name, cons ...@@ -64,7 +64,6 @@ BrookCalcGBSAOBCForceKernel::BrookCalcGBSAOBCForceKernel( std::string name, cons
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
_numberOfParticles = 0; _numberOfParticles = 0;
_brookGbsa = NULL;
_log = NULL; _log = NULL;
const BrookPlatform brookPlatform = dynamic_cast<const BrookPlatform&> (platform); const BrookPlatform brookPlatform = dynamic_cast<const BrookPlatform&> (platform);
...@@ -72,6 +71,7 @@ BrookCalcGBSAOBCForceKernel::BrookCalcGBSAOBCForceKernel( std::string name, cons ...@@ -72,6 +71,7 @@ BrookCalcGBSAOBCForceKernel::BrookCalcGBSAOBCForceKernel( std::string name, cons
setLog( brookPlatform.getLog() ); setLog( brookPlatform.getLog() );
} }
_openMMBrookInterface.setNumberOfParticles( system.getNumParticles() );
} }
/** /**
...@@ -88,7 +88,6 @@ BrookCalcGBSAOBCForceKernel::~BrookCalcGBSAOBCForceKernel( ){ ...@@ -88,7 +88,6 @@ BrookCalcGBSAOBCForceKernel::~BrookCalcGBSAOBCForceKernel( ){
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
delete _brookGbsa;
} }
/** /**
...@@ -136,11 +135,7 @@ void BrookCalcGBSAOBCForceKernel::initialize( const System& system, const GBSAOB ...@@ -136,11 +135,7 @@ void BrookCalcGBSAOBCForceKernel::initialize( const System& system, const GBSAOB
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
if( _brookGbsa ){ BrookGbsa& brookGbsa = _openMMBrookInterface.getBrookGbsa();
delete _brookGbsa;
}
_brookGbsa = new BrookGbsa();
_brookGbsa->setLog( log );
// get parameters from force object // get parameters from force object
// and initialize brookGbsa // and initialize brookGbsa
...@@ -159,13 +154,13 @@ void BrookCalcGBSAOBCForceKernel::initialize( const System& system, const GBSAOB ...@@ -159,13 +154,13 @@ void BrookCalcGBSAOBCForceKernel::initialize( const System& system, const GBSAOB
parameters[1] = radius; parameters[1] = radius;
parameters[2] = scalingFactor; parameters[2] = scalingFactor;
} }
_brookGbsa->setup( particleParameters, force.getSolventDielectric(), force.getSoluteDielectric(), getPlatform() ); brookGbsa.setup( particleParameters, force.getSolventDielectric(), force.getSoluteDielectric(), getPlatform() );
_openMMBrookInterface.setTriggerForceKernel( this ); _openMMBrookInterface.setTriggerForceKernel( this );
_openMMBrookInterface.setTriggerEnergyKernel( this ); _openMMBrookInterface.setTriggerEnergyKernel( this );
if( log ){ if( log ){
std::string contents = _brookGbsa->getContentsString( ); std::string contents = brookGbsa.getContentsString( );
(void) fprintf( log, "%s brookGbsa::contents\n%s", methodName.c_str(), contents.c_str() ); (void) fprintf( log, "%s brookGbsa::contents\n%s", methodName.c_str(), contents.c_str() );
(void) fflush( log ); (void) fflush( log );
} }
...@@ -213,7 +208,7 @@ double BrookCalcGBSAOBCForceKernel::executeEnergy( OpenMMContextImpl& context ){ ...@@ -213,7 +208,7 @@ double BrookCalcGBSAOBCForceKernel::executeEnergy( OpenMMContextImpl& context ){
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
if( _openMMBrookInterface.getTriggerEnergyKernel() == this ){ if( _openMMBrookInterface.getTriggerEnergyKernel() == this ){
return (double) _openMMBrookInterface.computeEnergy( context ); return (double) _openMMBrookInterface.computeEnergy( context, _system );
} else { } else {
return 0.0; return 0.0;
} }
......
...@@ -122,6 +122,15 @@ class BrookCalcGBSAOBCForceKernel : public CalcGBSAOBCForceKernel { ...@@ -122,6 +122,15 @@ class BrookCalcGBSAOBCForceKernel : public CalcGBSAOBCForceKernel {
FILE* getLog( void ) const; FILE* getLog( void ) const;
/**
* Get Brook GBSA reference
*
* @return Brook GBSA reference
*
*/
BrookGbsa& getBrookGbsa( void ) const;
private: private:
// log file reference // log file reference
...@@ -132,10 +141,6 @@ class BrookCalcGBSAOBCForceKernel : public CalcGBSAOBCForceKernel { ...@@ -132,10 +141,6 @@ class BrookCalcGBSAOBCForceKernel : public CalcGBSAOBCForceKernel {
int _numberOfParticles; int _numberOfParticles;
// Brook Gbsa
BrookGbsa* _brookGbsa;
// interface // interface
OpenMMBrookInterface& _openMMBrookInterface; OpenMMBrookInterface& _openMMBrookInterface;
......
...@@ -66,6 +66,7 @@ BrookCalcHarmonicAngleForceKernel::BrookCalcHarmonicAngleForceKernel( std::strin ...@@ -66,6 +66,7 @@ BrookCalcHarmonicAngleForceKernel::BrookCalcHarmonicAngleForceKernel( std::strin
if( brookPlatform.getLog() != NULL ){ if( brookPlatform.getLog() != NULL ){
setLog( brookPlatform.getLog() ); setLog( brookPlatform.getLog() );
} }
_openMMBrookInterface.setNumberOfParticles( system.getNumParticles() );
} }
...@@ -214,7 +215,7 @@ double BrookCalcHarmonicAngleForceKernel::executeEnergy( OpenMMContextImpl& cont ...@@ -214,7 +215,7 @@ double BrookCalcHarmonicAngleForceKernel::executeEnergy( OpenMMContextImpl& cont
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
if( _openMMBrookInterface.getTriggerEnergyKernel() == this ){ if( _openMMBrookInterface.getTriggerEnergyKernel() == this ){
return (double) _openMMBrookInterface.computeEnergy( context ); return (double) _openMMBrookInterface.computeEnergy( context, _system );
} else { } else {
return 0.0; return 0.0;
} }
......
...@@ -66,6 +66,8 @@ BrookCalcHarmonicBondForceKernel::BrookCalcHarmonicBondForceKernel( std::string ...@@ -66,6 +66,8 @@ BrookCalcHarmonicBondForceKernel::BrookCalcHarmonicBondForceKernel( std::string
if( brookPlatform.getLog() != NULL ){ if( brookPlatform.getLog() != NULL ){
setLog( brookPlatform.getLog() ); setLog( brookPlatform.getLog() );
} }
_openMMBrookInterface.setNumberOfParticles( system.getNumParticles() );
} }
...@@ -215,7 +217,7 @@ double BrookCalcHarmonicBondForceKernel::executeEnergy( OpenMMContextImpl& conte ...@@ -215,7 +217,7 @@ double BrookCalcHarmonicBondForceKernel::executeEnergy( OpenMMContextImpl& conte
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
if( _openMMBrookInterface.getTriggerEnergyKernel() == this ){ if( _openMMBrookInterface.getTriggerEnergyKernel() == this ){
return (double) _openMMBrookInterface.computeEnergy( context ); return (double) _openMMBrookInterface.computeEnergy( context, _system );
} else { } else {
return 0.0; return 0.0;
} }
......
...@@ -56,7 +56,8 @@ BrookCalcKineticEnergyKernel::BrookCalcKineticEnergyKernel( std::string name, co ...@@ -56,7 +56,8 @@ BrookCalcKineticEnergyKernel::BrookCalcKineticEnergyKernel( std::string name, co
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
_numberOfParticles = 0; _openMMBrookInterface.setNumberOfParticles( system.getNumParticles() );
_numberOfParticles = system.getNumParticles();
_masses = NULL; _masses = NULL;
} }
......
...@@ -61,8 +61,9 @@ BrookCalcNonbondedForceKernel::BrookCalcNonbondedForceKernel( std::string name, ...@@ -61,8 +61,9 @@ BrookCalcNonbondedForceKernel::BrookCalcNonbondedForceKernel( std::string name,
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
_numberOfParticles = 0; _numberOfParticles = system.getNumParticles();
_brookNonBonded = NULL; _openMMBrookInterface.setNumberOfParticles( system.getNumParticles() );
_brookBondParameters = NULL; _brookBondParameters = NULL;
_log = NULL; _log = NULL;
...@@ -94,7 +95,6 @@ BrookCalcNonbondedForceKernel::~BrookCalcNonbondedForceKernel( ){ ...@@ -94,7 +95,6 @@ BrookCalcNonbondedForceKernel::~BrookCalcNonbondedForceKernel( ){
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
//delete _brookBondParameters; //delete _brookBondParameters;
delete _brookNonBonded;
// deleted w/ kernel delete? If activated, program crashes // deleted w/ kernel delete? If activated, program crashes
...@@ -168,11 +168,7 @@ void BrookCalcNonbondedForceKernel::initialize( const System& system, const Nonb ...@@ -168,11 +168,7 @@ void BrookCalcNonbondedForceKernel::initialize( const System& system, const Nonb
// nonbonded // nonbonded
if( _brookNonBonded ){ BrookNonBonded& brookNonBonded = _openMMBrookInterface.getBrookNonBonded();
delete _brookNonBonded;
}
_brookNonBonded = new BrookNonBonded();
_brookNonBonded->setLog( log );
// charge & LJ parameters // charge & LJ parameters
...@@ -187,15 +183,14 @@ void BrookCalcNonbondedForceKernel::initialize( const System& system, const Nonb ...@@ -187,15 +183,14 @@ void BrookCalcNonbondedForceKernel::initialize( const System& system, const Nonb
particleParamArray[2] = charge; particleParamArray[2] = charge;
} }
_brookNonBonded->setup( _numberOfParticles, nonbondedParameters, exclusions, getPlatform() ); brookNonBonded.setup( _numberOfParticles, nonbondedParameters, exclusions, getPlatform() );
_openMMBrookInterface.setTriggerForceKernel( this ); _openMMBrookInterface.setTriggerForceKernel( this );
_openMMBrookInterface.setTriggerEnergyKernel( this ); _openMMBrookInterface.setTriggerEnergyKernel( this );
// echo contents // echo contents
if( log ){ if( log ){
std::string contents = _brookNonBonded->getContentsString( ); std::string contents = brookNonBonded.getContentsString( );
(void) fprintf( log, "%s brookNonBonded::contents\n%s", methodName.c_str(), contents.c_str() ); (void) fprintf( log, "%s brookNonBonded::contents\n%s", methodName.c_str(), contents.c_str() );
(void) fflush( log ); (void) fflush( log );
} }
...@@ -303,7 +298,7 @@ double BrookCalcNonbondedForceKernel::executeEnergy( OpenMMContextImpl& context ...@@ -303,7 +298,7 @@ double BrookCalcNonbondedForceKernel::executeEnergy( OpenMMContextImpl& context
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
if( _openMMBrookInterface.getTriggerEnergyKernel() == this ){ if( _openMMBrookInterface.getTriggerEnergyKernel() == this ){
return (double) _openMMBrookInterface.computeEnergy( context ); return (double) _openMMBrookInterface.computeEnergy( context, _system );
} else { } else {
return 0.0; return 0.0;
} }
......
...@@ -169,10 +169,6 @@ class BrookCalcNonbondedForceKernel : public CalcNonbondedForceKernel { ...@@ -169,10 +169,6 @@ class BrookCalcNonbondedForceKernel : public CalcNonbondedForceKernel {
int _numberOfParticles; int _numberOfParticles;
// Brook nonbonded
BrookNonBonded* _brookNonBonded;
OpenMMBrookInterface& _openMMBrookInterface; OpenMMBrookInterface& _openMMBrookInterface;
System& _system; System& _system;
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
using namespace OpenMM; using namespace OpenMM;
using namespace std; using namespace std;
const std::string BrookCalcPeriodicTorsionForceKernel::BondName = "ProperDihedral"; const std::string BrookCalcPeriodicTorsionForceKernel::BondName = "ProperTorsion";
/** /**
* BrookCalcPeriodicTorsionForceKernel constructor * BrookCalcPeriodicTorsionForceKernel constructor
...@@ -61,6 +61,7 @@ BrookCalcPeriodicTorsionForceKernel::BrookCalcPeriodicTorsionForceKernel( std::s ...@@ -61,6 +61,7 @@ BrookCalcPeriodicTorsionForceKernel::BrookCalcPeriodicTorsionForceKernel( std::s
_brookBondParameters = NULL; _brookBondParameters = NULL;
_log = NULL; _log = NULL;
_openMMBrookInterface.setNumberOfParticles( system.getNumParticles() );
const BrookPlatform brookPlatform = dynamic_cast<const BrookPlatform&> (platform); const BrookPlatform brookPlatform = dynamic_cast<const BrookPlatform&> (platform);
if( brookPlatform.getLog() != NULL ){ if( brookPlatform.getLog() != NULL ){
...@@ -115,7 +116,7 @@ int BrookCalcPeriodicTorsionForceKernel::setLog( FILE* log ){ ...@@ -115,7 +116,7 @@ int BrookCalcPeriodicTorsionForceKernel::setLog( FILE* log ){
* Initialize the kernel, setting up the values of all the force field parameters. * Initialize the kernel, setting up the values of all the force field parameters.
* *
* @param system System reference * @param system System reference
* @param force ProperDihedralForce reference * @param force ProperTorsionForce reference
* *
*/ */
...@@ -216,7 +217,7 @@ double BrookCalcPeriodicTorsionForceKernel::executeEnergy( OpenMMContextImpl& co ...@@ -216,7 +217,7 @@ double BrookCalcPeriodicTorsionForceKernel::executeEnergy( OpenMMContextImpl& co
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
if( _openMMBrookInterface.getTriggerEnergyKernel() == this ){ if( _openMMBrookInterface.getTriggerEnergyKernel() == this ){
return (double) _openMMBrookInterface.computeEnergy( context ); return (double) _openMMBrookInterface.computeEnergy( context, _system );
} else { } else {
return 0.0; return 0.0;
} }
......
...@@ -63,7 +63,7 @@ class BrookCalcPeriodicTorsionForceKernel : public CalcPeriodicTorsionForceKerne ...@@ -63,7 +63,7 @@ class BrookCalcPeriodicTorsionForceKernel : public CalcPeriodicTorsionForceKerne
* Initialize the kernel, setting up the values to calculate harmonic bond force & energy * Initialize the kernel, setting up the values to calculate harmonic bond force & energy
* *
* @param system System reference * @param system System reference
* @param force ProperDihedralForce reference * @param force ProperTorsionForce reference
* *
*/ */
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
using namespace OpenMM; using namespace OpenMM;
using namespace std; using namespace std;
const std::string BrookCalcRBTorsionForceKernel::BondName = "RbDihedral"; const std::string BrookCalcRBTorsionForceKernel::BondName = "RbTorsion";
/** /**
* BrookCalcRBTorsionForceKernel constructor * BrookCalcRBTorsionForceKernel constructor
...@@ -61,6 +61,7 @@ BrookCalcRBTorsionForceKernel::BrookCalcRBTorsionForceKernel( std::string name, ...@@ -61,6 +61,7 @@ BrookCalcRBTorsionForceKernel::BrookCalcRBTorsionForceKernel( std::string name,
_brookBondParameters = NULL; _brookBondParameters = NULL;
_log = NULL; _log = NULL;
_openMMBrookInterface.setNumberOfParticles( system.getNumParticles() );
const BrookPlatform brookPlatform = dynamic_cast<const BrookPlatform&> (platform); const BrookPlatform brookPlatform = dynamic_cast<const BrookPlatform&> (platform);
if( brookPlatform.getLog() != NULL ){ if( brookPlatform.getLog() != NULL ){
...@@ -115,7 +116,7 @@ int BrookCalcRBTorsionForceKernel::setLog( FILE* log ){ ...@@ -115,7 +116,7 @@ int BrookCalcRBTorsionForceKernel::setLog( FILE* log ){
* Initialize the kernel, setting up the values of all the force field parameters. * Initialize the kernel, setting up the values of all the force field parameters.
* *
* @param system System reference * @param system System reference
* @param force RbDihedralForce reference * @param force RbTorsionForce reference
* *
*/ */
...@@ -219,7 +220,7 @@ double BrookCalcRBTorsionForceKernel::executeEnergy( OpenMMContextImpl& context ...@@ -219,7 +220,7 @@ double BrookCalcRBTorsionForceKernel::executeEnergy( OpenMMContextImpl& context
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
if( _openMMBrookInterface.getTriggerEnergyKernel() == this ){ if( _openMMBrookInterface.getTriggerEnergyKernel() == this ){
return (double) _openMMBrookInterface.computeEnergy( context ); return (double) _openMMBrookInterface.computeEnergy( context, _system );
} else { } else {
return 0.0; return 0.0;
} }
......
...@@ -63,7 +63,7 @@ class BrookCalcRBTorsionForceKernel : public CalcRBTorsionForceKernel { ...@@ -63,7 +63,7 @@ class BrookCalcRBTorsionForceKernel : public CalcRBTorsionForceKernel {
* Initialize the kernel, setting up the values to calculate harmonic bond force & energy * Initialize the kernel, setting up the values to calculate harmonic bond force & energy
* *
* @param system System reference * @param system System reference
* @param force RbDihedralForce reference * @param force RbTorsionForce reference
* *
*/ */
......
...@@ -120,7 +120,7 @@ BrookCommon::BrookCommon( ){ ...@@ -120,7 +120,7 @@ BrookCommon::BrookCommon( ){
_particleStreamSize = -1; _particleStreamSize = -1;
_log = NULL; _log = NULL;
_verbosity = 0; _isActive = 0;
} }
...@@ -347,27 +347,27 @@ int BrookCommon::setLog( FILE* log ){ ...@@ -347,27 +347,27 @@ int BrookCommon::setLog( FILE* log ){
} }
/** /**
* Get verbosity * Get flag signalling whether active
* *
* @return verbosity * @return flag signalling whether active
* *
*/ */
int BrookCommon::getVerbosity( void ) const { int BrookCommon::isActive( void ) const {
return _verbosity; return _isActive;
} }
/** /**
* Set verbosity * Set flag signalling whether active
* *
* @param verbosity * @param flag signalling whether active
* *
* @return DefaultReturnValue * @return DefaultReturnValue
* *
*/ */
int BrookCommon::setVerbosity( int verbosity ){ int BrookCommon::setIsActive( int isActive ){
_verbosity = verbosity; _isActive= isActive;
return BrookCommon::DefaultReturnValue; return BrookCommon::DefaultReturnValue;
} }
......
...@@ -201,6 +201,24 @@ class BrookCommon { ...@@ -201,6 +201,24 @@ class BrookCommon {
int getParticleStreamSize( void ) const; int getParticleStreamSize( void ) const;
/**
* Get flag signalling whether active
*
* @return flag signalling whether active
*/
int isActive( void ) const;
/**
* Set flag signalling whether active
*
* @param isActive flag signalling whether active
*
* @return DefaultReturnValue
*/
int setIsActive( int isActive );
/** /**
* Set log file reference * Set log file reference
* *
...@@ -232,24 +250,6 @@ class BrookCommon { ...@@ -232,24 +250,6 @@ class BrookCommon {
FILE* getLog( void ) const; FILE* getLog( void ) const;
/**
* Get verbose flag
*
* @return verbosity flag
*
*/
int getVerbosity( void ) const;
/**
* Set verbosity flag
*
* @param verbosity flag
*
*/
int setVerbosity( int verbosity );
/* /*
* Given number of stream elements and width, returns the appropriate * Given number of stream elements and width, returns the appropriate
* height of the stream * height of the stream
...@@ -332,9 +332,9 @@ class BrookCommon { ...@@ -332,9 +332,9 @@ class BrookCommon {
FILE* _log; FILE* _log;
// verbosity // active flag
int _verbosity; int _isActive;
/** /**
* Set number of particles * Set number of particles
......
...@@ -106,7 +106,7 @@ void BrookIntegrateBrownianStepKernel::initialize( const vector<double>& masses, ...@@ -106,7 +106,7 @@ void BrookIntegrateBrownianStepKernel::initialize( const vector<double>& masses,
_brookRandomNumberGenerator = new BrookRandomNumberGenerator( ); _brookRandomNumberGenerator = new BrookRandomNumberGenerator( );
_brookRandomNumberGenerator->setup( (int) masses.size(), getPlatform() ); _brookRandomNumberGenerator->setup( (int) masses.size(), getPlatform() );
_brookRandomNumberGenerator->setVerbosity( 1 ); // _brookRandomNumberGenerator->setVerbosity( 1 );
} }
/** /**
......
...@@ -141,7 +141,7 @@ void BrookIntegrateLangevinStepKernel::initialize( const System& system, const L ...@@ -141,7 +141,7 @@ void BrookIntegrateLangevinStepKernel::initialize( const System& system, const L
_brookRandomNumberGenerator = new BrookRandomNumberGenerator( ); _brookRandomNumberGenerator = new BrookRandomNumberGenerator( );
_brookRandomNumberGenerator->setup( (int) masses.size(), getPlatform() ); _brookRandomNumberGenerator->setup( (int) masses.size(), getPlatform() );
_brookRandomNumberGenerator->setVerbosity( 1 ); // _brookRandomNumberGenerator->setVerbosity( 1 );
} }
......
...@@ -456,7 +456,9 @@ void BrookPlatform::contextCreated( OpenMMContextImpl& context ) const { ...@@ -456,7 +456,9 @@ void BrookPlatform::contextCreated( OpenMMContextImpl& context ) const {
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
context.setPlatformData( new OpenMMBrookInterface( getParticleStreamWidth() ) ); OpenMMBrookInterface* openMMBrookInterface = new OpenMMBrookInterface( getParticleStreamWidth() );
openMMBrookInterface->setLog( stderr );
context.setPlatformData( openMMBrookInterface );
} }
/** /**
......
...@@ -375,7 +375,7 @@ int BrookRandomNumberGenerator::_loadRandomNumberStreamsKiss( void ){ ...@@ -375,7 +375,7 @@ int BrookRandomNumberGenerator::_loadRandomNumberStreamsKiss( void ){
state[2] = rand(); state[2] = rand();
state[3] = rand(); state[3] = rand();
if( getVerbosity() && getLog() ){ if( getLog() ){
(void) fprintf( getLog(), "LoadGVStreamsKiss: reset state seeds stateInitialized=%d reseed=%d\n", (void) fprintf( getLog(), "LoadGVStreamsKiss: reset state seeds stateInitialized=%d reseed=%d\n",
stateInitialized, reseed ); stateInitialized, reseed );
(void) fflush( getLog() ); (void) fflush( getLog() );
...@@ -395,7 +395,7 @@ state[3] = 27587; ...@@ -395,7 +395,7 @@ state[3] = 27587;
float* loadBuffer = _getLoadBuffer(); float* loadBuffer = _getLoadBuffer();
if( getVerbosity() && getLog() ){ if( getLog() ){
static float count = 0.0f; static float count = 0.0f;
float block = (float) (3*getRandomNumberStreamSize() ); float block = (float) (3*getRandomNumberStreamSize() );
count += 1.0f; count += 1.0f;
......
...@@ -34,6 +34,12 @@ ...@@ -34,6 +34,12 @@
#include "OpenMMException.h" #include "OpenMMException.h"
#include <sstream> #include <sstream>
// used for energy calculartion
#include "LangevinIntegrator.h"
#include "ReferencePlatform.h"
#include "internal/OpenMMContextImpl.h"
#include "BrookStreamImpl.h" #include "BrookStreamImpl.h"
#include "OpenMMBrookInterface.h" #include "OpenMMBrookInterface.h"
#include "gpu/kcommon.h" #include "gpu/kcommon.h"
...@@ -56,10 +62,6 @@ OpenMMBrookInterface::OpenMMBrookInterface( int streamWidth ) : _particleStreamW ...@@ -56,10 +62,6 @@ OpenMMBrookInterface::OpenMMBrookInterface( int streamWidth ) : _particleStreamW
_numberOfParticles = 0; _numberOfParticles = 0;
_brookBonded = NULL;
_brookNonBonded = NULL;
_brookGbsa = NULL;
_triggerForceKernel = NULL; _triggerForceKernel = NULL;
_triggerEnergyKernel = NULL; _triggerEnergyKernel = NULL;
...@@ -99,9 +101,6 @@ OpenMMBrookInterface::~OpenMMBrookInterface( ){ ...@@ -99,9 +101,6 @@ OpenMMBrookInterface::~OpenMMBrookInterface( ){
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
delete _brookBonded;
delete _brookNonBonded;
delete _brookGbsa;
for( int ii = 0; ii < LastBondForce; ii++ ){ for( int ii = 0; ii < LastBondForce; ii++ ){
delete _bondParameters[ii]; delete _bondParameters[ii];
} }
...@@ -128,6 +127,18 @@ int OpenMMBrookInterface::getNumberOfParticles( void ) const { ...@@ -128,6 +127,18 @@ int OpenMMBrookInterface::getNumberOfParticles( void ) const {
return _numberOfParticles; return _numberOfParticles;
} }
/**
* Set number of particles
*
* @param numberOfParticles number of particles
*
*/
int OpenMMBrookInterface::setNumberOfParticles( int numberOfParticles ){
_numberOfParticles = numberOfParticles;
return BrookCommon::DefaultReturnValue;
}
/** /**
* Get particle stream width * Get particle stream width
* *
...@@ -197,7 +208,10 @@ FILE* OpenMMBrookInterface::getLog( void ) const { ...@@ -197,7 +208,10 @@ FILE* OpenMMBrookInterface::getLog( void ) const {
*/ */
int OpenMMBrookInterface::setLog( FILE* log ){ int OpenMMBrookInterface::setLog( FILE* log ){
_log = log; _log = log;
_brookBonded.setLog( log );
_brookNonBonded.setLog( log );
_brookGbsa.setLog( log );
return BrookCommon::DefaultReturnValue; return BrookCommon::DefaultReturnValue;
} }
...@@ -225,7 +239,20 @@ BrookBondParameters* OpenMMBrookInterface::_getBondParameters( BondParameterIndi ...@@ -225,7 +239,20 @@ BrookBondParameters* OpenMMBrookInterface::_getBondParameters( BondParameterIndi
*/ */
int OpenMMBrookInterface::_setBondParameters( BondParameterIndices index, BrookBondParameters* brookBondParameters ){ int OpenMMBrookInterface::_setBondParameters( BondParameterIndices index, BrookBondParameters* brookBondParameters ){
if( brookBondParameters && brookBondParameters->getNumberOfBonds() > 0 ){
_brookBonded.setIsActive( 1 );
}
_bondParameters[index] = brookBondParameters; _bondParameters[index] = brookBondParameters;
if( !brookBondParameters || brookBondParameters->getNumberOfBonds() < 1 ){
int isActive = 0;
for( int ii = 0; ii < LastBondForce && !isActive; ii++ ){
isActive = (_bondParameters[ii] != NULL && brookBondParameters->getNumberOfBonds() > 0) ? 1 : 0;
}
_brookBonded.setIsActive( isActive );
}
return BrookCommon::DefaultReturnValue; return BrookCommon::DefaultReturnValue;
} }
...@@ -473,6 +500,28 @@ void* OpenMMBrookInterface::getTriggerEnergyKernel( void ) const { ...@@ -473,6 +500,28 @@ void* OpenMMBrookInterface::getTriggerEnergyKernel( void ) const {
return _triggerEnergyKernel; return _triggerEnergyKernel;
} }
/**
* Get Brook non bonded
*
* @return BrookNonBonded reference
*
*/
BrookNonBonded& OpenMMBrookInterface::getBrookNonBonded( void ){
return _brookNonBonded;
}
/**
* Get Brook GBSA
*
* @return BrookGbsa reference
*
*/
BrookGbsa& OpenMMBrookInterface::getBrookGbsa( void ){
return _brookGbsa;
}
/** /**
* Zero forces * Zero forces
* *
...@@ -517,8 +566,6 @@ void OpenMMBrookInterface::computeForces( OpenMMContextImpl& context ){ ...@@ -517,8 +566,6 @@ void OpenMMBrookInterface::computeForces( OpenMMContextImpl& context ){
// static const int debug = 1; // static const int debug = 1;
(void) fprintf( stderr, "%s ", methodName.c_str() ); (void) fflush( stderr );
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
// nonbonded forces // nonbonded forces
...@@ -526,27 +573,27 @@ void OpenMMBrookInterface::computeForces( OpenMMContextImpl& context ){ ...@@ -526,27 +573,27 @@ void OpenMMBrookInterface::computeForces( OpenMMContextImpl& context ){
BrookStreamImpl* positions = getParticlePositions(); BrookStreamImpl* positions = getParticlePositions();
BrookStreamImpl* forces = getParticleForces(); BrookStreamImpl* forces = getParticleForces();
if( _brookNonBonded ){ if( _brookNonBonded.isActive() ){
_brookNonBonded->computeForces( *positions, *forces ); _brookNonBonded.computeForces( *positions, *forces );
} }
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
// bonded forces // bonded forces
if( _brookBonded ){ if( _brookBonded.isActive() ){
(void) fprintf( stderr, "%s Bonded", methodName.c_str() ); (void) fflush( stderr ); //(void) fprintf( stderr, "%s Bonded\n", methodName.c_str() ); (void) fflush( stderr );
// perform setup first time through // perform setup first time through
if( _brookBonded->isSetupCompleted() == 0 ){ if( _brookBonded.isSetupCompleted() == 0 ){
_brookBonded->setup( getNumberOfParticles(), getHarmonicBondForceParameters(), getHarmonicAngleForceParameters(), _brookBonded.setup( getNumberOfParticles(), getHarmonicBondForceParameters(), getHarmonicAngleForceParameters(),
getPeriodicTorsionForceParameters(), getRBTorsionForceParameters(), getPeriodicTorsionForceParameters(), getRBTorsionForceParameters(),
getNonBonded14ForceParameters(), getNonBonded14ForceParameters(),
getLj14Scale(), getCoulomb14Scale(), getParticleStreamWidth(), getParticleStreamSize() ); getLj14Scale(), getCoulomb14Scale(), getParticleStreamWidth(), getParticleStreamSize() );
} }
_brookBonded->computeForces( *positions, *forces ); _brookBonded.computeForces( *positions, *forces );
// diagnostics // diagnostics
...@@ -569,8 +616,8 @@ void OpenMMBrookInterface::computeForces( OpenMMContextImpl& context ){ ...@@ -569,8 +616,8 @@ void OpenMMBrookInterface::computeForces( OpenMMContextImpl& context ){
// GBSA OBC forces // GBSA OBC forces
if( _brookGbsa ){ if( _brookGbsa.isActive() ){
_brookGbsa->computeForces( *positions, *forces ); _brookGbsa.computeForces( *positions, *forces );
} }
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
...@@ -580,25 +627,36 @@ void OpenMMBrookInterface::computeForces( OpenMMContextImpl& context ){ ...@@ -580,25 +627,36 @@ void OpenMMBrookInterface::computeForces( OpenMMContextImpl& context ){
* Compute energy * Compute energy
* *
* @param context context * @param context context
* @param system system reference
* *
*/ */
double OpenMMBrookInterface::computeEnergy( OpenMMContextImpl& context ){ double OpenMMBrookInterface::computeEnergy( OpenMMContextImpl& context, System& system ){
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
/* //static const std::string methodName = "OpenMMBrookInterface::computeEnergy";
static const std::string methodName = "OpenMMBrookInterface::computeEnergy";
static const int PrintOn = 0;
static const int MaxErrorMessages = 2;
static int ErrorMessages = 0;
*/
// static const int debug = 1;
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
return 0.0; // We don't currently have GPU kernels to calculate energy, so instead we have the reference
// platform do it. This is VERY slow.
LangevinIntegrator integrator(0.0, 1.0, 0.0);
ReferencePlatform platform;
OpenMMContext refContext( system, integrator, platform );
const Stream& positions = context.getPositions();
double* posData = new double[positions.getSize()*3];
positions.saveToArray(posData);
vector<Vec3> pos(positions.getSize());
for( int ii = 0; ii < pos.size(); ii++ ){
pos[ii] = Vec3(posData[3*ii], posData[3*ii+1], posData[3*ii+2]);
}
delete[] posData;
refContext.setPositions(pos);
return refContext.getState(State::Energy).getPotentialEnergy();
// ---------------------------------------------------------------------------------------
} }
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