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 1054 by mmeineke, Mon Feb 16 20:35:58 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 significant,
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 {\sc oopse}
31 > (Sec.~\ref{oopseSec:parallelization}) as well as the inclusion of the
32 > embedded-atom potential (Sec.~\ref{oopseSec:eam}). Teng Lin's
33 > contributions include refinement of the periodic boundary conditions
34 > (Sec.~\ref{oopseSec:pbc}), the z-constraint method
35 > (Sec.~\ref{oopseSec:zcons}), refinement of the property analysis
36 > programs (Sec.~\ref{oopseSec:props}), and development in the extended
37 > state integrators (Sec.~\ref{oopseSec:noseHooverThermo}). Christopher
38 > Fennell worked on the symplectic integrator
39 > (Sec.~\ref{oopseSec:integrate}) and the refinement of the {\sc ssd}
40 > water model (Sec.~\ref{oopseSec:SSD}). Daniel Gezelter lent his
41 > talents in the development of the extended system integrators
42 > (Sec.~\ref{oopseSec:noseHooverThermo}) as well as giving general
43 > direction and oversight to the entire project. My responsibilities
44 > covered the creation and specification of {\sc bass}
45 > (Sec.~\ref{oopseSec:IOfiles}), the original development of the single
46 > processor version of {\sc oopse}, contributions to the extended state
47 > integrators (Sec.~\ref{oopseSec:noseHooverThermo}), the implementation
48 > of the Lennard-Jones (Sec.~\ref{sec:LJPot}) and {\sc duff}
49 > (Sec.~\ref{oopseSec:DUFF}) force fields, and initial implementation of
50 > the property analysis (Sec.~\ref{oopseSec:props}) and system
51 > initialization (Sec.~\ref{oopseSec:initCoords}) utility programs.
52  
53 < \item Need for package / Niche to fill
53 > \section{\label{sec:intro}Introduction}
54  
55 < \item Design Goal
55 > When choosing to simulate a chemical system with molecular dynamics,
56 > there are a variety of options available. For simple systems, one
57 > might consider writing one's own programming code. However, as systems
58 > grow larger and more complex, building and maintaining code for the
59 > simulations becomes a time consuming task. In such cases it is usually
60 > more convenient for a researcher to turn to pre-existing simulation
61 > packages. These packages, such as {\sc amber}\cite{pearlman:1995} and
62 > {\sc charmm}\cite{Brooks83}, provide powerful tools for researchers to
63 > conduct simulations of their systems without spending their time
64 > developing a code base to conduct their research. This then frees them
65 > to perhaps explore experimental analogues to their models.
66  
67 < \item Open Source
67 > Despite their utility, problems with these packages arise when
68 > researchers try to develop techniques or energetic models that the
69 > code was not originally designed to do. Examples of uncommonly
70 > implemented techniques and energetics include; dipole-dipole
71 > interactions, rigid body dynamics, and metallic embedded
72 > potentials. When faced with these obstacles, a researcher must either
73 > develop their own code or license and extend one of the commercial
74 > packages. What we have elected to do, is develop a package of
75 > simulation code capable of implementing the types of models upon which
76 > our research is based.
77  
78 < \item Discussion of Paper Layout
78 > Having written {\sc oopse} we are implementing the concept of Open
79 > Source development, and releasing our source code into the public
80 > domain. It is our intent that by doing so, other researchers might
81 > benefit from our work, and add their own contributions to the
82 > package. The license under which {\sc oopse} is distributed allows any
83 > researcher to download and modify the source code for their own
84 > use. In this way further development of {\sc oopse} is not limited to
85 > only the models of interest to ourselves, but also those of the
86 > community of scientists who contribute back to the project.
87  
88 < \end{itemize}
89 <
90 < \section{\label{sec:empiricalEnergy}The Empirical Energy Functions}
88 > We have structured this chapter to first discuss the empirical energy
89 > functions that {\sc oopse } implements in
90 > Sec.~\ref{oopseSec:empiricalEnergy}. Following that is a discussion of
91 > the various input and output files associated with the package
92 > (Sec.~\ref{oopseSec:IOfiles}). In Sec.~\ref{oopseSec:mechanics}
93 > elucidates the various Molecular Dynamics algorithms {\sc oopse}
94 > implements in the integration of the Newtonian equations of
95 > motion. Basic analysis of the trajectories obtained from the
96 > simulation is discussed in Sec.~\ref{oopseSec:props}. Program design
97 > considerations as well as the software distribution license is
98 > presented in Sec.~\ref{oopseSec:design}. And lastly,
99 > Sec.~\ref{oopseSec:conclusion} concludes the chapter.
100  
101 < \subsection{\label{sec:atomsMolecules}Atoms, Molecules and Rigid Bodies}
101 > \section{\label{oopseSec:empiricalEnergy}The Empirical Energy Functions}
102  
103 + \subsection{\label{oopseSec:atomsMolecules}Atoms, Molecules and Rigid Bodies}
104 +
105   The basic unit of an {\sc oopse} simulation is the atom. The
106   parameters describing the atom are generalized to make the atom as
107   flexible a representation as possible. They may represent specific
108   atoms of an element, or be used for collections of atoms such as
109   methyl and carbonyl groups. The atoms are also capable of having
110   directional components associated with them (\emph{e.g.}~permanent
111 < dipoles). Charges on atoms are not currently supported by {\sc oopse}.
111 > dipoles). Charges, permanent dipoles, and Lennard-Jones parameters for
112 > a given atom type are set in the force field parameter files
113  
114 < \begin{lstlisting}[caption={[Specifier for molecules and atoms] A sample specification of the simple Ar molecule},label=sch:AtmMole]
114 > \begin{lstlisting}[float,caption={[Specifier for molecules and atoms] A sample specification of an Ar molecule},label=sch:AtmMole]
115   molecule{
116    name = "Ar";
117    nAtoms = 1;
# Line 79 | Line 122 | molecule{
122   }
123   \end{lstlisting}
124  
125 < Atoms can be collected into secondary srtructures such as rigid bodies
125 >
126 > Atoms can be collected into secondary structures such as rigid bodies
127   or molecules. The molecule is a way for {\sc oopse} to keep track of
128   the atoms in a simulation in logical manner. Molecular units store the
129 < identities of all the atoms associated with themselves, and are
130 < responsible for the evaluation of their own internal interactions
131 < (\emph{i.e.}~bonds, bends, and torsions). Scheme \ref{sch:AtmMole}
132 < shws how one creates a molecule in the \texttt{.mdl} files. The
133 < position of the atoms given in the declaration are relative to the
134 < origin of the molecule, and is used when creating a system containing
135 < the molecule.
129 > identities of all the atoms and rigid bodies associated with
130 > themselves, and are responsible for the evaluation of their own
131 > internal interactions (\emph{i.e.}~bonds, bends, and torsions). Scheme
132 > \ref{sch:AtmMole} shows how one creates a molecule in a
133 > \texttt{.mdl} file. The position of the atoms given in the
134 > declaration are relative to the origin of the molecule, and is used
135 > when creating a system containing the molecule.
136  
137   As stated previously, one of the features that sets {\sc oopse} apart
138   from most of the current molecular simulation packages is the ability
# Line 136 | Line 180 | entire nine parameter rotation matrix internally. Furt
180  
181   {\sc oopse} utilizes a relatively new scheme that propagates the
182   entire nine parameter rotation matrix internally. Further discussion
183 < on this choice can be found in Sec.~\ref{sec:integrate}. An example
184 < definition of a riged body can be seen in Scheme
183 > on this choice can be found in Sec.~\ref{oopseSec:integrate}. An example
184 > definition of a rigid body can be seen in Scheme
185   \ref{sch:rigidBody}. The positions in the atom definitions are the
186   placements of the atoms relative to the origin of the rigid body,
187   which itself has a position relative to the origin of the molecule.
188  
189 < \begin{lstlisting}[caption={[Defining rigid bodies]A sample definition of a rigid body},label={sch:rigidBody}]
189 > \begin{lstlisting}[float,caption={[Defining rigid bodies]A sample definition of a rigid body},label={sch:rigidBody}]
190   molecule{
191    name = "TIP3P_water";
192    nRigidBodies = 1;
# Line 166 | Line 210 | molecule{
210   }
211   \end{lstlisting}
212  
213 < \subsection{\label{sec:LJPot}The Lennard Jones Potential}
213 > \subsection{\label{sec:LJPot}The Lennard Jones Force Field}
214  
215   The most basic force field implemented in {\sc oopse} is the
216 < Lennard-Jones potential, which mimics the van der Waals interaction at
216 > Lennard-Jones force field, which mimics the van der Waals interaction at
217   long distances, and uses an empirical repulsion at short
218   distances. The Lennard-Jones potential is given by:
219   \begin{equation}
# Line 183 | Line 227 | $\epsilon_{ij}$ scales the well depth of the potential
227   Where $r_{ij}$ is the distance between particles $i$ and $j$,
228   $\sigma_{ij}$ scales the length of the interaction, and
229   $\epsilon_{ij}$ scales the well depth of the potential. Scheme
230 < \ref{sch:LJFF} gives and example partial \texttt{.bass} file that
231 < shows a system of 108 Ar particles simulated with the Lennard-Jones
232 < force field.
230 > \ref{sch:LJFF} gives and example \texttt{.bass} file that
231 > sets up a system of 108 Ar particles to be simulated using the
232 > Lennard-Jones force field.
233  
234 < \begin{lstlisting}[caption={[Invocation of the Lennard-Jones force field] A sample system using the Lennard-Jones force field.},label={sch:LJFF}]
234 > \begin{lstlisting}[float,caption={[Invocation of the Lennard-Jones force field] A sample system using the Lennard-Jones force field.},label={sch:LJFF}]
235  
236   /*
237   * The Ar molecule is specified
# Line 239 | Line 283 | and
283  
284  
285  
286 < \subsection{\label{sec:DUFF}Dipolar Unified-Atom Force Field}
286 > \subsection{\label{oopseSec:DUFF}Dipolar Unified-Atom Force Field}
287  
288   The dipolar unified-atom force field ({\sc duff}) was developed to
289   simulate lipid bilayers. The simulations require a model capable of
290   forming bilayers, while still being sufficiently computationally
291 < efficient to allow large systems ($\approx$100's of phospholipids,
292 < $\approx$1000's of waters) to be simulated for long times
293 < ($\approx$10's of nanoseconds).
291 > efficient to allow large systems ($\sim$100's of phospholipids,
292 > $\sim$1000's of waters) to be simulated for long times
293 > ($\sim$10's of nanoseconds).
294  
295   With this goal in mind, {\sc duff} has no point
296   charges. Charge-neutral distributions were replaced with dipoles,
# Line 262 | Line 306 | site is located at the pseudoatom's center of mass. Th
306   the head group center of mass, our model mimics the head group of
307   phosphatidylcholine.\cite{Cevc87} Additionally, a large Lennard-Jones
308   site is located at the pseudoatom's center of mass. The model is
309 < illustrated by the dark grey atom in Fig.~\ref{fig:lipidModel}. The
309 > illustrated by the dark grey atom in Fig.~\ref{oopseFig:lipidModel}. The
310   water model we use to complement the dipoles of the lipids is our
311   reparameterization of the soft sticky 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 296 | Line 340 | duff} is illustrated in Scheme \ref{sch:DUFF}.
340   used when integrating the equations of motion. A simulation using {\sc
341   duff} is 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 364 | Line 408 | Here $\phi$ is the angle defined by four bonded neighb
408   \label{eq:origTorsionPot}
409   \end{equation}
410   Here $\phi$ is the angle defined by four bonded neighbors $i$,
411 < $j$, $k$, and $l$ (again, see Fig.~\ref{fig:lipidModel}). For
411 > $j$, $k$, and $l$ (again, see Fig.~\ref{oopseFig:lipidModel}). For
412   computational efficiency, the torsion potential has been recast after
413 < the method of CHARMM,\cite{charmm1983} in which the angle series is
413 > the method of {\sc charmm},\cite{Brooks83} in which the angle series is
414   converted to a power series of the form:
415   \begin{equation}
416   V_{\text{torsion}}(\phi) =  
# Line 399 | Line 443 | $V_{\text{sticky}}$ is the sticky potential defined by
443   Where $V_{\text{LJ}}$ is the Lennard Jones potential,
444   $V_{\text{dipole}}$ is the dipole dipole potential, and
445   $V_{\text{sticky}}$ is the sticky potential defined by the SSD model
446 < (Sec.~\ref{sec:SSD}). Note that not all atom types include all
446 > (Sec.~\ref{oopseSec:SSD}). Note that not all atom types include all
447   interactions.
448  
449   The dipole-dipole potential has the following form:
# Line 417 | Line 461 | respectively. $|\mu_i|$ is the magnitude of the dipole
461   towards $j$, and $\boldsymbol{\Omega}_i$ and $\boldsymbol{\Omega}_j$
462   are the orientational degrees of freedom for atoms $i$ and $j$
463   respectively. $|\mu_i|$ is the magnitude of the dipole moment of atom
464 < $i$, $\boldsymbol{\hat{u}}_i$ is the standard unit orientation
465 < vector of $\boldsymbol{\Omega}_i$, and $\boldsymbol{\hat{r}}_{ij}$ is
466 < the unit vector pointing along $\mathbf{r}_{ij}$.
464 > $i$, $\boldsymbol{\hat{u}}_i$ is the standard unit orientation vector
465 > of $\boldsymbol{\Omega}_i$, and $\boldsymbol{\hat{r}}_{ij}$ is the
466 > unit vector pointing along $\mathbf{r}_{ij}$
467 > ($\boldsymbol{\hat{r}}_{ij}=\mathbf{r}_{ij}/|\mathbf{r}_{ij}|$).
468  
469  
470 < \subsubsection{\label{sec:SSD}The {\sc duff} Water Models: SSD/E and SSD/RF}
470 > \subsubsection{\label{oopseSec:SSD}The {\sc duff} Water Models: SSD/E and SSD/RF}
471  
472   In the interest of computational efficiency, the default solvent used
473   by {\sc oopse} is the extended Soft Sticky Dipole (SSD/E) water
# Line 508 | Line 553 | parameter values and the drawbacks and benefits of the
553   model. Solvent parameters can be easily modified in an accompanying
554   {\sc BASS} file as illustrated in the scheme below. A table of the
555   parameter values and the drawbacks and benefits of the different
556 < density corrected SSD models can be found in reference
557 < \ref{Gezelter04}.
556 > density corrected SSD models can be found in
557 > reference~\cite{Gezelter04}.
558  
559 < \begin{lstlisting}[caption={[A simulation of {\sc ssd} water]An example file showing a simulation including {\sc ssd} water.},label={sch:ssd}]
559 > \begin{lstlisting}[float,caption={[A simulation of {\sc ssd} water]An example file showing a simulation including {\sc ssd} water.},label={sch:ssd}]
560  
561   #include "water.mdl"
562  
# Line 546 | Line 591 | electrostaticSkinThickness = 1.38;
591   \end{lstlisting}
592  
593  
594 < \subsection{\label{sec:eam}Embedded Atom Method}
594 > \subsection{\label{oopseSec:eam}Embedded Atom Method}
595  
596 < Several other molecular dynamics packages\cite{dynamo86} exist which have the
596 > There are Molecular Dynamics packages which have the
597   capacity to simulate metallic systems, including some that have
598   parallel computational abilities\cite{plimpton93}. Potentials that
599   describe bonding transition metal
# Line 576 | Line 621 | between atoms $i$ and $j$. In the original formulation
621   spherically averaged atomic electron densities given by
622   $\rho_{i}$.  $\phi_{ij}$ is a primarily repulsive pairwise interaction
623   between atoms $i$ and $j$. In the original formulation of
624 < {\sc eam} cite{Daw84}, $\phi_{ij}$ was an entirely repulsive term, however
624 > {\sc eam}\cite{Daw84}, $\phi_{ij}$ was an entirely repulsive term, however
625   in later refinements to EAM have shown that non-uniqueness between $F$
626   and $\phi$ allow for more general forms for $\phi$.\cite{Daw89}
627   There is a cutoff distance, $r_{cut}$, which limits the
628   summations in the {\sc eam} equation to the few dozen atoms
629   surrounding atom $i$ for both the density $\rho$ and pairwise $\phi$
630 < 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}.
630 > 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}.
631  
632  
633 < \subsection{\label{Sec:pbc}Periodic Boundary Conditions}
633 > \subsection{\label{oopseSec:pbc}Periodic Boundary Conditions}
634  
635   \newcommand{\roundme}{\operatorname{round}}
636  
# Line 628 | Line 673 | where
673   \begin{equation}
674   \roundme(x)=\left\{
675   \begin{array}{cc}%
676 < \lfloor{x+0.5}\rfloor & \text{if \ }x\geqslant0\\
676 > \lfloor{x+0.5}\rfloor & \text{if \ }x\geqslant 0 \\
677   \lceil{x-0.5}\rceil & \text{otherwise}%
678   \end{array}
679   \right.
# Line 645 | Line 690 | transforming back to real space,%
690   \end{equation}
691  
692  
693 < \section{Input and Output Files}
693 > \section{\label{oopseSec:IOfiles}Input and Output Files}
694  
695   \subsection{{\sc bass} and Model Files}
696  
697 < Every {\sc oopse} simuation begins with a {\sc bass} file. {\sc bass}
697 > Every {\sc oopse} simulation begins with a {\sc bass} file. {\sc bass}
698   (\underline{B}izarre \underline{A}tom \underline{S}imulation
699   \underline{S}yntax) is a script syntax that is parsed by {\sc oopse} at
700   runtime. The {\sc bass} file allows for the user to completely describe the
# Line 659 | Line 704 | Fig.~\ref{fig:bassExample}.
704   Fig.~\ref{fig:bassExample}.
705  
706   \begin{figure}
662
707   \centering
708   \framebox[\linewidth]{\rule{0cm}{0.75\linewidth}I'm a {\sc bass} file!}
709   \caption{Here is an example \texttt{.bass} file}
710   \label{fig:bassExample}
711   \end{figure}
712  
713 < Within the \texttt{.bass} file it is neccassary to provide a complete
713 > Within the \texttt{.bass} file it is necessary to provide a complete
714   description of the molecule before it is actually placed in the
715   simulation. The {\sc bass} syntax was originally developed with this goal in
716   mind, and allows for the specification of all the atoms in a molecular
717   prototype, as well as any bonds, bends, or torsions. These
718   descriptions can become lengthy for complex molecules, and it would be
719 < inconvient to duplicate the simulation at the begining of each {\sc bass}
719 > inconvenient to duplicate the simulation at the beginning of each {\sc bass}
720   script. Addressing this issue {\sc bass} allows for the inclusion of model
721   files at the top of a \texttt{.bass} file. These model files, denoted
722   with the \texttt{.mdl} extension, allow the user to describe a
723   molecular prototype once, then simply include it into each simulation
724   containing that molecule.
725  
726 < \subsection{\label{subSec:coordFiles}Coordinate Files}
726 > \subsection{\label{oopseSec:coordFiles}Coordinate Files}
727  
728   The standard format for storage of a systems coordinates is a modified
729   xyz-file syntax, the exact details of which can be seen in
# Line 691 | Line 735 | trajectory file, and the final coordinates of the simu
735   There are three major files used by {\sc oopse} written in the coordinate
736   format, they are as follows: the initialization file, the simulation
737   trajectory file, and the final coordinates of the simulation. The
738 < initialization file is neccassary for {\sc oopse} to start the simulation
738 > initialization file is necessary for {\sc oopse} to start the simulation
739   with the proper coordinates. It is typically denoted with the
740   extension \texttt{.init}. The trajectory file is created at the
741   beginning of the simulation, and is used to store snapshots of the
# Line 700 | Line 744 | coordinate file is the end of run or \texttt{.eor} fil
744   file at an interval specified in the \texttt{.bass} file. The
745   trajectory file is given the extension \texttt{.dump}. The final
746   coordinate file is the end of run or \texttt{.eor} file. The
747 < \texttt{.eor} file stores the final configuration of teh system for a
747 > \texttt{.eor} file stores the final configuration of the system for a
748   given simulation. The file is updated at the same time as the
749   \texttt{.dump} file. However, it only contains the most recent
750   frame. In this way, an \texttt{.eor} file may be used as the
751   initialization file to a second simulation in order to continue or
752   recover the previous simulation.
753  
754 < \subsection{Generation of Initial Coordinates}
754 > \subsection{\label{oopseSec:initCoords}Generation of Initial Coordinates}
755  
756 < As was stated in Sec.~\ref{subSec:coordFiles}, an initialization file
756 > As was stated in Sec.~\ref{oopseSec:coordFiles}, an initialization file
757   is needed to provide the starting coordinates for a simulation. The
758   {\sc oopse} package provides a program called \texttt{sysBuilder} to aid in
759   the creation of the \texttt{.init} file. \texttt{sysBuilder} is {\sc bass}
760   aware, and will recognize arguments and parameters in the
761   \texttt{.bass} file that would otherwise be ignored by the
762 < simulation. The program itself is under contiunual development, and is
762 > simulation. The program itself is under continual development, and is
763   offered here as a helper tool only.
764  
765   \subsection{The Statistics File}
# Line 724 | Line 768 | frequency specified in the \texttt{.bass} file. The fi
768   file records such statistical quantities as the instantaneous
769   temperature, volume, pressure, etc. It is written out with the
770   frequency specified in the \texttt{.bass} file. The file allows the
771 < user to observe the system variables as a function od simulation time
771 > user to observe the system variables as a function of simulation time
772   while the simulation is in progress. One useful function the
773   statistics file serves is to monitor the conserved quantity of a given
774   simulation ensemble, this allows the user to observe the stability of
775   the integrator. The statistics file is denoted with the \texttt{.stat}
776   file extension.
777  
778 < \section{\label{sec:mechanics}Mechanics}
778 > \section{\label{oopseSec:mechanics}Mechanics}
779  
780 < \subsection{\label{integrate}Integrating the Equations of Motion: the Symplectic Step Integrator}
780 > \subsection{\label{oopseSec:integrate}Integrating the Equations of Motion: the Symplectic Step Integrator}
781  
782   Integration of the equations of motion was carried out using the
783   symplectic splitting method proposed by Dullweber \emph{et
# Line 773 | Line 817 | energy conservation of the two methods as illustrated
817   \ref{timestep}.
818  
819   \begin{figure}
820 < \epsfxsize=6in
821 < \epsfbox{timeStep.epsi}
820 > \centering
821 > \includegraphics[width=\linewidth]{timeStep.eps}
822   \caption{Energy conservation using quaternion based integration versus
823   the symplectic step method proposed by Dullweber \emph{et al.} with
824   increasing time step. For each time step, the dotted line is total
# Line 812 | Line 856 | constant pressure simulations as well.
856   {\sc oopse} implements a
857  
858  
859 < \subsubsection{\label{sec:noseHooverThermo}Nose-Hoover Thermostatting}
859 > \subsubsection{\label{oopseSec:noseHooverThermo}Nose-Hoover Thermostatting}
860  
861   To mimic the effects of being in a constant temperature ({\sc nvt})
862   ensemble, {\sc oopse} uses the Nose-Hoover extended system
# Line 840 | Line 884 | set to 1 ps using the {\tt tauThermostat = 1000; } com
884   set to 1 ps using the {\tt tauThermostat = 1000; } command.
885  
886  
887 < \subsection{\label{Sec:zcons}Z-Constraint Method}
887 > \subsection{\label{oopseSec:zcons}Z-Constraint Method}
888  
889 < Based on fluctuatin-dissipation theorem,\bigskip\ force auto-correlation
889 > Based on fluctuation-dissipation theorem,\bigskip\ force auto-correlation
890   method was developed to investigate the dynamics of ions inside the ion
891   channels.\cite{Roux91} Time-dependent friction coefficient can be calculated
892 < from the deviation of the instaneous force from its mean force.
892 > from the deviation of the instantaneous force from its mean force.
893  
894   %
895  
896   \begin{equation}
897   \xi(z,t)=\langle\delta F(z,t)\delta F(z,0)\rangle/k_{B}T
898   \end{equation}
855
856
899   where%
900   \begin{equation}
901   \delta F(z,t)=F(z,t)-\langle F(z,t)\rangle
# Line 883 | Line 925 | force calculation at each time step.
925   resetting the coordinate, we reset the forces of z-constraint molecules as
926   well as subtract the total constraint forces from the rest of the system after
927   force calculation at each time step.
928 < \begin{verbatim}
929 < $F_{\alpha i}=0$
930 < $V_{\alpha i}=V_{\alpha i}-\frac{\sum\limits_{i}M_{_{\alpha i}}V_{\alpha i}}{\sum\limits_{i}M_{_{\alpha i}}}$
931 < $F_{\alpha i}=F_{\alpha i}-\frac{M_{_{\alpha i}}}{\sum\limits_{\alpha}\sum\limits_{i}M_{_{\alpha i}}}\sum\limits_{\beta}F_{\beta}$
932 < $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}}}$
933 < \end{verbatim}
928 > \begin{align}
929 > F_{\alpha i}&=0\\
930 > V_{\alpha i}&=V_{\alpha i}-\frac{\sum\limits_{i}M_{_{\alpha i}}V_{\alpha i}}{\sum\limits_{i}M_{_{\alpha i}}}\\
931 > F_{\alpha i}&=F_{\alpha i}-\frac{M_{_{\alpha i}}}{\sum\limits_{\alpha}\sum\limits_{i}M_{_{\alpha i}}}\sum\limits_{\beta}F_{\beta}\\
932 > 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}}}
933 > \end{align}
934  
935   At the very beginning of the simulation, the molecules may not be at its
936   constraint position. To move the z-constraint molecule to the specified
# Line 908 | Line 950 | drive the z-constraint molecule.
950   Worthy of mention, other kinds of potential functions can also be used to
951   drive the z-constraint molecule.
952  
953 < \section{\label{sec:analysis}Trajectory Analysis}
953 > \section{\label{oopseSec:props}Trajectory Analysis}
954  
955 < \subsection{\label{subSec:staticProps}Static Property Analysis}
955 > \subsection{\label{oopseSec:staticProps}Static Property Analysis}
956  
957   The static properties of the trajectories are analyzed with the
958   program \texttt{staticProps}. The code is capable of calculating the following
# Line 1038 | Line 1080 | process is repeated. A diagram illustrating the proces
1080   between the frames contained within the two blocks are
1081   calculated. Once completed, the memory blocks are incremented, and the
1082   process is repeated. A diagram illustrating the process is shown in
1083 < Fig.~\ref{fig:dynamicPropsMemory}. As was the case with \texttt{staticProps},
1084 < multiple properties may be calculated in a single run to avoid
1085 < multiple reads on the same file.  
1083 > Fig.~\ref{oopseFig:dynamicPropsMemory}. As was the case with
1084 > \texttt{staticProps}, multiple properties may be calculated in a
1085 > single run to avoid multiple reads on the same file.
1086  
1087 < \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}
1087 >
1088  
1089 < \section{\label{sec:ProgramDesign}Program Design}
1089 > \section{\label{oopseSec:design}Program Design}
1090  
1091 < \subsection{\label{sec:architecture} OOPSE Architecture}
1091 > \subsection{\label{sec:architecture} {\sc oopse} Architecture}
1092  
1093 < The core of OOPSE is divided into two main object libraries: {\texttt
1094 < libBASS} and {\texttt libmdtools}. {\texttt libBASS} is the library
1095 < developed around the parseing engine and {\texttt libmdtools} is the
1096 < software library developed around the simulation engine.
1093 > The core of OOPSE is divided into two main object libraries:
1094 > \texttt{libBASS} and \texttt{libmdtools}. \texttt{libBASS} is the
1095 > library developed around the parsing engine and \texttt{libmdtools}
1096 > is the software library developed around the simulation engine. These
1097 > two libraries are designed to encompass all the basic functions and
1098 > tools that {\sc oopse} provides. Utility programs, such as the
1099 > property analyzers, need only link against the software libraries to
1100 > gain access to parsing, force evaluation, and input / output
1101 > routines.
1102  
1103 + Contained in \texttt{libBASS} are all the routines associated with
1104 + reading and parsing the \texttt{.bass} input files. Given a
1105 + \texttt{.bass} file, \texttt{libBASS} will open it and any associated
1106 + \texttt{.mdl} files; then create structures in memory that are
1107 + templates of all the molecules specified in the input files. In
1108 + addition, any simulation parameters set in the \texttt{.bass} file
1109 + will be placed in a structure for later query by the controlling
1110 + program.
1111  
1112 + Located in \texttt{libmdtools} are all other routines necessary to a
1113 + Molecular Dynamics simulation. The library uses the main data
1114 + structures returned by \texttt{libBASS} to initialize the various
1115 + parts of the simulation: the atom structures and positions, the force
1116 + field, the integrator, \emph{et cetera}. After initialization, the
1117 + library can be used to perform a variety of tasks: integrate a
1118 + Molecular Dynamics trajectory, query phase space information from a
1119 + specific frame of a completed trajectory, or even recalculate force or
1120 + energetic information about specific frames from a completed
1121 + trajectory.
1122  
1123 < \subsection{\label{sec:programLang} Programming Languages }
1124 <
1125 < \subsection{\label{sec:parallelization} Parallelization of OOPSE}
1123 > With these core libraries in place, several programs have been
1124 > developed to utilize the routines provided by \texttt{libBASS} and
1125 > \texttt{libmdtools}. The main program of the package is \texttt{oopse}
1126 > and the corresponding parallel version \texttt{oopse\_MPI}. These two
1127 > programs will take the \texttt{.bass} file, and create then integrate
1128 > the simulation specified in the script. The two analysis programs
1129 > \texttt{staticProps} and \texttt{dynamicProps} utilize the core
1130 > libraries to initialize and read in trajectories from previously
1131 > completed simulations, in addition to the ability to use functionality
1132 > from \texttt{libmdtools} to recalculate forces and energies at key
1133 > frames in the trajectories. Lastly, the family of system building
1134 > programs (Sec.~\ref{oopseSec:initCoords}) also use the libraries to
1135 > store and output the system configurations they create.
1136  
1137 < Although processor power is doubling roughly every 18 months according
1068 < to the famous Moore's Law\cite{moore}, it is still unreasonable to
1069 < simulate systems of more then a 1000 atoms on a single processor. To
1070 < facilitate study of larger system sizes or smaller systems on long
1071 < time scales in a reasonable period of time, parallel methods were
1072 < developed allowing multiple CPU's to share the simulation
1073 < workload. Three general categories of parallel decomposition method's
1074 < have been developed including atomic, spatial and force decomposition
1075 < methods.
1137 > \subsection{\label{oopseSec:parallelization} Parallelization of {\sc oopse}}
1138  
1139 + Although processor power is continually growing month by month, it is
1140 + still unreasonable to simulate systems of more then a 1000 atoms on a
1141 + single processor. To facilitate study of larger system sizes or
1142 + smaller systems on long time scales in a reasonable period of time,
1143 + parallel methods were developed allowing multiple CPU's to share the
1144 + simulation workload. Three general categories of parallel
1145 + decomposition method's have been developed including atomic, spatial
1146 + and force decomposition methods.
1147 +
1148   Algorithmically simplest of the three method's is atomic decomposition
1149   where N particles in a simulation are split among P processors for the
1150   duration of the simulation. Computational cost scales as an optimal
# Line 1108 | Line 1179 | competes with spatial methods for up to 100,000 atoms.
1179   favorably then spatial decomposition up to 10,000 atoms and favorably
1180   competes with spatial methods for up to 100,000 atoms.
1181  
1182 < \subsection{\label{sec:memory}Memory Allocation in Analysis}
1182 > \subsection{\label{oopseSec:memAlloc}Memory Issues in Trajectory Analysis}
1183  
1184 < \subsection{\label{sec:documentation}Documentation}
1184 > For large simulations, the trajectory files can sometimes reach sizes
1185 > in excess of several gigabytes. In order to effectively analyze that
1186 > amount of data+, two memory management schemes have been devised for
1187 > \texttt{staticProps} and for \texttt{dynamicProps}. The first scheme,
1188 > developed for \texttt{staticProps}, is the simplest. As each frame's
1189 > statistics are calculated independent of each other, memory is
1190 > allocated for each frame, then freed once correlation calculations are
1191 > complete for the snapshot. To prevent multiple passes through a
1192 > potentially large file, \texttt{staticProps} is capable of calculating
1193 > all requested correlations per frame with only a single pair loop in
1194 > each frame and a single read through of the file.
1195  
1196 < \subsection{\label{openSource}Open Source and Distribution License}
1196 > The second, more advanced memory scheme, is used by
1197 > \texttt{dynamicProps}. Here, the program must have multiple frames in
1198 > memory to calculate time dependent correlations. In order to prevent a
1199 > situation where the program runs out of memory due to large
1200 > trajectories, the user is able to specify that the trajectory be read
1201 > in blocks. The number of frames in each block is specified by the
1202 > user, and upon reading a block of the trajectory,
1203 > \texttt{dynamicProps} will calculate all of the time correlation frame
1204 > pairs within the block. After in block correlations are complete, a
1205 > second block of the trajectory is read, and the cross correlations are
1206 > calculated between the two blocks. this second block is then freed and
1207 > then incremented and the process repeated until the end of the
1208 > trajectory. Once the end is reached, the first block is freed then
1209 > incremented, and the again the internal time correlations are
1210 > calculated. The algorithm with the second block is then repeated with
1211 > the new origin block, until all frame pairs have been correlated in
1212 > time. This process is illustrated in
1213 > Fig.~\ref{oopseFig:dynamicPropsMemory}.
1214  
1215 + \begin{figure}
1216 + \centering
1217 + \includegraphics[width=\linewidth]{dynamicPropsMem.eps}
1218 + \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.}
1219 + \label{oopseFig:dynamicPropsMemory}
1220 + \end{figure}
1221  
1222 < \section{\label{sec:conclusion}Conclusion}
1222 > \subsection{\label{openSource}Open Source and Distribution License}
1223  
1224 < \begin{itemize}
1121 <        
1122 < \item Restate capabilities
1224 > \section{\label{oopseSec:conclusion}Conclusion}
1225  
1226 < \item recap major structure / design choices
1226 > We have presented the design and implementation of our open source
1227 > simulation package {\sc oopse}. The package offers novel
1228 > capabilities to the field of Molecular Dynamics simulation packages in
1229 > the form of dipolar force fields, and symplectic integration of rigid
1230 > body dynamics. It is capable of scaling across multiple processors
1231 > through the use of MPI. It also implements several integration
1232 > ensembles allowing the end user control over temperature and
1233 > pressure. In addition, it is capable of integrating constrained
1234 > dynamics through both the {\sc rattle} algorithm and the z-constraint
1235 > method.
1236  
1237 <        \begin{itemize}
1238 <        
1239 <        \item parallel
1240 <        \item symplectic integration
1241 <        \item languages
1237 > These features are all brought together in a single open-source
1238 > development package. This allows researchers to not only benefit from
1239 > {\sc oopse}, but also contribute to {\sc oopse}'s development as
1240 > well.Documentation and source code for {\sc oopse} can be downloaded
1241 > from \texttt{http://www.openscience.org/oopse/}.
1242  
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