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

File Contents

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