ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/oopsePaper/oopsePaper.tex
Revision: 3389
Committed: Tue Apr 29 17:50:49 2008 UTC (16 years, 2 months ago) by gezelter
Content type: application/x-tex
File size: 104380 byte(s)
Log Message:
Changes about metals

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