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
8be6e843
Commit
8be6e843
authored
Jun 10, 2015
by
Kyle Beauchamp
Browse files
Fix more integrators
parent
a2438509
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
18 additions
and
10 deletions
+18
-10
openmmapi/src/BrownianIntegrator.cpp
openmmapi/src/BrownianIntegrator.cpp
+2
-0
plugins/drude/openmmapi/src/DrudeLangevinIntegrator.cpp
plugins/drude/openmmapi/src/DrudeLangevinIntegrator.cpp
+2
-0
plugins/drude/openmmapi/src/DrudeSCFIntegrator.cpp
plugins/drude/openmmapi/src/DrudeSCFIntegrator.cpp
+2
-0
plugins/rpmd/openmmapi/src/RPMDIntegrator.cpp
plugins/rpmd/openmmapi/src/RPMDIntegrator.cpp
+12
-10
No files found.
openmmapi/src/BrownianIntegrator.cpp
View file @
8be6e843
...
...
@@ -72,6 +72,8 @@ double BrownianIntegrator::computeKineticEnergy() {
}
void
BrownianIntegrator
::
step
(
int
steps
)
{
if
(
context
==
NULL
)
throw
OpenMMException
(
"This Integrator is not bound to a context!"
);
for
(
int
i
=
0
;
i
<
steps
;
++
i
)
{
context
->
updateContextState
();
context
->
calcForcesAndEnergy
(
true
,
false
);
...
...
plugins/drude/openmmapi/src/DrudeLangevinIntegrator.cpp
View file @
8be6e843
...
...
@@ -89,6 +89,8 @@ double DrudeLangevinIntegrator::computeKineticEnergy() {
}
void
DrudeLangevinIntegrator
::
step
(
int
steps
)
{
if
(
context
==
NULL
)
throw
OpenMMException
(
"This Integrator is not bound to a context!"
);
for
(
int
i
=
0
;
i
<
steps
;
++
i
)
{
context
->
updateContextState
();
context
->
calcForcesAndEnergy
(
true
,
false
);
...
...
plugins/drude/openmmapi/src/DrudeSCFIntegrator.cpp
View file @
8be6e843
...
...
@@ -86,6 +86,8 @@ double DrudeSCFIntegrator::computeKineticEnergy() {
}
void
DrudeSCFIntegrator
::
step
(
int
steps
)
{
if
(
context
==
NULL
)
throw
OpenMMException
(
"This Integrator is not bound to a context!"
);
for
(
int
i
=
0
;
i
<
steps
;
++
i
)
{
context
->
updateContextState
();
context
->
calcForcesAndEnergy
(
true
,
false
);
...
...
plugins/rpmd/openmmapi/src/RPMDIntegrator.cpp
View file @
8be6e843
...
...
@@ -100,7 +100,7 @@ State RPMDIntegrator::getState(int copy, int types, bool enforcePeriodicBox, int
// Call setPositions() on the Context so it doesn't think the user is trying to
// run a simulation without setting positions first. These positions will
// immediately get overwritten by the ones stored in this integrator.
vector
<
Vec3
>
p
(
context
->
getSystem
().
getNumParticles
(),
Vec3
());
context
->
getOwner
().
setPositions
(
p
);
isFirstStep
=
false
;
...
...
@@ -110,7 +110,7 @@ State RPMDIntegrator::getState(int copy, int types, bool enforcePeriodicBox, int
if
(
enforcePeriodicBox
&&
copy
>
0
&&
(
types
&
State
::
Positions
)
!=
0
)
{
// Apply periodic boundary conditions based on copy 0. Otherwise, molecules might end
// up in different places for different copies.
kernel
.
getAs
<
IntegrateRPMDStepKernel
>
().
copyToContext
(
0
,
*
context
);
State
state2
=
context
->
getOwner
().
getState
(
State
::
Positions
,
false
,
groups
);
vector
<
Vec3
>
positions
=
state
.
getPositions
();
...
...
@@ -144,9 +144,9 @@ State RPMDIntegrator::getState(int copy, int types, bool enforcePeriodicBox, int
pos
[
2
]
-=
dz
;
}
}
// Construct the new State.
State
::
StateBuilder
builder
(
state
.
getTime
());
builder
.
setPositions
(
positions
);
builder
.
setPeriodicBoxVectors
(
periodicBoxSize
[
0
],
periodicBoxSize
[
1
],
periodicBoxSize
[
2
]);
...
...
@@ -168,16 +168,18 @@ double RPMDIntegrator::computeKineticEnergy() {
}
void
RPMDIntegrator
::
step
(
int
steps
)
{
if
(
context
==
NULL
)
throw
OpenMMException
(
"This Integrator is not bound to a context!"
);
if
(
!
hasSetPosition
)
{
// Initialize the positions from the context.
State
s
=
context
->
getOwner
().
getState
(
State
::
Positions
);
for
(
int
i
=
0
;
i
<
numCopies
;
i
++
)
setPositions
(
i
,
s
.
getPositions
());
}
if
(
!
hasSetVelocity
)
{
// Initialize the velocities from the context.
State
s
=
context
->
getOwner
().
getState
(
State
::
Velocities
);
for
(
int
i
=
0
;
i
<
numCopies
;
i
++
)
setVelocities
(
i
,
s
.
getVelocities
());
...
...
@@ -186,7 +188,7 @@ void RPMDIntegrator::step(int steps) {
// Call setPositions() on the Context so it doesn't think the user is trying to
// run a simulation without setting positions first. These positions will
// immediately get overwritten by the ones stored in this integrator.
vector
<
Vec3
>
p
(
context
->
getSystem
().
getNumParticles
(),
Vec3
());
context
->
getOwner
().
setPositions
(
p
);
isFirstStep
=
false
;
...
...
@@ -212,12 +214,12 @@ double RPMDIntegrator::getTotalEnergy() {
State
prevState
=
getState
(
numCopies
-
1
,
State
::
Positions
);
for
(
int
i
=
0
;
i
<
numCopies
;
i
++
)
{
// Add the energy of this copy.
State
state
=
getState
(
i
,
State
::
Positions
|
State
::
Energy
);
energy
+=
state
.
getKineticEnergy
()
+
state
.
getPotentialEnergy
();
// Add the energy from the springs connecting it to the previous copy.
for
(
int
j
=
0
;
j
<
numParticles
;
j
++
)
{
Vec3
delta
=
state
.
getPositions
()[
j
]
-
prevState
.
getPositions
()[
j
];
energy
+=
0.5
*
wn
*
wn
*
system
.
getParticleMass
(
j
)
*
delta
.
dot
(
delta
);
...
...
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