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
"vscode:/vscode.git/clone" did not exist on "76fd2d1fe85d2e044f0148526b4d67da5f899cbb"
Commit
ff8bd4e1
authored
Aug 27, 2008
by
Mark Friedrichs
Browse files
Brook SD code
parent
a475f0a6
Changes
10
Expand all
Show 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
...
@@ -89,6 +89,10 @@ const std::string BrookCommon::ShakeXCons2Stream
const
std
::
string
BrookCommon
::
ShakeXCons3Stream
=
"ShakeXCons3Stream"
;
const
std
::
string
BrookCommon
::
ShakeXCons3Stream
=
"ShakeXCons3Stream"
;
const
std
::
string
BrookCommon
::
ShakeInverseMapStream
=
"ShakeInverseMapStream"
;
const
std
::
string
BrookCommon
::
ShakeInverseMapStream
=
"ShakeInverseMapStream"
;
// Random number streams
const
std
::
string
BrookCommon
::
ShuffleStream
=
"ShuffleStream"
;
/**
/**
* Constructor
* Constructor
*
*
...
...
platforms/brook/src/BrookCommon.h
View file @
ff8bd4e1
...
@@ -104,6 +104,10 @@ class BrookCommon {
...
@@ -104,6 +104,10 @@ class BrookCommon {
static
const
std
::
string
ShakeXCons3Stream
;
static
const
std
::
string
ShakeXCons3Stream
;
static
const
std
::
string
ShakeInverseMapStream
;
static
const
std
::
string
ShakeInverseMapStream
;
// Random number generator streams
static
const
std
::
string
ShuffleStream
;
// ---------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------
/**
/**
...
@@ -224,7 +228,7 @@ class BrookCommon {
...
@@ -224,7 +228,7 @@ class BrookCommon {
FILE
*
getLog
(
void
)
const
;
FILE
*
getLog
(
void
)
const
;
/**
/**
*
Be
verbose flag
*
Get
verbose flag
*
*
* @return verbosity flag
* @return verbosity flag
*
*
...
@@ -239,7 +243,7 @@ class BrookCommon {
...
@@ -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
* Given number of stream elements and width, returns the appropriate
...
...
platforms/brook/src/BrookIntegrateLangevinStepKernel.cpp
View file @
ff8bd4e1
...
@@ -46,6 +46,7 @@ BrookIntegrateLangevinStepKernel::BrookIntegrateLangevinStepKernel( std::string
...
@@ -46,6 +46,7 @@ BrookIntegrateLangevinStepKernel::BrookIntegrateLangevinStepKernel( std::string
_brookStochasticDynamics
=
NULL
;
_brookStochasticDynamics
=
NULL
;
_brookShakeAlgorithm
=
NULL
;
_brookShakeAlgorithm
=
NULL
;
_brookRandomNumberGenerator
=
NULL
;
}
}
...
@@ -59,6 +60,7 @@ BrookIntegrateLangevinStepKernel::~BrookIntegrateLangevinStepKernel( ){
...
@@ -59,6 +60,7 @@ BrookIntegrateLangevinStepKernel::~BrookIntegrateLangevinStepKernel( ){
delete
_brookStochasticDynamics
;
delete
_brookStochasticDynamics
;
delete
_brookShakeAlgorithm
;
delete
_brookShakeAlgorithm
;
delete
_brookRandomNumberGenerator
;
}
}
...
@@ -77,6 +79,9 @@ void BrookIntegrateLangevinStepKernel::initialize( const vector<double>& masses,
...
@@ -77,6 +79,9 @@ void BrookIntegrateLangevinStepKernel::initialize( const vector<double>& masses,
_brookShakeAlgorithm
=
new
BrookShakeAlgorithm
(
);
_brookShakeAlgorithm
=
new
BrookShakeAlgorithm
(
);
_brookShakeAlgorithm
->
setup
(
masses
,
constraintIndices
,
constraintLengths
,
getPlatform
()
);
_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
...
@@ -116,6 +121,7 @@ void BrookIntegrateLangevinStepKernel::execute( Stream& positions, Stream& veloc
if
(
fabs
(
differences
[
0
]
)
<
epsilon
||
fabs
(
differences
[
1
]
)
<
epsilon
||
fabs
(
differences
[
2
]
)
<
epsilon
){
if
(
fabs
(
differences
[
0
]
)
<
epsilon
||
fabs
(
differences
[
1
]
)
<
epsilon
||
fabs
(
differences
[
2
]
)
<
epsilon
){
_brookStochasticDynamics
->
updateParameters
(
temperature
,
friction
,
stepSize
);
_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 @@
...
@@ -35,6 +35,7 @@
#include "kernels.h"
#include "kernels.h"
#include "BrookStochasticDynamics.h"
#include "BrookStochasticDynamics.h"
#include "BrookShakeAlgorithm.h"
#include "BrookShakeAlgorithm.h"
#include "BrookRandomNumberGenerator.h"
namespace
OpenMM
{
namespace
OpenMM
{
...
@@ -91,6 +92,7 @@ class BrookIntegrateLangevinStepKernel : public IntegrateLangevinStepKernel {
...
@@ -91,6 +92,7 @@ class BrookIntegrateLangevinStepKernel : public IntegrateLangevinStepKernel {
BrookStochasticDynamics
*
_brookStochasticDynamics
;
BrookStochasticDynamics
*
_brookStochasticDynamics
;
BrookShakeAlgorithm
*
_brookShakeAlgorithm
;
BrookShakeAlgorithm
*
_brookShakeAlgorithm
;
BrookRandomNumberGenerator
*
_brookRandomNumberGenerator
;
};
};
...
...
platforms/brook/src/BrookPlatform.cpp
View file @
ff8bd4e1
...
@@ -145,8 +145,8 @@ void BrookPlatform::_initializeKernelFactory( void ){
...
@@ -145,8 +145,8 @@ void BrookPlatform::_initializeKernelFactory( void ){
registerKernelFactory
(
CalcStandardMMForceFieldKernel
::
Name
(),
factory
);
registerKernelFactory
(
CalcStandardMMForceFieldKernel
::
Name
(),
factory
);
// registerKernelFactory( CalcGBSAOBCForceFieldKernel::Name(), factory);
// registerKernelFactory( CalcGBSAOBCForceFieldKernel::Name(), factory);
registerKernelFactory
(
IntegrateVerletStepKernel
::
Name
(),
factory
);
//
registerKernelFactory( IntegrateVerletStepKernel::Name(), factory);
//
registerKernelFactory( IntegrateLangevinStepKernel::Name(), factory);
registerKernelFactory
(
IntegrateLangevinStepKernel
::
Name
(),
factory
);
//registerKernelFactory( IntegrateBrownianStepKernel::Name(), factory);
//registerKernelFactory( IntegrateBrownianStepKernel::Name(), factory);
//registerKernelFactory( ApplyAndersenThermostatKernel::Name(), factory);
//registerKernelFactory( ApplyAndersenThermostatKernel::Name(), factory);
registerKernelFactory
(
CalcKineticEnergyKernel
::
Name
(),
factory
);
registerKernelFactory
(
CalcKineticEnergyKernel
::
Name
(),
factory
);
...
@@ -180,7 +180,7 @@ void BrookPlatform::_setBrookRuntime( const std::string& runtime ){
...
@@ -180,7 +180,7 @@ void BrookPlatform::_setBrookRuntime( const std::string& runtime ){
}
}
if
(
getLog
()
){
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
()
);
(
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 @@
...
@@ -32,12 +32,6 @@
* USE OR OTHER DEALINGS IN THE SOFTWARE. *
* USE OR OTHER DEALINGS IN THE SOFTWARE. *
* -------------------------------------------------------------------------- */
* -------------------------------------------------------------------------- */
#include <vector>
#include <set>
#include "BrookFloatStreamInternal.h"
#include "BrookShakeAlgorithm.h"
#include "BrookPlatform.h"
#include "BrookCommon.h"
#include "BrookCommon.h"
namespace
OpenMM
{
namespace
OpenMM
{
...
@@ -52,6 +46,10 @@ class BrookRandomNumberGenerator : public BrookCommon {
...
@@ -52,6 +46,10 @@ class BrookRandomNumberGenerator : public BrookCommon {
public:
public:
// toggle between original rng & Kiss (Nvidia) code
static
const
int
UseOriginalRng
=
1
;
/**
/**
* Constructor
* Constructor
*
*
...
@@ -67,98 +65,38 @@ class BrookRandomNumberGenerator : public BrookCommon {
...
@@ -67,98 +65,38 @@ class BrookRandomNumberGenerator : public BrookCommon {
~
BrookRandomNumberGenerator
();
~
BrookRandomNumberGenerator
();
/**
/**
* Get tau
* Get number of random number streams
*
* @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
*
*
*/
* @return number of random number streams
const
BrookOpenMMFloat
*
getDerivedParameters
(
void
)
const
;
/**
* Get StochasticDynamics atom stream width
*
*
* @return atom stream width
*/
*/
int
get
StochasticDynamicsAtom
Stream
Width
(
void
)
const
;
int
get
NumberOfRandomNumber
Stream
s
(
void
)
const
;
/**
/**
* Get
StochasticDynamics atom
stream
height
* Get stream
width
*
*
* @return
atom
stream
height
* @return stream
width
*/
*/
int
get
StochasticDynamicsAtomStreamHeight
(
void
)
const
;
int
get
RandomNumberStreamWidth
(
void
)
const
;
/**
/**
* Get
StochasticDynamics atom
stream
size
* Get stream
height
*
*
* @return
atom
stream
size
* @return stream
height
*/
*/
int
get
StochasticDynamicsAtomStreamSize
(
void
)
const
;
int
get
RandomNumberStreamHeight
(
void
)
const
;
/**
/**
* Update parameters
* Get stream size
*
* @param temperature temperature
* @param friction friction
* @param step size step size
*
* @return DefaultReturnValue
*
*
* @return stream size
*/
*/
int
updateParameters
(
double
temperature
,
double
friction
,
double
stepSize
);
int
getRandomNumberStreamSize
(
void
)
const
;
/**
* 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
* Get array of StochasticDynamics streams
*
*
...
@@ -169,16 +107,16 @@ class BrookRandomNumberGenerator : public BrookCommon {
...
@@ -169,16 +107,16 @@ class BrookRandomNumberGenerator : public BrookCommon {
BrookFloatStreamInternal
**
getStreams
(
void
);
BrookFloatStreamInternal
**
getStreams
(
void
);
/*
/*
* Setup of
StochasticDynamics
parameters
* Setup of
RNG
parameters
*
*
* @param
masses atom masse
s
* @param
numberOfAtoms number of atom
s
* @param platform Brook platform
* @param platform Brook platform
*
*
* @return ErrorReturnValue value if error, else DefaultReturnValue
* @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
* Get contents of object
...
@@ -192,104 +130,93 @@ class BrookRandomNumberGenerator : public BrookCommon {
...
@@ -192,104 +130,93 @@ class BrookRandomNumberGenerator : public BrookCommon {
std
::
string
getContentsString
(
int
level
=
0
)
const
;
std
::
string
getContentsString
(
int
level
=
0
)
const
;
/**
/**
* Get
SDPC1
stream
* Get
random number
stream
*
*
* @return SDPC1 stream
* @param index random number stream index
*
* @return random number stream
*
*
*/
*/
BrookFloatStreamInternal
*
get
SDPC1Stream
(
void
)
const
;
BrookFloatStreamInternal
*
get
RandomNumberStream
(
int
index
)
const
;
/**
/**
* Get SDPC2 stream
* Get random number seed
*
* @return SDPC2 stream
*
*
* @return random number seed
*/
*/
BrookFloatStreamInternal
*
getSDPC2Stream
(
void
)
const
;
unsigned
long
int
getRandomNumberSeed
(
void
)
const
;
/**
/**
*
Get shuffle stream
*
Increment random number seed
*
*
* @
return Shuffle stream
* @
param increment amount to increment random number seed; default = 1
*
*
* @return updated random number seed
*/
*/
BrookFloatStreamInternal
*
getShuffleStream
(
void
)
const
;
unsigned
long
int
incrementRandomNumberSeed
(
unsigned
long
int
increment
=
1
)
;
/**
/**
* Generate a random number using algorithm in Gromacs
* Set random number seed
*
* @param ig seed
*
*
* @
return
random number
* @
param new
random number
seed; default = 1
*
*
* @return random number seed
*/
*/
BrookOpenMMFloat
generateGromacsRandomNumber
(
int
*
ig
);
unsigned
long
int
setRandomNumberSeed
(
unsigned
long
int
seed
=
1
);
/**
/**
* Generate a random number using algorithm in Nvidia code
* Get index of rv texture
* 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
*
*
* @return index of rv texture
*/
*/
void
generateRandomsAlaNvidia
(
float
*
randomV1
,
float
*
randomV2
,
float
*
randomV3
,
int
getRvStreamIndex
(
void
)
const
;
unsigned
int
state
[
4
]
);
/**
/**
*
Load random number streams using Nvidia algorithm
*
Get max shuffles
*
*
* @return max shuffles
*
*
* @return DefaultReturnValue;
*/
*/
int
loadRandomNumberStreamsNvidia
(
void
);
int
getMaxShuffles
(
void
)
const
;
/**
/**
*
Get
random
number seed
*
Advance
random
values stream index
*
*
* @return random number seed
* @param numberOfEntriesToAdvance number of entries consumed in previous iteration
*/
unsigned
long
int
getRandomNumberSeed
(
void
)
const
;
/**
* Increment random number seed
*
*
* @
param increment amount to increment random number seed; default = 1
* @
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:
private:
// streams indices
// streams indices
enum
BrookRandomNumberGeneratorStreams
{
enum
BrookRandomNumberGeneratorStreams
{
RandomNumberStream
,
ShuffleStream
,
ShuffleStream
,
LastStreamIndex
LastStreamIndex
};
};
BrookFloatStreamInternal
*
_auxiliaryStreams
[
LastStreamIndex
];
BrookFloatStreamInternal
**
_randomNumberGeneratorStreams
;
// randomNumberSeed
// randomNumberSeed
unsigned
long
int
_randomNumberSeed
;
unsigned
long
int
_randomNumberSeed
;
...
@@ -304,6 +231,16 @@ class BrookRandomNumberGenerator : public BrookCommon {
...
@@ -304,6 +231,16 @@ class BrookRandomNumberGenerator : public BrookCommon {
int
_randomNumberStreamHeight
;
int
_randomNumberStreamHeight
;
int
_randomNumberStreamSize
;
int
_randomNumberStreamSize
;
// control variables
int
_rvStreamIndex
;
int
_rvStreamOffset
;
int
_numberOfShuffles
;
int
_maxShuffles
;
float
*
_loadBuffer
;
int
*
_shuffleIndices
;
/*
/*
* Setup of stream dimensions
* Setup of stream dimensions
*
*
...
@@ -340,15 +277,125 @@ class BrookRandomNumberGenerator : public BrookCommon {
...
@@ -340,15 +277,125 @@ class BrookRandomNumberGenerator : public BrookCommon {
int
_initializeStreams
(
const
Platform
&
platform
);
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
*
*
* @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
*
*
* @
param masses atomic mass
es
* @
return number of shuffl
es
*
*
*/
*/
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 @@
...
@@ -34,6 +34,8 @@
#include "BrookPlatform.h"
#include "BrookPlatform.h"
#include "OpenMMException.h"
#include "OpenMMException.h"
#include "BrookStreamImpl.h"
#include "BrookStreamImpl.h"
#include "kshakeh.h"
#include "kupdatesd.h"
// use random number generator
// use random number generator
...
@@ -330,6 +332,7 @@ int BrookStochasticDynamics::updateParameters( double temperature, double fricti
...
@@ -330,6 +332,7 @@ int BrookStochasticDynamics::updateParameters( double temperature, double fricti
* @param velocities atom velocities
* @param velocities atom velocities
* @param forces atom forces
* @param forces atom forces
* @param brookShakeAlgorithm BrookShakeAlgorithm reference
* @param brookShakeAlgorithm BrookShakeAlgorithm reference
* @param brookRandomNumberGenerator BrookRandomNumberGenerator reference
*
*
* @return DefaultReturnValue
* @return DefaultReturnValue
*
*
...
@@ -337,7 +340,8 @@ int BrookStochasticDynamics::updateParameters( double temperature, double fricti
...
@@ -337,7 +340,8 @@ int BrookStochasticDynamics::updateParameters( double temperature, double fricti
int
BrookStochasticDynamics
::
update
(
Stream
&
positions
,
Stream
&
velocities
,
int
BrookStochasticDynamics
::
update
(
Stream
&
positions
,
Stream
&
velocities
,
const
Stream
&
forces
,
const
Stream
&
forces
,
BrookShakeAlgorithm
&
brookShakeAlgorithm
){
BrookShakeAlgorithm
&
brookShakeAlgorithm
,
BrookRandomNumberGenerator
&
brookRandomNumberGenerator
){
// ---------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------
...
@@ -349,26 +353,25 @@ int BrookStochasticDynamics::update( Stream& positions, Stream& velocities,
...
@@ -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
&
positionStream
=
dynamic_cast
<
BrookStreamImpl
&>
(
positions
.
getImpl
());
BrookStreamImpl
&
velocityStream
=
dynamic_cast
<
BrookStreamImpl
&>
(
velocities
.
getImpl
());
BrookStreamImpl
&
velocityStream
=
dynamic_cast
<
BrookStreamImpl
&>
(
velocities
.
getImpl
());
BrookStreamImpl
&
forceStreamC
=
dynamic_cast
<
BrookStreamImpl
&>
(
forces
.
getImpl
());
const
BrookStreamImpl
&
forceStreamC
=
dynamic_cast
<
const
BrookStreamImpl
&>
(
forces
.
getImpl
());
const
BrookStreamImpl
&
forceStream
=
dynamic_cast
<
const
BrookStreamImpl
&>
(
forceStream
.
getImpl
());
BrookStreamImpl
&
forceStream
=
const_cast
<
BrookStreamImpl
&>
(
forceStreamC
);
// first integration step
// first integration step
kupdate_sd1_fix1
(
kupdate_sd1_fix1
(
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
(
float
)
sdp
->
gv
Width
,
(
float
)
brookRandomNumberGenerator
.
getRandomNumberStream
Width
()
,
(
float
)
sdp
->
gv
Offset
,
(
float
)
brookRandomNumberGenerator
.
getRvStream
Offset
()
,
derivedParameters
[
EM
],
derivedParameters
[
EM
],
derivedParameters
[
Sd1pc1
],
derivedParameters
[
Sd1pc1
],
derivedParameters
[
Sd1pc2
],
derivedParameters
[
Sd1pc2
],
derivedParameters
[
Sd1pc3
],
derivedParameters
[
Sd1pc3
],
getSDPC1Stream
()
->
getBrookStream
(),
getSDPC1Stream
()
->
getBrookStream
(),
sdp
->
strVGauss
[
sdp
->
gvCur
Stream
]
,
brookRandomNumberGenerator
.
getRandomNumberStream
(
brookRandomNumberGenerator
.
getRvStreamIndex
()
)
->
getBrook
Stream
()
,
getSD2XStream
()
->
getBrookStream
(),
getSD2XStream
()
->
getBrookStream
(),
positionStream
.
getBrookStream
(),
positionStream
.
getBrookStream
(),
forceStream
.
getBrookStream
(),
forceStream
.
getBrookStream
(),
...
@@ -379,100 +382,104 @@ sdp->strVGauss[ sdp->gvCurStream ],
...
@@ -379,100 +382,104 @@ sdp->strVGauss[ sdp->gvCurStream ],
getXPrimeStream
()
->
getBrookStream
()
getXPrimeStream
()
->
getBrookStream
()
);
);
AdvanceGVCursor
(
sdp
,
gpu
,
step
);
// advance random number cursor
brookRandomNumberGenerator
.
advanceGVCursor
(
2
*
getNumberOfAtoms
()
);
// first Shake step
// first Shake step
kshakeh_fix1
(
kshakeh_fix1
(
10.0
f
,
10.0
f
,
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
brookShakeAlgorithm
->
getInverseHydrogenMass
(),
brookShakeAlgorithm
.
getInverseHydrogenMass
(),
omega
,
omega
,
brookShakeAlgorithm
->
getShakeAtomIndicesStream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeAtomIndicesStream
()
->
getBrookStream
(),
positionStream
.
getBrookStream
(),
positionStream
.
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeAtomParameterStream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeAtomParameterStream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons0Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons0Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons1Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons1Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons2Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons2Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons3Stream
()
->
getBrookStream
()
);
brookShakeAlgorithm
.
getShakeXCons3Stream
()
->
getBrookStream
()
);
// first Shake gather
// first Shake gather
kshakeh_update1_fix1
(
kshakeh_update1_fix1
(
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
derivedParameters
[
Sd2pc1
],
derivedParameters
[
Sd2pc1
],
brookShakeAlgorithm
->
getShakeInverseMapStream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeInverseMapStream
()
->
getBrookStream
(),
positionStream
.
getBrookStream
(),
positionStream
.
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
(),
getVPrimeStream
()
->
getBrookStream
(),
getVPrimeStream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons0Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons0Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons1Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons1Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons2Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons2Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons3Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons3Stream
()
->
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
()
);
getXPrimeStream
()
->
getBrookStream
()
);
// second integration step
// second integration step
kupdate_sd2_fix1
(
kupdate_sd2_fix1
(
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
(
float
)
sdp
->
gv
Width
,
(
float
)
brookRandomNumberGenerator
.
getRandomNumberStream
Width
()
,
(
float
)
sdp
->
gv
Offset
,
(
float
)
brookRandomNumberGenerator
.
getRvStream
Offset
()
,
derivedParameters
[
Sd2pc1
],
derivedParameters
[
Sd2pc1
],
derivedParameters
[
Sd2pc2
],
derivedParameters
[
Sd2pc2
],
getSDPC2Stream
()
->
getBrookStream
(),
getSDPC2Stream
()
->
getBrookStream
(),
sdp
->
strVGauss
[
sdp
->
gvCur
Stream
]
,
brookRandomNumberGenerator
.
getRandomNumberStream
(
brookRandomNumberGenerator
.
getRvStreamIndex
()
)
->
getBrook
Stream
()
,
getSD1VStream
()
->
getBrookStream
(),
getSD1VStream
()
->
getBrookStream
(),
positionStream
.
getBrookStream
(),
positionStream
.
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
(),
getVPrimeStream
()
->
getBrookStream
(),
getVPrimeStream
()
->
getBrookStream
(),
getS2XStream
()
->
getBrookStream
(),
getS
D
2XStream
()
->
getBrookStream
(),
velocityStream
.
getBrookStream
(),
velocityStream
.
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
()
getXPrimeStream
()
->
getBrookStream
()
);
);
AdvanceGVCursor
(
sdp
,
gpu
,
step
);
// advance random number cursor
brookRandomNumberGenerator
.
advanceGVCursor
(
2
*
getNumberOfAtoms
()
);
// second Shake step
// second Shake step
kshakeh_fix1
(
kshakeh_fix1
(
10.0
f
,
10.0
f
,
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
brookShakeAlgorithm
->
getInverseHydrogenMass
(),
brookShakeAlgorithm
.
getInverseHydrogenMass
(),
omega
,
omega
,
brookShakeAlgorithm
->
getShakeAtomIndicesStream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeAtomIndicesStream
()
->
getBrookStream
(),
positionStream
.
getBrookStream
(),
positionStream
.
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeAtomParameterStream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeAtomParameterStream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons0Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons0Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons1Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons1Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons2Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons2Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons3Stream
()
->
getBrookStream
()
);
brookShakeAlgorithm
.
getShakeXCons3Stream
()
->
getBrookStream
()
);
// second Shake gather
// second Shake gather
kshakeh_update1_fix1
(
kshakeh_update1_fix1
(
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
derivedParameters
[
Sd2pc1
],
derivedParameters
[
Sd2pc1
],
brookShakeAlgorithm
->
getShakeInverseMapStream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeInverseMapStream
()
->
getBrookStream
(),
positionStream
.
getBrookStream
(),
positionStream
.
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
(),
getVPrimeStream
()
->
getBrookStream
(),
getVPrimeStream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons0Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons0Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons1Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons1Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons2Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons2Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons3Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons3Stream
()
->
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
()
);
getXPrimeStream
()
->
getBrookStream
()
);
kshakeh_update2_fix1
(
kshakeh_update2_fix1
(
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
(
float
)
getStochasticDynamicsAtomStreamWidth
(),
brookShakeAlgorithm
->
getShakeInverseMapStream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeInverseMapStream
()
->
getBrookStream
(),
positionStream
.
getBrookStream
(),
positionStream
.
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
(),
getXPrimeStream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons0Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons0Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons1Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons1Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons2Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons2Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
->
getShakeXCons3Stream
()
->
getBrookStream
(),
brookShakeAlgorithm
.
getShakeXCons3Stream
()
->
getBrookStream
(),
positionStream
.
getBrookStream
()
);
positionStream
.
getBrookStream
()
);
return
DefaultReturnValue
;
return
DefaultReturnValue
;
...
...
platforms/brook/src/BrookStochasticDynamics.h
View file @
ff8bd4e1
...
@@ -37,6 +37,7 @@
...
@@ -37,6 +37,7 @@
#include "BrookFloatStreamInternal.h"
#include "BrookFloatStreamInternal.h"
#include "BrookShakeAlgorithm.h"
#include "BrookShakeAlgorithm.h"
#include "BrookRandomNumberGenerator.h"
#include "BrookPlatform.h"
#include "BrookPlatform.h"
#include "BrookCommon.h"
#include "BrookCommon.h"
...
@@ -152,13 +153,15 @@ class BrookStochasticDynamics : public BrookCommon {
...
@@ -152,13 +153,15 @@ class BrookStochasticDynamics : public BrookCommon {
* @param velocities atom velocities
* @param velocities atom velocities
* @param forces atom forces
* @param forces atom forces
* @param brookShakeAlgorithm BrookShakeAlgorithm reference
* @param brookShakeAlgorithm BrookShakeAlgorithm reference
* @param brookRandomNumberGenerator BrookRandomNumberGenerator reference
*
*
* @return DefaultReturnValue
* @return DefaultReturnValue
*
*
*/
*/
int
update
(
Stream
&
positions
,
Stream
&
velocities
,
int
update
(
Stream
&
positions
,
Stream
&
velocities
,
const
Stream
&
forces
,
BrookShakeAlgorithm
&
brookShakeAlgorithm
);
const
Stream
&
forces
,
BrookShakeAlgorithm
&
brookShakeAlgorithm
,
BrookRandomNumberGenerator
&
brookRandomNumberGenerator
);
/**
/**
* Get array of StochasticDynamics streams
* Get array of StochasticDynamics streams
*
*
...
@@ -227,6 +230,33 @@ class BrookStochasticDynamics : public BrookCommon {
...
@@ -227,6 +230,33 @@ class BrookStochasticDynamics : public BrookCommon {
BrookFloatStreamInternal
*
getSD1VStream
(
void
)
const
;
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:
private:
enum
DerivedParameters
{
GDT
,
EPH
,
EMH
,
EP
,
EM
,
B
,
C
,
D
,
V
,
X
,
Yv
,
Yx
,
enum
DerivedParameters
{
GDT
,
EPH
,
EMH
,
EP
,
EM
,
B
,
C
,
D
,
V
,
X
,
Yv
,
Yx
,
...
@@ -385,8 +415,6 @@ class BrookStochasticDynamics : public BrookCommon {
...
@@ -385,8 +415,6 @@ class BrookStochasticDynamics : public BrookCommon {
int
_setInverseSqrtMasses
(
const
std
::
vector
<
double
>&
masses
);
int
_setInverseSqrtMasses
(
const
std
::
vector
<
double
>&
masses
);
};
};
}
// namespace OpenMM
}
// namespace OpenMM
...
...
platforms/brook/src/BrookStreamFactory.cpp
View file @
ff8bd4e1
...
@@ -56,7 +56,9 @@ BrookStreamFactory::BrookStreamFactory( void ){
...
@@ -56,7 +56,9 @@ BrookStreamFactory::BrookStreamFactory( void ){
// ---------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------
_defaultDangleValue
=
1.0e+38
;
_defaultDangleValue
=
1.0e+38
;
_defaultAtomStreamWidth
=
32
;
_defaultAtomStreamWidth
=
DefaultStreamAtomWidth
;
_defaultStreamRandomNumberWidth
=
DefaultStreamRandomNumberWidth
;
_defaultStreamRandomNumberSize
=
DefaultStreamRandomNumberSize
;
}
}
...
@@ -121,7 +123,111 @@ int BrookStreamFactory::setDefaultAtomStreamWidth( int atomStreamWidth ){
...
@@ -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
* @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