ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/oopsePaper/oopsePaper.tex
Revision: 1425
Committed: Wed Jul 28 15:44:21 2004 UTC (20 years, 1 month ago) by gezelter
Content type: application/x-tex
File size: 97610 byte(s)
Log Message:
edits done

File Contents

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