Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
tsoc
openmm
Commits
ff8bd4e1
Commit
ff8bd4e1
authored
Aug 27, 2008
by
Mark Friedrichs
Browse files
Brook SD code
parent
a475f0a6
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
708 additions
and
884 deletions
+708
-884
platforms/brook/src/BrookCommon.cpp
platforms/brook/src/BrookCommon.cpp
+4
-0
platforms/brook/src/BrookCommon.h
platforms/brook/src/BrookCommon.h
+6
-2
platforms/brook/src/BrookIntegrateLangevinStepKernel.cpp
platforms/brook/src/BrookIntegrateLangevinStepKernel.cpp
+10
-4
platforms/brook/src/BrookIntegrateLangevinStepKernel.h
platforms/brook/src/BrookIntegrateLangevinStepKernel.h
+4
-2
platforms/brook/src/BrookPlatform.cpp
platforms/brook/src/BrookPlatform.cpp
+3
-3
platforms/brook/src/BrookRandomNumberGenerator.cpp
platforms/brook/src/BrookRandomNumberGenerator.cpp
+298
-678
platforms/brook/src/BrookRandomNumberGenerator.h
platforms/brook/src/BrookRandomNumberGenerator.h
+186
-139
platforms/brook/src/BrookStochasticDynamics.cpp
platforms/brook/src/BrookStochasticDynamics.cpp
+54
-47
platforms/brook/src/BrookStochasticDynamics.h
platforms/brook/src/BrookStochasticDynamics.h
+35
-7
platforms/brook/src/BrookStreamFactory.cpp
platforms/brook/src/BrookStreamFactory.cpp
+108
-2
No files found.
platforms/brook/src/BrookCommon.cpp
View file @
ff8bd4e1
...
...
@@ -89,6 +89,10 @@ const std::string BrookCommon::ShakeXCons2Stream
const
std
::
string
BrookCommon
::
ShakeXCons3Stream
=
"ShakeXCons3Stream"
;
const
std
::
string
BrookCommon
::
ShakeInverseMapStream
=
"ShakeInverseMapStream"
;
// Random number streams
const
std
::
string
BrookCommon
::
ShuffleStream
=
"ShuffleStream"
;
/**
* Constructor
*
...
...
platforms/brook/src/BrookCommon.h
View file @
ff8bd4e1
...
...
@@ -104,6 +104,10 @@ class BrookCommon {
static
const
std
::
string
ShakeXCons3Stream
;
static
const
std
::
string
ShakeInverseMapStream
;
// Random number generator streams
static
const
std
::
string
ShuffleStream
;
// ---------------------------------------------------------------------------------------
/**
...
...
@@ -224,7 +228,7 @@ class BrookCommon {
FILE
*
getLog
(
void
)
const
;
/**
*
Be
verbose flag
*
Get
verbose flag
*
* @return verbosity flag
*
...
...
@@ -239,7 +243,7 @@ class BrookCommon {
*
*/
int
setVerbosity
(
int
verbosity
m
);
int
setVerbosity
(
int
verbosity
);
/*
* Given number of stream elements and width, returns the appropriate
...
...
platforms/brook/src/BrookIntegrateLangevinStepKernel.cpp
View file @
ff8bd4e1
...
...
@@ -46,7 +46,8 @@ BrookIntegrateLangevinStepKernel::BrookIntegrateLangevinStepKernel( std::string
_brookStochasticDynamics
=
NULL
;
_brookShakeAlgorithm
=
NULL
;
_brookRandomNumberGenerator
=
NULL
;
}
BrookIntegrateLangevinStepKernel
::~
BrookIntegrateLangevinStepKernel
(
){
...
...
@@ -59,6 +60,7 @@ BrookIntegrateLangevinStepKernel::~BrookIntegrateLangevinStepKernel( ){
delete
_brookStochasticDynamics
;
delete
_brookShakeAlgorithm
;
delete
_brookRandomNumberGenerator
;
}
...
...
@@ -72,11 +74,14 @@ void BrookIntegrateLangevinStepKernel::initialize( const vector<double>& masses,
// ---------------------------------------------------------------------------------------
_brookStochasticDynamics
=
new
BrookStochasticDynamics
(
);
_brookStochasticDynamics
=
new
BrookStochasticDynamics
(
);
_brookStochasticDynamics
->
setup
(
masses
,
getPlatform
()
);
_brookShakeAlgorithm
=
new
BrookShakeAlgorithm
(
);
_brookShakeAlgorithm
=
new
BrookShakeAlgorithm
(
);
_brookShakeAlgorithm
->
setup
(
masses
,
constraintIndices
,
constraintLengths
,
getPlatform
()
);
_brookRandomNumberGenerator
=
new
BrookRandomNumberGenerator
(
);
_brookRandomNumberGenerator
->
setup
(
(
int
)
masses
.
size
(),
getPlatform
()
);
}
/**
...
...
@@ -116,6 +121,7 @@ void BrookIntegrateLangevinStepKernel::execute( Stream& positions, Stream& veloc
if
(
fabs
(
differences
[
0
]
)
<
epsilon
||
fabs
(
differences
[
1
]
)
<
epsilon
||
fabs
(
differences
[
2
]
)
<
epsilon
){
_brookStochasticDynamics
->
updateParameters
(
temperature
,
friction
,
stepSize
);
}
_brookStochasticDynamics
->
update
(
positions
,
velocities
,
forces
,
*
_brookShakeAlgorithm
);
_brookStochasticDynamics
->
update
(
positions
,
velocities
,
forces
,
(
_brookShakeAlgorithm
?
*
_brookShakeAlgorithm
:
NULL
),
*
_brookRandomNumberGenerator
);
}
platforms/brook/src/BrookIntegrateLangevinStepKernel.h
View file @
ff8bd4e1
...
...
@@ -35,6 +35,7 @@
#include "kernels.h"
#include "BrookStochasticDynamics.h"
#include "BrookShakeAlgorithm.h"
#include "BrookRandomNumberGenerator.h"
namespace
OpenMM
{
...
...
@@ -89,8 +90,9 @@ class BrookIntegrateLangevinStepKernel : public IntegrateLangevinStepKernel {
protected:
BrookStochasticDynamics
*
_brookStochasticDynamics
;
BrookShakeAlgorithm
*
_brookShakeAlgorithm
;
BrookStochasticDynamics
*
_brookStochasticDynamics
;
BrookShakeAlgorithm
*
_brookShakeAlgorithm
;
BrookRandomNumberGenerator
*
_brookRandomNumberGenerator
;
};
...
...
platforms/brook/src/BrookPlatform.cpp
View file @
ff8bd4e1
...
...
@@ -145,8 +145,8 @@ void BrookPlatform::_initializeKernelFactory( void ){
registerKernelFactory
(
CalcStandardMMForceFieldKernel
::
Name
(),
factory
);
// registerKernelFactory( CalcGBSAOBCForceFieldKernel::Name(), factory);
registerKernelFactory
(
IntegrateVerletStepKernel
::
Name
(),
factory
);
//
registerKernelFactory( IntegrateLangevinStepKernel::Name(), factory);
//
registerKernelFactory( IntegrateVerletStepKernel::Name(), factory);
registerKernelFactory
(
IntegrateLangevinStepKernel
::
Name
(),
factory
);
//registerKernelFactory( IntegrateBrownianStepKernel::Name(), factory);
//registerKernelFactory( ApplyAndersenThermostatKernel::Name(), factory);
registerKernelFactory
(
CalcKineticEnergyKernel
::
Name
(),
factory
);
...
...
@@ -180,7 +180,7 @@ void BrookPlatform::_setBrookRuntime( const std::string& runtime ){
}
if
(
getLog
()
){
(
void
)
fprintf
(
getLog
(),
"%s Brook initializing to runtime=<%s>"
,
methodName
.
c_str
(),
_runtime
.
c_str
()
);
(
void
)
fprintf
(
getLog
(),
"%s Brook initializing to runtime=<%s>
\n
"
,
methodName
.
c_str
(),
_runtime
.
c_str
()
);
(
void
)
fflush
(
getLog
()
);
}
...
...
platforms/brook/src/BrookRandomNumberGenerator.cpp
View file @
ff8bd4e1
This diff is collapsed.
Click to expand it.
platforms/brook/src/BrookRandomNumberGenerator.h
View file @
ff8bd4e1
...
...
@@ -32,12 +32,6 @@
* USE OR OTHER DEALINGS IN THE SOFTWARE. *
* -------------------------------------------------------------------------- */
#include <vector>
#include <set>
#include "BrookFloatStreamInternal.h"
#include "BrookShakeAlgorithm.h"
#include "BrookPlatform.h"
#include "BrookCommon.h"
namespace
OpenMM
{
...
...
@@ -52,6 +46,10 @@ class BrookRandomNumberGenerator : public BrookCommon {
public:
// toggle between original rng & Kiss (Nvidia) code
static
const
int
UseOriginalRng
=
1
;
/**
* Constructor
*
...
...
@@ -66,99 +64,39 @@ class BrookRandomNumberGenerator : public BrookCommon {
~
BrookRandomNumberGenerator
();
/**
* Get tau
*
* @return tau
*/
BrookOpenMMFloat
getTau
(
void
)
const
;
/**
* Get friction
*
* @return friction
*/
BrookOpenMMFloat
getFriction
(
void
)
const
;
/**
* Get temperature
*
* @return temperature
*/
BrookOpenMMFloat
getTemperature
(
void
)
const
;
/**
* Get step size
*
* @return step size
*/
BrookOpenMMFloat
getStepSize
(
void
)
const
;
/**
*
* Get array of derived parameters indexed by 'DerivedParameters' enums
*
* @return array
/**
* Get number of random number streams
*
* @return number of random number streams
*
*/
const
BrookOpenMMFloat
*
getDerivedParameter
s
(
void
)
const
;
int
getNumberOfRandomNumberStream
s
(
void
)
const
;
/**
* Get
StochasticDynamics atom
stream width
* Get stream width
*
* @return
atom
stream width
* @return stream width
*/
int
get
StochasticDynamicsAtom
StreamWidth
(
void
)
const
;
int
get
RandomNumber
StreamWidth
(
void
)
const
;
/**
* Get
StochasticDynamics atom
stream height
* Get stream height
*
* @return
atom
stream height
* @return stream height
*/
int
get
StochasticDynamicsAtom
StreamHeight
(
void
)
const
;
int
get
RandomNumber
StreamHeight
(
void
)
const
;
/**
* Get
StochasticDynamics atom
stream size
* Get stream size
*
* @return
atom
stream size
* @return stream size
*/
int
get
StochasticDynamicsAtom
StreamSize
(
void
)
const
;
int
get
RandomNumber
StreamSize
(
void
)
const
;
/**
* Update parameters
*
* @param temperature temperature
* @param friction friction
* @param step size step size
*
* @return DefaultReturnValue
*
*/
int
updateParameters
(
double
temperature
,
double
friction
,
double
stepSize
);
/**
* Update
*
* @param positions atom positions
* @param velocities atom velocities
* @param forces atom forces
* @param brookShakeAlgorithm BrookShakeAlgorithm reference
*
* @return DefaultReturnValue
*
*/
int
update
(
Stream
&
positions
,
Stream
&
velocities
,
const
Stream
&
forces
,
BrookShakeAlgorithm
&
brookShakeAlgorithm
);
/**
* Get array of StochasticDynamics streams
*
...
...
@@ -169,16 +107,16 @@ class BrookRandomNumberGenerator : public BrookCommon {
BrookFloatStreamInternal
**
getStreams
(
void
);
/*
* Setup of
StochasticDynamics
parameters
* Setup of
RNG
parameters
*
* @param
masses atom masse
s
* @param platform
Brook platform
* @param
numberOfAtoms number of atom
s
* @param platform Brook platform
*
* @return ErrorReturnValue value if error, else DefaultReturnValue
*
* */
int
setup
(
const
std
::
vector
<
double
>&
masse
s
,
const
Platform
&
platform
);
int
setup
(
int
numberOfAtom
s
,
const
Platform
&
platform
);
/*
* Get contents of object
...
...
@@ -192,104 +130,93 @@ class BrookRandomNumberGenerator : public BrookCommon {
std
::
string
getContentsString
(
int
level
=
0
)
const
;
/**
* Get
SDPC1
stream
* Get
random number
stream
*
* @return SDPC1 stream
*
*/
BrookFloatStreamInternal
*
getSDPC1Stream
(
void
)
const
;
/**
* Get SDPC2 stream
* @param index random number stream index
*
* @return
SDPC2
stream
* @return
random number
stream
*
*/
BrookFloatStreamInternal
*
get
SDPC2Stream
(
void
)
const
;
BrookFloatStreamInternal
*
get
RandomNumberStream
(
int
index
)
const
;
/**
* Get shuffle stream
*
* @return Shuffle stream
* Get random number seed
*
* @return random number seed
*/
BrookFloatStreamInternal
*
getShuffleStream
(
void
)
const
;
unsigned
long
int
getRandomNumberSeed
(
void
)
const
;
/**
* Generate a random number using algorithm in Gromacs
*
* @param ig seed
* Increment random number seed
*
* @
return random number
* @
param increment amount to increment random number seed; default = 1
*
* @return updated random number seed
*/
BrookOpenMMFloat
generateGromacsRandomNumber
(
int
*
i
g
);
unsigned
long
int
incrementRandomNumberSeed
(
unsigned
long
int
i
ncrement
=
1
);
/**
* Generate a random number using algorithm in Nvidia code
* http://www.helsbreth.org/random/rng_kiss.html
*
* @param randomV1 output random value
* @param randomV2 output random value
* @param randomV3 output random value
* @param state state
* Set random number seed
*
* @param new random number seed; default = 1
*
* @return random number seed
*/
void
generateRandomsAlaNvidia
(
float
*
randomV1
,
float
*
randomV2
,
float
*
randomV3
,
unsigned
int
state
[
4
]
);
unsigned
long
int
setRandomNumberSeed
(
unsigned
long
int
seed
=
1
);
/**
* Load random number streams using Nvidia algorithm
*
* Get index of rv texture
*
* @return
DefaultReturnValue;
* @return
index of rv texture
*/
int
loadRandomNumberStreamsNvidia
(
void
);
int
getRvStreamIndex
(
void
)
const
;
/**
* Get random number seed
* Get max shuffles
*
* @return max shuffles
*
* @return random number seed
*/
unsigned
long
int
getRandomNumberSeed
(
void
)
const
;
int
getMaxShuffles
(
void
)
const
;
/**
*
Increment random number seed
*
Advance random values stream index
*
* @param increment amount to increment random number seed; default = 1
* @param numberOfEntriesToAdvance number of entries consumed in previous iteration
*
* @return DefaultReturnValue
*
* @return updated random number seed
*/
unsigned
long
int
incrementRandomNumberSeed
(
unsigned
long
int
increment
=
1
);
int
advanceGVCursor
(
int
numberOfEntriesToAdvance
);
/**
*
S
et random
number seed
*
G
et random
value stream offset
*
* @
param new random number seed; default = 1
* @
return random value stream offset
*
* @return random number seed
*/
unsigned
long
int
setRandomNumberSeed
(
unsigned
long
int
seed
=
1
)
;
int
getRvStreamOffset
(
void
)
const
;
private:
// streams indices
enum
BrookRandomNumberGeneratorStreams
{
RandomNumberStream
,
ShuffleStream
,
LastStreamIndex
};
BrookFloatStreamInternal
*
_auxiliaryStreams
[
LastStreamIndex
];
BrookFloatStreamInternal
**
_randomNumberGeneratorStreams
;
// randomNumberSeed
unsigned
long
int
_randomNumberSeed
;
...
...
@@ -304,6 +231,16 @@ class BrookRandomNumberGenerator : public BrookCommon {
int
_randomNumberStreamHeight
;
int
_randomNumberStreamSize
;
// control variables
int
_rvStreamIndex
;
int
_rvStreamOffset
;
int
_numberOfShuffles
;
int
_maxShuffles
;
float
*
_loadBuffer
;
int
*
_shuffleIndices
;
/*
* Setup of stream dimensions
*
...
...
@@ -326,7 +263,7 @@ class BrookRandomNumberGenerator : public BrookCommon {
*
*/
int
_initializeStreamSizes
(
int
numberOfAtoms
,
const
Platform
&
platform
);
int
_initializeStreamSizes
(
int
numberOfAtoms
,
const
Platform
&
platform
);
/**
* Initialize stream dimensions and streams
...
...
@@ -340,15 +277,125 @@ class BrookRandomNumberGenerator : public BrookCommon {
int
_initializeStreams
(
const
Platform
&
platform
);
/**
* Set masses
* Increment random number offset
*
* @param increment increment for offset
*
* @return random number offset
*/
int
_incrementRvOffset
(
int
increment
);
/**
* Get shuffle stream
*
* @return Shuffle stream
*
*/
BrookFloatStreamInternal
*
_getShuffleStream
(
void
)
const
;
/**
* Generate a random number using algorithm in Gromacs
*
* @param ig seed
*
* @return random number
*
*/
BrookOpenMMFloat
_generateGromacsRandomNumber
(
unsigned
long
int
*
ig
);
/**
* Generate a random number using Kiss (algorithm in Kiss code)
* http://www.helsbreth.org/random/rng_kiss.html
*
* @param randomV1 output random value
* @param randomV2 output random value
* @param randomV3 output random value
* @param state state
*
*/
void
_generateRandomsKiss
(
float
*
randomV1
,
float
*
randomV2
,
float
*
randomV3
,
unsigned
int
state
[
4
]
);
/**
* Load random number streams using Kiss algorithm
*
*
* @return DefaultReturnValue;
*/
int
_loadRandomNumberStreamsKiss
(
void
);
/**
* Load random number streams using original gpu algorithm
*
* @param masses atomic masses
*
* @return DefaultReturnValue;
*/
int
_loadGVStreamsOriginal
(
void
);
/**
* Loads a permutation of indices from 0 to gvSize-1 in
* sdp->strShuffle. To make sure that the order of the
* permutation is atleast NGVSHUFFLE, we create the
* permutation by introducing a random number of p-cycles
* where p is randomly determined from 2,3,5,7 and 11.
* The LCM of these numbers is 2310.
* Ofcourse the p-cycles are not necessarily disjoint
* the way it's done here, but there's a good chance
* there will enough disjoint cycles to make the
* order of the permutation larger than NGVSHUFFLE
*
*
* This function is only called once at startup
*
* @return DefaultReturnValue;
**/
int
_loadGVShuffle
(
void
);
/**
* Get number of shuffles
*
* @return number of shuffles
*
*/
int
_setInverseSqrtMasses
(
const
std
::
vector
<
double
>&
masses
);
int
_getNumberOfShuffles
(
void
)
const
;
/**
* Load buffer
*
* @return ptr to load buffer
*
* @throw OpenMMException if rv stream size is < 1
*
**/
float
*
_getLoadBuffer
(
void
);
/**
* Get ptr to shuffle indices
*
* @return ptr to shuffle indices
*
* @throw OpenMMException if size is < 1
*
**/
int
*
_getShuffleIndices
(
int
size
);
/**
* Shuffle streams
*
* @return DefaultReturnValue;
*/
int
_shuffleGVStreams
(
void
);
};
...
...
platforms/brook/src/BrookStochasticDynamics.cpp
View file @
ff8bd4e1
...
...
@@ -34,6 +34,8 @@
#include "BrookPlatform.h"
#include "OpenMMException.h"
#include "BrookStreamImpl.h"
#include "kshakeh.h"
#include "kupdatesd.h"
// use random number generator
...
...
@@ -326,10 +328,11 @@ int BrookStochasticDynamics::updateParameters( double temperature, double fricti
/**
* Update
*
* @param positions atom positions
* @param velocities atom velocities
* @param forces atom forces
* @param brookShakeAlgorithm BrookShakeAlgorithm reference
* @param positions atom positions
* @param velocities atom velocities
* @param forces atom forces
* @param brookShakeAlgorithm BrookShakeAlgorithm reference
* @param brookRandomNumberGenerator BrookRandomNumberGenerator reference
*
* @return DefaultReturnValue
*
...
...
@@ -337,7 +340,8 @@ int BrookStochasticDynamics::updateParameters( double temperature, double fricti
int
BrookStochasticDynamics
::
update
(
Stream
&
positions
,
Stream
&
velocities
,
const
Stream
&
forces
,
BrookShakeAlgorithm
&
brookShakeAlgorithm
){
BrookShakeAlgorithm
&
brookShakeAlgorithm
,
BrookRandomNumberGenerator
&
brookRandomNumberGenerator
){
// ---------------------------------------------------------------------------------------
...
...
@@ -349,26 +353,25 @@ int BrookStochasticDynamics::update( Stream& positions, Stream& velocities,
// ---------------------------------------------------------------------------------------
BrookOpenMMFloat
*
derivedParameters
=
getDerivedParameters
();
const
BrookOpenMMFloat
*
derivedParameters
=
getDerivedParameters
();
BrookStreamImpl
&
positionStream
=
dynamic_cast
<
BrookStreamImpl
&>
(
positions
.
getImpl
());
BrookStreamImpl
&
velocityStream
=
dynamic_cast
<
BrookStreamImpl
&>
(
velocities
.
getImpl
());
BrookStreamImpl
&
forceStreamC
=
dynamic_cast
<
BrookStreamImpl
&>
(
forces
.
getImpl
());
const
BrookStreamImpl
&
forceStream
=
dynamic_cast
<
const
BrookStreamImpl
&>
(
forceStream
.
getImpl
());
const
BrookStreamImpl
&
forceStreamC
=
dynamic_cast
<
const
BrookStreamImpl
&>
(
forces
.
getImpl
());
BrookStreamImpl
&
forceStream
=
const_cast
<
BrookStreamImpl
&>
(
forceStreamC
);
// first integration step
kupdate_sd1_fix1
(
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
(
float
)
sdp
->
gv
Width
,
(
float
)
sdp
->
gv
Offset
,
(
float
)
brookRandomNumberGenerator
.
getRandomNumberStream
Width
()
,
(
float
)
brookRandomNumberGenerator
.
getRvStream
Offset
()
,
derivedParameters
[
EM
],
derivedParameters
[
Sd1pc1
],
derivedParameters
[
Sd1pc2
],
derivedParameters
[
Sd1pc3
],
getSDPC1Stream
()
->
getBrookStream
(),
sdp
->
strVGauss
[
sdp
->
gvCur
Stream
]
,
brookRandomNumberGenerator
.
getRandomNumberStream
(
brookRandomNumberGenerator
.
getRvStreamIndex
()
)
->
getBrook
Stream
()
,
getSD2XStream
()
->
getBrookStream
(),
positionStream
.
getBrookStream
(),
forceStream
.
getBrookStream
(),
...
...
@@ -379,100 +382,104 @@ sdp->strVGauss[ sdp->gvCurStream ],
getXPrimeStream
()
->
getBrookStream
()
);
AdvanceGVCursor
(
sdp
,
gpu
,
step
);
// advance random number cursor
brookRandomNumberGenerator
.
advanceGVCursor
(
2
*
getNumberOfAtoms
()
);
// first Shake step
kshakeh_fix1
(
10.0
f
,
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
brookShakeAlgorithm
->
getInverseHydrogenMass
(),
brookShakeAlgorithm
.
getInverseHydrogenMass
(),
omega
,
brookShakeAlgorithm
->
getShakeAtomIndicesStream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeAtomIndicesStream
()
->
getBrookStream
(),
positionStream
.
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeAtomParameterStream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons0Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons1Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons2Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons3Stream
()
->
getBrookStream
()
);
brookShakeAlgorithm
.
getShakeAtomParameterStream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons0Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons1Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons2Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons3Stream
()
->
getBrookStream
()
);
// first Shake gather
kshakeh_update1_fix1
(
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
derivedParameters
[
Sd2pc1
],
brookShakeAlgorithm
->
getShakeInverseMapStream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeInverseMapStream
()
->
getBrookStream
(),
positionStream
.
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
(),
getVPrimeStream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons0Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons1Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons2Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons3Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons0Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons1Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons2Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons3Stream
()
->
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
()
);
// second integration step
kupdate_sd2_fix1
(
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
(
float
)
sdp
->
gv
Width
,
(
float
)
sdp
->
gv
Offset
,
(
float
)
brookRandomNumberGenerator
.
getRandomNumberStream
Width
()
,
(
float
)
brookRandomNumberGenerator
.
getRvStream
Offset
()
,
derivedParameters
[
Sd2pc1
],
derivedParameters
[
Sd2pc2
],
getSDPC2Stream
()
->
getBrookStream
(),
sdp
->
strVGauss
[
sdp
->
gvCur
Stream
]
,
brookRandomNumberGenerator
.
getRandomNumberStream
(
brookRandomNumberGenerator
.
getRvStreamIndex
()
)
->
getBrook
Stream
()
,
getSD1VStream
()
->
getBrookStream
(),
positionStream
.
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
(),
getVPrimeStream
()
->
getBrookStream
(),
getS2XStream
()
->
getBrookStream
(),
getS
D
2XStream
()
->
getBrookStream
(),
velocityStream
.
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
()
);
AdvanceGVCursor
(
sdp
,
gpu
,
step
);
// advance random number cursor
brookRandomNumberGenerator
.
advanceGVCursor
(
2
*
getNumberOfAtoms
()
);
// second Shake step
kshakeh_fix1
(
10.0
f
,
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
brookShakeAlgorithm
->
getInverseHydrogenMass
(),
brookShakeAlgorithm
.
getInverseHydrogenMass
(),
omega
,
brookShakeAlgorithm
->
getShakeAtomIndicesStream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeAtomIndicesStream
()
->
getBrookStream
(),
positionStream
.
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeAtomParameterStream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons0Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons1Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons2Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons3Stream
()
->
getBrookStream
()
);
brookShakeAlgorithm
.
getShakeAtomParameterStream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons0Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons1Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons2Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons3Stream
()
->
getBrookStream
()
);
// second Shake gather
kshakeh_update1_fix1
(
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
derivedParameters
[
Sd2pc1
],
brookShakeAlgorithm
->
getShakeInverseMapStream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeInverseMapStream
()
->
getBrookStream
(),
positionStream
.
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
(),
getVPrimeStream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons0Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons1Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons2Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons3Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons0Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons1Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons2Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons3Stream
()
->
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
()
);
kshakeh_update2_fix1
(
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
brookShakeAlgorithm
->
getShakeInverseMapStream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeInverseMapStream
()
->
getBrookStream
(),
positionStream
.
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons0Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons1Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons2Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons3Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons0Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons1Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons2Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons3Stream
()
->
getBrookStream
(),
positionStream
.
getBrookStream
()
);
return
DefaultReturnValue
;
...
...
platforms/brook/src/BrookStochasticDynamics.h
View file @
ff8bd4e1
...
...
@@ -37,6 +37,7 @@
#include "BrookFloatStreamInternal.h"
#include "BrookShakeAlgorithm.h"
#include "BrookRandomNumberGenerator.h"
#include "BrookPlatform.h"
#include "BrookCommon.h"
...
...
@@ -148,17 +149,19 @@ class BrookStochasticDynamics : public BrookCommon {
/**
* Update
*
* @param positions atom positions
* @param velocities atom velocities
* @param forces atom forces
* @param brookShakeAlgorithm BrookShakeAlgorithm reference
* @param positions atom positions
* @param velocities atom velocities
* @param forces atom forces
* @param brookShakeAlgorithm BrookShakeAlgorithm reference
* @param brookRandomNumberGenerator BrookRandomNumberGenerator reference
*
* @return DefaultReturnValue
*
*/
int
update
(
Stream
&
positions
,
Stream
&
velocities
,
const
Stream
&
forces
,
BrookShakeAlgorithm
&
brookShakeAlgorithm
);
const
Stream
&
forces
,
BrookShakeAlgorithm
&
brookShakeAlgorithm
,
BrookRandomNumberGenerator
&
brookRandomNumberGenerator
);
/**
* Get array of StochasticDynamics streams
*
...
...
@@ -227,6 +230,33 @@ class BrookStochasticDynamics : public BrookCommon {
BrookFloatStreamInternal
*
getSD1VStream
(
void
)
const
;
/**
* Get V-prime stream
*
* @return V-prime stream
*
*/
BrookFloatStreamInternal
*
getVPrimeStream
(
void
)
const
;
/**
* Get X-prime stream
*
* @return X-prime stream
*
*/
BrookFloatStreamInternal
*
getXPrimeStream
(
void
)
const
;
/**
* Get inverse sqrt masses
*
* @return inverse sqrt masses stream
*
*/
BrookFloatStreamInternal
*
getInverseMassStream
(
void
)
const
;
private:
enum
DerivedParameters
{
GDT
,
EPH
,
EMH
,
EP
,
EM
,
B
,
C
,
D
,
V
,
X
,
Yv
,
Yx
,
...
...
@@ -385,8 +415,6 @@ class BrookStochasticDynamics : public BrookCommon {
int
_setInverseSqrtMasses
(
const
std
::
vector
<
double
>&
masses
);
};
}
// namespace OpenMM
...
...
platforms/brook/src/BrookStreamFactory.cpp
View file @
ff8bd4e1
...
...
@@ -56,7 +56,9 @@ BrookStreamFactory::BrookStreamFactory( void ){
// ---------------------------------------------------------------------------------------
_defaultDangleValue
=
1.0e+38
;
_defaultAtomStreamWidth
=
32
;
_defaultAtomStreamWidth
=
DefaultStreamAtomWidth
;
_defaultStreamRandomNumberWidth
=
DefaultStreamRandomNumberWidth
;
_defaultStreamRandomNumberSize
=
DefaultStreamRandomNumberSize
;
}
...
...
@@ -121,7 +123,111 @@ int BrookStreamFactory::setDefaultAtomStreamWidth( int atomStreamWidth ){
}
/**
* get default dangle value
* Get randomNumber stream width
*
* @return randomNumberStreamWidth
*
*/
int
BrookStreamFactory
::
getDefaultRandomNumberStreamWidth
(
void
)
const
{
// ---------------------------------------------------------------------------------------
//static const std::string methodName = "BrookStreamFactory::getDefaultRandomNumberStreamWidth";
// ---------------------------------------------------------------------------------------
return
_defaultStreamRandomNumberWidth
;
}
/**
* Set randomNumber stream width
*
* @param randomNumberStreamWidth randomNumber stream width
*
* @return DefaultReturnValue
*
* @throw OpenMMException if randomNumberStreamWidth < 1
*
*/
int
BrookStreamFactory
::
setDefaultRandomNumberStreamWidth
(
int
randomNumberStreamWidth
){
// ---------------------------------------------------------------------------------------
static
const
std
::
string
methodName
=
"BrookStreamFactory::setDefaultRandomNumberStreamWidth"
;
// ---------------------------------------------------------------------------------------
// validate randomNumber stream width
if
(
randomNumberStreamWidth
<
1
){
std
::
stringstream
message
;
message
<<
methodName
<<
" randomNumberStreamWidth="
<<
randomNumberStreamWidth
<<
" is less than 1."
;
throw
OpenMMException
(
message
.
str
()
);
return
ErrorReturnValue
;
}
_defaultStreamRandomNumberWidth
=
randomNumberStreamWidth
;
return
DefaultReturnValue
;
}
/*
* Get randomNumber stream size
*
* @return randomNumberStreamSize
*
*/
int
BrookStreamFactory
::
getDefaultRandomNumberStreamSize
(
void
)
const
{
// ---------------------------------------------------------------------------------------
//static const std::string methodName = "BrookStreamFactory::getDefaultRandomNumberStreamSize";
// ---------------------------------------------------------------------------------------
return
_defaultStreamRandomNumberSize
;
}
/**
* Set randomNumber stream size
*
* @param randomNumberStreamSize randomNumber stream size
*
* @return DefaultReturnValue
*
* @throw OpenMMException if randomNumberStreamSize < 1
*
*/
int
BrookStreamFactory
::
setDefaultRandomNumberStreamSize
(
int
randomNumberStreamSize
){
// ---------------------------------------------------------------------------------------
static
const
std
::
string
methodName
=
"BrookStreamFactory::setDefaultRandomNumberStreamSize"
;
// ---------------------------------------------------------------------------------------
// validate randomNumber stream size
if
(
randomNumberStreamSize
<
1
){
std
::
stringstream
message
;
message
<<
methodName
<<
" randomNumberStreamSize="
<<
randomNumberStreamSize
<<
" is less than 1."
;
throw
OpenMMException
(
message
.
str
()
);
return
ErrorReturnValue
;
}
_defaultStreamRandomNumberSize
=
randomNumberStreamSize
;
return
DefaultReturnValue
;
}
/**
* Get default dangle value
*
* @return default dangle value
*
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment