ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/mattDisertation/oopse.tex
(Generate patch)

Comparing trunk/mattDisertation/oopse.tex (file contents):
Revision 1044 by mmeineke, Mon Feb 9 21:44:01 2004 UTC vs.
Revision 1068 by mmeineke, Wed Feb 25 21:48:44 2004 UTC

# Line 1 | Line 1
1 < \documentclass[11pt]{article}
2 < \usepackage{amsmath}
3 < \usepackage{amssymb}
4 < \usepackage{endfloat}
5 < \usepackage{berkeley}
6 < \usepackage{listings}
7 < \usepackage{epsf}
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
1 > \chapter{\label{chapt:oopse}OOPSE: AN OPEN SOURCE OBJECT-ORIENTED PARALLEL SIMULATION ENGINE FOR MOLECULAR DYNAMICS}
2  
20 \begin{document}
21 \lstset{language=C,float,frame=tblr,frameround=tttt}
22 \renewcommand{\lstlistingname}{Scheme}
23 \title{{\sc oopse}: An Open Source Object-Oriented Parallel Simulation
24 Engine for Molecular Dynamics}
3  
26 \author{Matthew A. Meineke, Charles F. Vardeman II, Teng Lin, Christopher J. Fennell and J. Daniel Gezelter\\
27 Department of Chemistry and Biochemistry\\
28 University of Notre Dame\\
29 Notre Dame, Indiana 46556}
4  
5 < \date{\today}
6 < \maketitle
5 > %% \begin{abstract}
6 > %% We detail the capabilities of a new open-source parallel simulation
7 > %% package ({\sc oopse}) that can perform molecular dynamics simulations
8 > %% on atom types that are missing from other popular packages.  In
9 > %% particular, {\sc oopse} is capable of performing orientational
10 > %% dynamics on dipolar systems, and it can handle simulations of metallic
11 > %% systems using the embedded atom method ({\sc eam}).
12 > %% \end{abstract}
13  
14 < \begin{abstract}
15 < We detail the capabilities of a new open-source parallel simulation
16 < package ({\sc oopse}) that can perform molecular dynamics simulations
37 < on atom types that are missing from other popular packages.  In
38 < particular, {\sc oopse} is capable of performing orientational
39 < dynamics on dipolar systems, and it can handle simulations of metallic
40 < systems using the embedded atom method ({\sc eam}).
41 < \end{abstract}
14 > \lstset{language=C,frame=TB,basicstyle=\small,basicstyle=\ttfamily, %
15 >        xleftmargin=0.5in, xrightmargin=0.5in,captionpos=b, %
16 >        abovecaptionskip=0.5cm, belowcaptionskip=0.5cm}
17  
18 < \newpage
18 > \section{\label{oopseSec:foreword}Foreword}
19  
20 < \section{\label{sec:intro}Introduction}
20 > In this chapter, I present and detail the capabilities of the open
21 > source simulation package {\sc oopse}. It is important to note, that a
22 > simulation package of this size and scope would not have been possible
23 > without the collaborative efforts of my colleagues: Charles
24 > F.~Vardeman II, Teng Lin, Christopher J.~Fennell and J.~Daniel
25 > Gezelter. Although my contributions to {\sc oopse} are major,
26 > consideration of my work apart from the others would not give a
27 > complete description to the package's capabilities. As such, all
28 > contributions to {\sc oopse} to date are presented in this chapter.
29  
30 < \begin{itemize}
30 > Charles Vardeman is responsible for the parallelization of the long
31 > range forces in {\sc oopse} (Sec.~\ref{oopseSec:parallelization}) as
32 > well as the inclusion of the embedded-atom potential for transition
33 > metals (Sec.~\ref{oopseSec:eam}). Teng Lin's contributions include
34 > refinement of the periodic boundary conditions
35 > (Sec.~\ref{oopseSec:pbc}), the z-constraint method
36 > (Sec.~\ref{oopseSec:zcons}), refinement of the property analysis
37 > programs (Sec.~\ref{oopseSec:props}), and development in the extended
38 > system integrators (Sec.~\ref{oopseSec:noseHooverThermo}). Christopher
39 > Fennell worked on the symplectic integrator
40 > (Sec.~\ref{oopseSec:integrate}) and the refinement of the {\sc ssd}
41 > water model (Sec.~\ref{oopseSec:SSD}). Daniel Gezelter lent his
42 > talents in the development of the extended system integrators
43 > (Sec.~\ref{oopseSec:noseHooverThermo}) as well as giving general
44 > direction and oversight to the entire project. My responsibilities
45 > covered the creation and specification of {\sc bass}
46 > (Sec.~\ref{oopseSec:IOfiles}), the original development of the single
47 > processor version of {\sc oopse}, contributions to the extended state
48 > integrators (Sec.~\ref{oopseSec:noseHooverThermo}), the implementation
49 > of the Lennard-Jones (Sec.~\ref{sec:LJPot}) and {\sc duff}
50 > (Sec.~\ref{oopseSec:DUFF}) force fields, and initial implementation of
51 > the property analysis (Sec.~\ref{oopseSec:props}) and system
52 > initialization (Sec.~\ref{oopseSec:initCoords}) utility programs. {\sc
53 > oopse}, like many other Molecular Dynamics programs, is a work in
54 > progress, and will continue to be so for many graduate student
55 > lifetimes.
56  
57 < \item Need for package / Niche to fill
57 > \section{\label{sec:intro}Introduction}
58  
59 < \item Design Goal
59 > When choosing to simulate a chemical system with molecular dynamics,
60 > there are a variety of options available. For simple systems, one
61 > might consider writing one's own programming code. However, as systems
62 > grow larger and more complex, building and maintaining code for the
63 > simulations becomes a time consuming task. In such cases it is usually
64 > more convenient for a researcher to turn to pre-existing simulation
65 > packages. These packages, such as {\sc amber}\cite{pearlman:1995} and
66 > {\sc charmm}\cite{Brooks83}, provide powerful tools for researchers to
67 > conduct simulations of their systems without spending their time
68 > developing a code base to conduct their research. This then frees them
69 > to perhaps explore experimental analogues to their models.
70  
71 < \item Open Source
71 > Despite their utility, problems with these packages arise when
72 > researchers try to develop techniques or energetic models that the
73 > code was not originally designed to simulate. Examples of uncommonly
74 > implemented techniques and energetics include; dipole-dipole
75 > interactions, rigid body dynamics, and metallic embedded
76 > potentials. When faced with these obstacles, a researcher must either
77 > develop their own code or license and extend one of the commercial
78 > packages. What we have elected to do, is develop a package of
79 > simulation code capable of implementing the types of models upon which
80 > our research is based.
81  
82 < \item Discussion of Paper Layout
82 > In developing {\sc oopse}, we have adhered to the precepts of Open
83 > Source development, and are releasing our source code with a
84 > permissive license. It is our intent that by doing so, other
85 > researchers might benefit from our work, and add their own
86 > contributions to the package. The license under which {\sc oopse} is
87 > distributed allows any researcher to download and modify the source
88 > code for their own use. In this way further development of {\sc oopse}
89 > is not limited to only the models of interest to ourselves, but also
90 > those of the community of scientists who contribute back to the
91 > project.
92  
93 < \end{itemize}
93 > We have structured this chapter to first discuss the empirical energy
94 > functions that {\sc oopse } implements in
95 > Sec.~\ref{oopseSec:empiricalEnergy}. Following that is a discussion of
96 > the various input and output files associated with the package
97 > (Sec.~\ref{oopseSec:IOfiles}). Sec.~\ref{oopseSec:mechanics}
98 > elucidates the various Molecular Dynamics algorithms {\sc oopse}
99 > implements in the integration of the Newtonian equations of
100 > motion. Basic analysis of the trajectories obtained from the
101 > simulation is discussed in Sec.~\ref{oopseSec:props}. Program design
102 > considerations are presented in Sec.~\ref{oopseSec:design}. And
103 > lastly, Sec.~\ref{oopseSec:conclusion} concludes the chapter.
104  
105 < \section{\label{sec:empiricalEnergy}The Empirical Energy Functions}
105 > \section{\label{oopseSec:empiricalEnergy}The Empirical Energy Functions}
106  
107 < \subsection{\label{sec:atomsMolecules}Atoms, Molecules and Rigid Bodies}
107 > \subsection{\label{oopseSec:atomsMolecules}Atoms, Molecules and Rigid Bodies}
108  
109   The basic unit of an {\sc oopse} simulation is the atom. The
110   parameters describing the atom are generalized to make the atom as
# Line 66 | Line 112 | directional components associated with them (\emph{e.g
112   atoms of an element, or be used for collections of atoms such as
113   methyl and carbonyl groups. The atoms are also capable of having
114   directional components associated with them (\emph{e.g.}~permanent
115 < dipoles). Charges on atoms are not currently supported by {\sc oopse}.
115 > dipoles). Charges, permanent dipoles, and Lennard-Jones parameters for
116 > a given atom type are set in the force field parameter files.
117  
118 < \begin{lstlisting}[caption={[Specifier for molecules and atoms] A sample specification of the simple Ar molecule},label=sch:AtmMole]
118 > \begin{lstlisting}[float,caption={[Specifier for molecules and atoms] A sample specification of an Ar molecule},label=sch:AtmMole]
119   molecule{
120    name = "Ar";
121    nAtoms = 1;
# Line 79 | Line 126 | molecule{
126   }
127   \end{lstlisting}
128  
129 < Atoms can be collected into secondary srtructures such as rigid bodies
129 >
130 > Atoms can be collected into secondary structures such as rigid bodies
131   or molecules. The molecule is a way for {\sc oopse} to keep track of
132   the atoms in a simulation in logical manner. Molecular units store the
133 < identities of all the atoms associated with themselves, and are
134 < responsible for the evaluation of their own internal interactions
135 < (\emph{i.e.}~bonds, bends, and torsions). Scheme \ref{sch:AtmMole}
136 < shws how one creates a molecule in the \texttt{.mdl} files. The
137 < position of the atoms given in the declaration are relative to the
138 < origin of the molecule, and is used when creating a system containing
139 < the molecule.
133 > identities of all the atoms and rigid bodies associated with
134 > themselves, and are responsible for the evaluation of their own
135 > internal interactions (\emph{i.e.}~bonds, bends, and torsions). Scheme
136 > \ref{sch:AtmMole} shows how one creates a molecule in a ``model'' or
137 > \texttt{.mdl} file. The position of the atoms given in the
138 > declaration are relative to the origin of the molecule, and is used
139 > when creating a system containing the molecule.
140  
141   As stated previously, one of the features that sets {\sc oopse} apart
142   from most of the current molecular simulation packages is the ability
143   to handle rigid body dynamics. Rigid bodies are non-spherical
144   particles or collections of particles that have a constant internal
145   potential and move collectively.\cite{Goldstein01} They are not
146 < included in most simulation packages because of the requirement to
147 < propagate the orientational degrees of freedom. Until recently,
148 < integrators which propagate orientational motion have been lacking.
146 > included in most simulation packages because of the algorithmic
147 > complexity involved in propagating orientational degrees of
148 > freedom. Until recently, integrators which propagate orientational
149 > motion have been much worse than those available for translational
150 > motion.
151  
152   Moving a rigid body involves determination of both the force and
153   torque applied by the surroundings, which directly affect the
# Line 106 | Line 156 | Accumulation of the total torque on the rigid body is
156   first be calculated for all the internal particles. The total force on
157   the rigid body is simply the sum of these external forces.
158   Accumulation of the total torque on the rigid body is more complex
159 < than the force in that it is the torque applied on the center of mass
160 < that dictates rotational motion. The torque on rigid body {\it i} is
159 > than the force because the torque is applied to the center of mass of
160 > the rigid body. The torque on rigid body $i$ is
161   \begin{equation}
162   \boldsymbol{\tau}_i=
163 <        \sum_{a}(\mathbf{r}_{ia}-\mathbf{r}_i)\times \mathbf{f}_{ia}
164 <        + \boldsymbol{\tau}_{ia},
163 >        \sum_{a}\biggl[(\mathbf{r}_{ia}-\mathbf{r}_i)\times \mathbf{f}_{ia}
164 >        + \boldsymbol{\tau}_{ia}\biggr]
165   \label{eq:torqueAccumulate}
166   \end{equation}
167   where $\boldsymbol{\tau}_i$ and $\mathbf{r}_i$ are the torque on and
# Line 120 | Line 170 | The summation of the total torque is done in the body
170   position of, and torque on the component particles of the rigid body.
171  
172   The summation of the total torque is done in the body fixed axis of
173 < the rigid body. In order to move between the space fixed and body
173 > each rigid body. In order to move between the space fixed and body
174   fixed coordinate axes, parameters describing the orientation must be
175   maintained for each rigid body. At a minimum, the rotation matrix
176   (\textbf{A}) can be described by the three Euler angles ($\phi,
# Line 135 | Line 185 | systems.\cite{Evans77}
185   systems.\cite{Evans77}
186  
187   {\sc oopse} utilizes a relatively new scheme that propagates the
188 < entire nine parameter rotation matrix internally. Further discussion
189 < on this choice can be found in Sec.~\ref{sec:integrate}. An example
190 < definition of a riged body can be seen in Scheme
188 > entire nine parameter rotation matrix. Further discussion
189 > on this choice can be found in Sec.~\ref{oopseSec:integrate}. An example
190 > definition of a rigid body can be seen in Scheme
191   \ref{sch:rigidBody}. The positions in the atom definitions are the
192   placements of the atoms relative to the origin of the rigid body,
193   which itself has a position relative to the origin of the molecule.
194  
195 < \begin{lstlisting}[caption={[Defining rigid bodies]A sample definition of a rigid body},label={sch:rigidBody}]
195 > \begin{lstlisting}[float,caption={[Defining rigid bodies]A sample definition of a rigid body},label={sch:rigidBody}]
196   molecule{
197    name = "TIP3P_water";
198    nRigidBodies = 1;
# Line 166 | Line 216 | molecule{
216   }
217   \end{lstlisting}
218  
219 < \subsection{\label{sec:LJPot}The Lennard Jones Potential}
219 > \subsection{\label{sec:LJPot}The Lennard Jones Force Field}
220  
221   The most basic force field implemented in {\sc oopse} is the
222 < Lennard-Jones potential, which mimics the van der Waals interaction at
222 > Lennard-Jones force field, which mimics the van der Waals interaction at
223   long distances, and uses an empirical repulsion at short
224   distances. The Lennard-Jones potential is given by:
225   \begin{equation}
# Line 183 | Line 233 | $\epsilon_{ij}$ scales the well depth of the potential
233   Where $r_{ij}$ is the distance between particles $i$ and $j$,
234   $\sigma_{ij}$ scales the length of the interaction, and
235   $\epsilon_{ij}$ scales the well depth of the potential. Scheme
236 < \ref{sch:LJFF} gives and example partial \texttt{.bass} file that
237 < shows a system of 108 Ar particles simulated with the Lennard-Jones
238 < force field.
236 > \ref{sch:LJFF} gives and example \texttt{.bass} file that
237 > sets up a system of 108 Ar particles to be simulated using the
238 > Lennard-Jones force field.
239  
240 < \begin{lstlisting}[caption={[Invocation of the Lennard-Jones force field] A sample system using the Lennard-Jones force field.},label={sch:LJFF}]
240 > \begin{lstlisting}[float,caption={[Invocation of the Lennard-Jones force field] A sample system using the Lennard-Jones force field.},label={sch:LJFF}]
241  
192 /*
193 * The Ar molecule is specified
194 * external to the.bass file
195 */
196
242   #include "argon.mdl"
243  
244   nComponents = 1;
# Line 202 | Line 247 | component{
247    nMol = 108;
248   }
249  
205 /*
206 * The initial configuration is generated
207 * before the simulation is invoked.
208 */
209
250   initialConfig = "./argon.init";
251  
252   forceField = "LJ";
# Line 215 | Line 255 | keep the pair evaluations to a manageable number, {\sc
255   Because this potential is calculated between all pairs, the force
256   evaluation can become computationally expensive for large systems. To
257   keep the pair evaluations to a manageable number, {\sc oopse} employs
258 < a cut-off radius.\cite{allen87:csl} The cutoff radius is set to be
258 > a cut-off radius.\cite{allen87:csl} The cutoff radius can either be
259 > specified in the \texttt{.bass} file, or left as its default value of
260   $2.5\sigma_{ii}$, where $\sigma_{ii}$ is the largest Lennard-Jones
261   length parameter present in the simulation. Truncating the calculation
262   at $r_{\text{cut}}$ introduces a discontinuity into the potential
263 < energy. To offset this discontinuity, the energy value at
264 < $r_{\text{cut}}$ is subtracted from the potential. This causes the
265 < potential to go to zero smoothly at the cut-off radius.
263 > energy and the force. To offset this discontinuity in the potential,
264 > the energy value at $r_{\text{cut}}$ is subtracted from the
265 > potential. This causes the potential to go to zero smoothly at the
266 > cut-off radius, and preserves conservation of energy in integrating
267 > the equations of motion.
268  
269   Interactions between dissimilar particles requires the generation of
270   cross term parameters for $\sigma$ and $\epsilon$. These are
# Line 239 | Line 282 | and
282  
283  
284  
285 < \subsection{\label{sec:DUFF}Dipolar Unified-Atom Force Field}
285 > \subsection{\label{oopseSec:DUFF}Dipolar Unified-Atom Force Field}
286  
287   The dipolar unified-atom force field ({\sc duff}) was developed to
288   simulate lipid bilayers. The simulations require a model capable of
289   forming bilayers, while still being sufficiently computationally
290 < efficient to allow large systems ($\approx$100's of phospholipids,
291 < $\approx$1000's of waters) to be simulated for long times
292 < ($\approx$10's of nanoseconds).
290 > efficient to allow large systems ($\sim$100's of phospholipids,
291 > $\sim$1000's of waters) to be simulated for long times
292 > ($\sim$10's of nanoseconds).
293  
294   With this goal in mind, {\sc duff} has no point
295   charges. Charge-neutral distributions were replaced with dipoles,
296   while most atoms and groups of atoms were reduced to Lennard-Jones
297   interaction sites. This simplification cuts the length scale of long
298 < range interactions from $\frac{1}{r}$ to $\frac{1}{r^3}$, allowing us
299 < to avoid the computationally expensive Ewald sum. Instead, we can use
300 < neighbor-lists, reaction field, and cutoff radii for the dipolar
301 < interactions.
298 > range interactions from $\frac{1}{r}$ to $\frac{1}{r^3}$, and allows
299 > us to avoid the computationally expensive Ewald sum. Instead, we can
300 > use neighbor-lists and cutoff radii for the dipolar interactions, or
301 > include a reaction field to mimic larger range interactions.
302  
303   As an example, lipid head-groups in {\sc duff} are represented as
304 < point dipole interaction sites. By placing a dipole of 20.6~Debye at
305 < the head group center of mass, our model mimics the head group of
306 < phosphatidylcholine.\cite{Cevc87} Additionally, a large Lennard-Jones
307 < site is located at the pseudoatom's center of mass. The model is
308 < illustrated by the dark grey atom in Fig.~\ref{fig:lipidModel}. The
309 < water model we use to complement the dipoles of the lipids is our
310 < reparameterization of the soft sticky dipole (SSD) model of Ichiye
304 > point dipole interaction sites. By placing a dipole at the head group
305 > center of mass, our model mimics the charge separation found in common
306 > phospholipids such as phosphatidylcholine.\cite{Cevc87} Additionally,
307 > a large Lennard-Jones site is located at the pseudoatom's center of
308 > mass. The model is illustrated by the red atom in
309 > Fig.~\ref{oopseFig:lipidModel}. The water model we use to complement
310 > the dipoles of the lipids is our reparameterization of the soft sticky
311 > dipole (SSD) model of Ichiye
312   \emph{et al.}\cite{liu96:new_model}
313  
314   \begin{figure}
315 < \epsfxsize=\linewidth
316 < \epsfbox{lipidModel.eps}
315 > \centering
316 > \includegraphics[width=\linewidth]{lipidModel.eps}
317   \caption{A representation of the lipid model. $\phi$ is the torsion angle, $\theta$ %
318   is the bend angle, $\mu$ is the dipole moment of the head group, and n
319   is the chain length.}
320 < \label{fig:lipidModel}
320 > \label{oopseFig:lipidModel}
321   \end{figure}
322  
323   We have used a set of scalable parameters to model the alkyl groups
# Line 284 | Line 328 | it generalizes the types of atoms in an alkyl chain to
328   equilibria using Gibbs ensemble Monte Carlo simulation
329   techniques.\cite{Siepmann1998} One of the advantages of TraPPE is that
330   it generalizes the types of atoms in an alkyl chain to keep the number
331 < of pseudoatoms to a minimum; the parameters for an atom such as
331 > of pseudoatoms to a minimum; the parameters for a unified atom such as
332   $\text{CH}_2$ do not change depending on what species are bonded to
333   it.
334  
335   TraPPE also constrains all bonds to be of fixed length. Typically,
336   bond vibrations are the fastest motions in a molecular dynamic
337   simulation. Small time steps between force evaluations must be used to
338 < ensure adequate sampling of the bond potential to ensure conservation
339 < of energy. By constraining the bond lengths, larger time steps may be
340 < used when integrating the equations of motion. A simulation using {\sc
341 < duff} is illustrated in Scheme \ref{sch:DUFF}.
338 > ensure adequate energy conservation in the bond degrees of freedom. By
339 > constraining the bond lengths, larger time steps may be used when
340 > integrating the equations of motion. A simulation using {\sc duff} is
341 > illustrated in Scheme \ref{sch:DUFF}.
342  
343 < \begin{lstlisting}[caption={[Invocation of {\sc duff}]Sample \texttt{.bass} file showing a simulation utilizing {\sc duff}},label={sch:DUFF}]
343 > \begin{lstlisting}[float,caption={[Invocation of {\sc duff}]Sample \texttt{.bass} file showing a simulation utilizing {\sc duff}},label={sch:DUFF}]
344  
345   #include "water.mdl"
346   #include "lipid.mdl"
# Line 318 | Line 362 | forceField = "DUFF";
362  
363   \end{lstlisting}
364  
365 < \subsubsection{\label{subSec:energyFunctions}{\sc duff} Energy Functions}
365 > \subsection{\label{oopseSec:energyFunctions}{\sc duff} Energy Functions}
366  
367   The total potential energy function in {\sc duff} is
368   \begin{equation}
369   V = \sum^{N}_{I=1} V^{I}_{\text{Internal}}
370 <        + \sum^{N}_{I=1} \sum_{J>I} V^{IJ}_{\text{Cross}}
370 >        + \sum^{N-1}_{I=1} \sum_{J>I} V^{IJ}_{\text{Cross}}
371   \label{eq:totalPotential}
372   \end{equation}
373   Where $V^{I}_{\text{Internal}}$ is the internal potential of molecule $I$:
# Line 350 | Line 394 | Where $\theta_{ijk}$ is the angle defined by atoms $i$
394   V_{\text{bend}}(\theta_{ijk}) = k_{\theta}( \theta_{ijk} - \theta_0 )^2 \label{eq:bendPot}
395   \end{equation}
396   Where $\theta_{ijk}$ is the angle defined by atoms $i$, $j$, and $k$
397 < (see Fig.~\ref{fig:lipidModel}), $\theta_0$ is the equilibrium
397 > (see Fig.~\ref{oopseFig:lipidModel}), $\theta_0$ is the equilibrium
398   bond angle, and $k_{\theta}$ is the force constant which determines the
399   strength of the harmonic bend. The parameters for $k_{\theta}$ and
400   $\theta_0$ are borrowed from those in TraPPE.\cite{Siepmann1998}
# Line 363 | Line 407 | V_{\text{torsion}}(\phi) = c_1[1 + \cos \phi]
407          + c_3[1 + \cos(3\phi)]
408   \label{eq:origTorsionPot}
409   \end{equation}
410 < Here $\phi$ is the angle defined by four bonded neighbors $i$,
367 < $j$, $k$, and $l$ (again, see Fig.~\ref{fig:lipidModel}). For
368 < computational efficiency, the torsion potential has been recast after
369 < the method of CHARMM,\cite{charmm1983} in which the angle series is
370 < converted to a power series of the form:
410 > Where:
411   \begin{equation}
412 + \cos\phi = (\hat{\mathbf{r}}_{ij} \times \hat{\mathbf{r}}_{jk}) \cdot
413 +        (\hat{\mathbf{r}}_{jk} \times \hat{\mathbf{r}}_{kl})
414 + \label{eq:torsPhi}
415 + \end{equation}
416 + Here, $\hat{\mathbf{r}}_{\alpha\beta}$ are the set of unit bond
417 + vectors between atoms $i$, $j$, $k$, and $l$. For computational
418 + efficiency, the torsion potential has been recast after the method of
419 + {\sc charmm},\cite{Brooks83} in which the angle series is converted to
420 + a power series of the form:
421 + \begin{equation}
422   V_{\text{torsion}}(\phi) =  
423          k_3 \cos^3 \phi + k_2 \cos^2 \phi + k_1 \cos \phi + k_0
424   \label{eq:torsionPot}
# Line 399 | Line 449 | $V_{\text{sticky}}$ is the sticky potential defined by
449   Where $V_{\text{LJ}}$ is the Lennard Jones potential,
450   $V_{\text{dipole}}$ is the dipole dipole potential, and
451   $V_{\text{sticky}}$ is the sticky potential defined by the SSD model
452 < (Sec.~\ref{sec:SSD}). Note that not all atom types include all
452 > (Sec.~\ref{oopseSec:SSD}). Note that not all atom types include all
453   interactions.
454  
455   The dipole-dipole potential has the following form:
# Line 408 | Line 458 | V_{\text{dipole}}(\mathbf{r}_{ij},\boldsymbol{\Omega}_
458          \boldsymbol{\Omega}_{j}) = \frac{|\mu_i||\mu_j|}{4\pi\epsilon_{0}r_{ij}^{3}} \biggl[
459          \boldsymbol{\hat{u}}_{i} \cdot \boldsymbol{\hat{u}}_{j}
460          -
461 <        \frac{3(\boldsymbol{\hat{u}}_i \cdot \mathbf{r}_{ij}) %
462 <                (\boldsymbol{\hat{u}}_j \cdot \mathbf{r}_{ij}) }
413 <                {r^{2}_{ij}} \biggr]
461 >        3(\boldsymbol{\hat{u}}_i \cdot \hat{\mathbf{r}}_{ij}) %
462 >                (\boldsymbol{\hat{u}}_j \cdot \hat{\mathbf{r}}_{ij}) \biggr]
463   \label{eq:dipolePot}
464   \end{equation}
465   Here $\mathbf{r}_{ij}$ is the vector starting at atom $i$ pointing
466   towards $j$, and $\boldsymbol{\Omega}_i$ and $\boldsymbol{\Omega}_j$
467   are the orientational degrees of freedom for atoms $i$ and $j$
468   respectively. $|\mu_i|$ is the magnitude of the dipole moment of atom
469 < $i$, $\boldsymbol{\hat{u}}_i$ is the standard unit orientation
470 < vector of $\boldsymbol{\Omega}_i$, and $\boldsymbol{\hat{r}}_{ij}$ is
471 < the unit vector pointing along $\mathbf{r}_{ij}$.
469 > $i$, $\boldsymbol{\hat{u}}_i$ is the standard unit orientation vector
470 > of $\boldsymbol{\Omega}_i$, and $\boldsymbol{\hat{r}}_{ij}$ is the
471 > unit vector pointing along $\mathbf{r}_{ij}$
472 > ($\boldsymbol{\hat{r}}_{ij}=\mathbf{r}_{ij}/|\mathbf{r}_{ij}|$).
473  
474 + To improve computational efficiency of the dipole-dipole interactions,
475 + {\sc oopse} employs an electrostatic cutoff radius. This parameter can
476 + be set in the \texttt{.bass} file, and controls the length scale over
477 + which dipole interactions are felt. To compensate for the
478 + discontinuity in the potential and the forces at the cutoff radius, we
479 + have implemented a switching function to smoothly scale the
480 + dipole-dipole interaction at the cutoff.
481 + \begin{equation}
482 + S(r_{ij}) =
483 +        \begin{cases}
484 +        1 & \text{if $r_{ij} \le r_t$},\\
485 +        \frac{(r_{\text{cut}} + 2r_{ij} - 3r_t)(r_{\text{cut}} - r_{ij})^2}
486 +        {(r_{\text{cut}} - r_t)^2}
487 +        & \text{if $r_t < r_{ij} \le r_{\text{cut}}$}, \\
488 +        0 & \text{if $r_{ij} > r_{\text{cut}}$.}
489 +        \end{cases}
490 + \label{eq:dipoleSwitching}
491 + \end{equation}
492 + Here $S(r_{ij})$ scales the potential at a given $r_{ij}$, and $r_t$
493 + is the taper radius some given thickness less than the electrostatic
494 + cutoff. The switching thickness can be set in the \texttt{.bass} file.
495  
496 < \subsubsection{\label{sec:SSD}The {\sc duff} Water Models: SSD/E and SSD/RF}
496 > \subsection{\label{oopseSec:SSD}The {\sc duff} Water Models: SSD/E and SSD/RF}
497  
498   In the interest of computational efficiency, the default solvent used
499   by {\sc oopse} is the extended Soft Sticky Dipole (SSD/E) water
# Line 482 | Line 553 | articles.\cite{liu96:new_model,liu96:monte_carlo,chand
553   can be found in the original SSD
554   articles.\cite{liu96:new_model,liu96:monte_carlo,chandra99:ssd_md,Ichiye03}
555  
556 < Since SSD is a single-point {\it dipolar} model, the force
556 > Since SSD/E is a single-point {\it dipolar} model, the force
557   calculations are simplified significantly relative to the standard
558   {\it charged} multi-point models. In the original Monte Carlo
559   simulations using this model, Ichiye {\it et al.} reported that using
560   SSD decreased computer time by a factor of 6-7 compared to other
561   models.\cite{liu96:new_model} What is most impressive is that these savings
562   did not come at the expense of accurate depiction of the liquid state
563 < properties.  Indeed, SSD maintains reasonable agreement with the Soper
563 > properties.  Indeed, SSD/E maintains reasonable agreement with the Head-Gordon
564   diffraction data for the structural features of liquid
565 < water.\cite{Soper86,liu96:new_model} Additionally, the dynamical properties
566 < exhibited by SSD agree with experiment better than those of more
565 > water.\cite{hura00,liu96:new_model} Additionally, the dynamical properties
566 > exhibited by SSD/E agree with experiment better than those of more
567   computationally expensive models (like TIP3P and
568   SPC/E).\cite{chandra99:ssd_md} The combination of speed and accurate depiction
569 < of solvent properties makes SSD a very attractive model for the
569 > of solvent properties makes SSD/E a very attractive model for the
570   simulation of large scale biochemical simulations.
571  
572   Recent constant pressure simulations revealed issues in the original
# Line 506 | Line 577 | model. Solvent parameters can be easily modified in an
577   of a reaction field long-range interaction correction is desired, it
578   is recommended that the parameters be modified to those of the SSD/RF
579   model. Solvent parameters can be easily modified in an accompanying
580 < {\sc BASS} file as illustrated in the scheme below. A table of the
580 > \texttt{.bass} file as illustrated in the scheme below. A table of the
581   parameter values and the drawbacks and benefits of the different
582 < density corrected SSD models can be found in reference
583 < \ref{Gezelter04}.
582 > density corrected SSD models can be found in
583 > reference~\cite{Gezelter04}.
584  
585 < \begin{lstlisting}[caption={[A simulation of {\sc ssd} water]An example file showing a simulation including {\sc ssd} water.},label={sch:ssd}]
585 > \begin{lstlisting}[float,caption={[A simulation of {\sc ssd} water]An example file showing a simulation including {\sc ssd} water.},label={sch:ssd}]
586  
587   #include "water.mdl"
588  
# Line 526 | Line 597 | forceField = "DUFF";
597   forceField = "DUFF";
598  
599   /*
529 * The reactionField flag toggles reaction
530 * field corrections.
531 */
532
533 reactionField = false; // defaults to false
534 dielectric = 80.0; // dielectric for reaction field
535
536 /*
600   * The following two flags set the cutoff
601   * radius for the electrostatic forces
602   * as well as the skin thickness of the switching
# Line 546 | Line 609 | electrostaticSkinThickness = 1.38;
609   \end{lstlisting}
610  
611  
612 < \subsection{\label{sec:eam}Embedded Atom Method}
612 > \subsection{\label{oopseSec:eam}Embedded Atom Method}
613  
614 < Several other molecular dynamics packages\cite{dynamo86} exist which have the
614 > There are Molecular Dynamics packages which have the
615   capacity to simulate metallic systems, including some that have
616   parallel computational abilities\cite{plimpton93}. Potentials that
617   describe bonding transition metal
618 < systems\cite{Finnis84,Ercolessi88,Chen90,Qi99,Ercolessi02} have a
618 > systems\cite{Finnis84,Ercolessi88,Chen90,Qi99,Ercolessi02} have an
619   attractive interaction which models  ``Embedding''
620   a positively charged metal ion in the electron density due to the
621   free valance ``sea'' of electrons created by the surrounding atoms in
622 < the system. A mostly repulsive pairwise part of the potential
622 > the system. A mostly-repulsive pairwise part of the potential
623   describes the interaction of the positively charged metal core ions
624   with one another. A particular potential description called the
625   Embedded Atom Method\cite{Daw84,FBD86,johnson89,Lu97}({\sc eam}) that has
626   particularly wide adoption has been selected for inclusion in {\sc oopse}. A
627 < good review of {\sc eam} and other metallic potential formulations was done
627 > good review of {\sc eam} and other metallic potential formulations was written
628   by Voter.\cite{voter}
629  
630   The {\sc eam} potential has the form:
# Line 569 | Line 632 | V & = & \sum_{i} F_{i}\left[\rho_{i}\right] + \sum_{i}
632   V & = & \sum_{i} F_{i}\left[\rho_{i}\right] + \sum_{i} \sum_{j \neq i}
633   \phi_{ij}({\bf r}_{ij})  \\
634   \rho_{i}  & = & \sum_{j \neq i} f_{j}({\bf r}_{ij})
635 < \end{eqnarray}S
573 <
635 > \end{eqnarray}
636   where $F_{i} $ is the embedding function that equates the energy required to embed a
637   positively-charged core ion $i$ into a linear superposition of
638   spherically averaged atomic electron densities given by
639   $\rho_{i}$.  $\phi_{ij}$ is a primarily repulsive pairwise interaction
640   between atoms $i$ and $j$. In the original formulation of
641 < {\sc eam} cite{Daw84}, $\phi_{ij}$ was an entirely repulsive term, however
641 > {\sc eam}\cite{Daw84}, $\phi_{ij}$ was an entirely repulsive term, however
642   in later refinements to EAM have shown that non-uniqueness between $F$
643   and $\phi$ allow for more general forms for $\phi$.\cite{Daw89}
644   There is a cutoff distance, $r_{cut}$, which limits the
645   summations in the {\sc eam} equation to the few dozen atoms
646   surrounding atom $i$ for both the density $\rho$ and pairwise $\phi$
647 < interactions. Foiles et al. fit EAM potentials for fcc metals Cu, Ag, Au, Ni, Pd, Pt and alloys of these metals\cite{FDB86}. These potential fits are in the DYNAMO 86 format and are included with {\sc oopse}.
647 > interactions. Foiles et al. fit EAM potentials for fcc metals Cu, Ag, Au, Ni, Pd, Pt and alloys of these metals\cite{FBD86}. These potential fits are in the DYNAMO 86 format and are included with {\sc oopse}.
648  
649  
650 < \subsection{\label{Sec:pbc}Periodic Boundary Conditions}
650 > \subsection{\label{oopseSec:pbc}Periodic Boundary Conditions}
651  
652   \newcommand{\roundme}{\operatorname{round}}
653  
654 < \textit{Periodic boundary conditions} are widely used to simulate truly
655 < macroscopic systems with a relatively small number of particles. The
656 < simulation box is replicated throughout space to form an infinite lattice.
657 < During the simulation, when a particle moves in the primary cell, its image in
658 < other boxes move in exactly the same direction with exactly the same
659 < orientation.Thus, as a particle leaves the primary cell, one of its images
660 < will enter through the opposite face.If the simulation box is large enough to
661 < avoid \textquotedblleft feeling\textquotedblright\ the symmetries of the
662 < periodic lattice, surface effects can be ignored. Cubic, orthorhombic and
663 < parallelepiped are the available periodic cells In OOPSE. We use a matrix to
664 < describe the property of the simulation box. Therefore, both the size and
603 < shape of the simulation box can be changed during the simulation. The
604 < transformation from box space vector $\mathbf{s}$ to its corresponding real
605 < space vector $\mathbf{r}$ is defined by
654 > \textit{Periodic boundary conditions} are widely used to simulate bulk properties with a relatively small number of particles. The
655 > simulation box is replicated throughout space to form an infinite
656 > lattice.  During the simulation, when a particle moves in the primary
657 > cell, its image in other cells move in exactly the same direction with
658 > exactly the same orientation. Thus, as a particle leaves the primary
659 > cell, one of its images will enter through the opposite face. If the
660 > simulation box is large enough to avoid ``feeling'' the symmetries of
661 > the periodic lattice, surface effects can be ignored. The available
662 > periodic cells in OOPSE are cubic, orthorhombic and parallelepiped. We
663 > use a $3 \times 3$ matrix, $\mathbf{H}$, to describe the shape and
664 > size of the simulation box. $\mathbf{H}$ is defined:
665   \begin{equation}
666 < \mathbf{r}=\underline{\mathbf{H}}\cdot\mathbf{s}%
666 > \mathbf{H} = ( \mathbf{h}_x, \mathbf{h}_y, \mathbf{h}_z )
667   \end{equation}
668 + Where $\mathbf{h}_j$ is the column vector of the $j$th axis of the
669 + box.  During the course of the simulation both the size and shape of
670 + the box can be changed to allow volume fluctations when constraining
671 + the pressure.
672  
673 <
674 < where $H=(h_{x},h_{y},h_{z})$ is a transformation matrix made up of the three
675 < box axis vectors. $h_{x},h_{y}$ and $h_{z}$ represent the three sides of the
676 < simulation box respectively.
677 <
678 < To find the minimum image of a vector $\mathbf{r}$, we convert the real vector
679 < to its corresponding vector in box space first, \bigskip%
673 > A real space vector, $\mathbf{r}$ can be transformed in to a box space
674 > vector, $\mathbf{s}$, and back through the following transformations:
675 > \begin{align}
676 > \mathbf{s} &= \mathbf{H}^{-1} \mathbf{r} \\
677 > \mathbf{r} &= \mathbf{H} \mathbf{s}
678 > \end{align}
679 > The vector $\mathbf{s}$ is now a vector expressed as the number of box
680 > lengths in the $\mathbf{h}_x$, $\mathbf{h}_y$, and $\mathbf{h}_z$
681 > directions. To find the minimum image of a vector $\mathbf{r}$, we
682 > first convert it to its corresponding vector in box space, and then,
683 > cast each element to lie on the in the range $[-0.5,0.5]$:
684   \begin{equation}
618 \mathbf{s}=\underline{\mathbf{H}}^{-1}\cdot\mathbf{r}%
619 \end{equation}
620 And then, each element of $\mathbf{s}$ is wrapped to lie between -0.5 to 0.5,
621 \begin{equation}
685   s_{i}^{\prime}=s_{i}-\roundme(s_{i})
686   \end{equation}
687 < where
688 <
626 < %
627 <
687 > Where $s_i$ is the $i$th element of $\mathbf{s}$, and
688 > $\roundme(s_i)$is given by
689   \begin{equation}
690 < \roundme(x)=\left\{
691 < \begin{array}{cc}%
692 < \lfloor{x+0.5}\rfloor & \text{if \ }x\geqslant0\\
693 < \lceil{x-0.5}\rceil & \text{otherwise}%
694 < \end{array}
634 < \right.
690 > \roundme(x) =
691 >        \begin{cases}
692 >        \lfloor x+0.5 \rfloor & \text{if $x \ge 0$} \\
693 >        \lceil x-0.5 \rceil & \text{if $x < 0$ }
694 >        \end{cases}
695   \end{equation}
696 <
697 <
698 < For example, $\roundme(3.6)=4$,$\roundme(3.1)=3$, $\roundme(-3.6)=-4$, $\roundme(-3.1)=-3$.
699 <
700 < Finally, we obtain the minimum image coordinates $\mathbf{r}^{\prime}$ by
641 < transforming back to real space,%
696 > Here $\lfloor x \rfloor$ is the floor operator, and gives the largest
697 > integer value that is not greater than $x$, and $\lceil x \rceil$ is
698 > the ceiling operator, and gives the smallest integer that is not less
699 > than $x$.  For example, $\roundme(3.6)=4$, $\roundme(3.1)=3$,
700 > $\roundme(-3.6)=-4$, $\roundme(-3.1)=-3$.
701  
702 + Finally, we obtain the minimum image coordinates $\mathbf{r}^{\prime}$ by
703 + transforming back to real space,
704   \begin{equation}
705 < \mathbf{r}^{\prime}=\underline{\mathbf{H}}^{-1}\cdot\mathbf{s}^{\prime}%
705 > \mathbf{r}^{\prime}=\mathbf{H}^{-1}\mathbf{s}^{\prime}%
706   \end{equation}
707 + In this way, particles are allowed to diffuse freely in $\mathbf{r}$,
708 + but their minimum images, $\mathbf{r}^{\prime}$ are used to compute
709 + the interatomic forces.
710  
711  
712 < \section{Input and Output Files}
712 > \section{\label{oopseSec:IOfiles}Input and Output Files}
713  
714   \subsection{{\sc bass} and Model Files}
715  
716 < Every {\sc oopse} simuation begins with a {\sc bass} file. {\sc bass}
716 > Every {\sc oopse} simulation begins with a {\sc bass} file. {\sc bass}
717   (\underline{B}izarre \underline{A}tom \underline{S}imulation
718   \underline{S}yntax) is a script syntax that is parsed by {\sc oopse} at
719   runtime. The {\sc bass} file allows for the user to completely describe the
# Line 659 | Line 723 | Fig.~\ref{fig:bassExample}.
723   Fig.~\ref{fig:bassExample}.
724  
725   \begin{figure}
662
726   \centering
727   \framebox[\linewidth]{\rule{0cm}{0.75\linewidth}I'm a {\sc bass} file!}
728   \caption{Here is an example \texttt{.bass} file}
729   \label{fig:bassExample}
730   \end{figure}
731  
732 < Within the \texttt{.bass} file it is neccassary to provide a complete
732 > Within the \texttt{.bass} file it is necessary to provide a complete
733   description of the molecule before it is actually placed in the
734   simulation. The {\sc bass} syntax was originally developed with this goal in
735   mind, and allows for the specification of all the atoms in a molecular
736   prototype, as well as any bonds, bends, or torsions. These
737   descriptions can become lengthy for complex molecules, and it would be
738 < inconvient to duplicate the simulation at the begining of each {\sc bass}
738 > inconvenient to duplicate the simulation at the beginning of each {\sc bass}
739   script. Addressing this issue {\sc bass} allows for the inclusion of model
740   files at the top of a \texttt{.bass} file. These model files, denoted
741   with the \texttt{.mdl} extension, allow the user to describe a
742   molecular prototype once, then simply include it into each simulation
743   containing that molecule.
744  
745 < \subsection{\label{subSec:coordFiles}Coordinate Files}
745 > \subsection{\label{oopseSec:coordFiles}Coordinate Files}
746  
747   The standard format for storage of a systems coordinates is a modified
748   xyz-file syntax, the exact details of which can be seen in
# Line 691 | Line 754 | trajectory file, and the final coordinates of the simu
754   There are three major files used by {\sc oopse} written in the coordinate
755   format, they are as follows: the initialization file, the simulation
756   trajectory file, and the final coordinates of the simulation. The
757 < initialization file is neccassary for {\sc oopse} to start the simulation
757 > initialization file is necessary for {\sc oopse} to start the simulation
758   with the proper coordinates. It is typically denoted with the
759   extension \texttt{.init}. The trajectory file is created at the
760   beginning of the simulation, and is used to store snapshots of the
# Line 700 | Line 763 | coordinate file is the end of run or \texttt{.eor} fil
763   file at an interval specified in the \texttt{.bass} file. The
764   trajectory file is given the extension \texttt{.dump}. The final
765   coordinate file is the end of run or \texttt{.eor} file. The
766 < \texttt{.eor} file stores the final configuration of teh system for a
766 > \texttt{.eor} file stores the final configuration of the system for a
767   given simulation. The file is updated at the same time as the
768   \texttt{.dump} file. However, it only contains the most recent
769   frame. In this way, an \texttt{.eor} file may be used as the
770   initialization file to a second simulation in order to continue or
771   recover the previous simulation.
772  
773 < \subsection{Generation of Initial Coordinates}
773 > \subsection{\label{oopseSec:initCoords}Generation of Initial Coordinates}
774  
775 < As was stated in Sec.~\ref{subSec:coordFiles}, an initialization file
775 > As was stated in Sec.~\ref{oopseSec:coordFiles}, an initialization file
776   is needed to provide the starting coordinates for a simulation. The
777   {\sc oopse} package provides a program called \texttt{sysBuilder} to aid in
778   the creation of the \texttt{.init} file. \texttt{sysBuilder} is {\sc bass}
779   aware, and will recognize arguments and parameters in the
780   \texttt{.bass} file that would otherwise be ignored by the
781 < simulation. The program itself is under contiunual development, and is
781 > simulation. The program itself is under continual development, and is
782   offered here as a helper tool only.
783  
784   \subsection{The Statistics File}
# Line 724 | Line 787 | frequency specified in the \texttt{.bass} file. The fi
787   file records such statistical quantities as the instantaneous
788   temperature, volume, pressure, etc. It is written out with the
789   frequency specified in the \texttt{.bass} file. The file allows the
790 < user to observe the system variables as a function od simulation time
790 > user to observe the system variables as a function of simulation time
791   while the simulation is in progress. One useful function the
792   statistics file serves is to monitor the conserved quantity of a given
793   simulation ensemble, this allows the user to observe the stability of
794   the integrator. The statistics file is denoted with the \texttt{.stat}
795   file extension.
796  
797 < \section{\label{sec:mechanics}Mechanics}
797 > \section{\label{oopseSec:mechanics}Mechanics}
798  
799 < \subsection{\label{integrate}Integrating the Equations of Motion: the Symplectic Step Integrator}
799 > \subsection{\label{oopseSec:integrate}Integrating the Equations of Motion: the Symplectic Step Integrator}
800  
801   Integration of the equations of motion was carried out using the
802   symplectic splitting method proposed by Dullweber \emph{et
# Line 773 | Line 836 | energy conservation of the two methods as illustrated
836   \ref{timestep}.
837  
838   \begin{figure}
839 < \epsfxsize=6in
840 < \epsfbox{timeStep.epsi}
839 > \centering
840 > \includegraphics[width=\linewidth]{timeStep.eps}
841   \caption{Energy conservation using quaternion based integration versus
842   the symplectic step method proposed by Dullweber \emph{et al.} with
843   increasing time step. For each time step, the dotted line is total
# Line 812 | Line 875 | constant pressure simulations as well.
875   {\sc oopse} implements a
876  
877  
878 < \subsubsection{\label{sec:noseHooverThermo}Nose-Hoover Thermostatting}
878 > \subsubsection{\label{oopseSec:noseHooverThermo}Nose-Hoover Thermostatting}
879  
880   To mimic the effects of being in a constant temperature ({\sc nvt})
881   ensemble, {\sc oopse} uses the Nose-Hoover extended system
# Line 840 | Line 903 | set to 1 ps using the {\tt tauThermostat = 1000; } com
903   set to 1 ps using the {\tt tauThermostat = 1000; } command.
904  
905  
906 < \subsection{\label{Sec:zcons}Z-Constraint Method}
906 > \subsection{\label{oopseSec:zcons}Z-Constraint Method}
907  
908 < Based on fluctuatin-dissipation theorem,\bigskip\ force auto-correlation
908 > Based on fluctuation-dissipation theorem,\bigskip\ force auto-correlation
909   method was developed to investigate the dynamics of ions inside the ion
910   channels.\cite{Roux91} Time-dependent friction coefficient can be calculated
911 < from the deviation of the instaneous force from its mean force.
911 > from the deviation of the instantaneous force from its mean force.
912  
913   %
914  
915   \begin{equation}
916   \xi(z,t)=\langle\delta F(z,t)\delta F(z,0)\rangle/k_{B}T
917   \end{equation}
855
856
918   where%
919   \begin{equation}
920   \delta F(z,t)=F(z,t)-\langle F(z,t)\rangle
# Line 883 | Line 944 | force calculation at each time step.
944   resetting the coordinate, we reset the forces of z-constraint molecules as
945   well as subtract the total constraint forces from the rest of the system after
946   force calculation at each time step.
947 < \begin{verbatim}
948 < $F_{\alpha i}=0$
949 < $V_{\alpha i}=V_{\alpha i}-\frac{\sum\limits_{i}M_{_{\alpha i}}V_{\alpha i}}{\sum\limits_{i}M_{_{\alpha i}}}$
950 < $F_{\alpha i}=F_{\alpha i}-\frac{M_{_{\alpha i}}}{\sum\limits_{\alpha}\sum\limits_{i}M_{_{\alpha i}}}\sum\limits_{\beta}F_{\beta}$
951 < $V_{\alpha i}=V_{\alpha i}-\frac{\sum\limits_{\alpha}\sum\limits_{i}M_{_{\alpha i}}V_{\alpha i}}{\sum\limits_{\alpha}\sum\limits_{i}M_{_{\alpha i}}}$
952 < \end{verbatim}
947 > \begin{align}
948 > F_{\alpha i}&=0\\
949 > V_{\alpha i}&=V_{\alpha i}-\frac{\sum\limits_{i}M_{_{\alpha i}}V_{\alpha i}}{\sum\limits_{i}M_{_{\alpha i}}}\\
950 > F_{\alpha i}&=F_{\alpha i}-\frac{M_{_{\alpha i}}}{\sum\limits_{\alpha}\sum\limits_{i}M_{_{\alpha i}}}\sum\limits_{\beta}F_{\beta}\\
951 > V_{\alpha i}&=V_{\alpha i}-\frac{\sum\limits_{\alpha}\sum\limits_{i}M_{_{\alpha i}}V_{\alpha i}}{\sum\limits_{\alpha}\sum\limits_{i}M_{_{\alpha i}}}
952 > \end{align}
953  
954   At the very beginning of the simulation, the molecules may not be at its
955   constraint position. To move the z-constraint molecule to the specified
# Line 908 | Line 969 | drive the z-constraint molecule.
969   Worthy of mention, other kinds of potential functions can also be used to
970   drive the z-constraint molecule.
971  
972 < \section{\label{sec:analysis}Trajectory Analysis}
972 > \section{\label{oopseSec:props}Trajectory Analysis}
973  
974 < \subsection{\label{subSec:staticProps}Static Property Analysis}
974 > \subsection{\label{oopseSec:staticProps}Static Property Analysis}
975  
976   The static properties of the trajectories are analyzed with the
977   program \texttt{staticProps}. The code is capable of calculating the following
# Line 1038 | Line 1099 | process is repeated. A diagram illustrating the proces
1099   between the frames contained within the two blocks are
1100   calculated. Once completed, the memory blocks are incremented, and the
1101   process is repeated. A diagram illustrating the process is shown in
1102 < Fig.~\ref{fig:dynamicPropsMemory}. As was the case with \texttt{staticProps},
1103 < multiple properties may be calculated in a single run to avoid
1104 < multiple reads on the same file.  
1102 > Fig.~\ref{oopseFig:dynamicPropsMemory}. As was the case with
1103 > \texttt{staticProps}, multiple properties may be calculated in a
1104 > single run to avoid multiple reads on the same file.
1105  
1045 \begin{figure}
1046 \epsfxsize=6in
1047 \epsfbox{dynamicPropsMem.eps}
1048 \caption{This diagram illustrates the dynamic memory allocation used by \texttt{dynamicProps}, which follows the scheme: $\sum^{N_{\text{memory blocks}}}_{i=1}[ \operatorname{self}(i) + \sum^{N_{\text{memory blocks}}}_{j>i} \operatorname{cross}(i,j)]$. The shaded region represents the self correlation of the memory block, and the open blocks are read one at a time and the cross correlations between blocks are calculated.}
1049 \label{fig:dynamicPropsMemory}
1050 \end{figure}
1106  
1107 < \section{\label{sec:ProgramDesign}Program Design}
1107 >
1108 > \section{\label{oopseSec:design}Program Design}
1109  
1110 < \subsection{\label{sec:architecture} OOPSE Architecture}
1110 > \subsection{\label{sec:architecture} {\sc oopse} Architecture}
1111  
1112 < The core of OOPSE is divided into two main object libraries: {\texttt
1113 < libBASS} and {\texttt libmdtools}. {\texttt libBASS} is the library
1114 < developed around the parseing engine and {\texttt libmdtools} is the
1115 < software library developed around the simulation engine.
1112 > The core of OOPSE is divided into two main object libraries:
1113 > \texttt{libBASS} and \texttt{libmdtools}. \texttt{libBASS} is the
1114 > library developed around the parsing engine and \texttt{libmdtools}
1115 > is the software library developed around the simulation engine. These
1116 > two libraries are designed to encompass all the basic functions and
1117 > tools that {\sc oopse} provides. Utility programs, such as the
1118 > property analyzers, need only link against the software libraries to
1119 > gain access to parsing, force evaluation, and input / output
1120 > routines.
1121  
1122 + Contained in \texttt{libBASS} are all the routines associated with
1123 + reading and parsing the \texttt{.bass} input files. Given a
1124 + \texttt{.bass} file, \texttt{libBASS} will open it and any associated
1125 + \texttt{.mdl} files; then create structures in memory that are
1126 + templates of all the molecules specified in the input files. In
1127 + addition, any simulation parameters set in the \texttt{.bass} file
1128 + will be placed in a structure for later query by the controlling
1129 + program.
1130  
1131 + Located in \texttt{libmdtools} are all other routines necessary to a
1132 + Molecular Dynamics simulation. The library uses the main data
1133 + structures returned by \texttt{libBASS} to initialize the various
1134 + parts of the simulation: the atom structures and positions, the force
1135 + field, the integrator, \emph{et cetera}. After initialization, the
1136 + library can be used to perform a variety of tasks: integrate a
1137 + Molecular Dynamics trajectory, query phase space information from a
1138 + specific frame of a completed trajectory, or even recalculate force or
1139 + energetic information about specific frames from a completed
1140 + trajectory.
1141  
1142 < \subsection{\label{sec:programLang} Programming Languages }
1142 > With these core libraries in place, several programs have been
1143 > developed to utilize the routines provided by \texttt{libBASS} and
1144 > \texttt{libmdtools}. The main program of the package is \texttt{oopse}
1145 > and the corresponding parallel version \texttt{oopse\_MPI}. These two
1146 > programs will take the \texttt{.bass} file, and create then integrate
1147 > the simulation specified in the script. The two analysis programs
1148 > \texttt{staticProps} and \texttt{dynamicProps} utilize the core
1149 > libraries to initialize and read in trajectories from previously
1150 > completed simulations, in addition to the ability to use functionality
1151 > from \texttt{libmdtools} to recalculate forces and energies at key
1152 > frames in the trajectories. Lastly, the family of system building
1153 > programs (Sec.~\ref{oopseSec:initCoords}) also use the libraries to
1154 > store and output the system configurations they create.
1155  
1156 < \subsection{\label{sec:parallelization} Parallelization of OOPSE}
1156 > \subsection{\label{oopseSec:parallelization} Parallelization of {\sc oopse}}
1157  
1158 < Although processor power is doubling roughly every 18 months according
1159 < to the famous Moore's Law\cite{moore}, it is still unreasonable to
1160 < simulate systems of more then a 1000 atoms on a single processor. To
1161 < facilitate study of larger system sizes or smaller systems on long
1162 < time scales in a reasonable period of time, parallel methods were
1163 < developed allowing multiple CPU's to share the simulation
1164 < workload. Three general categories of parallel decomposition method's
1165 < have been developed including atomic, spatial and force decomposition
1075 < methods.
1158 > Although processor power is continually growing month by month, it is
1159 > still unreasonable to simulate systems of more then a 1000 atoms on a
1160 > single processor. To facilitate study of larger system sizes or
1161 > smaller systems on long time scales in a reasonable period of time,
1162 > parallel methods were developed allowing multiple CPU's to share the
1163 > simulation workload. Three general categories of parallel
1164 > decomposition method's have been developed including atomic, spatial
1165 > and force decomposition methods.
1166  
1167   Algorithmically simplest of the three method's is atomic decomposition
1168   where N particles in a simulation are split among P processors for the
# Line 1108 | Line 1198 | competes with spatial methods for up to 100,000 atoms.
1198   favorably then spatial decomposition up to 10,000 atoms and favorably
1199   competes with spatial methods for up to 100,000 atoms.
1200  
1201 < \subsection{\label{sec:memory}Memory Allocation in Analysis}
1201 > \subsection{\label{oopseSec:memAlloc}Memory Issues in Trajectory Analysis}
1202  
1203 < \subsection{\label{sec:documentation}Documentation}
1203 > For large simulations, the trajectory files can sometimes reach sizes
1204 > in excess of several gigabytes. In order to effectively analyze that
1205 > amount of data+, two memory management schemes have been devised for
1206 > \texttt{staticProps} and for \texttt{dynamicProps}. The first scheme,
1207 > developed for \texttt{staticProps}, is the simplest. As each frame's
1208 > statistics are calculated independent of each other, memory is
1209 > allocated for each frame, then freed once correlation calculations are
1210 > complete for the snapshot. To prevent multiple passes through a
1211 > potentially large file, \texttt{staticProps} is capable of calculating
1212 > all requested correlations per frame with only a single pair loop in
1213 > each frame and a single read through of the file.
1214  
1215 < \subsection{\label{openSource}Open Source and Distribution License}
1215 > The second, more advanced memory scheme, is used by
1216 > \texttt{dynamicProps}. Here, the program must have multiple frames in
1217 > memory to calculate time dependent correlations. In order to prevent a
1218 > situation where the program runs out of memory due to large
1219 > trajectories, the user is able to specify that the trajectory be read
1220 > in blocks. The number of frames in each block is specified by the
1221 > user, and upon reading a block of the trajectory,
1222 > \texttt{dynamicProps} will calculate all of the time correlation frame
1223 > pairs within the block. After in block correlations are complete, a
1224 > second block of the trajectory is read, and the cross correlations are
1225 > calculated between the two blocks. this second block is then freed and
1226 > then incremented and the process repeated until the end of the
1227 > trajectory. Once the end is reached, the first block is freed then
1228 > incremented, and the again the internal time correlations are
1229 > calculated. The algorithm with the second block is then repeated with
1230 > the new origin block, until all frame pairs have been correlated in
1231 > time. This process is illustrated in
1232 > Fig.~\ref{oopseFig:dynamicPropsMemory}.
1233  
1234 + \begin{figure}
1235 + \centering
1236 + \includegraphics[width=\linewidth]{dynamicPropsMem.eps}
1237 + \caption[A representation of the block correlations in \texttt{dynamicProps}]{This diagram illustrates the memory management used by \texttt{dynamicProps}, which follows the scheme: $\sum^{N_{\text{memory blocks}}}_{i=1}[ \operatorname{self}(i) + \sum^{N_{\text{memory blocks}}}_{j>i} \operatorname{cross}(i,j)]$. The shaded region represents the self correlation of the memory block, and the open blocks are read one at a time and the cross correlations between blocks are calculated.}
1238 + \label{oopseFig:dynamicPropsMemory}
1239 + \end{figure}
1240  
1241 < \section{\label{sec:conclusion}Conclusion}
1241 > \subsection{\label{openSource}Open Source and Distribution License}
1242  
1243 < \begin{itemize}
1121 <        
1122 < \item Restate capabilities
1243 > \section{\label{oopseSec:conclusion}Conclusion}
1244  
1245 < \item recap major structure / design choices
1245 > We have presented the design and implementation of our open source
1246 > simulation package {\sc oopse}. The package offers novel
1247 > capabilities to the field of Molecular Dynamics simulation packages in
1248 > the form of dipolar force fields, and symplectic integration of rigid
1249 > body dynamics. It is capable of scaling across multiple processors
1250 > through the use of MPI. It also implements several integration
1251 > ensembles allowing the end user control over temperature and
1252 > pressure. In addition, it is capable of integrating constrained
1253 > dynamics through both the {\sc rattle} algorithm and the z-constraint
1254 > method.
1255  
1256 <        \begin{itemize}
1257 <        
1258 <        \item parallel
1259 <        \item symplectic integration
1260 <        \item languages
1256 > These features are all brought together in a single open-source
1257 > development package. This allows researchers to not only benefit from
1258 > {\sc oopse}, but also contribute to {\sc oopse}'s development as
1259 > well.Documentation and source code for {\sc oopse} can be downloaded
1260 > from \texttt{http://www.openscience.org/oopse/}.
1261  
1132        \end{itemize}
1133
1134 \item How well does it meet the primary goal
1135
1136 \end{itemize}
1137 \section{Acknowledgments}
1138 The authors would like to thank espresso for fueling this work, and
1139 would also like to send a special acknowledgement to single malt
1140 scotch for its wonderful calming effects and its ability to make the
1141 troubles of the world float away.
1142 \bibliographystyle{achemso}
1143
1144 \bibliography{oopse}
1145
1146 \end{document}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines