ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/oopsePaper/oopsePaper.tex
Revision: 1428
Committed: Wed Jul 28 19:46:08 2004 UTC (20 years, 9 months ago) by gezelter
Content type: application/x-tex
File size: 99575 byte(s)
Log Message:
new updates

File Contents

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