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
60dd93a8
"ssh:/git@developer.sourcefind.cn:2222/tsoc/openmm.git" did not exist on "545a83ee10ed8af207302f2c600b03fea46b35f7"
Commit
60dd93a8
authored
Jan 10, 2009
by
Mark Friedrichs
Browse files
Mods
parent
d6132ea0
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
279 additions
and
122 deletions
+279
-122
platforms/brook/src/BrookFloatStreamInternal.cpp
platforms/brook/src/BrookFloatStreamInternal.cpp
+6
-0
platforms/brook/src/BrookLangevinDynamics.cpp
platforms/brook/src/BrookLangevinDynamics.cpp
+134
-23
platforms/brook/src/BrookLangevinDynamics.h
platforms/brook/src/BrookLangevinDynamics.h
+18
-4
platforms/brook/src/BrookRandomNumberGenerator.cpp
platforms/brook/src/BrookRandomNumberGenerator.cpp
+24
-5
platforms/brook/src/BrookShakeAlgorithm.cpp
platforms/brook/src/BrookShakeAlgorithm.cpp
+2
-2
platforms/brook/src/BrookVelocityCenterOfMassRemoval.cpp
platforms/brook/src/BrookVelocityCenterOfMassRemoval.cpp
+91
-85
platforms/brook/src/OpenMMBrookInterface.cpp
platforms/brook/src/OpenMMBrookInterface.cpp
+2
-1
platforms/brook/src/gpu/kshakeh.h
platforms/brook/src/gpu/kshakeh.h
+2
-2
No files found.
platforms/brook/src/BrookFloatStreamInternal.cpp
View file @
60dd93a8
...
@@ -242,6 +242,12 @@ void BrookFloatStreamInternal::loadFromArray( const void* array, BrookStreamInte
...
@@ -242,6 +242,12 @@ void BrookFloatStreamInternal::loadFromArray( const void* array, BrookStreamInte
int
totalSize
=
getSize
()
*
getWidth
();
int
totalSize
=
getSize
()
*
getWidth
();
//int totalSize = getSize();
//int totalSize = getSize();
/*
fprintf( stderr, "%s %s data=%p stream=%d [%d %d] width=%d type=%d\n",
methodName.c_str(), getName().c_str(), _data, getStreamSize(), _streamHeight, _streamWidth, _width, baseType );
fflush( stderr );
*/
if
(
baseType
==
BrookStreamInternal
::
Float
){
if
(
baseType
==
BrookStreamInternal
::
Float
){
memcpy
(
_data
,
array
,
sizeof
(
float
)
*
totalSize
);
memcpy
(
_data
,
array
,
sizeof
(
float
)
*
totalSize
);
...
...
platforms/brook/src/BrookLangevinDynamics.cpp
View file @
60dd93a8
...
@@ -249,7 +249,7 @@ int BrookLangevinDynamics::_updateDerivedParameters( void ){
...
@@ -249,7 +249,7 @@ int BrookLangevinDynamics::_updateDerivedParameters( void ){
BrookOpenMMFloat
temperature
=
getTemperature
();
BrookOpenMMFloat
temperature
=
getTemperature
();
BrookOpenMMFloat
stepSize
=
getStepSize
();
BrookOpenMMFloat
stepSize
=
getStepSize
();
if
(
fabsf
(
float
(
tau
)
)
<
epsilon
){
if
(
fabsf
(
(
float
)
tau
)
<
epsilon
){
std
::
stringstream
message
;
std
::
stringstream
message
;
message
<<
methodName
<<
" tau="
<<
tau
<<
" too small."
;
message
<<
methodName
<<
" tau="
<<
tau
<<
" too small."
;
throw
OpenMMException
(
message
.
str
()
);
throw
OpenMMException
(
message
.
str
()
);
...
@@ -809,18 +809,18 @@ int BrookLangevinDynamics::setup( const std::vector<double>& masses, const Platf
...
@@ -809,18 +809,18 @@ int BrookLangevinDynamics::setup( const std::vector<double>& masses, const Platf
return
DefaultReturnValue
;
return
DefaultReturnValue
;
}
}
/*
/**
* Setup of LangevinDynamics parameters
* Get T
*
*
* @param masses masses
* @param velocities velocities
* @param platform Brook platform
* @param inverseMassStream inverse masses
*
* @param numberOfConstraints number of constraints
* @return nonzero value if error
*
*
* */
* @return temperature
*/
float
BrookLangevinDynamics
::
getTemperature
(
BrookStreamInternal
*
velocities
,
BrookFloatStreamInternal
*
inverseMassStream
,
float
BrookLangevinDynamics
::
getTemperature
(
BrookStreamInternal
*
velocities
,
BrookFloatStreamInternal
*
inverseMassStream
,
BrookShakeAlgorithm
&
brookShakeAlgorithm
)
const
{
int
numberOfConstraints
)
const
{
// ---------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------
...
@@ -838,15 +838,96 @@ float BrookLangevinDynamics::getTemperature( BrookStreamInternal* velocities, Br
...
@@ -838,15 +838,96 @@ float BrookLangevinDynamics::getTemperature( BrookStreamInternal* velocities, Br
int
index
=
0
;
int
index
=
0
;
for
(
int
ii
=
0
;
ii
<
getNumberOfParticles
();
ii
++
){
for
(
int
ii
=
0
;
ii
<
getNumberOfParticles
();
ii
++
){
ke
+=
(
velocitiesI
[
index
]
*
velocitiesI
[
index
]
+
velocitiesI
[
index
+
1
]
*
velocitiesI
[
index
+
1
]
+
velocitiesI
[
index
+
2
]
*
velocitiesI
[
index
+
2
]
)
/
inverseMassStreamI
[
ii
];
ke
+=
(
velocitiesI
[
index
]
*
velocitiesI
[
index
]
+
velocitiesI
[
index
+
1
]
*
velocitiesI
[
index
+
1
]
+
velocitiesI
[
index
+
2
]
*
velocitiesI
[
index
+
2
]
)
/
inverseMassStreamI
[
ii
];
//(void) fprintf( stderr, "%s %d Velocities[%14.5e %14.5e %14.5e]\n", methodName.c_str(), index/3, velocitiesI[index], velocitiesI[index+1], velocitiesI[index+2] );
index
+=
3
;
index
+=
3
;
}
}
int
degreesOfFreedom
=
3
*
getNumberOfParticles
()
-
brookShakeAlgorithm
.
getN
umberOfConstraints
()
;
int
degreesOfFreedom
=
3
*
getNumberOfParticles
()
-
n
umberOfConstraints
;
(
void
)
fprintf
(
stderr
,
"%s ke=%.5e dof=%d
\n
"
,
methodName
.
c_str
(),
ke
,
degreesOfFreedom
);
ke
/=
((
float
)
BOLTZ
)
*
((
float
)
(
degreesOfFreedom
));
ke
/=
((
float
)
BOLTZ
)
*
((
float
)
(
degreesOfFreedom
));
return
ke
;
return
0.5
f
*
ke
;
}
/**
* Remove velocity com
*
* @param velocities velocities
* @param inverseMassStream inverse masses
*
* @return DefaultReturnValue
*/
int
BrookLangevinDynamics
::
removeCom
(
BrookStreamInternal
*
velocities
,
BrookFloatStreamInternal
*
inverseMassStream
)
const
{
// ---------------------------------------------------------------------------------------
static
const
std
::
string
methodName
=
"BrookLangevinDynamics::removeCom"
;
// ---------------------------------------------------------------------------------------
// (void) fprintf( stderr, "%s\n", methodName.c_str() ); fflush( stderr );
void
*
dataArrayV
=
velocities
->
getData
(
1
);
float
*
velocitiesI
=
(
float
*
)
dataArrayV
;
void
*
inverseMassStreamV
=
inverseMassStream
->
getData
(
1
);
float
*
inverseMassStreamI
=
(
float
*
)
inverseMassStreamV
;
float
totalMass
=
0.0
f
;
float
com
[
3
]
=
{
0.0
f
,
0.0
f
,
0.0
f
};
int
index
=
0
;
//(void) fprintf( stderr, "%s strm %d %d\n", methodName.c_str(), velocities->getStreamSize(),velocities->getWidth() ); fflush( stderr );
for
(
int
ii
=
0
;
ii
<
getNumberOfParticles
();
ii
++
){
float
mass
=
1.0
f
/
inverseMassStreamI
[
ii
];
totalMass
+=
mass
;
com
[
0
]
+=
mass
*
velocitiesI
[
index
];
com
[
1
]
+=
mass
*
velocitiesI
[
index
+
1
];
com
[
2
]
+=
mass
*
velocitiesI
[
index
+
2
];
index
+=
3
;
}
totalMass
=
1.0
f
/
totalMass
;
com
[
0
]
*=
totalMass
;
com
[
1
]
*=
totalMass
;
com
[
2
]
*=
totalMass
;
index
=
0
;
double
*
newVelocities
=
new
double
[
velocities
->
getStreamSize
()
*
velocities
->
getWidth
()];
memset
(
newVelocities
,
0
,
sizeof
(
double
)
*
velocities
->
getStreamSize
()
*
velocities
->
getWidth
()
);
for
(
int
ii
=
0
;
ii
<
getNumberOfParticles
();
ii
++
){
newVelocities
[
index
]
=
(
double
)
velocitiesI
[
index
]
-
com
[
0
];
newVelocities
[
index
+
1
]
=
(
double
)
velocitiesI
[
index
+
1
]
-
com
[
1
];
newVelocities
[
index
+
2
]
=
(
double
)
velocitiesI
[
index
+
2
]
-
com
[
2
];
index
+=
3
;
}
/*
(void) fprintf( stderr, "%s com[%14.5e %14.5e %14.5e]\n", methodName.c_str(), com[0], com[1], com[2] );
for( int ii = 0; ii < velocities->getStreamSize()*3; ii += 3 ){
(void) fprintf( stderr, "%s %d newVelocities[%14.5e %14.5e %14.5e]\n", methodName.c_str(), ii/3, newVelocities[ii], newVelocities[ii+1], newVelocities[ii+2] );
}
*/
velocities
->
loadFromArray
(
newVelocities
);
dataArrayV
=
velocities
->
getData
(
1
);
velocitiesI
=
(
float
*
)
dataArrayV
;
/*
(void) fprintf( stderr, "%s readback\n", methodName.c_str() );
for( int ii = 0; ii < velocities->getStreamSize()*3; ii += 3 ){
(void) fprintf( stderr, "%s %d velocitiesI[%14.5e %14.5e %14.5e]\n", methodName.c_str(), ii/3, velocitiesI[ii], velocitiesI[ii+1], velocitiesI[ii+2] );
}
*/
velocities
->
loadFromArray
(
newVelocities
);
delete
[]
newVelocities
;
return
DefaultReturnValue
;
}
}
/*
/*
...
@@ -950,21 +1031,25 @@ int BrookLangevinDynamics::update( BrookStreamImpl& positionStream, BrookStreamI
...
@@ -950,21 +1031,25 @@ int BrookLangevinDynamics::update( BrookStreamImpl& positionStream, BrookStreamI
// ---------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------
static
const
std
::
string
methodName
=
"
\n
BrookLangevinDynamics::update"
;
static
const
std
::
string
methodName
=
"
\n
BrookLangevinDynamics::update"
;
int
printOn
=
0
;
int
printOn
=
1
;
FILE
*
log
;
FILE
*
log
;
// ---------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------
_internalStepCount
++
;
_internalStepCount
++
;
//setLog( stderr );
// setLog( stderr );
printOn
=
(
printOn
&&
getLog
())
?
printOn
:
0
;
if
(
printOn
&&
getLog
()
){
log
=
getLog
();
}
else
{
printOn
=
0
;
}
const
BrookOpenMMFloat
*
derivedParameters
=
getDerivedParameters
();
const
BrookOpenMMFloat
*
derivedParameters
=
getDerivedParameters
();
if
(
printOn
){
if
(
printOn
){
log
=
getLog
();
static
int
showAux
=
1
;
static
int
showAux
=
1
;
if
(
printOn
){
if
(
printOn
){
...
@@ -977,7 +1062,10 @@ int BrookLangevinDynamics::update( BrookStreamImpl& positionStream, BrookStreamI
...
@@ -977,7 +1062,10 @@ int BrookLangevinDynamics::update( BrookStreamImpl& positionStream, BrookStreamI
if
(
showAux
){
if
(
showAux
){
showAux
=
0
;
showAux
=
0
;
std
::
string
contents
=
brookRandomNumberGenerator
.
getContentsString
(
);
std
::
string
contents
=
getContentsString
(
);
(
void
)
fprintf
(
log
,
"%s step=%d contents
\n
%s"
,
methodName
.
c_str
(),
_internalStepCount
,
contents
.
c_str
()
);
contents
=
brookRandomNumberGenerator
.
getContentsString
(
);
(
void
)
fprintf
(
log
,
"%s step=%d RNG contents
\n
%s"
,
methodName
.
c_str
(),
_internalStepCount
,
contents
.
c_str
()
);
(
void
)
fprintf
(
log
,
"%s step=%d RNG contents
\n
%s"
,
methodName
.
c_str
(),
_internalStepCount
,
contents
.
c_str
()
);
// brookRandomNumberGenerator.getRandomNumberStream( brookRandomNumberGenerator.getRvStreamIndex() )->printToFile( log );
// brookRandomNumberGenerator.getRandomNumberStream( brookRandomNumberGenerator.getRvStreamIndex() )->printToFile( log );
...
@@ -987,6 +1075,15 @@ int BrookLangevinDynamics::update( BrookStreamImpl& positionStream, BrookStreamI
...
@@ -987,6 +1075,15 @@ int BrookLangevinDynamics::update( BrookStreamImpl& positionStream, BrookStreamI
}
}
}
}
if
(
1
||
(
_internalStepCount
%
10
)
==
0
){
FILE
*
log1
=
stderr
;
BrookStreamInternal
*
brookStreamInternalPos
=
velocityStream
.
getBrookStreamImpl
();
float
temperature
=
getTemperature
(
brookStreamInternalPos
,
getInverseMassStream
(),
brookShakeAlgorithm
.
getNumberOfConstraints
()
);
// removeCom( brookStreamInternalPos, getInverseMassStream() );
float
temperaturePost
=
getTemperature
(
brookStreamInternalPos
,
getInverseMassStream
(),
brookShakeAlgorithm
.
getNumberOfConstraints
()
);
(
void
)
fprintf
(
log1
,
"
\n
VelocityStream %d Tp=%.3f %.3f
\n
"
,
_internalStepCount
,
temperature
,
temperaturePost
);
}
// first integration step
// first integration step
kupdate_sd1_fix1
(
kupdate_sd1_fix1
(
...
@@ -1011,7 +1108,7 @@ int BrookLangevinDynamics::update( BrookStreamImpl& positionStream, BrookStreamI
...
@@ -1011,7 +1108,7 @@ int BrookLangevinDynamics::update( BrookStreamImpl& positionStream, BrookStreamI
// diagnostics
// diagnostics
if
(
0
&&
printOn
){
if
(
printOn
){
(
void
)
fprintf
(
log
,
"
\n
%s step=%d Post kupdate_sd1_fix1: particleStrW=%3d rngStrW=%3d rngOff=%5d "
(
void
)
fprintf
(
log
,
"
\n
%s step=%d Post kupdate_sd1_fix1: particleStrW=%3d rngStrW=%3d rngOff=%5d "
"EM=%12.5e Sd1pc[]=[%12.5e %12.5e %12.5e]"
,
methodName
.
c_str
(),
_internalStepCount
,
"EM=%12.5e Sd1pc[]=[%12.5e %12.5e %12.5e]"
,
methodName
.
c_str
(),
_internalStepCount
,
getLangevinDynamicsParticleStreamWidth
(),
getLangevinDynamicsParticleStreamWidth
(),
...
@@ -1143,7 +1240,7 @@ int BrookLangevinDynamics::update( BrookStreamImpl& positionStream, BrookStreamI
...
@@ -1143,7 +1240,7 @@ int BrookLangevinDynamics::update( BrookStreamImpl& positionStream, BrookStreamI
// diagnostics
// diagnostics
if
(
0
&&
printOn
){
if
(
printOn
){
(
void
)
fprintf
(
log
,
"
\n
%s step=%d Post kupdate_sd2_fix1: particleStrW=%3d rngStrW=%3d rngOff=%5d "
(
void
)
fprintf
(
log
,
"
\n
%s step=%d Post kupdate_sd2_fix1: particleStrW=%3d rngStrW=%3d rngOff=%5d "
"Sd2pc[]=[%12.5e %12.5e]"
,
methodName
.
c_str
(),
_internalStepCount
,
"Sd2pc[]=[%12.5e %12.5e]"
,
methodName
.
c_str
(),
_internalStepCount
,
getLangevinDynamicsParticleStreamWidth
(),
getLangevinDynamicsParticleStreamWidth
(),
...
@@ -1167,7 +1264,7 @@ int BrookLangevinDynamics::update( BrookStreamImpl& positionStream, BrookStreamI
...
@@ -1167,7 +1264,7 @@ int BrookLangevinDynamics::update( BrookStreamImpl& positionStream, BrookStreamI
(
void
)
fprintf
(
log
,
"
\n
XPrimeStream %d
\n
"
,
_internalStepCount
);
(
void
)
fprintf
(
log
,
"
\n
XPrimeStream %d
\n
"
,
_internalStepCount
);
getXPrimeStream
()
->
printToFile
(
log
);
getXPrimeStream
()
->
printToFile
(
log
);
(
void
)
fprintf
(
log
,
"
\n
get
SD2XStream %d
\n
"
,
_internalStepCount
);
(
void
)
fprintf
(
log
,
"
\n
SD2XStream %d
\n
"
,
_internalStepCount
);
getSD2XStream
()
->
printToFile
(
log
);
getSD2XStream
()
->
printToFile
(
log
);
BrookStreamInternal
*
brookStreamInternalVel
=
velocityStream
.
getBrookStreamImpl
();
BrookStreamInternal
*
brookStreamInternalVel
=
velocityStream
.
getBrookStreamImpl
();
...
@@ -1244,7 +1341,7 @@ int BrookLangevinDynamics::update( BrookStreamImpl& positionStream, BrookStreamI
...
@@ -1244,7 +1341,7 @@ int BrookLangevinDynamics::update( BrookStreamImpl& positionStream, BrookStreamI
tagV
<<
_internalStepCount
<<
" Vxx "
;
tagV
<<
_internalStepCount
<<
" Vxx "
;
stats
=
brookStreamInternalPos
->
printStatistics
(
tagV
.
str
(),
velocityStatistics
);
stats
=
brookStreamInternalPos
->
printStatistics
(
tagV
.
str
(),
velocityStatistics
);
(
void
)
fprintf
(
log
,
"
\n
Step %d Velocity stats:
\n
%s"
,
_internalStepCount
,
stats
.
c_str
()
);
(
void
)
fprintf
(
log
,
"
\n
Step %d Velocity stats:
\n
%s"
,
_internalStepCount
,
stats
.
c_str
()
);
float
temperature
=
getTemperature
(
brookStreamInternalPos
,
getInverseMassStream
(),
brookShakeAlgorithm
);
float
temperature
=
getTemperature
(
brookStreamInternalPos
,
getInverseMassStream
(),
brookShakeAlgorithm
.
getNumberOfConstraints
()
);
(
void
)
fprintf
(
log
,
"
\n
VelocityStream %d T=%.3f
\n
"
,
_internalStepCount
,
temperature
);
(
void
)
fprintf
(
log
,
"
\n
VelocityStream %d T=%.3f
\n
"
,
_internalStepCount
,
temperature
);
brookStreamInternalPos
->
printToFile
(
log
);
brookStreamInternalPos
->
printToFile
(
log
);
...
@@ -1287,6 +1384,20 @@ int BrookLangevinDynamics::update( BrookStreamImpl& positionStream, BrookStreamI
...
@@ -1287,6 +1384,20 @@ int BrookLangevinDynamics::update( BrookStreamImpl& positionStream, BrookStreamI
}
}
}
}
if
(
(
_internalStepCount
%
10
)
==
0
){
FILE
*
log1
=
stderr
;
BrookStreamInternal
*
brookStreamInternalPos
=
velocityStream
.
getBrookStreamImpl
();
std
::
vector
<
std
::
vector
<
double
>
>
velocityStatistics
;
brookStreamInternalPos
->
getStatistics
(
velocityStatistics
,
getNumberOfParticles
()
);
std
::
stringstream
tagV
;
tagV
<<
_internalStepCount
<<
" Vxx "
;
std
::
string
stats
=
brookStreamInternalPos
->
printStatistics
(
tagV
.
str
(),
velocityStatistics
);
(
void
)
fprintf
(
log1
,
"
\n
Step %d Velocity stats:
\n
%s"
,
_internalStepCount
,
stats
.
c_str
()
);
float
temperature
=
getTemperature
(
brookStreamInternalPos
,
getInverseMassStream
(),
brookShakeAlgorithm
.
getNumberOfConstraints
()
);
//removeCom( brookStreamInternalPos, getInverseMassStream() );
(
void
)
fprintf
(
log1
,
"
\n
VelocityStream %d T=%.3f
\n
"
,
_internalStepCount
,
temperature
);
}
return
DefaultReturnValue
;
return
DefaultReturnValue
;
}
}
platforms/brook/src/BrookLangevinDynamics.h
View file @
60dd93a8
...
@@ -258,17 +258,31 @@ class BrookLangevinDynamics : public BrookCommon {
...
@@ -258,17 +258,31 @@ class BrookLangevinDynamics : public BrookCommon {
BrookFloatStreamInternal
*
getInverseMassStream
(
void
)
const
;
BrookFloatStreamInternal
*
getInverseMassStream
(
void
)
const
;
/**
/**
* Get T
* Get T
emperature
*
*
* @return T
* @param velocities velocities
* @param inverseMassStream inverse masses
* @param numberOfConstraints number of constraints
*
* @return temperature
*
*
*/
*/
float
getTemperature
(
BrookStreamInternal
*
velocities
,
BrookFloatStreamInternal
*
inverseMassStream
,
float
getTemperature
(
BrookStreamInternal
*
velocities
,
BrookFloatStreamInternal
*
inverseMassStream
,
BrookShakeAlgorithm
&
brookShakeAlgorithm
)
const
;
int
numberOfConstraints
)
const
;
/**
* Remove velocity com
*
* @param velocities velocities
* @param inverseMassStream inverse masses
*
* @return DefaultReturnValue
*/
int
removeCom
(
BrookStreamInternal
*
velocities
,
BrookFloatStreamInternal
*
inverseMassStream
)
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
,
...
...
platforms/brook/src/BrookRandomNumberGenerator.cpp
View file @
60dd93a8
...
@@ -426,6 +426,7 @@ state[3] = 27587;
...
@@ -426,6 +426,7 @@ state[3] = 27587;
}
}
if
(
printOn
){
if
(
printOn
){
FILE
*
log
=
getLog
()
?
getLog
()
:
stderr
;
(
void
)
fprintf
(
log
,
"%s: stats
\n
%s
\n
"
,
methodName
.
c_str
(),
getStatisticsString
().
c_str
()
);
(
void
)
fprintf
(
log
,
"%s: stats
\n
%s
\n
"
,
methodName
.
c_str
(),
getStatisticsString
().
c_str
()
);
(
void
)
fflush
(
log
);
(
void
)
fflush
(
log
);
}
}
...
@@ -447,7 +448,6 @@ int BrookRandomNumberGenerator::_loadRandomNumberStreamsMersenne( void ){
...
@@ -447,7 +448,6 @@ int BrookRandomNumberGenerator::_loadRandomNumberStreamsMersenne( void ){
static
const
std
::
string
methodName
=
"
\n
BrookRandomNumberGenerator::_loadRandomNumberStreamsMersenne"
;
static
const
std
::
string
methodName
=
"
\n
BrookRandomNumberGenerator::_loadRandomNumberStreamsMersenne"
;
int
printOn
=
0
;
int
printOn
=
0
;
FILE
*
log
;
// ---------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------
...
@@ -465,6 +465,7 @@ int BrookRandomNumberGenerator::_loadRandomNumberStreamsMersenne( void ){
...
@@ -465,6 +465,7 @@ int BrookRandomNumberGenerator::_loadRandomNumberStreamsMersenne( void ){
}
}
if
(
printOn
){
if
(
printOn
){
FILE
*
log
=
getLog
()
?
getLog
()
:
stderr
;
(
void
)
fprintf
(
log
,
"%s: stats
\n
%s
\n
"
,
methodName
.
c_str
(),
getStatisticsString
().
c_str
()
);
(
void
)
fprintf
(
log
,
"%s: stats
\n
%s
\n
"
,
methodName
.
c_str
(),
getStatisticsString
().
c_str
()
);
(
void
)
fflush
(
log
);
(
void
)
fflush
(
log
);
}
}
...
@@ -689,8 +690,9 @@ int BrookRandomNumberGenerator::advanceGVCursor( int numberOfRandomValuesConsume
...
@@ -689,8 +690,9 @@ int BrookRandomNumberGenerator::advanceGVCursor( int numberOfRandomValuesConsume
// ---------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------
//setLog( stderr );
if
(
printOn
&&
getLog
()
){
if
(
printOn
&&
getLog
()
){
log
=
getLog
();
log
=
getLog
();
}
else
{
}
else
{
printOn
=
0
;
printOn
=
0
;
}
}
...
@@ -703,10 +705,9 @@ int BrookRandomNumberGenerator::advanceGVCursor( int numberOfRandomValuesConsume
...
@@ -703,10 +705,9 @@ int BrookRandomNumberGenerator::advanceGVCursor( int numberOfRandomValuesConsume
//Check if we've used up this texture
//Check if we've used up this texture
char
*
action
=
"none"
;
if
(
_rvStreamOffset
>
rvStreamSize
-
numberOfRandomValuesConsumedPerIteration
){
if
(
_rvStreamOffset
>
rvStreamSize
-
numberOfRandomValuesConsumedPerIteration
){
char
*
action
;
// next one if available
// next one if available
_rvStreamOffset
=
0
;
_rvStreamOffset
=
0
;
...
@@ -742,9 +743,27 @@ int BrookRandomNumberGenerator::advanceGVCursor( int numberOfRandomValuesConsume
...
@@ -742,9 +743,27 @@ int BrookRandomNumberGenerator::advanceGVCursor( int numberOfRandomValuesConsume
}
}
if
(
printOn
){
if
(
printOn
){
(
void
)
fprintf
(
log
,
"%s StrmIdx=%d action=%s
\n
"
,
methodName
,
_rvStreamIndex
,
action
);
(
void
)
fprintf
(
log
,
"%s StrmIdx=%d action=%s
\n
"
,
methodName
.
c_str
()
,
_rvStreamIndex
,
action
);
(
void
)
fflush
(
log
);
(
void
)
fflush
(
log
);
}
}
/*
// check rng distribution
static int count = 0;
if( count++ < 2 ){
// accumulate rng -- stats will be in cumulative fields in stat string
int testIterations = 1000;
for( int ii = 0; ii < testIterations; ii++ ){
//_loadRandomNumberStreamsKiss( );
_loadRandomNumberStreamsMersenne( );
getStatisticsString();
}
(void) fprintf( log, "%s: stats\n%s\n", methodName.c_str(), getStatisticsString().c_str() );
}
*/
}
}
return
DefaultReturnValue
;
return
DefaultReturnValue
;
...
...
platforms/brook/src/BrookShakeAlgorithm.cpp
View file @
60dd93a8
...
@@ -463,6 +463,7 @@ int BrookShakeAlgorithm::_setShakeStreams( const std::vector<double>& masses, co
...
@@ -463,6 +463,7 @@ int BrookShakeAlgorithm::_setShakeStreams( const std::vector<double>& masses, co
particleIterator
=
constraintIndices
.
begin
();
particleIterator
=
constraintIndices
.
begin
();
std
::
vector
<
double
>::
const_iterator
distanceIterator
=
constraintLengths
.
begin
();
std
::
vector
<
double
>::
const_iterator
distanceIterator
=
constraintLengths
.
begin
();
_numberOfConstraints
=
static_cast
<
int
>
(
constraintIndices
.
size
());
while
(
particleIterator
!=
constraintIndices
.
end
()
){
while
(
particleIterator
!=
constraintIndices
.
end
()
){
float
distance
=
static_cast
<
float
>
(
*
distanceIterator
);
float
distance
=
static_cast
<
float
>
(
*
distanceIterator
);
...
@@ -475,7 +476,7 @@ int BrookShakeAlgorithm::_setShakeStreams( const std::vector<double>& masses, co
...
@@ -475,7 +476,7 @@ int BrookShakeAlgorithm::_setShakeStreams( const std::vector<double>& masses, co
bool
firstIsCentral
;
bool
firstIsCentral
;
if
(
constraintCount
[
atomI
]
>
1
){
if
(
constraintCount
[
atomI
]
>
1
){
firstIsCentral
=
true
;
firstIsCentral
=
true
;
}
else
if
(
constraintCount
[
atomJ
]
>
1
){
}
else
if
(
constraintCount
[
atomJ
]
>
1
){
firstIsCentral
=
false
;
firstIsCentral
=
false
;
}
else
if
(
atomI
<
atomJ
){
}
else
if
(
atomI
<
atomJ
){
firstIsCentral
=
true
;
firstIsCentral
=
true
;
...
@@ -531,7 +532,6 @@ int BrookShakeAlgorithm::_setShakeStreams( const std::vector<double>& masses, co
...
@@ -531,7 +532,6 @@ int BrookShakeAlgorithm::_setShakeStreams( const std::vector<double>& masses, co
// load indices & parameters
// load indices & parameters
int
constraintIndex
=
0
;
int
constraintIndex
=
0
;
_numberOfConstraints
=
static_cast
<
int
>
(
_clusters
.
size
());
for
(
map
<
int
,
ShakeCluster
>::
const_iterator
iter
=
_clusters
.
begin
();
iter
!=
_clusters
.
end
();
++
iter
){
for
(
map
<
int
,
ShakeCluster
>::
const_iterator
iter
=
_clusters
.
begin
();
iter
!=
_clusters
.
end
();
++
iter
){
const
ShakeCluster
&
cluster
=
iter
->
second
;
const
ShakeCluster
&
cluster
=
iter
->
second
;
...
...
platforms/brook/src/BrookVelocityCenterOfMassRemoval.cpp
View file @
60dd93a8
...
@@ -134,87 +134,6 @@ BrookFloatStreamInternal* BrookVelocityCenterOfMassRemoval::getLinearMomentumStr
...
@@ -134,87 +134,6 @@ BrookFloatStreamInternal* BrookVelocityCenterOfMassRemoval::getLinearMomentumStr
return
_streams
[
LinearMomentumStream
];
return
_streams
[
LinearMomentumStream
];
}
}
/**
* Remove velocity-COM
*
* @param velocities velocities
*
* @return DefaultReturnValue
*
*/
int
BrookVelocityCenterOfMassRemoval
::
removeVelocityCenterOfMass
(
BrookStreamImpl
&
velocityStream
){
// ---------------------------------------------------------------------------------------
static
const
std
::
string
methodName
=
"BrookVelocityCenterOfMassRemoval::removeVelocityCenterOfMass"
;
static
const
int
debug
=
0
;
// ---------------------------------------------------------------------------------------
if
(
debug
&&
getLog
()
){
BrookOpenMMFloat
com
[
3
];
getVelocityCenterOfMass
(
velocityStream
,
com
);
(
void
)
fprintf
(
getLog
(),
"
\n
%s Pre removal com: [%12.5e %12.5e %12.5e]
\n
"
,
methodName
,
com
[
0
],
com
[
1
],
com
[
2
]
);
BrookStreamInternal
*
outputVelocityStream
=
dynamic_cast
<
BrookStreamInternal
*>
(
velocityStream
.
getBrookStreamImpl
());
void
*
velV
=
outputVelocityStream
->
getData
(
1
);
const
float
*
vArray
=
(
float
*
)
velV
;
int
index
=
0
;
if
(
debug
>
1
){
for
(
int
ii
=
0
;
ii
<
getNumberOfParticles
();
ii
++
,
index
+=
3
){
(
void
)
fprintf
(
getLog
(),
"V %d [%12.5e %12.5e %12.5e]
\n
"
,
ii
,
vArray
[
index
],
vArray
[
index
+
1
],
vArray
[
index
+
2
]
);
}
}
(
void
)
fflush
(
getLog
()
);
}
// calculate linear momentum via reduction
// subtract it (/totalMass) from velocities
kCalculateLinearMomentum
(
getMassStream
()
->
getBrookStream
(),
velocityStream
.
getBrookStream
(),
getWorkStream
()
->
getBrookStream
()
);
kSumLinearMomentum
(
(
float
)
getComParticleStreamWidth
(),
(
float
)
getNumberOfParticles
(),
(
float
)
getTotalInverseMass
(),
getWorkStream
()
->
getBrookStream
(),
getLinearMomentumStream
()
->
getBrookStream
()
);
// kScale( (float) getTotalInverseMass(), getLinearMomentumStream()->getBrookStream(), getLinearMomentumStream()->getBrookStream() );
kRemoveLinearMomentum
(
getLinearMomentumStream
()
->
getBrookStream
(),
velocityStream
.
getBrookStream
(),
velocityStream
.
getBrookStream
()
);
if
(
(
0
||
debug
)
&&
getLog
()
){
BrookOpenMMFloat
com
[
3
];
getVelocityCenterOfMass
(
velocityStream
,
com
);
(
void
)
fprintf
(
getLog
(),
"%s strW=%d iatm=%d invMass=%.4e Post removal com: [%12.5e %12.5e %12.5e]"
,
methodName
,
getComParticleStreamWidth
(),
getNumberOfParticles
(),
getTotalInverseMass
(),
com
[
0
],
com
[
1
],
com
[
2
]
);
void
*
linMoV
=
getLinearMomentumStream
()
->
getData
(
1
);
float
*
linMo
=
(
float
*
)
linMoV
;
(
void
)
fprintf
(
getLog
(),
"LM [%12.5e %12.5e %12.5e]
\n
"
,
linMo
[
0
],
linMo
[
1
],
linMo
[
2
]
);
BrookStreamInternal
*
outputVelocityStream
=
dynamic_cast
<
BrookStreamInternal
*>
(
velocityStream
.
getBrookStreamImpl
());
void
*
velV
=
outputVelocityStream
->
getData
(
1
);
const
float
*
vArray
=
(
float
*
)
velV
;
void
*
w1
=
getWorkStream
()
->
getData
(
1
);
const
float
*
w2
=
(
float
*
)
w1
;
if
(
debug
>
1
){
int
index
=
0
;
for
(
int
ii
=
0
;
ii
<
getNumberOfParticles
();
ii
++
,
index
+=
3
){
(
void
)
fprintf
(
getLog
(),
"V %d [%12.5e %12.5e %12.5e] [%12.5e %12.5e %12.5e]
\n
"
,
ii
,
vArray
[
index
],
vArray
[
index
+
1
],
vArray
[
index
+
2
],
w2
[
index
],
w2
[
index
+
1
],
w2
[
index
+
2
]
);
}
}
(
void
)
fflush
(
getLog
()
);
//exit(0);
}
return
DefaultReturnValue
;
}
/**
/**
* Get velocity-COM
* Get velocity-COM
*
*
...
@@ -255,6 +174,9 @@ int BrookVelocityCenterOfMassRemoval::getVelocityCenterOfMass( BrookStreamImpl&
...
@@ -255,6 +174,9 @@ int BrookVelocityCenterOfMassRemoval::getVelocityCenterOfMass( BrookStreamImpl&
velocityCom
[
0
]
+=
mArray
[
ii
]
*
vArray
[
index
];
velocityCom
[
0
]
+=
mArray
[
ii
]
*
vArray
[
index
];
velocityCom
[
1
]
+=
mArray
[
ii
]
*
vArray
[
index
+
1
];
velocityCom
[
1
]
+=
mArray
[
ii
]
*
vArray
[
index
+
1
];
velocityCom
[
2
]
+=
mArray
[
ii
]
*
vArray
[
index
+
2
];
velocityCom
[
2
]
+=
mArray
[
ii
]
*
vArray
[
index
+
2
];
if
(
ii
<
10
){
fprintf
(
stderr
,
"getVelocityCenterOfMass %d %d m=%15.6e v[%15.6e %15.6e %15.6e ]
\n
"
,
ii
,
index
,
mArray
[
ii
],
vArray
[
index
],
vArray
[
index
+
1
],
vArray
[
index
+
2
]
);
}
}
}
return
DefaultReturnValue
;
return
DefaultReturnValue
;
...
@@ -394,6 +316,7 @@ int BrookVelocityCenterOfMassRemoval::_setMasses( const std::vector<double>& mas
...
@@ -394,6 +316,7 @@ int BrookVelocityCenterOfMassRemoval::_setMasses( const std::vector<double>& mas
BrookOpenMMFloat
value
=
static_cast
<
BrookOpenMMFloat
>
(
*
ii
);
BrookOpenMMFloat
value
=
static_cast
<
BrookOpenMMFloat
>
(
*
ii
);
localMasses
[
index
]
=
value
;
localMasses
[
index
]
=
value
;
_totalInverseMass
+=
value
;
_totalInverseMass
+=
value
;
fprintf
(
stderr
,
"%s %d mass=%.3f
\n
"
,
methodName
.
c_str
(),
index
,
value
);
}
}
}
}
...
@@ -443,10 +366,12 @@ int BrookVelocityCenterOfMassRemoval::setup( const std::vector<double>& masses,
...
@@ -443,10 +366,12 @@ int BrookVelocityCenterOfMassRemoval::setup( const std::vector<double>& masses,
_setMasses
(
masses
);
_setMasses
(
masses
);
if
(
1
&&
getLog
()
){
//if( 1 && getLog() ){
if
(
1
){
FILE
*
log
=
stderr
;
std
::
string
contents
=
getContentsString
(
0
);
std
::
string
contents
=
getContentsString
(
0
);
(
void
)
fprintf
(
getLog
()
,
"%s contents:
\n
%s
\n
"
,
methodName
.
c_str
(),
contents
.
c_str
()
);
(
void
)
fprintf
(
log
,
"%s contents:
\n
%s
\n
"
,
methodName
.
c_str
(),
contents
.
c_str
()
);
(
void
)
fflush
(
getLog
()
);
(
void
)
fflush
(
log
);
}
}
return
DefaultReturnValue
;
return
DefaultReturnValue
;
...
@@ -495,7 +420,7 @@ std::string BrookVelocityCenterOfMassRemoval::getContentsString( int level ) con
...
@@ -495,7 +420,7 @@ std::string BrookVelocityCenterOfMassRemoval::getContentsString( int level ) con
(
void
)
LOCAL_SPRINTF
(
value
,
"%d"
,
getComParticleStreamSize
()
);
(
void
)
LOCAL_SPRINTF
(
value
,
"%d"
,
getComParticleStreamSize
()
);
message
<<
_getLine
(
tab
,
"Particle stream size:"
,
value
);
message
<<
_getLine
(
tab
,
"Particle stream size:"
,
value
);
(
void
)
LOCAL_SPRINTF
(
value
,
"%.5
f
"
,
getTotalInverseMass
()
);
(
void
)
LOCAL_SPRINTF
(
value
,
"%.5
e
"
,
getTotalInverseMass
()
);
message
<<
_getLine
(
tab
,
"TotalInverseMass:"
,
value
);
message
<<
_getLine
(
tab
,
"TotalInverseMass:"
,
value
);
message
<<
_getLine
(
tab
,
"Log:"
,
(
getLog
()
?
Set
:
NotSet
)
);
message
<<
_getLine
(
tab
,
"Log:"
,
(
getLog
()
?
Set
:
NotSet
)
);
...
@@ -515,3 +440,84 @@ std::string BrookVelocityCenterOfMassRemoval::getContentsString( int level ) con
...
@@ -515,3 +440,84 @@ std::string BrookVelocityCenterOfMassRemoval::getContentsString( int level ) con
return
message
.
str
();
return
message
.
str
();
}
}
/**
* Remove velocity-COM
*
* @param velocities velocities
*
* @return DefaultReturnValue
*
*/
int
BrookVelocityCenterOfMassRemoval
::
removeVelocityCenterOfMass
(
BrookStreamImpl
&
velocityStream
){
// ---------------------------------------------------------------------------------------
static
const
std
::
string
methodName
=
"BrookVelocityCenterOfMassRemoval::removeVelocityCenterOfMass"
;
static
const
int
debug
=
1
;
// ---------------------------------------------------------------------------------------
setLog
(
stderr
);
if
(
debug
&&
getLog
()
){
BrookOpenMMFloat
com
[
3
];
getVelocityCenterOfMass
(
velocityStream
,
com
);
(
void
)
fprintf
(
getLog
(),
"%s Pre removal com: [%12.5e %12.5e %12.5e]
\n
"
,
methodName
.
c_str
(),
com
[
0
],
com
[
1
],
com
[
2
]
);
BrookStreamInternal
*
outputVelocityStream
=
dynamic_cast
<
BrookStreamInternal
*>
(
velocityStream
.
getBrookStreamImpl
());
void
*
velV
=
outputVelocityStream
->
getData
(
1
);
const
float
*
vArray
=
(
float
*
)
velV
;
int
index
=
0
;
if
(
debug
>
1
){
for
(
int
ii
=
0
;
ii
<
getNumberOfParticles
();
ii
++
,
index
+=
3
){
(
void
)
fprintf
(
getLog
(),
"V %d [%12.5e %12.5e %12.5e]
\n
"
,
ii
,
vArray
[
index
],
vArray
[
index
+
1
],
vArray
[
index
+
2
]
);
}
}
(
void
)
fflush
(
getLog
()
);
}
// calculate linear momentum via reduction
// subtract it (/totalMass) from velocities
kCalculateLinearMomentum
(
getMassStream
()
->
getBrookStream
(),
velocityStream
.
getBrookStream
(),
getWorkStream
()
->
getBrookStream
()
);
kSumLinearMomentum
(
(
float
)
getComParticleStreamWidth
(),
(
float
)
getNumberOfParticles
(),
(
float
)
getTotalInverseMass
(),
getWorkStream
()
->
getBrookStream
(),
getLinearMomentumStream
()
->
getBrookStream
()
);
// kScale( (float) getTotalInverseMass(), getLinearMomentumStream()->getBrookStream(), getLinearMomentumStream()->getBrookStream() );
kRemoveLinearMomentum
(
getLinearMomentumStream
()
->
getBrookStream
(),
velocityStream
.
getBrookStream
(),
velocityStream
.
getBrookStream
()
);
if
(
(
0
||
debug
)
&&
getLog
()
){
BrookOpenMMFloat
com
[
3
];
getVelocityCenterOfMass
(
velocityStream
,
com
);
(
void
)
fprintf
(
getLog
(),
"%s strW=%d iatm=%d invMass=%.4e Post removal com: [%12.5e %12.5e %12.5e]"
,
methodName
.
c_str
(),
getComParticleStreamWidth
(),
getNumberOfParticles
(),
getTotalInverseMass
(),
com
[
0
],
com
[
1
],
com
[
2
]
);
void
*
linMoV
=
getLinearMomentumStream
()
->
getData
(
1
);
float
*
linMo
=
(
float
*
)
linMoV
;
(
void
)
fprintf
(
getLog
(),
"LM [%12.5e %12.5e %12.5e]
\n
"
,
linMo
[
0
],
linMo
[
1
],
linMo
[
2
]
);
BrookStreamInternal
*
outputVelocityStream
=
dynamic_cast
<
BrookStreamInternal
*>
(
velocityStream
.
getBrookStreamImpl
());
void
*
velV
=
outputVelocityStream
->
getData
(
1
);
const
float
*
vArray
=
(
float
*
)
velV
;
void
*
w1
=
getWorkStream
()
->
getData
(
1
);
const
float
*
w2
=
(
float
*
)
w1
;
if
(
debug
>
1
){
int
index
=
0
;
for
(
int
ii
=
0
;
ii
<
getNumberOfParticles
();
ii
++
,
index
+=
3
){
(
void
)
fprintf
(
getLog
(),
"V %d [%12.5e %12.5e %12.5e] [%12.5e %12.5e %12.5e]
\n
"
,
ii
,
vArray
[
index
],
vArray
[
index
+
1
],
vArray
[
index
+
2
],
w2
[
index
],
w2
[
index
+
1
],
w2
[
index
+
2
]
);
}
}
(
void
)
fflush
(
getLog
()
);
//exit(0);
}
return
DefaultReturnValue
;
}
platforms/brook/src/OpenMMBrookInterface.cpp
View file @
60dd93a8
...
@@ -546,7 +546,8 @@ void OpenMMBrookInterface::computeForces( OpenMMContextImpl& context ){
...
@@ -546,7 +546,8 @@ void OpenMMBrookInterface::computeForces( OpenMMContextImpl& context ){
// info
// info
if
(
printOn
>
1
){
//if( printOn > 1 ){
if
(
1
){
printForcesToFile
(
context
);
printForcesToFile
(
context
);
}
}
...
...
platforms/brook/src/gpu/kshakeh.h
View file @
60dd93a8
...
@@ -52,8 +52,8 @@ void kshakeh_update1_fix1 (
...
@@ -52,8 +52,8 @@ void kshakeh_update1_fix1 (
::
brook
::
stream
cposq3
,
::
brook
::
stream
cposq3
,
::
brook
::
stream
oposq
);
::
brook
::
stream
oposq
);
void
kshakeh_update2_fix1
(
void
kshakeh_update2_fix1
(
const
float
strwidth
,
const
float
strwidth
,
::
brook
::
stream
invmap
,
::
brook
::
stream
invmap
,
::
brook
::
stream
posq
,
::
brook
::
stream
posq
,
::
brook
::
stream
posqp
,
::
brook
::
stream
posqp
,
...
...
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