1 |
\documentclass[11pt]{article} |
2 |
\usepackage{amsmath} |
3 |
\usepackage{amssymb} |
4 |
\usepackage{endfloat} |
5 |
\usepackage{listings} |
6 |
\usepackage{palatino} |
7 |
\usepackage{graphicx} |
8 |
\usepackage[ref]{overcite} |
9 |
\usepackage{setspace} |
10 |
\usepackage{tabularx} |
11 |
\pagestyle{plain} |
12 |
\pagenumbering{arabic} |
13 |
\oddsidemargin 0.0cm \evensidemargin 0.0cm |
14 |
\topmargin -21pt \headsep 10pt |
15 |
\textheight 9.0in \textwidth 6.5in |
16 |
\brokenpenalty=10000 |
17 |
\renewcommand{\baselinestretch}{1.2} |
18 |
\renewcommand\citemid{\ } % no comma in optional reference note |
19 |
|
20 |
\begin{document} |
21 |
\lstset{language=C,frame=TB,basicstyle=\small,basicstyle=\ttfamily, % |
22 |
xleftmargin=0.5in, xrightmargin=0.5in,captionpos=b, % |
23 |
abovecaptionskip=0.5cm, belowcaptionskip=0.5cm} |
24 |
\renewcommand{\lstlistingname}{Scheme} |
25 |
\title{{\sc oopse}: An Open Source Object-Oriented Parallel Simulation |
26 |
Engine for Molecular Dynamics} |
27 |
|
28 |
\author{Matthew A. Meineke, Charles F. Vardeman II, Teng Lin,\\ |
29 |
Christopher J. Fennell and J. Daniel Gezelter\\ |
30 |
Department of Chemistry and Biochemistry\\ |
31 |
University of Notre Dame\\ |
32 |
Notre Dame, Indiana 46556} |
33 |
|
34 |
\date{\today} |
35 |
\maketitle |
36 |
|
37 |
\begin{abstract} |
38 |
Need an abstract. |
39 |
\end{abstract} |
40 |
|
41 |
\section{\label{sec:intro}Introduction} |
42 |
|
43 |
UNDERWAY |
44 |
|
45 |
|
46 |
We have structured this paper to first discuss the underlying concepts |
47 |
in this simulation package (Sec. \ref{oopseSec:IOfiles}). The |
48 |
empirical energy functions implemented are discussed in |
49 |
Sec.~\ref{oopseSec:empiricalEnergy}. Sec.~\ref{oopseSec:mechanics} |
50 |
describes the various Molecular Dynamics algorithms {\sc oopse} |
51 |
implements in the integration of the Newtonian equations of motion. |
52 |
Program design considerations for parallel computing are presented in |
53 |
Sec.~\ref{oopseSec:parallelization}. Concluding remarks are presented |
54 |
in Sec.~\ref{oopseSec:conclusion}. |
55 |
|
56 |
\section{\label{oopseSec:IOfiles}Concepts \& Files} |
57 |
|
58 |
A simulation in {\sc oopse} is built using a few fundamental |
59 |
conceptual building blocks most of which are chemically intuitive. |
60 |
The basic unit of a simulation is an {\tt atom}. The parameters |
61 |
describing an {\tt atom} have been generalized to make it as flexible |
62 |
as possible; this means that in addition to translational degrees of |
63 |
freedom, {\tt Atoms} may also have {\it orientational} degrees of freedom. |
64 |
|
65 |
The fundamental (static) properties of {\tt atoms} are defined by the |
66 |
{\tt forceField} chosen for the simulation. The atomic properties |
67 |
specified by a {\tt forceField} might include (but are not limited to) |
68 |
charge, $\sigma$ and $\epsilon$ values for Lennard-Jones interactions, |
69 |
the strength of the dipole moment ($\mu$), the mass, and the moments |
70 |
of inertia. Other more complicated properties of atoms might also be |
71 |
specified by the {\tt forceField}. |
72 |
|
73 |
{\tt Atoms} can be grouped together in many ways. A {\tt rigidBody} |
74 |
contains atoms that exert no forces on one another and which move as a |
75 |
single rigid unit. A {\tt cutoffGroup} may contain atoms which |
76 |
function together as a (rigid {\it or} non-rigid) unit for potential |
77 |
energy calculations, |
78 |
\begin{equation} |
79 |
V_{ab} = s(r_{ab}) \sum_{i \in a} \sum_{j \in b} V_{ij}(r_{ij}) |
80 |
\end{equation} |
81 |
Here, $a$ and $b$ are two {\tt cutoffGroups} containing multiple atoms |
82 |
($a = \left\{i\right\}$ and $b = \left\{j\right\}$). $s(r_{ab})$ is a |
83 |
generalized switching function which insures that the atoms in the two |
84 |
{\tt cutoffGroups} are treated identically as the two groups enter or |
85 |
leave an interaction region. |
86 |
|
87 |
{\tt Atoms} may also be grouped in more traditional ways into {\tt |
88 |
bonds}, {\tt bends}, and {\tt torsions}. These groupings allow the |
89 |
correct choice of interaction parameters for short-range interactions |
90 |
to be chosen from the definitions in the {\tt forceField}. |
91 |
|
92 |
All of these groups of {\tt atoms} are brought together in the {\tt |
93 |
molecule}, which is the fundamental structure for setting up and {\sc |
94 |
oopse} simulation. {\tt Molecules} contain lists of {\tt atoms} |
95 |
followed by listings of the other atomic groupings ({\tt bonds}, {\tt |
96 |
bends}, {\tt torsions}, {\tt rigidBodies}, and {\tt cutoffGroups}) |
97 |
which relate the atoms to one another. |
98 |
|
99 |
Simulations often involve heterogeneous collections of molecules. To |
100 |
specify a mixture of {\tt molecule} types, {\sc oopse} uses {\tt |
101 |
components}. Even simulations containing only one type of molecule |
102 |
must specify a single {\tt component}. |
103 |
|
104 |
Starting a simulation requires two types of information: {\it |
105 |
meta-data}, which describes the types of objects present in the |
106 |
simulation, and {\it configuration} information, which describes the |
107 |
initial state of these objects. The meta-data is given to {\sc oopse} |
108 |
using a C-based syntax that is parsed at the beginning of the |
109 |
simulation. Configuration information is specified using an extended |
110 |
XYZ file format. Both the meta-data and configuration file formats |
111 |
are described in the following sections. |
112 |
|
113 |
\subsection{Meta-data Files} |
114 |
|
115 |
{\sc oopse} uses a C-based script syntax to parse the meta-data files |
116 |
at run time. These files allow the user to completely describe the |
117 |
system they wish to simulate, as well as tailor {\sc oopse}'s behavior |
118 |
during the simulation. Meta-data files are typically denoted with the |
119 |
extension {\tt .md} (which can stand for Meta-Data or Molecular |
120 |
Dynamics or Molecule Definition depending on the user's mood). An |
121 |
example meta-data file is shown in Scheme~\ref{sch:mdExample}. |
122 |
|
123 |
\begin{lstlisting}[float,caption={[An example of a complete meta-data |
124 |
file] An example showing a complete meta-data |
125 |
file.},label={sch:mdExample}] |
126 |
|
127 |
molecule{ |
128 |
name = "Ar"; |
129 |
nAtoms = 1; |
130 |
atom[0]{ |
131 |
type="Ar"; |
132 |
position( 0.0, 0.0, 0.0 ); |
133 |
} |
134 |
} |
135 |
|
136 |
nComponents = 1; |
137 |
component{ |
138 |
type = "Ar"; |
139 |
nMol = 108; |
140 |
} |
141 |
|
142 |
initialConfig = "./argon.in"; |
143 |
|
144 |
forceField = "LJ"; |
145 |
ensemble = "NVE"; // specify the simulation ensemble |
146 |
dt = 1.0; // the time step for integration |
147 |
runTime = 1e3; // the total simulation run time |
148 |
sampleTime = 100; // trajectory file frequency |
149 |
statusTime = 50; // statistics file frequency |
150 |
|
151 |
\end{lstlisting} |
152 |
|
153 |
Within the meta-data file it is necessary to provide a complete |
154 |
description of the molecule before it is actually placed in the |
155 |
simulation. {\sc oopse}'s meta-data syntax was originally developed |
156 |
with this goal in mind, and allows for the use of {\it include files} |
157 |
to specify all atoms in a molecular prototype, as well as any bonds, |
158 |
bends, or torsions. Include files allow the user to describe a |
159 |
molecular prototype once, then simply include it into each simulation |
160 |
containing that molecule. Returning to the example in |
161 |
Scheme~\ref{sch:mdExample}, the include file's contents would be |
162 |
Scheme~\ref{sch:mdIncludeExample}, and the new meta-data file would |
163 |
become Scheme~\ref{sch:mdExPrime}. |
164 |
|
165 |
\begin{lstlisting}[float,caption={An example molecule definition in an |
166 |
include file.},label={sch:mdIncludeExample}] |
167 |
|
168 |
molecule{ |
169 |
name = "Ar"; |
170 |
nAtoms = 1; |
171 |
atom[0]{ |
172 |
type="Ar"; |
173 |
position( 0.0, 0.0, 0.0 ); |
174 |
} |
175 |
} |
176 |
|
177 |
\end{lstlisting} |
178 |
|
179 |
\begin{lstlisting}[float,caption={Revised meta-data example.},label={sch:mdExPrime}] |
180 |
|
181 |
#include "argon.md" |
182 |
|
183 |
nComponents = 1; |
184 |
component{ |
185 |
type = "Ar"; |
186 |
nMol = 108; |
187 |
} |
188 |
|
189 |
initialConfig = "./argon.in"; |
190 |
|
191 |
forceField = "LJ"; |
192 |
ensemble = "NVE"; |
193 |
dt = 1.0; |
194 |
runTime = 1e3; |
195 |
sampleTime = 100; |
196 |
statusTime = 50; |
197 |
|
198 |
\end{lstlisting} |
199 |
|
200 |
\subsection{\label{oopseSec:atomsMolecules}Atoms, Molecules, and other |
201 |
ways of grouping atoms} |
202 |
|
203 |
As mentioned above, the fundamental unit for an {\sc oopse} simulation |
204 |
is the {\tt atom}. Atoms can be collected into secondary structures |
205 |
such as {\tt rigidBodies}, {\tt cutoffGroups}, or {\tt molecules}. The |
206 |
{\tt molecule} is a way for {\sc oopse} to keep track of the atoms in |
207 |
a simulation in logical manner. Molecular units store the identities |
208 |
of all the atoms and rigid bodies associated with themselves, and they |
209 |
are responsible for the evaluation of their own internal interactions |
210 |
(\emph{i.e.}~bonds, bends, and torsions). Scheme |
211 |
\ref{sch:mdIncludeExample} shows how one creates a molecule in an |
212 |
included meta-data file. The positions of the atoms given in the |
213 |
declaration are relative to the origin of the molecule, and the origin |
214 |
is used when creating a system containing the molecule. |
215 |
|
216 |
One of the features that sets {\sc oopse} apart from most of the |
217 |
current molecular simulation packages is the ability to handle rigid |
218 |
body dynamics. Rigid bodies are non-spherical particles or collections |
219 |
of particles (e.g. $\mbox{C}_{60}$) that have a constant internal |
220 |
potential and move collectively.\cite{Goldstein01} They are not |
221 |
included in most simulation packages because of the algorithmic |
222 |
complexity involved in propagating orientational degrees of freedom. |
223 |
Integrators which propagate orientational motion with an acceptable |
224 |
level of energy conservation for molecular dynamics are relatively |
225 |
new inventions. |
226 |
|
227 |
Moving a rigid body involves determination of both the force and |
228 |
torque applied by the surroundings, which directly affect the |
229 |
translational and rotational motion in turn. In order to accumulate |
230 |
the total force on a rigid body, the external forces and torques must |
231 |
first be calculated for all the internal particles. The total force on |
232 |
the rigid body is simply the sum of these external forces. |
233 |
Accumulation of the total torque on the rigid body is more complex |
234 |
than the force because the torque is applied to the center of mass of |
235 |
the rigid body. The space-fixed torque on rigid body $i$ is |
236 |
\begin{equation} |
237 |
\boldsymbol{\tau}_i= |
238 |
\sum_{a}\biggl[(\mathbf{r}_{ia}-\mathbf{r}_i)\times \mathbf{f}_{ia} |
239 |
+ \boldsymbol{\tau}_{ia}\biggr], |
240 |
\label{eq:torqueAccumulate} |
241 |
\end{equation} |
242 |
where $\boldsymbol{\tau}_i$ and $\mathbf{r}_i$ are the torque on and |
243 |
position of the center of mass respectively, while $\mathbf{f}_{ia}$, |
244 |
$\mathbf{r}_{ia}$, and $\boldsymbol{\tau}_{ia}$ are the force on, |
245 |
position of, and torque on the component particles of the rigid body. |
246 |
|
247 |
The summation of the total torque is done in the body fixed axis of |
248 |
each rigid body. In order to move between the space fixed and body |
249 |
fixed coordinate axes, parameters describing the orientation must be |
250 |
maintained for each rigid body. At a minimum, the rotation matrix |
251 |
($\mathsf{A}$) can be described by the three Euler angles ($\phi, |
252 |
\theta,$ and $\psi$), where the elements of $\mathsf{A}$ are composed of |
253 |
trigonometric operations involving $\phi, \theta,$ and |
254 |
$\psi$.\cite{Goldstein01} In order to avoid numerical instabilities |
255 |
inherent in using the Euler angles, the four parameter ``quaternion'' |
256 |
scheme is often used. The elements of $\mathsf{A}$ can be expressed as |
257 |
arithmetic operations involving the four quaternions ($q_0, q_1, q_2,$ |
258 |
and $q_3$).\cite{allen87:csl} Use of quaternions also leads to |
259 |
performance enhancements, particularly for very small |
260 |
systems.\cite{Evans77} |
261 |
|
262 |
Rather than use one of the previously stated methods, {\sc oopse} |
263 |
utilizes a relatively new scheme that propagates the entire nine |
264 |
parameter rotation matrix. Further discussion on this choice can be |
265 |
found in Sec.~\ref{oopseSec:integrate}. An example definition of a |
266 |
rigid body can be seen in Scheme |
267 |
\ref{sch:rigidBody}. |
268 |
|
269 |
\begin{lstlisting}[float,caption={[Defining rigid bodies]A sample |
270 |
definition of a molecule containing a rigid body and a cutoff |
271 |
group},label={sch:rigidBody}] |
272 |
molecule{ |
273 |
name = "TIP3P"; |
274 |
nAtoms = 3; |
275 |
atom[0]{ |
276 |
type = "O_TIP3P"; |
277 |
position( 0.0, 0.0, -0.06556 ); |
278 |
} |
279 |
atom[1]{ |
280 |
type = "H_TIP3P"; |
281 |
position( 0.0, 0.75695, 0.52032 ); |
282 |
} |
283 |
atom[2]{ |
284 |
type = "H_TIP3P"; |
285 |
position( 0.0, -0.75695, 0.52032 ); |
286 |
} |
287 |
|
288 |
nRigidBodies = 1; |
289 |
rigidBody[0]{ |
290 |
nMembers = 3; |
291 |
members(0, 1, 2); |
292 |
} |
293 |
|
294 |
nCutoffGroups = 1; |
295 |
cutoffGroup[0]{ |
296 |
nMembers = 3; |
297 |
members(0, 1, 2); |
298 |
} |
299 |
} |
300 |
\end{lstlisting} |
301 |
|
302 |
\subsection{\label{sec:miscConcepts}Creating a Metadata File} |
303 |
|
304 |
The actual creation of a metadata file requires several key |
305 |
components. The first part of the file needs to be the declaration of |
306 |
all of the molecule prototypes used in the simulation. This is |
307 |
typically done through included meta-data files. Only the molecules |
308 |
actually present in the simulation need to be declared; however, {\sc |
309 |
oopse} allows for the declaration of more molecules than are |
310 |
needed. This gives the user the ability to build up a library of |
311 |
commonly used molecules into a single include file. |
312 |
|
313 |
Once all prototypes are declared, the ordering of the rest of the |
314 |
script is less stringent. The molecular composition of the simulation |
315 |
is specified with {\tt component} statements. Each different type of |
316 |
molecule present in the simulation is considered a separate |
317 |
component. The number of components must be declared before the first |
318 |
component block statement (an example is shown in |
319 |
Sch.~\ref{sch:mdExPrime}). The component blocks tell {\sc oopse} the |
320 |
number of molecules that will be in the simulation, and the order in |
321 |
which the components blocks are declared sets the ordering of the real |
322 |
atoms in the configuration file as well as in the output files. The |
323 |
remainder of the script then sets the various simulation parameters |
324 |
for the system of interest. |
325 |
|
326 |
The required set of parameters that must be present in all simulations |
327 |
is given in Table~\ref{table:reqParams}. Since the user can use {\sc |
328 |
oopse} to perform energy minimizations as well as molecular dynamics |
329 |
simulations, one of the {\tt minimizer} or {\tt ensemble} keywords |
330 |
must be present. The {\tt ensemble} keyword is responsible for |
331 |
selecting the integration method used for the calculation of the |
332 |
equations of motion. An in depth discussion of the various methods |
333 |
available in {\sc oopse} can be found in |
334 |
Sec.~\ref{oopseSec:mechanics}. The {\tt minimizer} keyword selects |
335 |
which minimization method to use, and more details on the choices of |
336 |
minimizer parameters can be found in |
337 |
Sec.~\ref{oopseSec:minimizer}. The {\tt forceField} statement is |
338 |
important for the selection of which forces will be used in the course |
339 |
of the simulation. {\sc oopse} supports several force fields, as |
340 |
outlined in Sec.~\ref{oopseSec:empericalEnergy}. The force fields are |
341 |
interchangeable between simulations, with the only requirement being |
342 |
that all atoms needed by the simulation are defined within the |
343 |
selected force field. |
344 |
|
345 |
For molecular dynamics simulations, the time step between force |
346 |
evaluations is set with the {\tt dt} parameter, and {\tt runTime} will |
347 |
set the time length of the simulation. Note, that {\tt runTime} is an |
348 |
absolute time, meaning if the simulation is started at t = 10.0~ns |
349 |
with a {\tt runTime} of 25.0~ns, the simulation will only run for an |
350 |
additional 15.0~ns. |
351 |
|
352 |
For energy minimizations, it is not necessary to specify {\tt dt} or |
353 |
{\tt runTime}. |
354 |
|
355 |
The final required parameter is the {\tt initialConfig} |
356 |
statement. This will set the initial coordinates for the system, as |
357 |
well as the initial time if the {\tt useInitalTime} flag is set to |
358 |
{\tt true}. The format of the file specified in {\tt initialConfig}, |
359 |
is given in Sec.~\ref{oopseSec:coordFiles}. Additional parameters are |
360 |
summarized in Table~\ref{table:genParams}. |
361 |
|
362 |
It is important to note the fundamental units in all files which are |
363 |
read and written by {\sc oopse}. Energies are in $\mbox{kcal |
364 |
mol}^{-1}$, distances are in $\mbox{\AA}$, times are in $\mbox{fs}$, |
365 |
translational velocities are in $\mbox{\AA fs}^{-1}$, and masses are |
366 |
in $\mbox{amu}$. Orientational degrees of freedom are described using |
367 |
quaternions (unitless, but $q_w^2 + q_x^2 + q_y^2 + q_z^2 = 1$), |
368 |
body-fixed angular momenta ($\mbox{amu \AA}^{2} \mbox{radians |
369 |
fs}^{-1}$), and body-fixed moments of inertia ($\mbox{amu \AA}^{2}$). |
370 |
|
371 |
\begin{table} |
372 |
\caption{Meta-data Keywords: Required Parameters} |
373 |
\label{table:reqParams} |
374 |
\begin{center} |
375 |
% Note when adding or removing columns, the \hsize numbers must add up to the total number |
376 |
% of columns. |
377 |
\begin{tabularx}{\linewidth}% |
378 |
{>{\setlength{\hsize}{1.00\hsize}}X% |
379 |
>{\setlength{\hsize}{0.4\hsize}}X% |
380 |
>{\setlength{\hsize}{1.2\hsize}}X% |
381 |
>{\setlength{\hsize}{1.4\hsize}}X} |
382 |
|
383 |
{\bf keyword} & {\bf units} & {\bf use} & {\bf remarks} \\ \hline |
384 |
|
385 |
{\tt forceField} & string & Sets the force field. & Possible force fields are "DUFF", "LJ", and "EAM". \\ |
386 |
{\tt nComponents} & integer & Sets the number of components. & Needs to appear before the first {\tt Component} block. \\ |
387 |
{\tt initialConfig} & string & Sets the file containing the initial configuration. & Can point to any file containing the configuration in the correct order. \\ |
388 |
{\tt minimizer}& string & Chooses a minimizer & Possible minimizers |
389 |
are "SD" and "CG". Either {\tt ensemble} or {\tt minimizer} must be specified. \\ |
390 |
{\tt ensemble} & string & Sets the ensemble. & Possible ensembles are |
391 |
"NVE", "NVT", "NPTi", "NPTf", and "NPTxyz". Either {\tt ensemble} |
392 |
or {\tt minimizer} must be specified. \\ |
393 |
{\tt dt} & fs & Sets the time step. & Selection of {\tt dt} should be |
394 |
small enough to sample the fastest motion of the simulation. (required |
395 |
for molecular dynamics simulations)\\ |
396 |
{\tt runTime} & fs & Sets the time at which the simulation should |
397 |
end. & This is an absolute time, and will end the simulation when the |
398 |
current time meets or exceeds the {\tt runTime}. (required for |
399 |
molecular dynamics simulations)\\ |
400 |
|
401 |
\end{tabularx} |
402 |
\end{center} |
403 |
\end{table} |
404 |
|
405 |
\begin{table} |
406 |
\caption{Meta-data Keywords: General Parameters} |
407 |
\label{table:genParams} |
408 |
\begin{center} |
409 |
% Note when adding or removing columns, the \hsize numbers must add up to the total number |
410 |
% of columns. |
411 |
\begin{tabularx}{\linewidth}% |
412 |
{>{\setlength{\hsize}{1.00\hsize}}X% |
413 |
>{\setlength{\hsize}{0.4\hsize}}X% |
414 |
>{\setlength{\hsize}{1.2\hsize}}X% |
415 |
>{\setlength{\hsize}{1.4\hsize}}X} |
416 |
|
417 |
{\bf keyword} & {\bf units} & {\bf use} & {\bf remarks} \\ \hline |
418 |
|
419 |
{\tt finalConfig} & string & Sets the name of the final |
420 |
output file. & Useful when stringing simulations together. Defaults to |
421 |
the root name of the initial meta-data file but with an {\tt .eor} |
422 |
extension. \\ |
423 |
{\tt useInitialTime} & logical & Sets whether the initial time is taken from the {\tt .in} file. & Useful when recovering a simulation from a crashed processor. Default is false. \\ |
424 |
{\tt sampleTime} & fs & Sets the frequency at which the {\tt .dump} file is written. & Default sets the frequency to the {\tt runTime}. \\ |
425 |
{\tt statusTime} & fs & Sets the frequency at which the {\tt .stat} file is written. & Defaults set the frequency to the {\tt sampleTime}. \\ |
426 |
{\tt cutoffRadius} & $\mbox{\AA}$ & Manually sets the cutoffRadius & Defaults to |
427 |
$15\mbox{\AA}$ for systems containing charges or dipoles or to $2.5 |
428 |
\sigma_{L}$, where $\sigma_{L}$ is the largest LJ $\sigma$ in the |
429 |
simulation. \\ |
430 |
{\tt switchingRadius} & $\mbox{\AA}$ & Manually sets the inner radius for the switching function. & Defaults to 95~\% of the {\tt cutoffRadius}. \\ |
431 |
{\tt useReactionField} & logical & Turns the reaction field correction on/off. & Default is "false". \\ |
432 |
{\tt dielectric} & unitless & Sets the dielectric constant for reaction field. & If {\tt useReactionField} is true, then {\tt dielectric} must be set. \\ |
433 |
{\tt usePeriodicBoundaryConditions} & & & \\ |
434 |
& logical & Turns periodic boundary conditions on/off. & Default is "true". \\ |
435 |
{\tt seed } & integer & Sets the seed value for the random number |
436 |
generator. & The seed needs to be at least 9 digits long. The default |
437 |
is to take the seed from the CPU clock. \\ |
438 |
{\tt forceFieldVariant} & string & Sets the name of the variant of the |
439 |
force field. ({\sc eam} has three variants: {\tt u3}, {\tt u6}, and |
440 |
{\tt VC}. |
441 |
|
442 |
\end{tabularx} |
443 |
\end{center} |
444 |
\end{table} |
445 |
|
446 |
|
447 |
\subsection{\label{oopseSec:coordFiles}Coordinate Files} |
448 |
|
449 |
The standard format for storage of a systems coordinates is a modified |
450 |
xyz-file syntax, the exact details of which can be seen in |
451 |
Scheme~\ref{sch:dumpFormat}. As all bonding and molecular information |
452 |
is stored in the meta-data files, the coordinate files contain only |
453 |
the coordinates of the objects which move independently during the |
454 |
simulation. It is important to note that {\it not all atoms} are |
455 |
capable of independent motion. Atoms which are part of rigid bodies |
456 |
are not ``integrable objects'' in the equations of motion; the rigid |
457 |
bodies themselves are the integrable objects. Therefore, the |
458 |
coordinate file contains coordinates of all the {\tt |
459 |
integrableObjects} in the system. For systems without rigid bodies, |
460 |
this is simply the coordinates of all the atoms. |
461 |
|
462 |
It is important to note that although the simulation propagates the |
463 |
complete rotation matrix, directional entities are written out using |
464 |
quaternions to save space in the output files. All objects (atoms, |
465 |
orientational atoms, and rigid bodies) are given quaternions and |
466 |
angular momenta in coordinate files which are output by OOPSE, but it |
467 |
is not necessary for the user to specify the quaternions or angular |
468 |
momenta for atoms without orientational degrees of freedom. |
469 |
|
470 |
\begin{lstlisting}[float,caption={[The format of the coordinate |
471 |
files] An example of the format of the coordinate files. The fist line |
472 |
is the number of {\tt integrableObjects} (freely-moving atoms and |
473 |
rigid bodies). The second line begins with the time stamp followed by |
474 |
the three $\mathsf{H}$ column vectors. It is important to note that |
475 |
for extended system ensembles, additional information pertinent to the |
476 |
integrators may be stored on this line as well. The next lines are the |
477 |
coordinates for all integrable objects in the system. The name of the |
478 |
integrable object is followed by position, velocity, quaternions, and |
479 |
lastly, body fixed angular momentum.},label=sch:dumpFormat] |
480 |
|
481 |
nIntegrable |
482 |
time; Hxx Hyx Hzx; Hxy Hyy Hzy; Hxz Hyz Hzz; |
483 |
Name1 x y z vx vy vz qw qx qy qz jx jy jz |
484 |
Name2 x y z vx vy vz qw qx qy qz jx jy jz |
485 |
etc... |
486 |
|
487 |
\end{lstlisting} |
488 |
|
489 |
The {\tt name} field for atoms is simply the atom type as specified in |
490 |
the meta-data file. The {\tt name} field for a rigid body is |
491 |
specified as {\tt MOLTYPE\_RB\_N}, to specify that this is {\tt |
492 |
rigidBody} N in a molecule of type MOLTYPE. In simulations with rigid |
493 |
body models of water, a sample coordinate line might be: |
494 |
|
495 |
\begin{tt} |
496 |
TIP3P\_RB\_0 x y z vx vy vz qw qx qy qz jx jy jz |
497 |
\end{tt} |
498 |
|
499 |
which tells the program that the rigid body representing a TIP3P |
500 |
molecule (rigid body \# 0) is listed on that line. |
501 |
|
502 |
There are three files used by {\sc oopse} which are written in the |
503 |
coordinate format. They are: the initial coordinate file |
504 |
(\texttt{.in}), the simulation trajectory file (\texttt{.dump}), and |
505 |
the final coordinates or ``end-of-run'' for the simulation |
506 |
(\texttt{.eor}). The initial coordinate file is necessary for {\sc |
507 |
oopse} to start the simulation with the proper coordinates, and this |
508 |
file must be generated by the user before the simulation run. The |
509 |
trajectory (or ``dump'') file is updated during simulation and is used |
510 |
to store snapshots of the coordinates at regular intervals. The first |
511 |
frame is a duplication of the |
512 |
\texttt{.in} file, and each subsequent frame is appended to the file |
513 |
at an interval specified in the meta-data file with the |
514 |
\texttt{sampleTime} flag. The final coordinate file is the |
515 |
``end-of-run'' file. The \texttt{.eor} file stores the final |
516 |
configuration of the system for a given simulation. The file is |
517 |
updated at the same time as the \texttt{.dump} file, but it only |
518 |
contains the most recent frame. In this way, an \texttt{.eor} file may |
519 |
be used to initialize a second simulation should it be necessary to |
520 |
recover from a crash or power outage. |
521 |
|
522 |
\subsection{\label{oopseSec:initCoords}Generation of Initial Coordinates} |
523 |
|
524 |
As was stated in Sec.~\ref{oopseSec:coordFiles}, an initial coordinate |
525 |
file is needed to provide the starting coordinates for a simulation. |
526 |
Since each simulation is different, system creation is left to the end |
527 |
user; however, we have included a few sample programs which make some |
528 |
specialized structures. The {\tt .in} file must list the integrable |
529 |
objects in the correct order. The ordering of the integrable objects |
530 |
relies on the ordering of molecules within the meta-data file. {\sc |
531 |
oopse} expects the order to comply with the following guidelines: |
532 |
\begin{enumerate} |
533 |
\item All of the molecules of the first declared component are given |
534 |
before proceeding to the molecules of the second component, and so on |
535 |
for all subsequently declared components. |
536 |
\item The ordering of the atoms for each molecule follows the order |
537 |
declared in the molecule's declaration within the model file. |
538 |
\item Only atoms which are not members of a {\tt rigidBody} are |
539 |
included |
540 |
\item Rigid Body coordinates for a molecule are listed immediately |
541 |
after the the other atoms in a molecule. Some molecules may be |
542 |
entirely rigid, in which case, only the rigid body coordinates are |
543 |
given. |
544 |
\end{enumerate} |
545 |
An example is given in the meta-data file in Scheme~\ref{sch:initEx1} |
546 |
which results in the {\tt .in} file shown in Scheme~\ref{sch:initEx2}. |
547 |
|
548 |
\begin{lstlisting}[float,caption={Example declaration of the |
549 |
$\text{I}_2$ molecule and the HCl molecule. The two molecules are then |
550 |
included into a simulation.}, label=sch:initEx1] |
551 |
|
552 |
molecule{ |
553 |
name = "I2"; |
554 |
nAtoms = 2; |
555 |
atom[0]{ |
556 |
type = "I"; |
557 |
} |
558 |
atom[1]{ |
559 |
type = "I"; |
560 |
} |
561 |
nBonds = 1; |
562 |
bond[0]{ |
563 |
members( 0, 1); |
564 |
} |
565 |
} |
566 |
|
567 |
molecule{ |
568 |
name = "HCl" |
569 |
nAtoms = 2; |
570 |
atom[0]{ |
571 |
type = "H"; |
572 |
} |
573 |
atom[1]{ |
574 |
type = "Cl"; |
575 |
} |
576 |
nBonds = 1; |
577 |
bond[0]{ |
578 |
members( 0, 1); |
579 |
} |
580 |
} |
581 |
|
582 |
nComponents = 2; |
583 |
component{ |
584 |
type = "HCl"; |
585 |
nMol = 4; |
586 |
} |
587 |
component{ |
588 |
type = "I2"; |
589 |
nMol = 1; |
590 |
} |
591 |
|
592 |
initialConfig = "mixture.in"; |
593 |
|
594 |
\end{lstlisting} |
595 |
|
596 |
\begin{lstlisting}[float,caption={The contents of the {\tt |
597 |
mixture.in} file matching the declarations in |
598 |
Scheme~\ref{sch:initEx1}. Note that even though $\text{I}_2$ is |
599 |
declared before HCl, the {\tt .in} file follows the order {\it in |
600 |
which the components were included}.},label=sch:initEx2] |
601 |
|
602 |
10 |
603 |
0.0; 10.0 0.0 0.0; 0.0 10.0 0.0; 0.0 0.0 10.0; |
604 |
H ... |
605 |
Cl ... |
606 |
H ... |
607 |
Cl ... |
608 |
H ... |
609 |
Cl ... |
610 |
H ... |
611 |
Cl ... |
612 |
I ... |
613 |
I ... |
614 |
|
615 |
\end{lstlisting} |
616 |
|
617 |
|
618 |
\subsection{The Statistics File} |
619 |
|
620 |
The last output file generated by {\sc oopse} is the statistics |
621 |
file. This file records such statistical quantities as the |
622 |
instantaneous temperature (in $K$), volume (in $\mbox{\AA}^{3}$), |
623 |
pressure (in $\mbox{atm}$), etc. It is written out with the frequency |
624 |
specified in the meta-data file with the |
625 |
\texttt{statusTime} keyword. The file allows the user to observe the |
626 |
system variables as a function of simulation time while the simulation |
627 |
is in progress. One useful function the statistics file serves is to |
628 |
monitor the conserved quantity of a given simulation ensemble, |
629 |
allowing the user to gauge the stability of the integrator. The |
630 |
statistics file is denoted with the \texttt{.stat} file extension. |
631 |
|
632 |
\section{\label{oopseSec:empiricalEnergy}The Empirical Energy |
633 |
Functions} |
634 |
|
635 |
Like many simulation packages, {\sc oopse} splits the potential energy |
636 |
into the short-ranged (bonded) portion and a long-range (non-bonded) |
637 |
potential, |
638 |
\begin{equation} |
639 |
V = V_{\mathrm{short-range}} + V_{\mathrm{long-range}}. |
640 |
\end{equation} |
641 |
The short-ranged portion includes explicit bonds, bends and torsions, |
642 |
which have been defined in the meta-data file for the molecules which |
643 |
present in the simulation. The functional forms and parameters for |
644 |
these interactions are defined by the force field which is chosen. |
645 |
|
646 |
Calculating long-range (non-bonded) potential involves a sum over all |
647 |
pairs of atoms (except for those atoms which are involved in a bond, |
648 |
bend, or torsion with each other). If done poorly, calculating the |
649 |
the long-range interactions for $N$ atoms would involve $N^2$ |
650 |
evaluations of atomic distance. To reduce the number of distance |
651 |
evaluations between pairs of atoms, {\sc oopse} uses a switched cutoff |
652 |
with Verlet neighbor lists.\cite{allen87:csl} It is well known that |
653 |
neutral groups which contain charges will exhibit pathological forces |
654 |
unless the cutoff is applied to the neutral groups evenly instead of |
655 |
to the individual atoms.\cite{leach01:mm} {\sc oopse} allows users to |
656 |
specify cutoff groups which may contain an arbitrary number of atoms |
657 |
in the molecule. Atoms in a cutoff group are treated as a single unit |
658 |
for the evaluation of the switching function: |
659 |
\begin{equation} |
660 |
V_{\mathrm{long-range}} = \sum_{a} \sum_{b>a} s(r_{ab}) \sum_{i \in a} \sum_{j \in b} V_{ij}(r_{ij}), |
661 |
\end{equation} |
662 |
where $r_{ab}$ is the distance between the centers of mass of the two |
663 |
cutoff groups ($a$ and $b$). |
664 |
|
665 |
The sums over $a$ and $b$ are over the cutoffGroups that are present |
666 |
in the simulation. Atoms which are not explicitly defined as members |
667 |
of a {\tt cutoffGroup} are treated as a group consisting of only one |
668 |
atom. The switching function, $s(r)$ is the standard cubic switching |
669 |
function, |
670 |
\begin{equation} |
671 |
S(r) = |
672 |
\begin{cases} |
673 |
1 & \text{if $r \le r_{\text{sw}}$},\\ |
674 |
\frac{(r_{\text{cut}} + 2r - 3r_{\text{sw}})(r_{\text{cut}} - r)^2} |
675 |
{(r_{\text{cut}} - r_{\text{sw}})^2} |
676 |
& \text{if $r_{\text{sw}} < r \le r_{\text{cut}}$}, \\ |
677 |
0 & \text{if $r > r_{\text{cut}}$.} |
678 |
\end{cases} |
679 |
\label{eq:dipoleSwitching} |
680 |
\end{equation} |
681 |
Here, $r_{\text{sw}}$ is the {\tt switchingRadius}, or the distance |
682 |
beyond which interactions are reduced, and $r_{\text{cut}}$ is the |
683 |
{\tt cutoffRadius}, or the distance at which interactions are |
684 |
truncated. |
685 |
|
686 |
Users of {\sc oopse} do not need to specify the {\tt cutoffRadius} or |
687 |
{\tt switchingRadius}. In simulations containing only Lennard-Jones |
688 |
atoms, the cutoff radius has a default value of $2.5\sigma_{ii}$, |
689 |
where $\sigma_{ii}$ is the largest Lennard-Jones length parameter |
690 |
present in the simulation. In simulations containing charged or |
691 |
dipolar atoms, the default cutoff Radius is $15 \mbox{\AA}$. |
692 |
|
693 |
The {\tt switchingRadius} is set to a default value of 95\% of the |
694 |
{\tt cutoffRadius}. In the special case of a simulation containing |
695 |
{\it only} Lennard-Jones atoms, the default switching radius takes the |
696 |
same value as the cutoff radius, and {\sc oopse} will use a shifted |
697 |
potential to remove discontinuities in the potential at the cutoff. |
698 |
Both radii may be specified in the meta-data file. |
699 |
|
700 |
Force fields can easily be added to {\sc oopse}, although it comes |
701 |
with a few simple examples (Lennard-Jones, {\sc duff}, {\sc water}, |
702 |
and {\sc eam}) which are explained in the following sections. |
703 |
|
704 |
\subsection{\label{sec:LJPot}The Lennard Jones Force Field} |
705 |
|
706 |
The most basic force field implemented in {\sc oopse} is the |
707 |
Lennard-Jones force field, which mimics the van der Waals interaction |
708 |
at long distances and uses an empirical repulsion at short |
709 |
distances. The Lennard-Jones potential is given by: |
710 |
\begin{equation} |
711 |
V_{\text{LJ}}(r_{ij}) = |
712 |
4\epsilon_{ij} \biggl[ |
713 |
\biggl(\frac{\sigma_{ij}}{r_{ij}}\biggr)^{12} |
714 |
- \biggl(\frac{\sigma_{ij}}{r_{ij}}\biggr)^{6} |
715 |
\biggr], |
716 |
\label{eq:lennardJonesPot} |
717 |
\end{equation} |
718 |
where $r_{ij}$ is the distance between particles $i$ and $j$, |
719 |
$\sigma_{ij}$ scales the length of the interaction, and |
720 |
$\epsilon_{ij}$ scales the well depth of the potential. Scheme |
721 |
\ref{sch:LJFF} gives an example meta-data file that |
722 |
sets up a system of 108 Ar particles to be simulated using the |
723 |
Lennard-Jones force field. |
724 |
|
725 |
\begin{lstlisting}[float,caption={[Invocation of the Lennard-Jones |
726 |
force field] A sample meta-data file for a small Lennard-Jones |
727 |
simulation.},label={sch:LJFF}] |
728 |
|
729 |
#include "argon.md" |
730 |
|
731 |
nComponents = 1; |
732 |
component{ |
733 |
type = "Ar"; |
734 |
nMol = 108; |
735 |
} |
736 |
|
737 |
initialConfig = "./argon.in"; |
738 |
|
739 |
forceField = "LJ"; |
740 |
\end{lstlisting} |
741 |
|
742 |
Interactions between dissimilar particles requires the generation of |
743 |
cross term parameters for $\sigma$ and $\epsilon$. These parameters |
744 |
are determined using the Lorentz-Berthelot mixing |
745 |
rules:\cite{allen87:csl} |
746 |
\begin{equation} |
747 |
\sigma_{ij} = \frac{1}{2}[\sigma_{ii} + \sigma_{jj}], |
748 |
\label{eq:sigmaMix} |
749 |
\end{equation} |
750 |
and |
751 |
\begin{equation} |
752 |
\epsilon_{ij} = \sqrt{\epsilon_{ii} \epsilon_{jj}}. |
753 |
\label{eq:epsilonMix} |
754 |
\end{equation} |
755 |
|
756 |
\subsection{\label{oopseSec:DUFF}Dipolar Unified-Atom Force Field} |
757 |
|
758 |
The dipolar unified-atom force field ({\sc duff}) was developed to |
759 |
simulate lipid bilayers. These types of simulations require a model |
760 |
capable of forming bilayers, while still being sufficiently |
761 |
computationally efficient to allow large systems ($\sim$100's of |
762 |
phospholipids, $\sim$1000's of waters) to be simulated for long times |
763 |
($\sim$10's of nanoseconds). With this goal in mind, {\sc duff} has no |
764 |
point charges. Charge-neutral distributions are replaced with dipoles, |
765 |
while most atoms and groups of atoms are reduced to Lennard-Jones |
766 |
interaction sites. This simplification reduces the length scale of |
767 |
long range interactions from $\frac{1}{r}$ to $\frac{1}{r^3}$, |
768 |
removing the need for the computationally expensive Ewald |
769 |
sum. Instead, Verlet neighbor-lists and cutoff radii are used for the |
770 |
dipolar interactions, and, if desired, a reaction field may be added |
771 |
to mimic longer range interactions. |
772 |
|
773 |
As an example, lipid head-groups in {\sc duff} are represented as |
774 |
point dipole interaction sites. Placing a dipole at the head group's |
775 |
center of mass mimics the charge separation found in common |
776 |
phospholipid head groups such as phosphatidylcholine.\cite{Cevc87} |
777 |
Additionally, a large Lennard-Jones site is located at the |
778 |
pseudoatom's center of mass. The model is illustrated by the red atom |
779 |
in Fig.~\ref{oopseFig:lipidModel}. The water model we use to |
780 |
complement the dipoles of the lipids is a |
781 |
reparameterization\cite{fennell04} of the soft sticky dipole (SSD) |
782 |
model of Ichiye |
783 |
\emph{et al.}\cite{liu96:new_model} |
784 |
|
785 |
\begin{figure} |
786 |
\centering |
787 |
\includegraphics[width=\linewidth]{lipidModel.eps} |
788 |
\caption[A representation of a lipid model in {\sc duff}]{A |
789 |
representation of the lipid model. $\phi$ is the torsion angle, |
790 |
$\theta$ is the bend angle, and $\mu$ is the dipole moment of the head |
791 |
group.} |
792 |
\label{oopseFig:lipidModel} |
793 |
\end{figure} |
794 |
|
795 |
A set of scalable parameters has been used to model the alkyl groups |
796 |
with Lennard-Jones sites. For this, parameters from the TraPPE force |
797 |
field of Siepmann \emph{et al.}\cite{Siepmann1998} have been |
798 |
utilized. TraPPE is a unified-atom representation of n-alkanes which |
799 |
is parametrized against phase equilibria using Gibbs ensemble Monte |
800 |
Carlo simulation techniques.\cite{Siepmann1998} One of the advantages |
801 |
of TraPPE is that it generalizes the types of atoms in an alkyl chain |
802 |
to keep the number of pseudoatoms to a minimum; thus, the parameters |
803 |
for a unified atom such as $\text{CH}_2$ do not change depending on |
804 |
what species are bonded to it. |
805 |
|
806 |
As is required by TraPPE, {\sc duff} also constrains all bonds to be |
807 |
of fixed length. Typically, bond vibrations are the fastest motions in |
808 |
a molecular dynamic simulation. With these vibrations present, small |
809 |
time steps between force evaluations must be used to ensure adequate |
810 |
energy conservation in the bond degrees of freedom. By constraining |
811 |
the bond lengths, larger time steps may be used when integrating the |
812 |
equations of motion. A simulation using {\sc duff} is illustrated in |
813 |
Scheme \ref{sch:DUFF}. |
814 |
|
815 |
\begin{lstlisting}[float,caption={[Invocation of {\sc duff}]A portion |
816 |
of a meta-data file showing a simulation utilizing {\sc |
817 |
duff}},label={sch:DUFF}] |
818 |
|
819 |
#include "water.md" |
820 |
#include "lipid.md" |
821 |
|
822 |
nComponents = 2; |
823 |
component{ |
824 |
type = "simpleLipid_16"; |
825 |
nMol = 60; |
826 |
} |
827 |
|
828 |
component{ |
829 |
type = "SSD_water"; |
830 |
nMol = 1936; |
831 |
} |
832 |
|
833 |
initialConfig = "bilayer.in"; |
834 |
|
835 |
forceField = "DUFF"; |
836 |
|
837 |
\end{lstlisting} |
838 |
|
839 |
\subsubsection{\label{oopseSec:energyFunctions}{\sc duff} Energy Functions} |
840 |
|
841 |
The total potential energy function in {\sc duff} is |
842 |
\begin{equation} |
843 |
V = \sum^{N}_{I=1} V^{I}_{\text{Internal}} |
844 |
+ \sum^{N-1}_{I=1} \sum_{J>I} V^{IJ}_{\text{Cross}}, |
845 |
\label{eq:totalPotential} |
846 |
\end{equation} |
847 |
where $V^{I}_{\text{Internal}}$ is the internal potential of molecule $I$: |
848 |
\begin{equation} |
849 |
V^{I}_{\text{Internal}} = |
850 |
\sum_{\theta_{ijk} \in I} V_{\text{bend}}(\theta_{ijk}) |
851 |
+ \sum_{\phi_{ijkl} \in I} V_{\text{torsion}}(\phi_{ijkl}) |
852 |
+ \sum_{i \in I} \sum_{(j>i+4) \in I} |
853 |
\biggl[ V_{\text{LJ}}(r_{ij}) + V_{\text{dipole}} |
854 |
(\mathbf{r}_{ij},\boldsymbol{\Omega}_{i},\boldsymbol{\Omega}_{j}) |
855 |
\biggr]. |
856 |
\label{eq:internalPotential} |
857 |
\end{equation} |
858 |
Here $V_{\text{bend}}$ is the bend potential for all 1, 3 bonded pairs |
859 |
within the molecule $I$, and $V_{\text{torsion}}$ is the torsion |
860 |
potential for all 1, 4 bonded pairs. The pairwise portions of the |
861 |
non-bonded interactions are excluded for atom pairs that are involved |
862 |
in the smae bond, bend, or torsion. All other atom pairs within a |
863 |
molecule are subject to the LJ pair potential. |
864 |
|
865 |
The bend potential of a molecule is represented by the following function: |
866 |
\begin{equation} |
867 |
V_{\text{bend}}(\theta_{ijk}) = k_{\theta}( \theta_{ijk} - \theta_0 |
868 |
)^2, \label{eq:bendPot} |
869 |
\end{equation} |
870 |
where $\theta_{ijk}$ is the angle defined by atoms $i$, $j$, and $k$ |
871 |
(see Fig.~\ref{oopseFig:lipidModel}), $\theta_0$ is the equilibrium |
872 |
bond angle, and $k_{\theta}$ is the force constant which determines the |
873 |
strength of the harmonic bend. The parameters for $k_{\theta}$ and |
874 |
$\theta_0$ are borrowed from those in TraPPE.\cite{Siepmann1998} |
875 |
|
876 |
The torsion potential and parameters are also borrowed from TraPPE. It is |
877 |
of the form: |
878 |
\begin{equation} |
879 |
V_{\text{torsion}}(\phi) = c_1[1 + \cos \phi] |
880 |
+ c_2[1 + \cos(2\phi)] |
881 |
+ c_3[1 + \cos(3\phi)], |
882 |
\label{eq:origTorsionPot} |
883 |
\end{equation} |
884 |
where: |
885 |
\begin{equation} |
886 |
\cos\phi = (\hat{\mathbf{r}}_{ij} \times \hat{\mathbf{r}}_{jk}) \cdot |
887 |
(\hat{\mathbf{r}}_{jk} \times \hat{\mathbf{r}}_{kl}). |
888 |
\label{eq:torsPhi} |
889 |
\end{equation} |
890 |
Here, $\hat{\mathbf{r}}_{\alpha\beta}$ are the set of unit bond |
891 |
vectors between atoms $i$, $j$, $k$, and $l$. For computational |
892 |
efficiency, the torsion potential has been recast after the method of |
893 |
{\sc charmm},\cite{Brooks83} in which the angle series is converted to |
894 |
a power series of the form: |
895 |
\begin{equation} |
896 |
V_{\text{torsion}}(\phi) = |
897 |
k_3 \cos^3 \phi + k_2 \cos^2 \phi + k_1 \cos \phi + k_0, |
898 |
\label{eq:torsionPot} |
899 |
\end{equation} |
900 |
where: |
901 |
\begin{align*} |
902 |
k_0 &= c_1 + c_3, \\ |
903 |
k_1 &= c_1 - 3c_3, \\ |
904 |
k_2 &= 2 c_2, \\ |
905 |
k_3 &= 4c_3. |
906 |
\end{align*} |
907 |
By recasting the potential as a power series, repeated trigonometric |
908 |
evaluations are avoided during the calculation of the potential |
909 |
energy. |
910 |
|
911 |
|
912 |
The cross potential between molecules $I$ and $J$, |
913 |
$V^{IJ}_{\text{Cross}}$, is as follows: |
914 |
\begin{equation} |
915 |
V^{IJ}_{\text{Cross}} = |
916 |
\sum_{i \in I} \sum_{j \in J} |
917 |
\biggl[ V_{\text{LJ}}(r_{ij}) + V_{\text{dipole}} |
918 |
(\mathbf{r}_{ij},\boldsymbol{\Omega}_{i},\boldsymbol{\Omega}_{j}) |
919 |
+ V_{\text{sticky}} |
920 |
(\mathbf{r}_{ij},\boldsymbol{\Omega}_{i},\boldsymbol{\Omega}_{j}) |
921 |
\biggr], |
922 |
\label{eq:crossPotentail} |
923 |
\end{equation} |
924 |
where $V_{\text{LJ}}$ is the Lennard Jones potential, |
925 |
$V_{\text{dipole}}$ is the dipole dipole potential, and |
926 |
$V_{\text{sticky}}$ is the sticky potential defined by the SSD model |
927 |
(Sec.~\ref{oopseSec:SSD}). Note that not all atom types include all |
928 |
interactions. |
929 |
|
930 |
The dipole-dipole potential has the following form: |
931 |
\begin{equation} |
932 |
V_{\text{dipole}}(\mathbf{r}_{ij},\boldsymbol{\Omega}_{i}, |
933 |
\boldsymbol{\Omega}_{j}) = \frac{|\mu_i||\mu_j|}{4\pi\epsilon_{0}r_{ij}^{3}} \biggl[ |
934 |
\boldsymbol{\hat{u}}_{i} \cdot \boldsymbol{\hat{u}}_{j} |
935 |
- |
936 |
3(\boldsymbol{\hat{u}}_i \cdot \hat{\mathbf{r}}_{ij}) % |
937 |
(\boldsymbol{\hat{u}}_j \cdot \hat{\mathbf{r}}_{ij}) \biggr]. |
938 |
\label{eq:dipolePot} |
939 |
\end{equation} |
940 |
Here $\mathbf{r}_{ij}$ is the vector starting at atom $i$ pointing |
941 |
towards $j$, and $\boldsymbol{\Omega}_i$ and $\boldsymbol{\Omega}_j$ |
942 |
are the orientational degrees of freedom for atoms $i$ and $j$ |
943 |
respectively. The magnitude of the dipole moment of atom $i$ is |
944 |
$|\mu_i|$, $\boldsymbol{\hat{u}}_i$ is the standard unit orientation |
945 |
vector of $\boldsymbol{\Omega}_i$, and $\boldsymbol{\hat{r}}_{ij}$ is |
946 |
the unit vector pointing along $\mathbf{r}_{ij}$ |
947 |
($\boldsymbol{\hat{r}}_{ij}=\mathbf{r}_{ij}/|\mathbf{r}_{ij}|$). |
948 |
|
949 |
\subsubsection{\label{oopseSec:SSD}The {\sc duff} Water Models: SSD/E |
950 |
and SSD/RF} |
951 |
|
952 |
In the interest of computational efficiency, the default solvent used |
953 |
by {\sc oopse} is the extended Soft Sticky Dipole (SSD/E) water |
954 |
model.\cite{fennell04} The original SSD was developed by Ichiye |
955 |
\emph{et al.}\cite{liu96:new_model} as a modified form of the hard-sphere |
956 |
water model proposed by Bratko, Blum, and |
957 |
Luzar.\cite{Bratko85,Bratko95} It consists of a single point dipole |
958 |
with a Lennard-Jones core and a sticky potential that directs the |
959 |
particles to assume the proper hydrogen bond orientation in the first |
960 |
solvation shell. Thus, the interaction between two SSD water molecules |
961 |
\emph{i} and \emph{j} is given by the potential |
962 |
\begin{equation} |
963 |
V_{ij} = |
964 |
V_{ij}^{LJ} (r_{ij})\ + V_{ij}^{dp} |
965 |
(\mathbf{r}_{ij},\boldsymbol{\Omega}_i,\boldsymbol{\Omega}_j)\ + |
966 |
V_{ij}^{sp} |
967 |
(\mathbf{r}_{ij},\boldsymbol{\Omega}_i,\boldsymbol{\Omega}_j), |
968 |
\label{eq:ssdPot} |
969 |
\end{equation} |
970 |
where the $\mathbf{r}_{ij}$ is the position vector between molecules |
971 |
\emph{i} and \emph{j} with magnitude equal to the distance $r_{ij}$, and |
972 |
$\boldsymbol{\Omega}_i$ and $\boldsymbol{\Omega}_j$ represent the |
973 |
orientations of the respective molecules. The Lennard-Jones and dipole |
974 |
parts of the potential are given by equations \ref{eq:lennardJonesPot} |
975 |
and \ref{eq:dipolePot} respectively. The sticky part is described by |
976 |
the following, |
977 |
\begin{equation} |
978 |
u_{ij}^{sp}(\mathbf{r}_{ij},\boldsymbol{\Omega}_i,\boldsymbol{\Omega}_j)= |
979 |
\frac{\nu_0}{2}[s(r_{ij})w(\mathbf{r}_{ij}, |
980 |
\boldsymbol{\Omega}_i,\boldsymbol{\Omega}_j) + |
981 |
s^\prime(r_{ij})w^\prime(\mathbf{r}_{ij}, |
982 |
\boldsymbol{\Omega}_i,\boldsymbol{\Omega}_j)]\ , |
983 |
\label{eq:stickyPot} |
984 |
\end{equation} |
985 |
where $\nu_0$ is a strength parameter for the sticky potential, and |
986 |
$s$ and $s^\prime$ are cubic switching functions which turn off the |
987 |
sticky interaction beyond the first solvation shell. The $w$ function |
988 |
can be thought of as an attractive potential with tetrahedral |
989 |
geometry: |
990 |
\begin{equation} |
991 |
w({\bf r}_{ij},{\bf \Omega}_i,{\bf \Omega}_j)= |
992 |
\sin\theta_{ij}\sin2\theta_{ij}\cos2\phi_{ij}, |
993 |
\label{eq:stickyW} |
994 |
\end{equation} |
995 |
while the $w^\prime$ function counters the normal aligned and |
996 |
anti-aligned structures favored by point dipoles: |
997 |
\begin{equation} |
998 |
w^\prime({\bf r}_{ij},{\bf \Omega}_i,{\bf \Omega}_j)= |
999 |
(\cos\theta_{ij}-0.6)^2(\cos\theta_{ij}+0.8)^2-w^0, |
1000 |
\label{eq:stickyWprime} |
1001 |
\end{equation} |
1002 |
It should be noted that $w$ is proportional to the sum of the $Y_3^2$ |
1003 |
and $Y_3^{-2}$ spherical harmonics (a linear combination which |
1004 |
enhances the tetrahedral geometry for hydrogen bonded structures), |
1005 |
while $w^\prime$ is a purely empirical function. A more detailed |
1006 |
description of the functional parts and variables in this potential |
1007 |
can be found in the original SSD |
1008 |
articles.\cite{liu96:new_model,liu96:monte_carlo,chandra99:ssd_md,Ichiye03} |
1009 |
|
1010 |
\begin{figure} |
1011 |
\centering |
1012 |
\includegraphics[width=\linewidth]{waterAngle.eps} |
1013 |
\caption[Coordinate definition for the SSD/E water model]{Coordinates |
1014 |
for the interaction between two SSD/E water molecules. $\theta_{ij}$ |
1015 |
is the angle that $r_{ij}$ makes with the $\hat{z}$ vector in the |
1016 |
body-fixed frame for molecule $i$. The $\hat{z}$ vector bisects the |
1017 |
HOH angle in each water molecule. } |
1018 |
\label{oopseFig:ssd} |
1019 |
\end{figure} |
1020 |
|
1021 |
|
1022 |
Since SSD/E is a single-point {\it dipolar} model, the force |
1023 |
calculations are simplified significantly relative to the standard |
1024 |
{\it charged} multi-point models. In the original Monte Carlo |
1025 |
simulations using this model, Ichiye {\it et al.} reported that using |
1026 |
SSD decreased computer time by a factor of 6-7 compared to other |
1027 |
models.\cite{liu96:new_model} What is most impressive is that these |
1028 |
savings did not come at the expense of accurate depiction of the |
1029 |
liquid state properties. Indeed, SSD/E maintains reasonable agreement |
1030 |
with the Head-Gordon diffraction data for the structural features of |
1031 |
liquid water.\cite{hura00,liu96:new_model} Additionally, the dynamical |
1032 |
properties exhibited by SSD/E agree with experiment better than those |
1033 |
of more computationally expensive models (like TIP3P and |
1034 |
SPC/E).\cite{chandra99:ssd_md} The combination of speed and accurate |
1035 |
depiction of solvent properties makes SSD/E a very attractive model |
1036 |
for the simulation of large scale biochemical simulations. |
1037 |
|
1038 |
Recent constant pressure simulations revealed issues in the original |
1039 |
SSD model that led to lower than expected densities at all target |
1040 |
pressures.\cite{Ichiye03,fennell04} The default model in {\sc oopse} |
1041 |
is therefore SSD/E, a density corrected derivative of SSD that |
1042 |
exhibits improved liquid structure and transport behavior. If the use |
1043 |
of a reaction field long-range interaction correction is desired, it |
1044 |
is recommended that the parameters be modified to those of the SSD/RF |
1045 |
model (an SSD variant parameterized for reaction field). These solvent |
1046 |
parameters are listed and can be easily modified in the {\sc duff} |
1047 |
force field file ({\tt DUFF.frc}). A table of the parameter values |
1048 |
and the drawbacks and benefits of the different density corrected SSD |
1049 |
models can be found in reference~\citen{fennell04}. |
1050 |
|
1051 |
\subsection{\label{oopseSec:eam}Embedded Atom Method} |
1052 |
|
1053 |
{\sc oopse} implements a potential that describes bonding in |
1054 |
transition metal |
1055 |
systems.~\cite{Finnis84,Ercolessi88,Chen90,Qi99,Ercolessi02} This |
1056 |
potential has an attractive interaction which models ``Embedding'' a |
1057 |
positively charged pseudo-atom core in the electron density due to the |
1058 |
free valance ``sea'' of electrons created by the surrounding atoms in |
1059 |
the system. A pairwise part of the potential (which is primarily |
1060 |
repulsive) describes the interaction of the positively charged metal |
1061 |
core ions with one another. The Embedded Atom Method ({\sc |
1062 |
eam})~\cite{Daw84,FBD86,johnson89,Lu97} has been widely adopted in the |
1063 |
materials science community and has been included in {\sc oopse}. A |
1064 |
good review of {\sc eam} and other formulations of metallic potentials |
1065 |
was given by Voter.\cite{Voter:95} |
1066 |
|
1067 |
The {\sc eam} potential has the form: |
1068 |
\begin{equation} |
1069 |
V = \sum_{i} F_{i}\left[\rho_{i}\right] + \sum_{i} \sum_{j \neq i} |
1070 |
\phi_{ij}({\bf r}_{ij}) |
1071 |
\end{equation} |
1072 |
where $F_{i} $ is an embedding functional that approximates the energy |
1073 |
required to embed a positively-charged core ion $i$ into a linear |
1074 |
superposition of spherically averaged atomic electron densities given |
1075 |
by $\rho_{i}$, |
1076 |
\begin{equation} |
1077 |
\rho_{i} = \sum_{j \neq i} f_{j}({\bf r}_{ij}), |
1078 |
\end{equation} |
1079 |
Since the density at site $i$ ($\rho_i$) must be computed before the |
1080 |
embedding functional can be evaluated, {\sc eam} and the related |
1081 |
transition metal potentials require two loops through the atom pairs |
1082 |
to compute the inter-atomic forces. |
1083 |
|
1084 |
The pairwise portion of the potential, $\phi_{ij}$, is a primarily |
1085 |
repulsive interaction between atoms $i$ and $j$. In the original |
1086 |
formulation of {\sc eam}\cite{Daw84}, $\phi_{ij}$ was an entirely |
1087 |
repulsive term; however later refinements to {\sc eam} allowed for |
1088 |
more general forms for $\phi$.\cite{Daw89} The effective cutoff |
1089 |
distance, $r_{{\text cut}}$ is the distance at which the values of |
1090 |
$f(r)$ and $\phi(r)$ drop to zero for all atoms present in the |
1091 |
simulation. In practice, this distance is fairly small, limiting the |
1092 |
summations in the {\sc eam} equation to the few dozen atoms |
1093 |
surrounding atom $i$ for both the density $\rho$ and pairwise $\phi$ |
1094 |
interactions. |
1095 |
|
1096 |
In computing forces for alloys, mixing rules as outlined by |
1097 |
Johnson~\cite{johnson89} are used to compute the heterogenous pair |
1098 |
potential, |
1099 |
\begin{eqnarray} |
1100 |
\label{eq:johnson} |
1101 |
\phi_{ab}(r)=\frac{1}{2}\left( |
1102 |
\frac{f_{b}(r)}{f_{a}(r)}\phi_{aa}(r)+ |
1103 |
\frac{f_{a}(r)}{f_{b}(r)}\phi_{bb}(r) |
1104 |
\right). |
1105 |
\end{eqnarray} |
1106 |
No mixing rule is needed for the densities, since the density at site |
1107 |
$i$ is simply the linear sum of density contributions of all the other |
1108 |
atoms. |
1109 |
|
1110 |
The {\sc eam} force field illustrates an additional feature of {\sc |
1111 |
oopse}. Foiles, Baskes and Daw fit {\sc eam} potentials for Cu, Ag, |
1112 |
Au, Ni, Pd, Pt and alloys of these metals.\cite{FBD86} These fits are |
1113 |
included in {\sc oopse} as the {\tt u3} variant of the {\sc eam} force |
1114 |
field. Voter and Chen reparamaterized a set of {\sc eam} functions |
1115 |
which do a better job of predicting melting points.\cite{Voter:87} |
1116 |
These functions are included in {\sc oopse} as the {\tt VC} variant of |
1117 |
the {\sc eam} force field. An additional set of functions (the |
1118 |
``Universal 6'' functions) are included in {\sc oopse} as the {\tt u6} |
1119 |
variant of {\sc eam}. For example, to specify the Voter-Chen variant |
1120 |
of the {\sc eam} force field, the user would add the {\tt |
1121 |
forceFieldVariant = "VC";} line to the meta-data file. |
1122 |
|
1123 |
The potential files used by the {\sc eam} force field are in the |
1124 |
standard {\tt funcfl} format, which is the format utilized by a number |
1125 |
of other codes (e.g. ParaDyn~\cite{Paradyn}, {\sc dynamo 86}). It |
1126 |
should be noted that the energy units in these files are in eV, not |
1127 |
$\mbox{kcal mol}^{-1}$ as in the rest of the {\sc oopse} force field |
1128 |
files. |
1129 |
|
1130 |
\subsection{\label{oopseSec:pbc}Periodic Boundary Conditions} |
1131 |
|
1132 |
\newcommand{\roundme}{\operatorname{round}} |
1133 |
|
1134 |
\textit{Periodic boundary conditions} are widely used to simulate bulk |
1135 |
properties with a relatively small number of particles. In this method |
1136 |
the simulation box is replicated throughout space to form an infinite |
1137 |
lattice. During the simulation, when a particle moves in the primary |
1138 |
cell, its image in other cells move in exactly the same direction with |
1139 |
exactly the same orientation. Thus, as a particle leaves the primary |
1140 |
cell, one of its images will enter through the opposite face. If the |
1141 |
simulation box is large enough to avoid ``feeling'' the symmetries of |
1142 |
the periodic lattice, surface effects can be ignored. The available |
1143 |
periodic cells in {\sc oopse} are cubic, orthorhombic and |
1144 |
parallelepiped. {\sc oopse} use a $3 \times 3$ matrix, $\mathsf{H}$, |
1145 |
to describe the shape and size of the simulation box. $\mathsf{H}$ is |
1146 |
defined: |
1147 |
\begin{equation} |
1148 |
\mathsf{H} = ( \mathbf{h}_x, \mathbf{h}_y, \mathbf{h}_z ), |
1149 |
\end{equation} |
1150 |
where $\mathbf{h}_{\alpha}$ is the column vector of the $\alpha$ axis of the |
1151 |
box. During the course of the simulation both the size and shape of |
1152 |
the box can be changed to allow volume fluctuations when constraining |
1153 |
the pressure. |
1154 |
|
1155 |
A real space vector, $\mathbf{r}$ can be transformed in to a box space |
1156 |
vector, $\mathbf{s}$, and back through the following transformations: |
1157 |
\begin{align} |
1158 |
\mathbf{s} &= \mathsf{H}^{-1} \mathbf{r}, \\ |
1159 |
\mathbf{r} &= \mathsf{H} \mathbf{s}. |
1160 |
\end{align} |
1161 |
The vector $\mathbf{s}$ is now a vector expressed as the number of box |
1162 |
lengths in the $\mathbf{h}_x$, $\mathbf{h}_y$, and $\mathbf{h}_z$ |
1163 |
directions. To find the minimum image of a vector $\mathbf{r}$, {\sc |
1164 |
oopse} first converts it to its corresponding vector in box space, and |
1165 |
then casts each element to lie in the range $[-0.5,0.5]$: |
1166 |
\begin{equation} |
1167 |
s_{i}^{\prime}=s_{i}-\roundme(s_{i}), |
1168 |
\end{equation} |
1169 |
where $s_i$ is the $i$th element of $\mathbf{s}$, and |
1170 |
$\roundme(s_i)$ is given by |
1171 |
\begin{equation} |
1172 |
\roundme(x) = |
1173 |
\begin{cases} |
1174 |
\lfloor x+0.5 \rfloor & \text{if $x \ge 0$,} \\ |
1175 |
\lceil x-0.5 \rceil & \text{if $x < 0$.} |
1176 |
\end{cases} |
1177 |
\end{equation} |
1178 |
Here $\lfloor x \rfloor$ is the floor operator, and gives the largest |
1179 |
integer value that is not greater than $x$, and $\lceil x \rceil$ is |
1180 |
the ceiling operator, and gives the smallest integer that is not less |
1181 |
than $x$. |
1182 |
|
1183 |
Finally, the minimum image coordinates $\mathbf{r}^{\prime}$ are |
1184 |
obtained by transforming back to real space, |
1185 |
\begin{equation} |
1186 |
\mathbf{r}^{\prime}=\mathsf{H}^{-1}\mathbf{s}^{\prime}.% |
1187 |
\end{equation} |
1188 |
In this way, particles are allowed to diffuse freely in $\mathbf{r}$, |
1189 |
but their minimum images, or $\mathbf{r}^{\prime}$, are used to compute |
1190 |
the inter-atomic forces. |
1191 |
|
1192 |
|
1193 |
|
1194 |
\section{\label{oopseSec:mechanics}Mechanics} |
1195 |
|
1196 |
\subsection{\label{oopseSec:integrate}Integrating the Equations of Motion: the |
1197 |
DLM method} |
1198 |
|
1199 |
The default method for integrating the equations of motion in {\sc |
1200 |
oopse} is a velocity-Verlet version of the symplectic splitting method |
1201 |
proposed by Dullweber, Leimkuhler and McLachlan |
1202 |
(DLM).\cite{Dullweber1997} When there are no directional atoms or |
1203 |
rigid bodies present in the simulation, this integrator becomes the |
1204 |
standard velocity-Verlet integrator which is known to sample the |
1205 |
microcanonical (NVE) ensemble.\cite{Frenkel1996} |
1206 |
|
1207 |
Previous integration methods for orientational motion have problems |
1208 |
that are avoided in the DLM method. Direct propagation of the Euler |
1209 |
angles has a known $1/\sin\theta$ divergence in the equations of |
1210 |
motion for $\phi$ and $\psi$,\cite{allen87:csl} leading to numerical |
1211 |
instabilities any time one of the directional atoms or rigid bodies |
1212 |
has an orientation near $\theta=0$ or $\theta=\pi$. Quaternion-based |
1213 |
integration methods work well for propagating orientational motion; |
1214 |
however, energy conservation concerns arise when using the |
1215 |
microcanonical (NVE) ensemble. An earlier implementation of {\sc |
1216 |
oopse} utilized quaternions for propagation of rotational motion; |
1217 |
however, a detailed investigation showed that they resulted in a |
1218 |
steady drift in the total energy, something that has been observed by |
1219 |
Laird {\it et al.}\cite{Laird97} |
1220 |
|
1221 |
The key difference in the integration method proposed by Dullweber |
1222 |
\emph{et al.} is that the entire $3 \times 3$ rotation matrix is |
1223 |
propagated from one time step to the next. In the past, this would not |
1224 |
have been feasible, since the rotation matrix for a single body has |
1225 |
nine elements compared with the more memory-efficient methods (using |
1226 |
three Euler angles or 4 quaternions). Computer memory has become much |
1227 |
less costly in recent years, and this can be translated into |
1228 |
substantial benefits in energy conservation. |
1229 |
|
1230 |
The basic equations of motion being integrated are derived from the |
1231 |
Hamiltonian for conservative systems containing rigid bodies, |
1232 |
\begin{equation} |
1233 |
H = \sum_{i} \left( \frac{1}{2} m_i {\bf v}_i^T \cdot {\bf v}_i + |
1234 |
\frac{1}{2} {\bf j}_i^T \cdot \overleftrightarrow{\mathsf{I}}_i^{-1} \cdot |
1235 |
{\bf j}_i \right) + |
1236 |
V\left(\left\{{\bf r}\right\}, \left\{\mathsf{A}\right\}\right), |
1237 |
\end{equation} |
1238 |
where ${\bf r}_i$ and ${\bf v}_i$ are the cartesian position vector |
1239 |
and velocity of the center of mass of particle $i$, and ${\bf j}_i$, |
1240 |
$\overleftrightarrow{\mathsf{I}}_i$ are the body-fixed angular |
1241 |
momentum and moment of inertia tensor respectively, and the |
1242 |
superscript $T$ denotes the transpose of the vector. $\mathsf{A}_i$ |
1243 |
is the $3 \times 3$ rotation matrix describing the instantaneous |
1244 |
orientation of the particle. $V$ is the potential energy function |
1245 |
which may depend on both the positions $\left\{{\bf r}\right\}$ and |
1246 |
orientations $\left\{\mathsf{A}\right\}$ of all particles. The |
1247 |
equations of motion for the particle centers of mass are derived from |
1248 |
Hamilton's equations and are quite simple, |
1249 |
\begin{eqnarray} |
1250 |
\dot{{\bf r}} & = & {\bf v}, \\ |
1251 |
\dot{{\bf v}} & = & \frac{{\bf f}}{m}, |
1252 |
\end{eqnarray} |
1253 |
where ${\bf f}$ is the instantaneous force on the center of mass |
1254 |
of the particle, |
1255 |
\begin{equation} |
1256 |
{\bf f} = - \frac{\partial}{\partial |
1257 |
{\bf r}} V(\left\{{\bf r}(t)\right\}, \left\{\mathsf{A}(t)\right\}). |
1258 |
\end{equation} |
1259 |
|
1260 |
The equations of motion for the orientational degrees of freedom are |
1261 |
\begin{eqnarray} |
1262 |
\dot{\mathsf{A}} & = & \mathsf{A} \cdot |
1263 |
\mbox{ skew}\left(\overleftrightarrow{\mathsf{I}}^{-1} \cdot {\bf j}\right),\\ |
1264 |
\dot{{\bf j}} & = & {\bf j} \times \left( \overleftrightarrow{\mathsf{I}}^{-1} |
1265 |
\cdot {\bf j} \right) - \mbox{ rot}\left(\mathsf{A}^{T} \cdot \frac{\partial |
1266 |
V}{\partial \mathsf{A}} \right). |
1267 |
\end{eqnarray} |
1268 |
In these equations of motion, the $\mbox{skew}$ matrix of a vector |
1269 |
${\bf v} = \left( v_1, v_2, v_3 \right)$ is defined: |
1270 |
\begin{equation} |
1271 |
\mbox{skew}\left( {\bf v} \right) := \left( |
1272 |
\begin{array}{ccc} |
1273 |
0 & v_3 & - v_2 \\ |
1274 |
-v_3 & 0 & v_1 \\ |
1275 |
v_2 & -v_1 & 0 |
1276 |
\end{array} |
1277 |
\right). |
1278 |
\end{equation} |
1279 |
The $\mbox{rot}$ notation refers to the mapping of the $3 \times 3$ |
1280 |
rotation matrix to a vector of orientations by first computing the |
1281 |
skew-symmetric part $\left(\mathsf{A} - \mathsf{A}^{T}\right)$ and |
1282 |
then associating this with a length 3 vector by inverting the |
1283 |
$\mbox{skew}$ function above: |
1284 |
\begin{equation} |
1285 |
\mbox{rot}\left(\mathsf{A}\right) := \mbox{ skew}^{-1}\left(\mathsf{A} |
1286 |
- \mathsf{A}^{T} \right). |
1287 |
\end{equation} |
1288 |
Written this way, the $\mbox{rot}$ operation creates a set of |
1289 |
conjugate angle coordinates to the body-fixed angular momenta |
1290 |
represented by ${\bf j}$. This equation of motion for angular momenta |
1291 |
is equivalent to the more familiar body-fixed forms, |
1292 |
\begin{eqnarray} |
1293 |
\dot{j_{x}} & = & \tau^b_x(t) - |
1294 |
\left(\overleftrightarrow{\mathsf{I}}_{yy}^{-1} - \overleftrightarrow{\mathsf{I}}_{zz}^{-1} \right) j_y j_z, \\ |
1295 |
\dot{j_{y}} & = & \tau^b_y(t) - |
1296 |
\left(\overleftrightarrow{\mathsf{I}}_{zz}^{-1} - \overleftrightarrow{\mathsf{I}}_{xx}^{-1} \right) j_z j_x,\\ |
1297 |
\dot{j_{z}} & = & \tau^b_z(t) - |
1298 |
\left(\overleftrightarrow{\mathsf{I}}_{xx}^{-1} - \overleftrightarrow{\mathsf{I}}_{yy}^{-1} \right) j_x j_y, |
1299 |
\end{eqnarray} |
1300 |
which utilize the body-fixed torques, ${\bf \tau}^b$. Torques are |
1301 |
most easily derived in the space-fixed frame, |
1302 |
\begin{equation} |
1303 |
{\bf \tau}^b(t) = \mathsf{A}(t) \cdot {\bf \tau}^s(t), |
1304 |
\end{equation} |
1305 |
where the torques are either derived from the forces on the |
1306 |
constituent atoms of the rigid body, or for directional atoms, |
1307 |
directly from derivatives of the potential energy, |
1308 |
\begin{equation} |
1309 |
{\bf \tau}^s(t) = - \hat{\bf u}(t) \times \left( \frac{\partial} |
1310 |
{\partial \hat{\bf u}} V\left(\left\{ {\bf r}(t) \right\}, \left\{ |
1311 |
\mathsf{A}(t) \right\}\right) \right). |
1312 |
\end{equation} |
1313 |
Here $\hat{\bf u}$ is a unit vector pointing along the principal axis |
1314 |
of the particle in the space-fixed frame. |
1315 |
|
1316 |
The DLM method uses a Trotter factorization of the orientational |
1317 |
propagator. This has three effects: |
1318 |
\begin{enumerate} |
1319 |
\item the integrator is area-preserving in phase space (i.e. it is |
1320 |
{\it symplectic}), |
1321 |
\item the integrator is time-{\it reversible}, making it suitable for Hybrid |
1322 |
Monte Carlo applications, and |
1323 |
\item the error for a single time step is of order $\mathcal{O}\left(h^4\right)$ |
1324 |
for timesteps of length $h$. |
1325 |
\end{enumerate} |
1326 |
|
1327 |
The integration of the equations of motion is carried out in a |
1328 |
velocity-Verlet style 2-part algorithm, where $h= \delta t$: |
1329 |
|
1330 |
{\tt moveA:} |
1331 |
\begin{align*} |
1332 |
{\bf v}\left(t + h / 2\right) &\leftarrow {\bf v}(t) |
1333 |
+ \frac{h}{2} \left( {\bf f}(t) / m \right), \\ |
1334 |
% |
1335 |
{\bf r}(t + h) &\leftarrow {\bf r}(t) |
1336 |
+ h {\bf v}\left(t + h / 2 \right), \\ |
1337 |
% |
1338 |
{\bf j}\left(t + h / 2 \right) &\leftarrow {\bf j}(t) |
1339 |
+ \frac{h}{2} {\bf \tau}^b(t), \\ |
1340 |
% |
1341 |
\mathsf{A}(t + h) &\leftarrow \mathrm{rotate}\left( h {\bf j} |
1342 |
(t + h / 2) \cdot \overleftrightarrow{\mathsf{I}}^{-1} \right). |
1343 |
\end{align*} |
1344 |
|
1345 |
In this context, the $\mathrm{rotate}$ function is the reversible product |
1346 |
of the three body-fixed rotations, |
1347 |
\begin{equation} |
1348 |
\mathrm{rotate}({\bf a}) = \mathsf{G}_x(a_x / 2) \cdot |
1349 |
\mathsf{G}_y(a_y / 2) \cdot \mathsf{G}_z(a_z) \cdot \mathsf{G}_y(a_y / |
1350 |
2) \cdot \mathsf{G}_x(a_x /2), |
1351 |
\end{equation} |
1352 |
where each rotational propagator, $\mathsf{G}_\alpha(\theta)$, rotates |
1353 |
both the rotation matrix ($\mathsf{A}$) and the body-fixed angular |
1354 |
momentum (${\bf j}$) by an angle $\theta$ around body-fixed axis |
1355 |
$\alpha$, |
1356 |
\begin{equation} |
1357 |
\mathsf{G}_\alpha( \theta ) = \left\{ |
1358 |
\begin{array}{lcl} |
1359 |
\mathsf{A}(t) & \leftarrow & \mathsf{A}(0) \cdot \mathsf{R}_\alpha(\theta)^T, \\ |
1360 |
{\bf j}(t) & \leftarrow & \mathsf{R}_\alpha(\theta) \cdot {\bf j}(0). |
1361 |
\end{array} |
1362 |
\right. |
1363 |
\end{equation} |
1364 |
$\mathsf{R}_\alpha$ is a quadratic approximation to |
1365 |
the single-axis rotation matrix. For example, in the small-angle |
1366 |
limit, the rotation matrix around the body-fixed x-axis can be |
1367 |
approximated as |
1368 |
\begin{equation} |
1369 |
\mathsf{R}_x(\theta) \approx \left( |
1370 |
\begin{array}{ccc} |
1371 |
1 & 0 & 0 \\ |
1372 |
0 & \frac{1-\theta^2 / 4}{1 + \theta^2 / 4} & -\frac{\theta}{1+ |
1373 |
\theta^2 / 4} \\ |
1374 |
0 & \frac{\theta}{1+ |
1375 |
\theta^2 / 4} & \frac{1-\theta^2 / 4}{1 + \theta^2 / 4} |
1376 |
\end{array} |
1377 |
\right). |
1378 |
\end{equation} |
1379 |
All other rotations follow in a straightforward manner. |
1380 |
|
1381 |
After the first part of the propagation, the forces and body-fixed |
1382 |
torques are calculated at the new positions and orientations |
1383 |
|
1384 |
{\tt doForces:} |
1385 |
\begin{align*} |
1386 |
{\bf f}(t + h) &\leftarrow |
1387 |
- \left(\frac{\partial V}{\partial {\bf r}}\right)_{{\bf r}(t + h)}, \\ |
1388 |
% |
1389 |
{\bf \tau}^{s}(t + h) &\leftarrow {\bf u}(t + h) |
1390 |
\times \frac{\partial V}{\partial {\bf u}}, \\ |
1391 |
% |
1392 |
{\bf \tau}^{b}(t + h) &\leftarrow \mathsf{A}(t + h) |
1393 |
\cdot {\bf \tau}^s(t + h). |
1394 |
\end{align*} |
1395 |
|
1396 |
{\sc oopse} automatically updates ${\bf u}$ when the rotation matrix |
1397 |
$\mathsf{A}$ is calculated in {\tt moveA}. Once the forces and |
1398 |
torques have been obtained at the new time step, the velocities can be |
1399 |
advanced to the same time value. |
1400 |
|
1401 |
{\tt moveB:} |
1402 |
\begin{align*} |
1403 |
{\bf v}\left(t + h \right) &\leftarrow {\bf v}\left(t + h / 2 \right) |
1404 |
+ \frac{h}{2} \left( {\bf f}(t + h) / m \right), \\ |
1405 |
% |
1406 |
{\bf j}\left(t + h \right) &\leftarrow {\bf j}\left(t + h / 2 \right) |
1407 |
+ \frac{h}{2} {\bf \tau}^b(t + h) . |
1408 |
\end{align*} |
1409 |
|
1410 |
The matrix rotations used in the DLM method end up being more costly |
1411 |
computationally than the simpler arithmetic quaternion |
1412 |
propagation. With the same time step, a 1000-molecule water simulation |
1413 |
shows an average 7\% increase in computation time using the DLM method |
1414 |
in place of quaternions. This cost is more than justified when |
1415 |
comparing the energy conservation of the two methods as illustrated in |
1416 |
Fig.~\ref{timestep}. |
1417 |
|
1418 |
\begin{figure} |
1419 |
\centering |
1420 |
\includegraphics[width=\linewidth]{timeStep.eps} |
1421 |
\caption[Energy conservation for quaternion versus DLM dynamics]{Energy conservation using quaternion based integration versus |
1422 |
the method proposed by Dullweber \emph{et al.} with increasing time |
1423 |
step. For each time step, the dotted line is total energy using the |
1424 |
DLM integrator, and the solid line comes from the quaternion |
1425 |
integrator. The larger time step plots are shifted up from the true |
1426 |
energy baseline for clarity.} |
1427 |
\label{timestep} |
1428 |
\end{figure} |
1429 |
|
1430 |
In Fig.~\ref{timestep}, the resulting energy drift at various time |
1431 |
steps for both the DLM and quaternion integration schemes is |
1432 |
compared. All of the 1000 molecule water simulations started with the |
1433 |
same configuration, and the only difference was the method for |
1434 |
handling rotational motion. At time steps of 0.1 and 0.5 fs, both |
1435 |
methods for propagating molecule rotation conserve energy fairly well, |
1436 |
with the quaternion method showing a slight energy drift over time in |
1437 |
the 0.5 fs time step simulation. At time steps of 1 and 2 fs, the |
1438 |
energy conservation benefits of the DLM method are clearly |
1439 |
demonstrated. Thus, while maintaining the same degree of energy |
1440 |
conservation, one can take considerably longer time steps, leading to |
1441 |
an overall reduction in computation time. |
1442 |
|
1443 |
There is only one specific keyword relevant to the default integrator, |
1444 |
and that is the time step for integrating the equations of motion. |
1445 |
|
1446 |
\begin{center} |
1447 |
\begin{tabular}{llll} |
1448 |
{\bf variable} & {\bf Meta-data keyword} & {\bf units} & {\bf |
1449 |
default value} \\ |
1450 |
$h$ & {\tt dt = 2.0;} & fs & none |
1451 |
\end{tabular} |
1452 |
\end{center} |
1453 |
|
1454 |
\subsection{\label{sec:extended}Extended Systems for other Ensembles} |
1455 |
|
1456 |
{\sc oopse} implements a number of extended system integrators for |
1457 |
sampling from other ensembles relevant to chemical physics. The |
1458 |
integrator can be selected with the {\tt ensemble} keyword in the |
1459 |
meta-data file: |
1460 |
|
1461 |
\begin{center} |
1462 |
\begin{tabular}{lll} |
1463 |
{\bf Integrator} & {\bf Ensemble} & {\bf Meta-data instruction} \\ |
1464 |
NVE & microcanonical & {\tt ensemble = NVE; } \\ |
1465 |
NVT & canonical & {\tt ensemble = NVT; } \\ |
1466 |
NPTi & isobaric-isothermal & {\tt ensemble = NPTi;} \\ |
1467 |
& (with isotropic volume changes) & \\ |
1468 |
NPTf & isobaric-isothermal & {\tt ensemble = NPTf;} \\ |
1469 |
& (with changes to box shape) & \\ |
1470 |
NPTxyz & approximate isobaric-isothermal & {\tt ensemble = NPTxyz;} \\ |
1471 |
& (with separate barostats on each box dimension) & \\ |
1472 |
\end{tabular} |
1473 |
\end{center} |
1474 |
|
1475 |
The relatively well-known Nos\'e-Hoover thermostat\cite{Hoover85} is |
1476 |
implemented in {\sc oopse}'s NVT integrator. This method couples an |
1477 |
extra degree of freedom (the thermostat) to the kinetic energy of the |
1478 |
system and it has been shown to sample the canonical distribution in |
1479 |
the system degrees of freedom while conserving a quantity that is, to |
1480 |
within a constant, the Helmholtz free energy.\cite{melchionna93} |
1481 |
|
1482 |
NPT algorithms attempt to maintain constant pressure in the system by |
1483 |
coupling the volume of the system to a barostat. {\sc oopse} contains |
1484 |
three different constant pressure algorithms. The first two, NPTi and |
1485 |
NPTf have been shown to conserve a quantity that is, to within a |
1486 |
constant, the Gibbs free energy.\cite{melchionna93} The Melchionna |
1487 |
modification to the Hoover barostat is implemented in both NPTi and |
1488 |
NPTf. NPTi allows only isotropic changes in the simulation box, while |
1489 |
box {\it shape} variations are allowed in NPTf. The NPTxyz integrator |
1490 |
has {\it not} been shown to sample from the isobaric-isothermal |
1491 |
ensemble. It is useful, however, in that it maintains orthogonality |
1492 |
for the axes of the simulation box while attempting to equalize |
1493 |
pressure along the three perpendicular directions in the box. |
1494 |
|
1495 |
Each of the extended system integrators requires additional keywords |
1496 |
to set target values for the thermodynamic state variables that are |
1497 |
being held constant. Keywords are also required to set the |
1498 |
characteristic decay times for the dynamics of the extended |
1499 |
variables. |
1500 |
|
1501 |
\begin{center} |
1502 |
\begin{tabular}{llll} |
1503 |
{\bf variable} & {\bf Meta-data instruction} & {\bf units} & {\bf |
1504 |
default value} \\ |
1505 |
$T_{\mathrm{target}}$ & {\tt targetTemperature = 300;} & K & none \\ |
1506 |
$P_{\mathrm{target}}$ & {\tt targetPressure = 1;} & atm & none \\ |
1507 |
$\tau_T$ & {\tt tauThermostat = 1e3;} & fs & none \\ |
1508 |
$\tau_B$ & {\tt tauBarostat = 5e3;} & fs & none \\ |
1509 |
& {\tt resetTime = 200;} & fs & none \\ |
1510 |
& {\tt useInitialExtendedSystemState = true;} & logical & |
1511 |
true |
1512 |
\end{tabular} |
1513 |
\end{center} |
1514 |
|
1515 |
Two additional keywords can be used to either clear the extended |
1516 |
system variables periodically ({\tt resetTime}), or to maintain the |
1517 |
state of the extended system variables between simulations ({\tt |
1518 |
useInitialExtendedSystemState}). More details on these variables |
1519 |
and their use in the integrators follows below. |
1520 |
|
1521 |
\subsection{\label{oopseSec:noseHooverThermo}Nos\'{e}-Hoover Thermostatting} |
1522 |
|
1523 |
The Nos\'e-Hoover equations of motion are given by\cite{Hoover85} |
1524 |
\begin{eqnarray} |
1525 |
\dot{{\bf r}} & = & {\bf v}, \\ |
1526 |
\dot{{\bf v}} & = & \frac{{\bf f}}{m} - \chi {\bf v} ,\\ |
1527 |
\dot{\mathsf{A}} & = & \mathsf{A} \cdot |
1528 |
\mbox{ skew}\left(\overleftrightarrow{\mathsf{I}}^{-1} \cdot {\bf j}\right), \\ |
1529 |
\dot{{\bf j}} & = & {\bf j} \times \left( \overleftrightarrow{\mathsf{I}}^{-1} |
1530 |
\cdot {\bf j} \right) - \mbox{ rot}\left(\mathsf{A}^{T} \cdot \frac{\partial |
1531 |
V}{\partial \mathsf{A}} \right) - \chi {\bf j}. |
1532 |
\label{eq:nosehoovereom} |
1533 |
\end{eqnarray} |
1534 |
|
1535 |
$\chi$ is an ``extra'' variable included in the extended system, and |
1536 |
it is propagated using the first order equation of motion |
1537 |
\begin{equation} |
1538 |
\dot{\chi} = \frac{1}{\tau_{T}^2} \left( \frac{T}{T_{\mathrm{target}}} - 1 \right). |
1539 |
\label{eq:nosehooverext} |
1540 |
\end{equation} |
1541 |
|
1542 |
The instantaneous temperature $T$ is proportional to the total kinetic |
1543 |
energy (both translational and orientational) and is given by |
1544 |
\begin{equation} |
1545 |
T = \frac{2 K}{f k_B} |
1546 |
\end{equation} |
1547 |
Here, $f$ is the total number of degrees of freedom in the system, |
1548 |
\begin{equation} |
1549 |
f = 3 N + 3 N_{\mathrm{orient}} - N_{\mathrm{constraints}}, |
1550 |
\end{equation} |
1551 |
and $K$ is the total kinetic energy, |
1552 |
\begin{equation} |
1553 |
K = \sum_{i=1}^{N} \frac{1}{2} m_i {\bf v}_i^T \cdot {\bf v}_i + |
1554 |
\sum_{i=1}^{N_{\mathrm{orient}}} \frac{1}{2} {\bf j}_i^T \cdot |
1555 |
\overleftrightarrow{\mathsf{I}}_i^{-1} \cdot {\bf j}_i. |
1556 |
\end{equation} |
1557 |
|
1558 |
In eq.(\ref{eq:nosehooverext}), $\tau_T$ is the time constant for |
1559 |
relaxation of the temperature to the target value. To set values for |
1560 |
$\tau_T$ or $T_{\mathrm{target}}$ in a simulation, one would use the |
1561 |
{\tt tauThermostat} and {\tt targetTemperature} keywords in the |
1562 |
meta-data file. The units for {\tt tauThermostat} are fs, and the |
1563 |
units for the {\tt targetTemperature} are degrees K. The integration |
1564 |
of the equations of motion is carried out in a velocity-Verlet style 2 |
1565 |
part algorithm: |
1566 |
|
1567 |
{\tt moveA:} |
1568 |
\begin{align*} |
1569 |
T(t) &\leftarrow \left\{{\bf v}(t)\right\}, \left\{{\bf j}(t)\right\} ,\\ |
1570 |
% |
1571 |
{\bf v}\left(t + h / 2\right) &\leftarrow {\bf v}(t) |
1572 |
+ \frac{h}{2} \left( \frac{{\bf f}(t)}{m} - {\bf v}(t) |
1573 |
\chi(t)\right), \\ |
1574 |
% |
1575 |
{\bf r}(t + h) &\leftarrow {\bf r}(t) |
1576 |
+ h {\bf v}\left(t + h / 2 \right) ,\\ |
1577 |
% |
1578 |
{\bf j}\left(t + h / 2 \right) &\leftarrow {\bf j}(t) |
1579 |
+ \frac{h}{2} \left( {\bf \tau}^b(t) - {\bf j}(t) |
1580 |
\chi(t) \right) ,\\ |
1581 |
% |
1582 |
\mathsf{A}(t + h) &\leftarrow \mathrm{rotate} |
1583 |
\left(h * {\bf j}(t + h / 2) |
1584 |
\overleftrightarrow{\mathsf{I}}^{-1} \right) ,\\ |
1585 |
% |
1586 |
\chi\left(t + h / 2 \right) &\leftarrow \chi(t) |
1587 |
+ \frac{h}{2 \tau_T^2} \left( \frac{T(t)} |
1588 |
{T_{\mathrm{target}}} - 1 \right) . |
1589 |
\end{align*} |
1590 |
|
1591 |
Here $\mathrm{rotate}(h * {\bf j} |
1592 |
\overleftrightarrow{\mathsf{I}}^{-1})$ is the same symplectic Trotter |
1593 |
factorization of the three rotation operations that was discussed in |
1594 |
the section on the DLM integrator. Note that this operation modifies |
1595 |
both the rotation matrix $\mathsf{A}$ and the angular momentum ${\bf |
1596 |
j}$. {\tt moveA} propagates velocities by a half time step, and |
1597 |
positional degrees of freedom by a full time step. The new positions |
1598 |
(and orientations) are then used to calculate a new set of forces and |
1599 |
torques in exactly the same way they are calculated in the {\tt |
1600 |
doForces} portion of the DLM integrator. |
1601 |
|
1602 |
Once the forces and torques have been obtained at the new time step, |
1603 |
the temperature, velocities, and the extended system variable can be |
1604 |
advanced to the same time value. |
1605 |
|
1606 |
{\tt moveB:} |
1607 |
\begin{align*} |
1608 |
T(t + h) &\leftarrow \left\{{\bf v}(t + h)\right\}, |
1609 |
\left\{{\bf j}(t + h)\right\}, \\ |
1610 |
% |
1611 |
\chi\left(t + h \right) &\leftarrow \chi\left(t + h / |
1612 |
2 \right) + \frac{h}{2 \tau_T^2} \left( \frac{T(t+h)} |
1613 |
{T_{\mathrm{target}}} - 1 \right), \\ |
1614 |
% |
1615 |
{\bf v}\left(t + h \right) &\leftarrow {\bf v}\left(t |
1616 |
+ h / 2 \right) + \frac{h}{2} \left( |
1617 |
\frac{{\bf f}(t + h)}{m} - {\bf v}(t + h) |
1618 |
\chi(t h)\right) ,\\ |
1619 |
% |
1620 |
{\bf j}\left(t + h \right) &\leftarrow {\bf j}\left(t |
1621 |
+ h / 2 \right) + \frac{h}{2} |
1622 |
\left( {\bf \tau}^b(t + h) - {\bf j}(t + h) |
1623 |
\chi(t + h) \right) . |
1624 |
\end{align*} |
1625 |
|
1626 |
Since ${\bf v}(t + h)$ and ${\bf j}(t + h)$ are required to calculate |
1627 |
$T(t + h)$ as well as $\chi(t + h)$, they indirectly depend on their |
1628 |
own values at time $t + h$. {\tt moveB} is therefore done in an |
1629 |
iterative fashion until $\chi(t + h)$ becomes self-consistent. The |
1630 |
relative tolerance for the self-consistency check defaults to a value |
1631 |
of $\mbox{10}^{-6}$, but {\sc oopse} will terminate the iteration |
1632 |
after 4 loops even if the consistency check has not been satisfied. |
1633 |
|
1634 |
The Nos\'e-Hoover algorithm is known to conserve a Hamiltonian for the |
1635 |
extended system that is, to within a constant, identical to the |
1636 |
Helmholtz free energy,\cite{melchionna93} |
1637 |
\begin{equation} |
1638 |
H_{\mathrm{NVT}} = V + K + f k_B T_{\mathrm{target}} \left( |
1639 |
\frac{\tau_{T}^2 \chi^2(t)}{2} + \int_{0}^{t} \chi(t^\prime) dt^\prime |
1640 |
\right). |
1641 |
\end{equation} |
1642 |
Poor choices of $h$ or $\tau_T$ can result in non-conservation |
1643 |
of $H_{\mathrm{NVT}}$, so the conserved quantity is maintained in the |
1644 |
last column of the {\tt .stat} file to allow checks on the quality of |
1645 |
the integration. |
1646 |
|
1647 |
Bond constraints are applied at the end of both the {\tt moveA} and |
1648 |
{\tt moveB} portions of the algorithm. Details on the constraint |
1649 |
algorithms are given in section \ref{oopseSec:rattle}. |
1650 |
|
1651 |
\subsection{\label{sec:NPTi}Constant-pressure integration with |
1652 |
isotropic box deformations (NPTi)} |
1653 |
|
1654 |
To carry out isobaric-isothermal ensemble calculations, {\sc oopse} |
1655 |
implements the Melchionna modifications to the Nos\'e-Hoover-Andersen |
1656 |
equations of motion.\cite{melchionna93} The equations of motion are |
1657 |
the same as NVT with the following exceptions: |
1658 |
|
1659 |
\begin{eqnarray} |
1660 |
\dot{{\bf r}} & = & {\bf v} + \eta \left( {\bf r} - {\bf R}_0 \right), \\ |
1661 |
\dot{{\bf v}} & = & \frac{{\bf f}}{m} - (\eta + \chi) {\bf v}, \\ |
1662 |
\dot{\eta} & = & \frac{1}{\tau_{B}^2 f k_B T_{\mathrm{target}}} V \left( P - |
1663 |
P_{\mathrm{target}} \right), \\ |
1664 |
\dot{\mathcal{V}} & = & 3 \mathcal{V} \eta . |
1665 |
\label{eq:melchionna1} |
1666 |
\end{eqnarray} |
1667 |
|
1668 |
$\chi$ and $\eta$ are the ``extra'' degrees of freedom in the extended |
1669 |
system. $\chi$ is a thermostat, and it has the same function as it |
1670 |
does in the Nos\'e-Hoover NVT integrator. $\eta$ is a barostat which |
1671 |
controls changes to the volume of the simulation box. ${\bf R}_0$ is |
1672 |
the location of the center of mass for the entire system, and |
1673 |
$\mathcal{V}$ is the volume of the simulation box. At any time, the |
1674 |
volume can be calculated from the determinant of the matrix which |
1675 |
describes the box shape: |
1676 |
\begin{equation} |
1677 |
\mathcal{V} = \det(\mathsf{H}). |
1678 |
\end{equation} |
1679 |
|
1680 |
The NPTi integrator requires an instantaneous pressure. This quantity |
1681 |
is calculated via the pressure tensor, |
1682 |
\begin{equation} |
1683 |
\overleftrightarrow{\mathsf{P}}(t) = \frac{1}{\mathcal{V}(t)} \left( |
1684 |
\sum_{i=1}^{N} m_i {\bf v}_i(t) \otimes {\bf v}_i(t) \right) + |
1685 |
\overleftrightarrow{\mathsf{W}}(t). |
1686 |
\end{equation} |
1687 |
The kinetic contribution to the pressure tensor utilizes the {\it |
1688 |
outer} product of the velocities, denoted by the $\otimes$ symbol. The |
1689 |
stress tensor is calculated from another outer product of the |
1690 |
inter-atomic separation vectors (${\bf r}_{ij} = {\bf r}_j - {\bf |
1691 |
r}_i$) with the forces between the same two atoms, |
1692 |
\begin{equation} |
1693 |
\overleftrightarrow{\mathsf{W}}(t) = \sum_{i} \sum_{j>i} {\bf r}_{ij}(t) |
1694 |
\otimes {\bf f}_{ij}(t). |
1695 |
\end{equation} |
1696 |
In systems containing cutoff groups, the stress tensor is computed |
1697 |
between the centers-of-mass of the cutoff groups: |
1698 |
\begin{equation} |
1699 |
\overleftrightarrow{\mathsf{W}}(t) = \sum_{a} \sum_{b} {\bf r}_{ab}(t) |
1700 |
\otimes {\bf f}_{ab}(t). |
1701 |
\end{equation} |
1702 |
where ${\bf r}_{ab}$ is the distance between the centers of mass, and |
1703 |
\begin{equation} |
1704 |
{\bf f}_{ab} = s(r_{ab}) \sum_{i \in a} \sum_{j \in b} {\bf f}_{ij} + |
1705 |
s\prime(r_{ab}) \frac{{\bf r}_{ab}}{|r_{ab}|} \sum_{i \in a} \sum_{j |
1706 |
\in b} V_{ij}({\bf r}_{ij}). |
1707 |
\end{equation} |
1708 |
|
1709 |
The instantaneous pressure is then simply obtained from the trace of |
1710 |
the pressure tensor, |
1711 |
\begin{equation} |
1712 |
P(t) = \frac{1}{3} \mathrm{Tr} \left( \overleftrightarrow{\mathsf{P}}(t). |
1713 |
\right) |
1714 |
\end{equation} |
1715 |
|
1716 |
In eq.(\ref{eq:melchionna1}), $\tau_B$ is the time constant for |
1717 |
relaxation of the pressure to the target value. To set values for |
1718 |
$\tau_B$ or $P_{\mathrm{target}}$ in a simulation, one would use the |
1719 |
{\tt tauBarostat} and {\tt targetPressure} keywords in the meta-data |
1720 |
file. The units for {\tt tauBarostat} are fs, and the units for the |
1721 |
{\tt targetPressure} are atmospheres. Like in the NVT integrator, the |
1722 |
integration of the equations of motion is carried out in a |
1723 |
velocity-Verlet style 2 part algorithm with only the following differences: |
1724 |
|
1725 |
{\tt moveA:} |
1726 |
\begin{align*} |
1727 |
P(t) &\leftarrow \left\{{\bf r}(t)\right\}, \left\{{\bf v}(t)\right\} ,\\ |
1728 |
% |
1729 |
{\bf v}\left(t + h / 2\right) &\leftarrow {\bf v}(t) |
1730 |
+ \frac{h}{2} \left( \frac{{\bf f}(t)}{m} - {\bf v}(t) |
1731 |
\left(\chi(t) + \eta(t) \right) \right), \\ |
1732 |
% |
1733 |
\eta(t + h / 2) &\leftarrow \eta(t) + \frac{h |
1734 |
\mathcal{V}(t)}{2 N k_B T(t) \tau_B^2} \left( P(t) |
1735 |
- P_{\mathrm{target}} \right), \\ |
1736 |
% |
1737 |
{\bf r}(t + h) &\leftarrow {\bf r}(t) + h |
1738 |
\left\{ {\bf v}\left(t + h / 2 \right) |
1739 |
+ \eta(t + h / 2)\left[ {\bf r}(t + h) |
1740 |
- {\bf R}_0 \right] \right\} ,\\ |
1741 |
% |
1742 |
\mathsf{H}(t + h) &\leftarrow e^{-h \eta(t + h / 2)} |
1743 |
\mathsf{H}(t). |
1744 |
\end{align*} |
1745 |
|
1746 |
The propagation of positions to time $t + h$ |
1747 |
depends on the positions at the same time. {\sc oopse} carries out |
1748 |
this step iteratively (with a limit of 5 passes through the iterative |
1749 |
loop). Also, the simulation box $\mathsf{H}$ is scaled uniformly for |
1750 |
one full time step by an exponential factor that depends on the value |
1751 |
of $\eta$ at time $t + |
1752 |
h / 2$. Reshaping the box uniformly also scales the volume of |
1753 |
the box by |
1754 |
\begin{equation} |
1755 |
\mathcal{V}(t + h) \leftarrow e^{ - 3 h \eta(t + h /2)} \times |
1756 |
\mathcal{V}(t) |
1757 |
\end{equation} |
1758 |
|
1759 |
The {\tt doForces} step for the NPTi integrator is exactly the same as |
1760 |
in both the DLM and NVT integrators. Once the forces and torques have |
1761 |
been obtained at the new time step, the velocities can be advanced to |
1762 |
the same time value. |
1763 |
|
1764 |
{\tt moveB:} |
1765 |
\begin{align*} |
1766 |
P(t + h) &\leftarrow \left\{{\bf r}(t + h)\right\}, |
1767 |
\left\{{\bf v}(t + h)\right\}, \\ |
1768 |
% |
1769 |
\eta(t + h) &\leftarrow \eta(t + h / 2) + |
1770 |
\frac{h \mathcal{V}(t + h)}{2 N k_B T(t + h) |
1771 |
\tau_B^2} \left( P(t + h) - P_{\mathrm{target}} \right), \\ |
1772 |
% |
1773 |
{\bf v}\left(t + h \right) &\leftarrow {\bf v}\left(t |
1774 |
+ h / 2 \right) + \frac{h}{2} \left( |
1775 |
\frac{{\bf f}(t + h)}{m} - {\bf v}(t + h) |
1776 |
(\chi(t + h) + \eta(t + h)) \right) ,\\ |
1777 |
% |
1778 |
{\bf j}\left(t + h \right) &\leftarrow {\bf j}\left(t |
1779 |
+ h / 2 \right) + \frac{h}{2} \left( {\bf |
1780 |
\tau}^b(t + h) - {\bf j}(t + h) |
1781 |
\chi(t + h) \right) . |
1782 |
\end{align*} |
1783 |
|
1784 |
Once again, since ${\bf v}(t + h)$ and ${\bf j}(t + h)$ are required |
1785 |
to calculate $T(t + h)$, $P(t + h)$, $\chi(t + h)$, and $\eta(t + |
1786 |
h)$, they indirectly depend on their own values at time $t + h$. {\tt |
1787 |
moveB} is therefore done in an iterative fashion until $\chi(t + h)$ |
1788 |
and $\eta(t + h)$ become self-consistent. The relative tolerance for |
1789 |
the self-consistency check defaults to a value of $\mbox{10}^{-6}$, |
1790 |
but {\sc oopse} will terminate the iteration after 4 loops even if the |
1791 |
consistency check has not been satisfied. |
1792 |
|
1793 |
The Melchionna modification of the Nos\'e-Hoover-Andersen algorithm is |
1794 |
known to conserve a Hamiltonian for the extended system that is, to |
1795 |
within a constant, identical to the Gibbs free energy, |
1796 |
\begin{equation} |
1797 |
H_{\mathrm{NPTi}} = V + K + f k_B T_{\mathrm{target}} \left( |
1798 |
\frac{\tau_{T}^2 \chi^2(t)}{2} + \int_{0}^{t} \chi(t^\prime) dt^\prime |
1799 |
\right) + P_{\mathrm{target}} \mathcal{V}(t). |
1800 |
\end{equation} |
1801 |
Poor choices of $\delta t$, $\tau_T$, or $\tau_B$ can result in |
1802 |
non-conservation of $H_{\mathrm{NPTi}}$, so the conserved quantity is |
1803 |
maintained in the last column of the {\tt .stat} file to allow checks |
1804 |
on the quality of the integration. It is also known that this |
1805 |
algorithm samples the equilibrium distribution for the enthalpy |
1806 |
(including contributions for the thermostat and barostat), |
1807 |
\begin{equation} |
1808 |
H_{\mathrm{NPTi}} = V + K + \frac{f k_B T_{\mathrm{target}}}{2} \left( |
1809 |
\chi^2 \tau_T^2 + \eta^2 \tau_B^2 \right) + P_{\mathrm{target}} |
1810 |
\mathcal{V}(t). |
1811 |
\end{equation} |
1812 |
|
1813 |
Bond constraints are applied at the end of both the {\tt moveA} and |
1814 |
{\tt moveB} portions of the algorithm. Details on the constraint |
1815 |
algorithms are given in section \ref{oopseSec:rattle}. |
1816 |
|
1817 |
\subsection{\label{sec:NPTf}Constant-pressure integration with a |
1818 |
flexible box (NPTf)} |
1819 |
|
1820 |
There is a relatively simple generalization of the |
1821 |
Nos\'e-Hoover-Andersen method to include changes in the simulation box |
1822 |
{\it shape} as well as in the volume of the box. This method utilizes |
1823 |
the full $3 \times 3$ pressure tensor and introduces a tensor of |
1824 |
extended variables ($\overleftrightarrow{\eta}$) to control changes to |
1825 |
the box shape. The equations of motion for this method differ from |
1826 |
those of NPTi as follows: |
1827 |
\begin{eqnarray} |
1828 |
\dot{{\bf r}} & = & {\bf v} + \overleftrightarrow{\eta} \cdot \left( {\bf r} - {\bf R}_0 \right), \\ |
1829 |
\dot{{\bf v}} & = & \frac{{\bf f}}{m} - (\overleftrightarrow{\eta} + |
1830 |
\chi \cdot \mathsf{1}) {\bf v}, \\ |
1831 |
\dot{\overleftrightarrow{\eta}} & = & \frac{1}{\tau_{B}^2 f k_B |
1832 |
T_{\mathrm{target}}} V \left( \overleftrightarrow{\mathsf{P}} - P_{\mathrm{target}}\mathsf{1} \right) ,\\ |
1833 |
\dot{\mathsf{H}} & = & \overleftrightarrow{\eta} \cdot \mathsf{H} . |
1834 |
\label{eq:melchionna2} |
1835 |
\end{eqnarray} |
1836 |
|
1837 |
Here, $\mathsf{1}$ is the unit matrix and $\overleftrightarrow{\mathsf{P}}$ |
1838 |
is the pressure tensor. Again, the volume, $\mathcal{V} = \det |
1839 |
\mathsf{H}$. |
1840 |
|
1841 |
The propagation of the equations of motion is nearly identical to the |
1842 |
NPTi integration: |
1843 |
|
1844 |
{\tt moveA:} |
1845 |
\begin{align*} |
1846 |
\overleftrightarrow{\mathsf{P}}(t) &\leftarrow \left\{{\bf r}(t)\right\}, |
1847 |
\left\{{\bf v}(t)\right\} ,\\ |
1848 |
% |
1849 |
{\bf v}\left(t + h / 2\right) &\leftarrow {\bf v}(t) |
1850 |
+ \frac{h}{2} \left( \frac{{\bf f}(t)}{m} - |
1851 |
\left(\chi(t)\mathsf{1} + \overleftrightarrow{\eta}(t) \right) \cdot |
1852 |
{\bf v}(t) \right), \\ |
1853 |
% |
1854 |
\overleftrightarrow{\eta}(t + h / 2) &\leftarrow |
1855 |
\overleftrightarrow{\eta}(t) + \frac{h \mathcal{V}(t)}{2 N k_B |
1856 |
T(t) \tau_B^2} \left( \overleftrightarrow{\mathsf{P}}(t) |
1857 |
- P_{\mathrm{target}}\mathsf{1} \right), \\ |
1858 |
% |
1859 |
{\bf r}(t + h) &\leftarrow {\bf r}(t) + h \left\{ {\bf v} |
1860 |
\left(t + h / 2 \right) + \overleftrightarrow{\eta}(t + |
1861 |
h / 2) \cdot \left[ {\bf r}(t + h) |
1862 |
- {\bf R}_0 \right] \right\}, \\ |
1863 |
% |
1864 |
\mathsf{H}(t + h) &\leftarrow \mathsf{H}(t) \cdot e^{-h |
1865 |
\overleftrightarrow{\eta}(t + h / 2)} . |
1866 |
\end{align*} |
1867 |
{\sc oopse} uses a power series expansion truncated at second order |
1868 |
for the exponential operation which scales the simulation box. |
1869 |
|
1870 |
The {\tt moveB} portion of the algorithm is largely unchanged from the |
1871 |
NPTi integrator: |
1872 |
|
1873 |
{\tt moveB:} |
1874 |
\begin{align*} |
1875 |
\overleftrightarrow{\mathsf{P}}(t + h) &\leftarrow \left\{{\bf r} |
1876 |
(t + h)\right\}, \left\{{\bf v}(t |
1877 |
+ h)\right\}, \left\{{\bf f}(t + h)\right\} ,\\ |
1878 |
% |
1879 |
\overleftrightarrow{\eta}(t + h) &\leftarrow |
1880 |
\overleftrightarrow{\eta}(t + h / 2) + |
1881 |
\frac{h \mathcal{V}(t + h)}{2 N k_B T(t + h) |
1882 |
\tau_B^2} \left( \overleftrightarrow{P}(t + h) |
1883 |
- P_{\mathrm{target}}\mathsf{1} \right) ,\\ |
1884 |
% |
1885 |
{\bf v}\left(t + h \right) &\leftarrow {\bf v}\left(t |
1886 |
+ h / 2 \right) + \frac{h}{2} \left( |
1887 |
\frac{{\bf f}(t + h)}{m} - |
1888 |
(\chi(t + h)\mathsf{1} + \overleftrightarrow{\eta}(t |
1889 |
+ h)) \right) \cdot {\bf v}(t + h), \\ |
1890 |
\end{align*} |
1891 |
|
1892 |
The iterative schemes for both {\tt moveA} and {\tt moveB} are |
1893 |
identical to those described for the NPTi integrator. |
1894 |
|
1895 |
The NPTf integrator is known to conserve the following Hamiltonian: |
1896 |
\begin{equation} |
1897 |
H_{\mathrm{NPTf}} = V + K + f k_B T_{\mathrm{target}} \left( |
1898 |
\frac{\tau_{T}^2 \chi^2(t)}{2} + \int_{0}^{t} \chi(t^\prime) dt^\prime |
1899 |
\right) + P_{\mathrm{target}} \mathcal{V}(t) + \frac{f k_B |
1900 |
T_{\mathrm{target}}}{2} |
1901 |
\mathrm{Tr}\left[\overleftrightarrow{\eta}(t)\right]^2 \tau_B^2. |
1902 |
\end{equation} |
1903 |
|
1904 |
This integrator must be used with care, particularly in liquid |
1905 |
simulations. Liquids have very small restoring forces in the |
1906 |
off-diagonal directions, and the simulation box can very quickly form |
1907 |
elongated and sheared geometries which become smaller than the cutoff |
1908 |
radius. The NPTf integrator finds most use in simulating crystals or |
1909 |
liquid crystals which assume non-orthorhombic geometries. |
1910 |
|
1911 |
\subsection{\label{nptxyz}Constant pressure in 3 axes (NPTxyz)} |
1912 |
|
1913 |
There is one additional extended system integrator which is somewhat |
1914 |
simpler than the NPTf method described above. In this case, the three |
1915 |
axes have independent barostats which each attempt to preserve the |
1916 |
target pressure along the box walls perpendicular to that particular |
1917 |
axis. The lengths of the box axes are allowed to fluctuate |
1918 |
independently, but the angle between the box axes does not change. |
1919 |
The equations of motion are identical to those described above, but |
1920 |
only the {\it diagonal} elements of $\overleftrightarrow{\eta}$ are |
1921 |
computed. The off-diagonal elements are set to zero (even when the |
1922 |
pressure tensor has non-zero off-diagonal elements). |
1923 |
|
1924 |
It should be noted that the NPTxyz integrator is {\it not} known to |
1925 |
preserve any Hamiltonian of interest to the chemical physics |
1926 |
community. The integrator is extremely useful, however, in generating |
1927 |
initial conditions for other integration methods. It {\it is} suitable |
1928 |
for use with liquid simulations, or in cases where there is |
1929 |
orientational anisotropy in the system (i.e. in lipid bilayer |
1930 |
simulations). |
1931 |
|
1932 |
\subsection{\label{sec:constraints}Constraint Methods} |
1933 |
|
1934 |
\subsubsection{\label{oopseSec:rattle}The {\sc rattle} Method for Bond |
1935 |
Constraints} |
1936 |
|
1937 |
In order to satisfy the constraints of fixed bond lengths within {\sc |
1938 |
oopse}, we have implemented the {\sc rattle} algorithm of |
1939 |
Andersen.\cite{andersen83} {\sc rattle} is a velocity-Verlet |
1940 |
formulation of the {\sc shake} method\cite{ryckaert77} for iteratively |
1941 |
solving the Lagrange multipliers which maintain the holonomic |
1942 |
constraints. Both methods are covered in depth in the |
1943 |
literature,\cite{leach01:mm,allen87:csl} and a detailed description of |
1944 |
this method would be redundant. |
1945 |
|
1946 |
\subsubsection{\label{oopseSec:zcons}The Z-Constraint Method} |
1947 |
|
1948 |
A force auto-correlation method based on the fluctuation-dissipation |
1949 |
theorem was developed by Roux and Karplus to investigate the dynamics |
1950 |
of ions inside ion channels.\cite{Roux91} The time-dependent friction |
1951 |
coefficient can be calculated from the deviation of the instantaneous |
1952 |
force from its mean value: |
1953 |
\begin{equation} |
1954 |
\xi(z,t)=\langle\delta F(z,t)\delta F(z,0)\rangle/k_{B}T, |
1955 |
\end{equation} |
1956 |
where% |
1957 |
\begin{equation} |
1958 |
\delta F(z,t)=F(z,t)-\langle F(z,t)\rangle. |
1959 |
\end{equation} |
1960 |
|
1961 |
If the time-dependent friction decays rapidly, the static friction |
1962 |
coefficient can be approximated by |
1963 |
\begin{equation} |
1964 |
\xi_{\text{static}}(z)=\int_{0}^{\infty}\langle\delta F(z,t)\delta F(z,0)\rangle dt. |
1965 |
\end{equation} |
1966 |
|
1967 |
This allows the diffusion constant to then be calculated through the |
1968 |
Einstein relation:\cite{Marrink94} |
1969 |
\begin{equation} |
1970 |
D(z)=\frac{k_{B}T}{\xi_{\text{static}}(z)}=\frac{(k_{B}T)^{2}}{\int_{0}^{\infty |
1971 |
}\langle\delta F(z,t)\delta F(z,0)\rangle dt}.% |
1972 |
\end{equation} |
1973 |
|
1974 |
The Z-Constraint method, which fixes the $z$ coordinates of a few |
1975 |
``tagged'' molecules with respect to the center of the mass of the |
1976 |
system is a technique that was proposed to obtain the forces required |
1977 |
for the force auto-correlation calculation.\cite{Marrink94} However, |
1978 |
simply resetting the coordinate will move the center of the mass of |
1979 |
the whole system. To avoid this problem, we have developed a new |
1980 |
method that is utilized in {\sc oopse}. Instead of resetting the |
1981 |
coordinates, we reset the forces of $z$-constrained molecules and |
1982 |
subtract the total constraint forces from the rest of the system after |
1983 |
the force calculation at each time step. |
1984 |
|
1985 |
After the force calculation, the total force on molecule $\alpha$, |
1986 |
\begin{equation} |
1987 |
G_{\alpha} = \sum_i F_{\alpha i}, |
1988 |
\label{oopseEq:zc1} |
1989 |
\end{equation} |
1990 |
where $F_{\alpha i}$ is the force in the $z$ direction on atom $i$ in |
1991 |
$z$-constrained molecule $\alpha$. The forces on the atoms in the |
1992 |
$z$-constrained molecule are then adjusted to remove the total force |
1993 |
on molecule $\alpha$: |
1994 |
\begin{equation} |
1995 |
F_{\alpha i} = F_{\alpha i} - |
1996 |
\frac{m_{\alpha i} G_{\alpha}}{\sum_i m_{\alpha i}}. |
1997 |
\end{equation} |
1998 |
Here, $m_{\alpha i}$ is the mass of atom $i$ in the $z$-constrained |
1999 |
molecule. After the forces have been adjusted, the velocities must |
2000 |
also be modified to subtract out molecule $\alpha$'s center-of-mass |
2001 |
velocity in the $z$ direction. |
2002 |
\begin{equation} |
2003 |
v_{\alpha i} = v_{\alpha i} - |
2004 |
\frac{\sum_i m_{\alpha i} v_{\alpha i}}{\sum_i m_{\alpha i}}, |
2005 |
\end{equation} |
2006 |
where $v_{\alpha i}$ is the velocity of atom $i$ in the z direction. |
2007 |
Lastly, all of the accumulated constraint forces must be subtracted |
2008 |
from the rest of the unconstrained system to keep the system center of |
2009 |
mass of the entire system from drifting. |
2010 |
\begin{equation} |
2011 |
F_{\beta i} = F_{\beta i} - \frac{m_{\beta i} \sum_{\alpha} G_{\alpha}} |
2012 |
{\sum_{\beta}\sum_i m_{\beta i}}, |
2013 |
\end{equation} |
2014 |
where $\beta$ denotes all {\it unconstrained} molecules in the |
2015 |
system. Similarly, the velocities of the unconstrained molecules must |
2016 |
also be scaled: |
2017 |
\begin{equation} |
2018 |
v_{\beta i} = v_{\beta i} + \sum_{\alpha} \frac{\sum_i m_{\alpha i} |
2019 |
v_{\alpha i}}{\sum_i m_{\alpha i}}. |
2020 |
\end{equation} |
2021 |
|
2022 |
This method will pin down the centers-of-mass of all of the |
2023 |
$z$-constrained molecules, and will also keep the entire system fixed |
2024 |
at the original system center-of-mass location. |
2025 |
|
2026 |
At the very beginning of the simulation, the molecules may not be at |
2027 |
their desired positions. To steer a $z$-constrained molecule to its |
2028 |
specified position, a simple harmonic potential is used: |
2029 |
\begin{equation} |
2030 |
U(t)=\frac{1}{2}k_{\text{Harmonic}}(z(t)-z_{\text{cons}})^{2},% |
2031 |
\end{equation} |
2032 |
where $k_{\text{Harmonic}}$ is an harmonic force constant, $z(t)$ is |
2033 |
the current $z$ coordinate of the center of mass of the constrained |
2034 |
molecule, and $z_{\text{cons}}$ is the desired constraint |
2035 |
position. The harmonic force operating on the $z$-constrained molecule |
2036 |
at time $t$ can be calculated by |
2037 |
\begin{equation} |
2038 |
F_{z_{\text{Harmonic}}}(t)=-\frac{\partial U(t)}{\partial z(t)}= |
2039 |
-k_{\text{Harmonic}}(z(t)-z_{\text{cons}}). |
2040 |
\end{equation} |
2041 |
|
2042 |
The user may also specify the use of a constant velocity method |
2043 |
(steered molecular dynamics) to move the molecules to their desired |
2044 |
initial positions. |
2045 |
|
2046 |
To use of the $z$-constraint method in an {\sc oopse} simulation, the |
2047 |
molecules must be specified using the {\tt nZconstraints} keyword in |
2048 |
the meta-data file. The other parameters for modifying the behavior |
2049 |
of the $z$-constraint method are listed in table~\ref{table:zconParams}. |
2050 |
|
2051 |
\begin{table} |
2052 |
\caption{The Global Keywords: Z-Constraint Parameters} |
2053 |
\label{table:zconParams} |
2054 |
\begin{center} |
2055 |
% Note when adding or removing columns, the \hsize numbers must add up to the total number |
2056 |
% of columns. |
2057 |
\begin{tabularx}{\linewidth}% |
2058 |
{>{\setlength{\hsize}{1.00\hsize}}X% |
2059 |
>{\setlength{\hsize}{0.4\hsize}}X% |
2060 |
>{\setlength{\hsize}{1.2\hsize}}X% |
2061 |
>{\setlength{\hsize}{1.4\hsize}}X} |
2062 |
|
2063 |
{\bf keyword} & {\bf units} & {\bf use} & {\bf remarks} \\ \hline |
2064 |
|
2065 |
{\tt nZconstraints} & integer & The number of zconstraint molecules& If using zconstraint method, {\tt nZconstraints} must be set \\ |
2066 |
{\tt zconsTime} & fs & Sets the frequency at which the {\tt .fz} file is written & \\ |
2067 |
{\tt zconsForcePolicy} & string & The strategy of subtracting |
2068 |
zconstraint force from the unconstrained molecules & Possible |
2069 |
strategies are {\tt BYMASS} and {\tt BYNUMBER}. Default |
2070 |
strategy is set to {\tt BYMASS}\\ |
2071 |
{\tt zconsGap} & $\mbox{\AA}$ & Set the distance between two adjacent |
2072 |
constraint positions& Used mainly in moving molecules through a simulation \\ |
2073 |
{\tt zconsFixtime} & fs & Sets how long the zconstraint molecule is |
2074 |
fixed & {\tt zconsFixtime} must be set if {\tt zconsGap} is set\\ |
2075 |
{\tt zconsUsingSMD} &logical & Flag for using Steered Molecular |
2076 |
Dynamics or Harmonic Forces to move the molecule & Harmonic Forces are |
2077 |
used by default\\ |
2078 |
|
2079 |
\end{tabularx} |
2080 |
\end{center} |
2081 |
\end{table} |
2082 |
|
2083 |
|
2084 |
\section{\label{sec:minimize}Energy Minimization} |
2085 |
|
2086 |
As one of the basic procedures of molecular modeling, energy |
2087 |
minimization is used to identify local configurations that are stable |
2088 |
points on the potential energy surface. There is a vast literature on |
2089 |
energy minimization algorithms have been developed to search for the |
2090 |
global energy minimum as well as to find local structures which are |
2091 |
stable fixed points on the surface. We have included two simple |
2092 |
minimization algorithms: steepest descent, ({\sc sd}) and conjugate |
2093 |
gradient ({\sc cg}) to help users find reasonable local minima from |
2094 |
their initial configurations. |
2095 |
|
2096 |
Since {\sc oopse} handles atoms and rigid bodies which have |
2097 |
orientational coordinates as well as translational coordinates, there |
2098 |
is some subtlety to the choice of parameters for minimization |
2099 |
algorithms. |
2100 |
|
2101 |
Given a coordinate set $x_{k}$ and a search direction $d_{k}$, a line |
2102 |
search algorithm is performed along $d_{k}$ to produce |
2103 |
$x_{k+1}=x_{k}+$ $\lambda _{k}d_{k}$. |
2104 |
|
2105 |
In the steepest descent ({\sc sd}) algorithm,% |
2106 |
\begin{equation} |
2107 |
d_{k}=-\nabla V(x_{k}) |
2108 |
\end{equation} |
2109 |
The gradient and the direction of next step are always orthogonal. |
2110 |
This may cause oscillatory behavior in narrow valleys. To overcome |
2111 |
this problem, the Fletcher-Reeves variant~\cite{FletcherReeves} of the |
2112 |
conjugate gradient ({\sc cg}) algorithm is used to generate $d_{k+1}$ |
2113 |
via simple recursion: |
2114 |
\begin{align} |
2115 |
d_{k+1} & =-\nabla V(x_{k+1})+\gamma_{k}d_{k}\\ |
2116 |
\gamma_{k} & =\frac{\nabla V(x_{k+1})^{T}\nabla V(x_{k+1})}{\nabla |
2117 |
V(x_{k})^{T}\nabla V(x_{k})}% |
2118 |
\end{align} |
2119 |
|
2120 |
The Polak-Ribiere variant~\cite{PolakRibiere} of the conjugate |
2121 |
gradient ($\gamma_{k}$) is defined as% |
2122 |
\begin{equation} |
2123 |
\gamma_{k}=\frac{[\nabla V(x_{k+1})-\nabla V(x)]^{T}\nabla V(x_{k+1})}{\nabla |
2124 |
V(x_{k})^{T}\nabla V(x_{k})}% |
2125 |
\end{equation} |
2126 |
|
2127 |
The conjugate gradient method assumes that the conformation is close |
2128 |
enough to a local minimum that the potential energy surface is very |
2129 |
nearly quadratic. When the initial structure is far from the minimum, |
2130 |
the steepest descent method can be superior to the conjugate gradient |
2131 |
method. Hence, the steepest descent method is often used for the first |
2132 |
10-100 steps of minimization. Another useful feature of minimization |
2133 |
methods in {\sc oopse} is that a modified {\sc shake} algorithm can be |
2134 |
applied during the minimization to constraint the bond lengths if this |
2135 |
is required by the force field. Meta-data parameters concerning the |
2136 |
minimizer are given in Table~\ref{table:minimizeParams} |
2137 |
|
2138 |
\begin{table} |
2139 |
\caption{The Global Keywords: Energy Minimizer Parameters} |
2140 |
\label{table:minimizeParams} |
2141 |
\begin{center} |
2142 |
% Note when adding or removing columns, the \hsize numbers must add up to the total number |
2143 |
% of columns. |
2144 |
\begin{tabularx}{\linewidth}% |
2145 |
{>{\setlength{\hsize}{1.2\hsize}}X% |
2146 |
>{\setlength{\hsize}{0.6\hsize}}X% |
2147 |
>{\setlength{\hsize}{1.1\hsize}}X% |
2148 |
>{\setlength{\hsize}{1.1\hsize}}X} |
2149 |
|
2150 |
{\bf keyword} & {\bf units} & {\bf use} & {\bf remarks} \\ \hline |
2151 |
|
2152 |
{\tt minimizer} & string & selects the minimization method to be used |
2153 |
& either {\tt CG} (conjugate gradient) or {\tt SD} (steepest |
2154 |
descent) \\ |
2155 |
{\tt minimizerMaxIter} & steps & Sets the maximum iteration number in the energy minimization & Default value is 200\\ |
2156 |
{\tt minimizerWriteFreq} & steps & Sets the frequency at which the {\tt .dump} and {\tt .stat} files are writtern during energy minimization & \\ |
2157 |
{\tt minimizerStepSize} & $\mbox{\AA}$ & Set the step size of line search & Default value is 0.01\\ |
2158 |
{\tt minimizerFTol} & $\mbox{kcal mol}^{-1}$ & Sets energy tolerance & Default value is $10^{-8}$\\ |
2159 |
{\tt minimizerGTol} & $\mbox{kcal mol}^{-1}\mbox{\AA}^{-1}$ & Sets gradient tolerance & Default value is $10^{-8}$\\ |
2160 |
{\tt minimizerLSTol} & $\mbox{kcal mol}^{-1}$ & Sets line search tolerance & Default value is $10^{-8}$\\ |
2161 |
{\tt minimizerLSMaxIter} & steps & Sets the maximum iteration of line searching & Default value is 50\\ |
2162 |
|
2163 |
\end{tabularx} |
2164 |
\end{center} |
2165 |
\end{table} |
2166 |
|
2167 |
\section{\label{oopseSec:parallelization} Parallel Simulation Implementation} |
2168 |
|
2169 |
Although processor power is continually improving, it is still |
2170 |
unreasonable to simulate systems of more then a 1000 atoms on a single |
2171 |
processor. To facilitate study of larger system sizes or smaller |
2172 |
systems for longer time scales, parallel methods were developed to |
2173 |
allow multiple CPU's to share the simulation workload. Three general |
2174 |
categories of parallel decomposition methods have been developed: |
2175 |
these are the atomic,\cite{Fox88} spatial~\cite{plimpton95} and |
2176 |
force~\cite{Paradyn} decomposition methods. |
2177 |
|
2178 |
Algorithmically simplest of the three methods is atomic decomposition, |
2179 |
where $N$ particles in a simulation are split among $P$ processors for |
2180 |
the duration of the simulation. Computational cost scales as an |
2181 |
optimal $\mathcal{O}(N/P)$ for atomic decomposition. Unfortunately all |
2182 |
processors must communicate positions and forces with all other |
2183 |
processors at every force evaluation, leading the communication costs |
2184 |
to scale as an unfavorable $\mathcal{O}(N)$, \emph{independent of the |
2185 |
number of processors}. This communication bottleneck led to the |
2186 |
development of spatial and force decomposition methods, in which |
2187 |
communication among processors scales much more favorably. Spatial or |
2188 |
domain decomposition divides the physical spatial domain into 3D boxes |
2189 |
in which each processor is responsible for calculation of forces and |
2190 |
positions of particles located in its box. Particles are reassigned to |
2191 |
different processors as they move through simulation space. To |
2192 |
calculate forces on a given particle, a processor must simply know the |
2193 |
positions of particles within some cutoff radius located on nearby |
2194 |
processors rather than the positions of particles on all |
2195 |
processors. Both communication between processors and computation |
2196 |
scale as $\mathcal{O}(N/P)$ in the spatial method. However, spatial |
2197 |
decomposition adds algorithmic complexity to the simulation code and |
2198 |
is not very efficient for small $N$, since the overall communication |
2199 |
scales as the surface to volume ratio $\mathcal{O}(N/P)^{2/3}$ in |
2200 |
three dimensions. |
2201 |
|
2202 |
The parallelization method used in {\sc oopse} is the force |
2203 |
decomposition method. Force decomposition assigns particles to |
2204 |
processors based on a block decomposition of the force |
2205 |
matrix. Processors are split into an optimally square grid forming row |
2206 |
and column processor groups. Forces are calculated on particles in a |
2207 |
given row by particles located in that processor's column |
2208 |
assignment. Force decomposition is less complex to implement than the |
2209 |
spatial method but still scales computationally as $\mathcal{O}(N/P)$ |
2210 |
and scales as $\mathcal{O}(N/\sqrt{P})$ in communication |
2211 |
cost. Plimpton has also found that force decompositions scale more |
2212 |
favorably than spatial decompositions for systems up to 10,000 atoms |
2213 |
and favorably compete with spatial methods up to 100,000 |
2214 |
atoms.\cite{plimpton95} |
2215 |
|
2216 |
\section{\label{oopseSec:conclusion}Conclusion} |
2217 |
|
2218 |
We have presented a new open source parallel simulation program {\sc |
2219 |
oopse}. This program offers some novel capabilities, but mostly makes |
2220 |
available a library of modern object-oriented code for the scientific |
2221 |
community to use freely. Notably, {\sc oopse} can handle symplectic |
2222 |
integration of objects (atoms and rigid bodies) which have |
2223 |
orientational degrees of freedom. It can also work with transition |
2224 |
metal force fields and point-dipoles. It is capable of scaling across |
2225 |
multiple processors through the use of force based decomposition. It |
2226 |
also implements several advanced integrators allowing the end user |
2227 |
control over temperature and pressure. In addition, it is capable of |
2228 |
integrating constrained dynamics through both the {\sc rattle} |
2229 |
algorithm and the $z$-constraint method. |
2230 |
|
2231 |
We encourage other researchers to download and apply this program to |
2232 |
their own research problems. By making the code available, we hope to |
2233 |
encourage other researchers to contribute their own code and make it a |
2234 |
more powerful package for everyone in the molecular dynamics community |
2235 |
to use. All source code for {\sc oopse} is available for download at |
2236 |
{\tt http://oopse.org}. |
2237 |
|
2238 |
\newpage |
2239 |
\section{Acknowledgments} |
2240 |
|
2241 |
Development of {\sc oopse} was funded by a New Faculty Award from the |
2242 |
Camille and Henry Dreyfus Foundation and by the National Science |
2243 |
Foundation under grant CHE-0134881. Computation time was provided by |
2244 |
the Notre Dame Bunch-of-Boxes (B.o.B) computer cluster under NSF grant |
2245 |
DMR-0079647. |
2246 |
|
2247 |
\bibliographystyle{achemso} |
2248 |
\bibliography{oopsePaper} |
2249 |
|
2250 |
\end{document} |