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
388704e7
"tests/TestCustomIntegrator.h" did not exist on "c21572bb24dc8b492dd1a04f6a1ebdc0af1fe30c"
Unverified
Commit
388704e7
authored
May 17, 2019
by
Andy Simmonett
Browse files
Fix mixed precision bead propagation
parent
6307eb0d
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
6 additions
and
3 deletions
+6
-3
platforms/cuda/src/CudaKernels.cpp
platforms/cuda/src/CudaKernels.cpp
+3
-0
platforms/cuda/src/kernels/noseHooverChain.cu
platforms/cuda/src/kernels/noseHooverChain.cu
+3
-3
No files found.
platforms/cuda/src/CudaKernels.cpp
View file @
388704e7
...
...
@@ -8353,7 +8353,10 @@ void CudaApplyAndersenThermostatKernel::execute(ContextImpl& context) {
void
CudaNoseHooverChainKernel
::
initialize
()
{
cu
.
setAsCurrent
();
bool
useDouble
=
cu
.
getUseDoublePrecision
()
||
cu
.
getUseMixedPrecision
();
map
<
string
,
string
>
defines
;
defines
[
"MIXEDEXP"
]
=
useDouble
?
"exp"
:
"expf"
;
defines
[
"BEGIN_YS_LOOP"
]
=
"for(const real & ys : {1}) {"
;
defines
[
"END_YS_LOOP"
]
=
"}"
;
CUmodule
module
=
cu
.
createModule
(
CudaKernelSources
::
noseHooverChain
,
defines
,
"-std=c++11"
);
...
...
platforms/cuda/src/kernels/noseHooverChain.cu
View file @
388704e7
...
...
@@ -25,11 +25,11 @@ extern "C" __global__ void propagateNoseHooverChain(mixed2* __restrict__ chainDa
mixed
wdt
=
ys
*
timeOverMTS
;
chainData
[
chainLength
-
1
].
y
+=
0.25
f
*
wdt
*
chainForces
[
chainLength
-
1
];
for
(
int
bead
=
chainLength
-
2
;
bead
>=
0
;
--
bead
)
{
mixed
aa
=
EXP
(
-
0.125
f
*
wdt
*
chainData
[
bead
+
1
].
y
);
mixed
aa
=
MIXED
EXP
(
-
0.125
f
*
wdt
*
chainData
[
bead
+
1
].
y
);
chainData
[
bead
].
y
=
aa
*
(
chainData
[
bead
].
y
*
aa
+
0.25
f
*
wdt
*
chainForces
[
bead
]);
}
// update particle velocities
mixed
aa
=
EXP
(
-
0.5
f
*
wdt
*
chainData
[
0
].
y
);
mixed
aa
=
MIXED
EXP
(
-
0.5
f
*
wdt
*
chainData
[
0
].
y
);
scale
*=
aa
;
// update the thermostat positions
for
(
int
bead
=
0
;
bead
<
chainLength
;
++
bead
)
{
...
...
@@ -39,7 +39,7 @@ extern "C" __global__ void propagateNoseHooverChain(mixed2* __restrict__ chainDa
chainForces
[
0
]
=
(
scale
*
scale
*
KE2
-
numDOFs
*
kT
)
/
chainMasses
[
0
];
// update thermostat velocities
for
(
int
bead
=
0
;
bead
<
chainLength
-
1
;
++
bead
)
{
mixed
aa
=
EXP
(
-
0.125
f
*
wdt
*
chainData
[
bead
+
1
].
y
);
mixed
aa
=
MIXED
EXP
(
-
0.125
f
*
wdt
*
chainData
[
bead
+
1
].
y
);
chainData
[
bead
].
y
=
aa
*
(
aa
*
chainData
[
bead
].
y
+
0.25
f
*
wdt
*
chainForces
[
bead
]);
chainForces
[
bead
+
1
]
=
(
chainMasses
[
bead
]
*
chainData
[
bead
].
y
*
chainData
[
bead
].
y
-
kT
)
/
chainMasses
[
bead
+
1
];
}
...
...
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