#ifndef OPENMM_BROOK_COMMON_H_
#define OPENMM_BROOK_COMMON_H_
/* -------------------------------------------------------------------------- *
* OpenMM *
* -------------------------------------------------------------------------- *
* This is part of the OpenMM molecular simulation toolkit originating from *
* Simbios, the NIH National Center for Physics-Based Simulation of *
* Biological Structures at Stanford, funded under the NIH Roadmap for *
* Medical Research, grant U54 GM072970. See https://simtk.org. *
* *
* Portions copyright (c) 2009 Stanford University and the Authors. *
* Authors: Mark Friedrichs, Mike Houston *
* Contributors: *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as published *
* by the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with this program. If not, see . *
* -------------------------------------------------------------------------- */
#include
#include
#include "BrookFloatStreamInternal.h"
#include "BrookIntStreamInternal.h"
#include "BrookPlatform.h"
namespace OpenMM {
/**
* This kernel is invoked by NonbondedForce to calculate the forces acting on the system.
*/
class BrookCommon {
public:
// return values
static const int DefaultReturnValue = 0;
static const int ErrorReturnValue = -1;
// ---------------------------------------------------------------------------------------
// Stream names
// bonded stream names
static const std::string BondedParticleIndicesStream;
static const std::string BondedParametersStream;
static const std::string UnrolledForceStream;
static const std::string BondedChargeStream;
static const std::string BondedInverseMapStreams;
// nonbonded stream names
static const std::string NonBondedExclusionStream;
static const std::string OuterVdwStream;
static const std::string InnerSigmaStream;
static const std::string InnerEpsilonStream;
static const std::string NonBondedChargeStream;
static const std::string PartialForceStream;
// OBC Gbsa streams
static const std::string ObcParticleRadiiStream;
static const std::string ObcScaledParticleRadiiStream;
static const std::string ObcParticleRadiiWithDielectricOffsetStream;
static const std::string ObcBornRadiiStream;
static const std::string ObcBornRadii2Stream;
static const std::string ObcIntermediateForceStream;
static const std::string ObcChainStream;
// Stochastic Dynamics streams
static const std::string SDPC1Stream;
static const std::string SDPC2Stream;
static const std::string SD2XStream;
static const std::string SD1VStream;
static const std::string VPrimeStream;
static const std::string XPrimeStream;
static const std::string InverseMassStream;
// Shake streams
static const std::string ShakeParticleIndicesStream;
static const std::string ShakeParticleParameterStream;
static const std::string ShakeXCons0Stream;
static const std::string ShakeXCons1Stream;
static const std::string ShakeXCons2Stream;
static const std::string ShakeXCons3Stream;
static const std::string ShakeInverseMapStream;
// Random number generator streams
static const std::string ShuffleStream;
static const std::string RandomValuesStream;
// BrookVelocityCenterOfMassRemoval streams
static const std::string BrookVelocityCenterOfMassRemovalWorkStream;
static const std::string BrookVelocityCenterOfMassRemovalMassStream;
// ---------------------------------------------------------------------------------------
/**
* Constructor
*
*/
BrookCommon( );
/**
* Destructor
*
*/
~BrookCommon();
/**
* Return number of particles
*
* @return number of particles
*
*/
int getNumberOfParticles( void ) const;
/**
* Get particle ceiling parameter
*
* @return particle ceiling parameter
*
*/
int getParticleSizeCeiling( void ) const;
/**
* Get particle stream width
*
* @param platform platform reference
*
* @return particle stream width
*/
int getParticleStreamWidth( const Platform& platform );
/**
* Get particle stream width
*
* @return particle stream width
*/
int getParticleStreamWidth( void ) const;
/**
* Get particle stream height
*
* @param platform platform reference
*
* @return particle stream height
*/
int getParticleStreamHeight( const Platform& platform );
/**
* Get particle stream height
*
* @return particle stream height
*/
int getParticleStreamHeight( void ) const;
/**
* Get particle stream size
*
* @param platform platform reference
*
* @return particle stream size
*/
int getParticleStreamSize( const Platform& platform );
/**
* Get particle stream size
*
* @return particle stream size
*/
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
*
* @param log file reference
*
* @return DefaultReturnValue
*
*/
int setLog( FILE* log );
/*
* Get contents of object
*
* @param level of dump
*
* @return string containing contents
*
* */
std::string getContents( int level ) const;
/**
* Get log file reference
*
* @return log file reference
*
*/
FILE* getLog( void ) const;
/*
* Given number of stream elements and width, returns the appropriate
* height of the stream
*
* @param streamSize stream size
* @param width stream width
*
* @return stream height
*
*/
static int getStreamHeight( int streamSize, int streamWidth );
/*
* Given number of stream elements, get stream width & height
*
* @param streamSize stream size
* @param streamWidth output stream width
* @param streamHeight output stream height
*
* @return stream height
*
*/
static void getStreamDimensions( int streamSize, int *streamWidth, int *streamHeight );
/*
* Allocate array
*
* @param length length of array
* @param width width of array
*
* @return ptr to array
*
*/
RealOpenMM** allocateRealArray( int length, int width ) const;
/*
* Free array
*
* @param array array to be freed (assumed allocated using BrookCommon::allocateRealArray
*
* @return DefaultReturnValue
*
*/
int disposeRealArray( RealOpenMM** array ) const;
/*
* Copy 1D BrookOpenMMFloat* array to 2D array of RealOpenMM
*
* @param length length of array
* @param width width of array
* @param array1D array to copy
*
* @return ptr to array
*
*/
RealOpenMM** copy1DArrayTo2DArray( int length, int width, BrookOpenMMFloat* array1D ) const;
protected:
// number of particles
int _numberOfParticles;
// particle stream dimensions
int _particleStreamWidth;
int _particleStreamHeight;
int _particleStreamSize;
// particle size mod
int _particleSizeModified;
// log file reference
FILE* _log;
// active flag
int _isActive;
/**
* Set number of particles
*
* @param numberOfParticles number of particles
*
*/
int setNumberOfParticles( int numberOfParticles );
/**
* Get particle stream dimensions
*
* @param platform platform
*
*/
void _getParticleStreamDimensions( const Platform& platform );
/*
* Get line
*
* @param tab tab
* @param description description
* @param value value
*
* @return string containing contents
*
* */
std::string _getLine( const std::string& tab, const std::string& description, const std::string& value ) const;
};
} // namespace OpenMM
#endif /* OPENMM_BROOK_COMMON_H_ */