1 |
mmeineke |
1045 |
\chapter{\label{chapt:oopse}OOPSE: AN OPEN SOURCE OBJECT-ORIENTED PARALLEL SIMULATION ENGINE FOR MOLECULAR DYNAMICS} |
2 |
mmeineke |
1044 |
|
3 |
|
|
|
4 |
|
|
|
5 |
mmeineke |
1045 |
%% \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 |
mmeineke |
1044 |
|
14 |
mmeineke |
1045 |
\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 |
mmeineke |
1044 |
|
18 |
mmeineke |
1051 |
\section{\label{oopseSec:foreword}Foreword} |
19 |
mmeineke |
1044 |
|
20 |
mmeineke |
1051 |
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 |
mmeineke |
1068 |
Gezelter. Although my contributions to {\sc oopse} are major, |
26 |
|
|
consideration of my work apart from the others would not give a |
27 |
mmeineke |
1051 |
complete description to the package's capabilities. As such, all |
28 |
|
|
contributions to {\sc oopse} to date are presented in this chapter. |
29 |
mmeineke |
1044 |
|
30 |
mmeineke |
1068 |
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 |
mmeineke |
1054 |
(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 |
mmeineke |
1068 |
system integrators (Sec.~\ref{oopseSec:noseHooverThermo}). Christopher |
39 |
mmeineke |
1054 |
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 |
mmeineke |
1068 |
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 |
mmeineke |
1044 |
|
57 |
mmeineke |
1051 |
\section{\label{sec:intro}Introduction} |
58 |
mmeineke |
1044 |
|
59 |
mmeineke |
1051 |
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 |
mmeineke |
1054 |
more convenient for a researcher to turn to pre-existing simulation |
65 |
mmeineke |
1051 |
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 |
mmeineke |
1054 |
to perhaps explore experimental analogues to their models. |
70 |
mmeineke |
1044 |
|
71 |
mmeineke |
1051 |
Despite their utility, problems with these packages arise when |
72 |
|
|
researchers try to develop techniques or energetic models that the |
73 |
mmeineke |
1068 |
code was not originally designed to simulate. Examples of uncommonly |
74 |
mmeineke |
1051 |
implemented techniques and energetics include; dipole-dipole |
75 |
mmeineke |
1054 |
interactions, rigid body dynamics, and metallic embedded |
76 |
mmeineke |
1051 |
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 |
mmeineke |
1044 |
|
82 |
mmeineke |
1068 |
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 |
mmeineke |
1044 |
|
93 |
mmeineke |
1054 |
We have structured this chapter to first discuss the empirical energy |
94 |
mmeineke |
1051 |
functions that {\sc oopse } implements in |
95 |
mmeineke |
1054 |
Sec.~\ref{oopseSec:empiricalEnergy}. Following that is a discussion of |
96 |
mmeineke |
1051 |
the various input and output files associated with the package |
97 |
mmeineke |
1068 |
(Sec.~\ref{oopseSec:IOfiles}). Sec.~\ref{oopseSec:mechanics} |
98 |
mmeineke |
1051 |
elucidates the various Molecular Dynamics algorithms {\sc oopse} |
99 |
mmeineke |
1054 |
implements in the integration of the Newtonian equations of |
100 |
mmeineke |
1051 |
motion. Basic analysis of the trajectories obtained from the |
101 |
|
|
simulation is discussed in Sec.~\ref{oopseSec:props}. Program design |
102 |
mmeineke |
1068 |
considerations are presented in Sec.~\ref{oopseSec:design}. And |
103 |
|
|
lastly, Sec.~\ref{oopseSec:conclusion} concludes the chapter. |
104 |
mmeineke |
1044 |
|
105 |
mmeineke |
1051 |
\section{\label{oopseSec:empiricalEnergy}The Empirical Energy Functions} |
106 |
|
|
|
107 |
|
|
\subsection{\label{oopseSec:atomsMolecules}Atoms, Molecules and Rigid Bodies} |
108 |
|
|
|
109 |
mmeineke |
1044 |
The basic unit of an {\sc oopse} simulation is the atom. The |
110 |
|
|
parameters describing the atom are generalized to make the atom as |
111 |
|
|
flexible a representation as possible. They may represent specific |
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 |
mmeineke |
1054 |
dipoles). Charges, permanent dipoles, and Lennard-Jones parameters for |
116 |
mmeineke |
1068 |
a given atom type are set in the force field parameter files. |
117 |
mmeineke |
1044 |
|
118 |
mmeineke |
1054 |
\begin{lstlisting}[float,caption={[Specifier for molecules and atoms] A sample specification of an Ar molecule},label=sch:AtmMole] |
119 |
mmeineke |
1044 |
molecule{ |
120 |
|
|
name = "Ar"; |
121 |
|
|
nAtoms = 1; |
122 |
|
|
atom[0]{ |
123 |
|
|
type="Ar"; |
124 |
|
|
position( 0.0, 0.0, 0.0 ); |
125 |
|
|
} |
126 |
|
|
} |
127 |
|
|
\end{lstlisting} |
128 |
|
|
|
129 |
mmeineke |
1045 |
|
130 |
mmeineke |
1054 |
Atoms can be collected into secondary structures such as rigid bodies |
131 |
mmeineke |
1044 |
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 |
mmeineke |
1054 |
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 |
mmeineke |
1068 |
\ref{sch:AtmMole} shows how one creates a molecule in a ``model'' or |
137 |
mmeineke |
1054 |
\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 |
mmeineke |
1044 |
|
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 |
mmeineke |
1068 |
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 |
mmeineke |
1044 |
|
152 |
|
|
Moving a rigid body involves determination of both the force and |
153 |
|
|
torque applied by the surroundings, which directly affect the |
154 |
|
|
translational and rotational motion in turn. In order to accumulate |
155 |
|
|
the total force on a rigid body, the external forces and torques must |
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 |
mmeineke |
1068 |
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 |
mmeineke |
1044 |
\begin{equation} |
162 |
|
|
\boldsymbol{\tau}_i= |
163 |
mmeineke |
1068 |
\sum_{a}\biggl[(\mathbf{r}_{ia}-\mathbf{r}_i)\times \mathbf{f}_{ia} |
164 |
|
|
+ \boldsymbol{\tau}_{ia}\biggr] |
165 |
mmeineke |
1044 |
\label{eq:torqueAccumulate} |
166 |
|
|
\end{equation} |
167 |
|
|
where $\boldsymbol{\tau}_i$ and $\mathbf{r}_i$ are the torque on and |
168 |
|
|
position of the center of mass respectively, while $\mathbf{f}_{ia}$, |
169 |
|
|
$\mathbf{r}_{ia}$, and $\boldsymbol{\tau}_{ia}$ are the force on, |
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 |
mmeineke |
1068 |
each rigid body. In order to move between the space fixed and body |
174 |
mmeineke |
1044 |
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, |
177 |
|
|
\theta,$ and $\psi$), where the elements of \textbf{A} are composed of |
178 |
|
|
trigonometric operations involving $\phi, \theta,$ and |
179 |
|
|
$\psi$.\cite{Goldstein01} In order to avoid numerical instabilities |
180 |
|
|
inherent in using the Euler angles, the four parameter ``quaternion'' |
181 |
|
|
scheme is often used. The elements of \textbf{A} can be expressed as |
182 |
|
|
arithmetic operations involving the four quaternions ($q_0, q_1, q_2,$ |
183 |
|
|
and $q_3$).\cite{allen87:csl} Use of quaternions also leads to |
184 |
|
|
performance enhancements, particularly for very small |
185 |
|
|
systems.\cite{Evans77} |
186 |
|
|
|
187 |
|
|
{\sc oopse} utilizes a relatively new scheme that propagates the |
188 |
mmeineke |
1068 |
entire nine parameter rotation matrix. Further discussion |
189 |
mmeineke |
1054 |
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 |
mmeineke |
1044 |
\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 |
mmeineke |
1045 |
\begin{lstlisting}[float,caption={[Defining rigid bodies]A sample definition of a rigid body},label={sch:rigidBody}] |
196 |
mmeineke |
1044 |
molecule{ |
197 |
|
|
name = "TIP3P_water"; |
198 |
|
|
nRigidBodies = 1; |
199 |
|
|
rigidBody[0]{ |
200 |
|
|
nAtoms = 3; |
201 |
|
|
atom[0]{ |
202 |
|
|
type = "O_TIP3P"; |
203 |
|
|
position( 0.0, 0.0, -0.06556 ); |
204 |
|
|
} |
205 |
|
|
atom[1]{ |
206 |
|
|
type = "H_TIP3P"; |
207 |
|
|
position( 0.0, 0.75695, 0.52032 ); |
208 |
|
|
} |
209 |
|
|
atom[2]{ |
210 |
|
|
type = "H_TIP3P"; |
211 |
|
|
position( 0.0, -0.75695, 0.52032 ); |
212 |
|
|
} |
213 |
|
|
position( 0.0, 0.0, 0.0 ); |
214 |
|
|
orientation( 0.0, 0.0, 1.0 ); |
215 |
|
|
} |
216 |
|
|
} |
217 |
|
|
\end{lstlisting} |
218 |
|
|
|
219 |
mmeineke |
1054 |
\subsection{\label{sec:LJPot}The Lennard Jones Force Field} |
220 |
mmeineke |
1044 |
|
221 |
|
|
The most basic force field implemented in {\sc oopse} is the |
222 |
mmeineke |
1054 |
Lennard-Jones force field, which mimics the van der Waals interaction at |
223 |
mmeineke |
1044 |
long distances, and uses an empirical repulsion at short |
224 |
|
|
distances. The Lennard-Jones potential is given by: |
225 |
|
|
\begin{equation} |
226 |
|
|
V_{\text{LJ}}(r_{ij}) = |
227 |
|
|
4\epsilon_{ij} \biggl[ |
228 |
|
|
\biggl(\frac{\sigma_{ij}}{r_{ij}}\biggr)^{12} |
229 |
|
|
- \biggl(\frac{\sigma_{ij}}{r_{ij}}\biggr)^{6} |
230 |
|
|
\biggr] |
231 |
|
|
\label{eq:lennardJonesPot} |
232 |
|
|
\end{equation} |
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 |
mmeineke |
1054 |
\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 |
mmeineke |
1044 |
|
240 |
mmeineke |
1045 |
\begin{lstlisting}[float,caption={[Invocation of the Lennard-Jones force field] A sample system using the Lennard-Jones force field.},label={sch:LJFF}] |
241 |
mmeineke |
1044 |
|
242 |
|
|
#include "argon.mdl" |
243 |
|
|
|
244 |
|
|
nComponents = 1; |
245 |
|
|
component{ |
246 |
|
|
type = "Ar"; |
247 |
|
|
nMol = 108; |
248 |
|
|
} |
249 |
|
|
|
250 |
|
|
initialConfig = "./argon.init"; |
251 |
|
|
|
252 |
|
|
forceField = "LJ"; |
253 |
|
|
\end{lstlisting} |
254 |
|
|
|
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 |
mmeineke |
1068 |
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 |
mmeineke |
1044 |
$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 |
mmeineke |
1068 |
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 |
mmeineke |
1044 |
|
269 |
|
|
Interactions between dissimilar particles requires the generation of |
270 |
|
|
cross term parameters for $\sigma$ and $\epsilon$. These are |
271 |
|
|
calculated through the Lorentz-Berthelot mixing |
272 |
|
|
rules:\cite{allen87:csl} |
273 |
|
|
\begin{equation} |
274 |
|
|
\sigma_{ij} = \frac{1}{2}[\sigma_{ii} + \sigma_{jj}] |
275 |
|
|
\label{eq:sigmaMix} |
276 |
|
|
\end{equation} |
277 |
|
|
and |
278 |
|
|
\begin{equation} |
279 |
|
|
\epsilon_{ij} = \sqrt{\epsilon_{ii} \epsilon_{jj}} |
280 |
|
|
\label{eq:epsilonMix} |
281 |
|
|
\end{equation} |
282 |
|
|
|
283 |
|
|
|
284 |
|
|
|
285 |
mmeineke |
1051 |
\subsection{\label{oopseSec:DUFF}Dipolar Unified-Atom Force Field} |
286 |
mmeineke |
1044 |
|
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 |
mmeineke |
1054 |
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 |
mmeineke |
1044 |
|
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 |
mmeineke |
1068 |
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 |
mmeineke |
1044 |
|
303 |
|
|
As an example, lipid head-groups in {\sc duff} are represented as |
304 |
mmeineke |
1068 |
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 |
mmeineke |
1044 |
\emph{et al.}\cite{liu96:new_model} |
313 |
|
|
|
314 |
|
|
\begin{figure} |
315 |
mmeineke |
1045 |
\centering |
316 |
|
|
\includegraphics[width=\linewidth]{lipidModel.eps} |
317 |
mmeineke |
1044 |
\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 |
mmeineke |
1045 |
\label{oopseFig:lipidModel} |
321 |
mmeineke |
1044 |
\end{figure} |
322 |
|
|
|
323 |
|
|
We have used a set of scalable parameters to model the alkyl groups |
324 |
|
|
with Lennard-Jones sites. For this, we have borrowed parameters from |
325 |
|
|
the TraPPE force field of Siepmann |
326 |
|
|
\emph{et al}.\cite{Siepmann1998} TraPPE is a unified-atom |
327 |
|
|
representation of n-alkanes, which is parametrized against phase |
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 |
mmeineke |
1068 |
of pseudoatoms to a minimum; the parameters for a unified atom such as |
332 |
mmeineke |
1044 |
$\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 |
mmeineke |
1068 |
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 |
mmeineke |
1044 |
|
343 |
mmeineke |
1045 |
\begin{lstlisting}[float,caption={[Invocation of {\sc duff}]Sample \texttt{.bass} file showing a simulation utilizing {\sc duff}},label={sch:DUFF}] |
344 |
mmeineke |
1044 |
|
345 |
|
|
#include "water.mdl" |
346 |
|
|
#include "lipid.mdl" |
347 |
|
|
|
348 |
|
|
nComponents = 2; |
349 |
|
|
component{ |
350 |
|
|
type = "simpleLipid_16"; |
351 |
|
|
nMol = 60; |
352 |
|
|
} |
353 |
|
|
|
354 |
|
|
component{ |
355 |
|
|
type = "SSD_water"; |
356 |
|
|
nMol = 1936; |
357 |
|
|
} |
358 |
|
|
|
359 |
|
|
initialConfig = "bilayer.init"; |
360 |
|
|
|
361 |
|
|
forceField = "DUFF"; |
362 |
|
|
|
363 |
|
|
\end{lstlisting} |
364 |
|
|
|
365 |
mmeineke |
1051 |
\subsection{\label{oopseSec:energyFunctions}{\sc duff} Energy Functions} |
366 |
mmeineke |
1044 |
|
367 |
|
|
The total potential energy function in {\sc duff} is |
368 |
|
|
\begin{equation} |
369 |
|
|
V = \sum^{N}_{I=1} V^{I}_{\text{Internal}} |
370 |
mmeineke |
1054 |
+ \sum^{N-1}_{I=1} \sum_{J>I} V^{IJ}_{\text{Cross}} |
371 |
mmeineke |
1044 |
\label{eq:totalPotential} |
372 |
|
|
\end{equation} |
373 |
|
|
Where $V^{I}_{\text{Internal}}$ is the internal potential of molecule $I$: |
374 |
|
|
\begin{equation} |
375 |
|
|
V^{I}_{\text{Internal}} = |
376 |
|
|
\sum_{\theta_{ijk} \in I} V_{\text{bend}}(\theta_{ijk}) |
377 |
|
|
+ \sum_{\phi_{ijkl} \in I} V_{\text{torsion}}(\phi_{ijkl}) |
378 |
|
|
+ \sum_{i \in I} \sum_{(j>i+4) \in I} |
379 |
|
|
\biggl[ V_{\text{LJ}}(r_{ij}) + V_{\text{dipole}} |
380 |
|
|
(\mathbf{r}_{ij},\boldsymbol{\Omega}_{i},\boldsymbol{\Omega}_{j}) |
381 |
|
|
\biggr] |
382 |
|
|
\label{eq:internalPotential} |
383 |
|
|
\end{equation} |
384 |
|
|
Here $V_{\text{bend}}$ is the bend potential for all 1, 3 bonded pairs |
385 |
|
|
within the molecule $I$, and $V_{\text{torsion}}$ is the torsion potential |
386 |
|
|
for all 1, 4 bonded pairs. The pairwise portions of the internal |
387 |
|
|
potential are excluded for pairs that are closer than three bonds, |
388 |
|
|
i.e.~atom pairs farther away than a torsion are included in the |
389 |
|
|
pair-wise loop. |
390 |
|
|
|
391 |
|
|
|
392 |
|
|
The bend potential of a molecule is represented by the following function: |
393 |
|
|
\begin{equation} |
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 |
mmeineke |
1054 |
(see Fig.~\ref{oopseFig:lipidModel}), $\theta_0$ is the equilibrium |
398 |
mmeineke |
1044 |
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} |
401 |
|
|
|
402 |
|
|
The torsion potential and parameters are also borrowed from TraPPE. It is |
403 |
|
|
of the form: |
404 |
|
|
\begin{equation} |
405 |
|
|
V_{\text{torsion}}(\phi) = c_1[1 + \cos \phi] |
406 |
|
|
+ c_2[1 + \cos(2\phi)] |
407 |
|
|
+ c_3[1 + \cos(3\phi)] |
408 |
|
|
\label{eq:origTorsionPot} |
409 |
|
|
\end{equation} |
410 |
mmeineke |
1068 |
Where: |
411 |
mmeineke |
1044 |
\begin{equation} |
412 |
mmeineke |
1068 |
\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 |
mmeineke |
1044 |
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} |
425 |
|
|
\end{equation} |
426 |
|
|
Where: |
427 |
|
|
\begin{align*} |
428 |
|
|
k_0 &= c_1 + c_3 \\ |
429 |
|
|
k_1 &= c_1 - 3c_3 \\ |
430 |
|
|
k_2 &= 2 c_2 \\ |
431 |
|
|
k_3 &= 4c_3 |
432 |
|
|
\end{align*} |
433 |
|
|
By recasting the potential as a power series, repeated trigonometric |
434 |
|
|
evaluations are avoided during the calculation of the potential energy. |
435 |
|
|
|
436 |
|
|
|
437 |
|
|
The cross potential between molecules $I$ and $J$, $V^{IJ}_{\text{Cross}}$, is |
438 |
|
|
as follows: |
439 |
|
|
\begin{equation} |
440 |
|
|
V^{IJ}_{\text{Cross}} = |
441 |
|
|
\sum_{i \in I} \sum_{j \in J} |
442 |
|
|
\biggl[ V_{\text{LJ}}(r_{ij}) + V_{\text{dipole}} |
443 |
|
|
(\mathbf{r}_{ij},\boldsymbol{\Omega}_{i},\boldsymbol{\Omega}_{j}) |
444 |
|
|
+ V_{\text{sticky}} |
445 |
|
|
(\mathbf{r}_{ij},\boldsymbol{\Omega}_{i},\boldsymbol{\Omega}_{j}) |
446 |
|
|
\biggr] |
447 |
|
|
\label{eq:crossPotentail} |
448 |
|
|
\end{equation} |
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 |
mmeineke |
1054 |
(Sec.~\ref{oopseSec:SSD}). Note that not all atom types include all |
453 |
mmeineke |
1044 |
interactions. |
454 |
|
|
|
455 |
|
|
The dipole-dipole potential has the following form: |
456 |
|
|
\begin{equation} |
457 |
|
|
V_{\text{dipole}}(\mathbf{r}_{ij},\boldsymbol{\Omega}_{i}, |
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 |
mmeineke |
1068 |
3(\boldsymbol{\hat{u}}_i \cdot \hat{\mathbf{r}}_{ij}) % |
462 |
|
|
(\boldsymbol{\hat{u}}_j \cdot \hat{\mathbf{r}}_{ij}) \biggr] |
463 |
mmeineke |
1044 |
\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 |
mmeineke |
1054 |
$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 |
mmeineke |
1044 |
|
474 |
mmeineke |
1068 |
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 |
mmeineke |
1044 |
|
496 |
mmeineke |
1068 |
\subsection{\label{oopseSec:SSD}The {\sc duff} Water Models: SSD/E and SSD/RF} |
497 |
mmeineke |
1044 |
|
498 |
|
|
In the interest of computational efficiency, the default solvent used |
499 |
|
|
by {\sc oopse} is the extended Soft Sticky Dipole (SSD/E) water |
500 |
|
|
model.\cite{Gezelter04} The original SSD was developed by Ichiye |
501 |
|
|
\emph{et al.}\cite{liu96:new_model} as a modified form of the hard-sphere |
502 |
|
|
water model proposed by Bratko, Blum, and |
503 |
|
|
Luzar.\cite{Bratko85,Bratko95} It consists of a single point dipole |
504 |
|
|
with a Lennard-Jones core and a sticky potential that directs the |
505 |
|
|
particles to assume the proper hydrogen bond orientation in the first |
506 |
|
|
solvation shell. Thus, the interaction between two SSD water molecules |
507 |
|
|
\emph{i} and \emph{j} is given by the potential |
508 |
|
|
\begin{equation} |
509 |
|
|
V_{ij} = |
510 |
|
|
V_{ij}^{LJ} (r_{ij})\ + V_{ij}^{dp} |
511 |
|
|
(\mathbf{r}_{ij},\boldsymbol{\Omega}_i,\boldsymbol{\Omega}_j)\ + |
512 |
|
|
V_{ij}^{sp} |
513 |
|
|
(\mathbf{r}_{ij},\boldsymbol{\Omega}_i,\boldsymbol{\Omega}_j), |
514 |
|
|
\label{eq:ssdPot} |
515 |
|
|
\end{equation} |
516 |
|
|
where the $\mathbf{r}_{ij}$ is the position vector between molecules |
517 |
|
|
\emph{i} and \emph{j} with magnitude equal to the distance $r_{ij}$, and |
518 |
|
|
$\boldsymbol{\Omega}_i$ and $\boldsymbol{\Omega}_j$ represent the |
519 |
|
|
orientations of the respective molecules. The Lennard-Jones and dipole |
520 |
|
|
parts of the potential are given by equations \ref{eq:lennardJonesPot} |
521 |
|
|
and \ref{eq:dipolePot} respectively. The sticky part is described by |
522 |
|
|
the following, |
523 |
|
|
\begin{equation} |
524 |
|
|
u_{ij}^{sp}(\mathbf{r}_{ij},\boldsymbol{\Omega}_i,\boldsymbol{\Omega}_j)= |
525 |
|
|
\frac{\nu_0}{2}[s(r_{ij})w(\mathbf{r}_{ij}, |
526 |
|
|
\boldsymbol{\Omega}_i,\boldsymbol{\Omega}_j) + |
527 |
|
|
s^\prime(r_{ij})w^\prime(\mathbf{r}_{ij}, |
528 |
|
|
\boldsymbol{\Omega}_i,\boldsymbol{\Omega}_j)]\ , |
529 |
|
|
\label{eq:stickyPot} |
530 |
|
|
\end{equation} |
531 |
|
|
where $\nu_0$ is a strength parameter for the sticky potential, and |
532 |
|
|
$s$ and $s^\prime$ are cubic switching functions which turn off the |
533 |
|
|
sticky interaction beyond the first solvation shell. The $w$ function |
534 |
|
|
can be thought of as an attractive potential with tetrahedral |
535 |
|
|
geometry: |
536 |
|
|
\begin{equation} |
537 |
|
|
w({\bf r}_{ij},{\bf \Omega}_i,{\bf \Omega}_j)= |
538 |
|
|
\sin\theta_{ij}\sin2\theta_{ij}\cos2\phi_{ij}, |
539 |
|
|
\label{eq:stickyW} |
540 |
|
|
\end{equation} |
541 |
|
|
while the $w^\prime$ function counters the normal aligned and |
542 |
|
|
anti-aligned structures favored by point dipoles: |
543 |
|
|
\begin{equation} |
544 |
|
|
w^\prime({\bf r}_{ij},{\bf \Omega}_i,{\bf \Omega}_j)= |
545 |
|
|
(\cos\theta_{ij}-0.6)^2(\cos\theta_{ij}+0.8)^2-w^0, |
546 |
|
|
\label{eq:stickyWprime} |
547 |
|
|
\end{equation} |
548 |
|
|
It should be noted that $w$ is proportional to the sum of the $Y_3^2$ |
549 |
|
|
and $Y_3^{-2}$ spherical harmonics (a linear combination which |
550 |
|
|
enhances the tetrahedral geometry for hydrogen bonded structures), |
551 |
|
|
while $w^\prime$ is a purely empirical function. A more detailed |
552 |
|
|
description of the functional parts and variables in this potential |
553 |
|
|
can be found in the original SSD |
554 |
|
|
articles.\cite{liu96:new_model,liu96:monte_carlo,chandra99:ssd_md,Ichiye03} |
555 |
|
|
|
556 |
mmeineke |
1068 |
Since SSD/E is a single-point {\it dipolar} model, the force |
557 |
mmeineke |
1044 |
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 |
mmeineke |
1068 |
properties. Indeed, SSD/E maintains reasonable agreement with the Head-Gordon |
564 |
mmeineke |
1044 |
diffraction data for the structural features of liquid |
565 |
mmeineke |
1068 |
water.\cite{hura00,liu96:new_model} Additionally, the dynamical properties |
566 |
|
|
exhibited by SSD/E agree with experiment better than those of more |
567 |
mmeineke |
1044 |
computationally expensive models (like TIP3P and |
568 |
|
|
SPC/E).\cite{chandra99:ssd_md} The combination of speed and accurate depiction |
569 |
mmeineke |
1068 |
of solvent properties makes SSD/E a very attractive model for the |
570 |
mmeineke |
1044 |
simulation of large scale biochemical simulations. |
571 |
|
|
|
572 |
|
|
Recent constant pressure simulations revealed issues in the original |
573 |
|
|
SSD model that led to lower than expected densities at all target |
574 |
|
|
pressures.\cite{Ichiye03,Gezelter04} The default model in {\sc oopse} |
575 |
|
|
is therefore SSD/E, a density corrected derivative of SSD that |
576 |
|
|
exhibits improved liquid structure and transport behavior. If the use |
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 |
mmeineke |
1068 |
\texttt{.bass} file as illustrated in the scheme below. A table of the |
581 |
mmeineke |
1044 |
parameter values and the drawbacks and benefits of the different |
582 |
mmeineke |
1054 |
density corrected SSD models can be found in |
583 |
|
|
reference~\cite{Gezelter04}. |
584 |
mmeineke |
1044 |
|
585 |
mmeineke |
1045 |
\begin{lstlisting}[float,caption={[A simulation of {\sc ssd} water]An example file showing a simulation including {\sc ssd} water.},label={sch:ssd}] |
586 |
mmeineke |
1044 |
|
587 |
|
|
#include "water.mdl" |
588 |
|
|
|
589 |
|
|
nComponents = 1; |
590 |
|
|
component{ |
591 |
|
|
type = "SSD_water"; |
592 |
|
|
nMol = 864; |
593 |
|
|
} |
594 |
|
|
|
595 |
|
|
initialConfig = "liquidWater.init"; |
596 |
|
|
|
597 |
|
|
forceField = "DUFF"; |
598 |
|
|
|
599 |
|
|
/* |
600 |
|
|
* The following two flags set the cutoff |
601 |
|
|
* radius for the electrostatic forces |
602 |
|
|
* as well as the skin thickness of the switching |
603 |
|
|
* function. |
604 |
|
|
*/ |
605 |
|
|
|
606 |
|
|
electrostaticCutoffRadius = 9.2; |
607 |
|
|
electrostaticSkinThickness = 1.38; |
608 |
|
|
|
609 |
|
|
\end{lstlisting} |
610 |
|
|
|
611 |
|
|
|
612 |
mmeineke |
1051 |
\subsection{\label{oopseSec:eam}Embedded Atom Method} |
613 |
mmeineke |
1044 |
|
614 |
mmeineke |
1054 |
There are Molecular Dynamics packages which have the |
615 |
mmeineke |
1044 |
capacity to simulate metallic systems, including some that have |
616 |
|
|
parallel computational abilities\cite{plimpton93}. Potentials that |
617 |
|
|
describe bonding transition metal |
618 |
mmeineke |
1068 |
systems\cite{Finnis84,Ercolessi88,Chen90,Qi99,Ercolessi02} have an |
619 |
mmeineke |
1044 |
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 |
mmeineke |
1068 |
the system. A mostly-repulsive pairwise part of the potential |
623 |
mmeineke |
1044 |
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 |
mmeineke |
1068 |
good review of {\sc eam} and other metallic potential formulations was written |
628 |
mmeineke |
1044 |
by Voter.\cite{voter} |
629 |
|
|
|
630 |
|
|
The {\sc eam} potential has the form: |
631 |
|
|
\begin{eqnarray} |
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 |
mmeineke |
1068 |
\end{eqnarray} |
636 |
mmeineke |
1044 |
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 |
mmeineke |
1054 |
{\sc eam}\cite{Daw84}, $\phi_{ij}$ was an entirely repulsive term, however |
642 |
mmeineke |
1044 |
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 |
mmeineke |
1054 |
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 |
mmeineke |
1044 |
|
649 |
|
|
|
650 |
mmeineke |
1051 |
\subsection{\label{oopseSec:pbc}Periodic Boundary Conditions} |
651 |
mmeineke |
1044 |
|
652 |
|
|
\newcommand{\roundme}{\operatorname{round}} |
653 |
|
|
|
654 |
mmeineke |
1068 |
\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 |
mmeineke |
1044 |
\begin{equation} |
666 |
mmeineke |
1068 |
\mathbf{H} = ( \mathbf{h}_x, \mathbf{h}_y, \mathbf{h}_z ) |
667 |
mmeineke |
1044 |
\end{equation} |
668 |
mmeineke |
1068 |
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 |
mmeineke |
1044 |
|
673 |
mmeineke |
1068 |
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 |
mmeineke |
1044 |
\begin{equation} |
685 |
|
|
s_{i}^{\prime}=s_{i}-\roundme(s_{i}) |
686 |
|
|
\end{equation} |
687 |
mmeineke |
1068 |
Where $s_i$ is the $i$th element of $\mathbf{s}$, and |
688 |
|
|
$\roundme(s_i)$is given by |
689 |
mmeineke |
1044 |
\begin{equation} |
690 |
mmeineke |
1068 |
\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 |
mmeineke |
1044 |
\end{equation} |
696 |
mmeineke |
1068 |
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 |
mmeineke |
1044 |
|
702 |
|
|
Finally, we obtain the minimum image coordinates $\mathbf{r}^{\prime}$ by |
703 |
mmeineke |
1068 |
transforming back to real space, |
704 |
mmeineke |
1044 |
\begin{equation} |
705 |
mmeineke |
1068 |
\mathbf{r}^{\prime}=\mathbf{H}^{-1}\mathbf{s}^{\prime}% |
706 |
mmeineke |
1044 |
\end{equation} |
707 |
mmeineke |
1068 |
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 |
mmeineke |
1044 |
|
711 |
|
|
|
712 |
mmeineke |
1051 |
\section{\label{oopseSec:IOfiles}Input and Output Files} |
713 |
mmeineke |
1044 |
|
714 |
|
|
\subsection{{\sc bass} and Model Files} |
715 |
|
|
|
716 |
mmeineke |
1054 |
Every {\sc oopse} simulation begins with a {\sc bass} file. {\sc bass} |
717 |
mmeineke |
1044 |
(\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 |
720 |
|
|
system they are to simulate, as well as tailor {\sc oopse}'s behavior during |
721 |
|
|
the simulation. {\sc bass} files are denoted with the extension |
722 |
|
|
\texttt{.bass}, an example file is shown in |
723 |
|
|
Fig.~\ref{fig:bassExample}. |
724 |
|
|
|
725 |
|
|
\begin{figure} |
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 |
mmeineke |
1054 |
Within the \texttt{.bass} file it is necessary to provide a complete |
733 |
mmeineke |
1044 |
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 |
mmeineke |
1054 |
inconvenient to duplicate the simulation at the beginning of each {\sc bass} |
739 |
mmeineke |
1044 |
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 |
mmeineke |
1051 |
\subsection{\label{oopseSec:coordFiles}Coordinate Files} |
746 |
mmeineke |
1044 |
|
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 |
749 |
|
|
App.~\ref{appCoordFormat}. As all bonding and molecular information is |
750 |
|
|
stored in the \texttt{.bass} and \texttt{.mdl} files, the coordinate |
751 |
|
|
files are simply the complete set of coordinates for each atom at a |
752 |
|
|
given simulation time. |
753 |
|
|
|
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 |
mmeineke |
1054 |
initialization file is necessary for {\sc oopse} to start the simulation |
758 |
mmeineke |
1044 |
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 |
761 |
|
|
simulation at regular intervals. The first frame is a duplication of |
762 |
|
|
the \texttt{.init} file, and each subsequent frame is appended to the |
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 |
mmeineke |
1054 |
\texttt{.eor} file stores the final configuration of the system for a |
767 |
mmeineke |
1044 |
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 |
mmeineke |
1054 |
\subsection{\label{oopseSec:initCoords}Generation of Initial Coordinates} |
774 |
mmeineke |
1044 |
|
775 |
mmeineke |
1054 |
As was stated in Sec.~\ref{oopseSec:coordFiles}, an initialization file |
776 |
mmeineke |
1044 |
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 |
mmeineke |
1054 |
simulation. The program itself is under continual development, and is |
782 |
mmeineke |
1044 |
offered here as a helper tool only. |
783 |
|
|
|
784 |
|
|
\subsection{The Statistics File} |
785 |
|
|
|
786 |
|
|
The last output file generated by {\sc oopse} is the statistics file. This |
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 |
mmeineke |
1054 |
user to observe the system variables as a function of simulation time |
791 |
mmeineke |
1044 |
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 |
mmeineke |
1051 |
\section{\label{oopseSec:mechanics}Mechanics} |
798 |
mmeineke |
1044 |
|
799 |
mmeineke |
1054 |
\subsection{\label{oopseSec:integrate}Integrating the Equations of Motion: the Symplectic Step Integrator} |
800 |
mmeineke |
1044 |
|
801 |
|
|
Integration of the equations of motion was carried out using the |
802 |
|
|
symplectic splitting method proposed by Dullweber \emph{et |
803 |
|
|
al.}.\cite{Dullweber1997} The reason for this integrator selection |
804 |
|
|
deals with poor energy conservation of rigid body systems using |
805 |
|
|
quaternions. While quaternions work well for orientational motion in |
806 |
|
|
alternate ensembles, the microcanonical ensemble has a constant energy |
807 |
|
|
requirement that is quite sensitive to errors in the equations of |
808 |
|
|
motion. The original implementation of this code utilized quaternions |
809 |
|
|
for rotational motion propagation; however, a detailed investigation |
810 |
|
|
showed that they resulted in a steady drift in the total energy, |
811 |
|
|
something that has been observed by others.\cite{Laird97} |
812 |
|
|
|
813 |
|
|
The key difference in the integration method proposed by Dullweber |
814 |
|
|
\emph{et al.} is that the entire rotation matrix is propagated from |
815 |
|
|
one time step to the next. In the past, this would not have been as |
816 |
|
|
feasible a option, being that the rotation matrix for a single body is |
817 |
|
|
nine elements long as opposed to 3 or 4 elements for Euler angles and |
818 |
|
|
quaternions respectively. System memory has become much less of an |
819 |
|
|
issue in recent times, and this has resulted in substantial benefits |
820 |
|
|
in energy conservation. There is still the issue of 5 or 6 additional |
821 |
|
|
elements for describing the orientation of each particle, which will |
822 |
|
|
increase dump files substantially. Simply translating the rotation |
823 |
|
|
matrix into its component Euler angles or quaternions for storage |
824 |
|
|
purposes relieves this burden. |
825 |
|
|
|
826 |
|
|
The symplectic splitting method allows for Verlet style integration of |
827 |
|
|
both linear and angular motion of rigid bodies. In the integration |
828 |
|
|
method, the orientational propagation involves a sequence of matrix |
829 |
|
|
evaluations to update the rotation matrix.\cite{Dullweber1997} These |
830 |
|
|
matrix rotations end up being more costly computationally than the |
831 |
|
|
simpler arithmetic quaternion propagation. With the same time step, a |
832 |
|
|
1000 SSD particle simulation shows an average 7\% increase in |
833 |
|
|
computation time using the symplectic step method in place of |
834 |
|
|
quaternions. This cost is more than justified when comparing the |
835 |
|
|
energy conservation of the two methods as illustrated in figure |
836 |
|
|
\ref{timestep}. |
837 |
|
|
|
838 |
|
|
\begin{figure} |
839 |
mmeineke |
1045 |
\centering |
840 |
|
|
\includegraphics[width=\linewidth]{timeStep.eps} |
841 |
mmeineke |
1044 |
\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 |
844 |
|
|
energy using the symplectic step integrator, and the solid line comes |
845 |
|
|
from the quaternion integrator. The larger time step plots are shifted |
846 |
|
|
up from the true energy baseline for clarity.} |
847 |
|
|
\label{timestep} |
848 |
|
|
\end{figure} |
849 |
|
|
|
850 |
|
|
In figure \ref{timestep}, the resulting energy drift at various time |
851 |
|
|
steps for both the symplectic step and quaternion integration schemes |
852 |
|
|
is compared. All of the 1000 SSD particle simulations started with the |
853 |
|
|
same configuration, and the only difference was the method for |
854 |
|
|
handling rotational motion. At time steps of 0.1 and 0.5 fs, both |
855 |
|
|
methods for propagating particle rotation conserve energy fairly well, |
856 |
|
|
with the quaternion method showing a slight energy drift over time in |
857 |
|
|
the 0.5 fs time step simulation. At time steps of 1 and 2 fs, the |
858 |
|
|
energy conservation benefits of the symplectic step method are clearly |
859 |
|
|
demonstrated. Thus, while maintaining the same degree of energy |
860 |
|
|
conservation, one can take considerably longer time steps, leading to |
861 |
|
|
an overall reduction in computation time. |
862 |
|
|
|
863 |
|
|
Energy drift in these SSD particle simulations was unnoticeable for |
864 |
|
|
time steps up to three femtoseconds. A slight energy drift on the |
865 |
|
|
order of 0.012 kcal/mol per nanosecond was observed at a time step of |
866 |
|
|
four femtoseconds, and as expected, this drift increases dramatically |
867 |
|
|
with increasing time step. To insure accuracy in the constant energy |
868 |
|
|
simulations, time steps were set at 2 fs and kept at this value for |
869 |
|
|
constant pressure simulations as well. |
870 |
|
|
|
871 |
|
|
|
872 |
|
|
\subsection{\label{sec:extended}Extended Systems for other Ensembles} |
873 |
|
|
|
874 |
|
|
|
875 |
|
|
{\sc oopse} implements a |
876 |
|
|
|
877 |
|
|
|
878 |
mmeineke |
1054 |
\subsubsection{\label{oopseSec:noseHooverThermo}Nose-Hoover Thermostatting} |
879 |
mmeineke |
1044 |
|
880 |
|
|
To mimic the effects of being in a constant temperature ({\sc nvt}) |
881 |
|
|
ensemble, {\sc oopse} uses the Nose-Hoover extended system |
882 |
|
|
approach.\cite{Hoover85} In this method, the equations of motion for |
883 |
|
|
the particle positions and velocities are |
884 |
|
|
\begin{eqnarray} |
885 |
|
|
\dot{{\bf r}} & = & {\bf v} \\ |
886 |
|
|
\dot{{\bf v}} & = & \frac{{\bf f}}{m} - \chi {\bf v} |
887 |
|
|
\label{eq:nosehoovereom} |
888 |
|
|
\end{eqnarray} |
889 |
|
|
|
890 |
|
|
$\chi$ is an ``extra'' variable included in the extended system, and |
891 |
|
|
it is propagated using the first order equation of motion |
892 |
|
|
\begin{equation} |
893 |
|
|
\dot{\chi} = \frac{1}{\tau_{T}} \left( \frac{T}{T_{target}} - 1 \right) |
894 |
|
|
\label{eq:nosehooverext} |
895 |
|
|
\end{equation} |
896 |
|
|
where $T_{target}$ is the target temperature for the simulation, and |
897 |
|
|
$\tau_{T}$ is a time constant for the thermostat. |
898 |
|
|
|
899 |
|
|
To select the Nose-Hoover {\sc nvt} ensemble, the {\tt ensemble = NVT;} |
900 |
|
|
command would be used in the simulation's {\sc bass} file. There is |
901 |
|
|
some subtlety in choosing values for $\tau_{T}$, and it is usually set |
902 |
|
|
to values of a few ps. Within a {\sc bass} file, $\tau_{T}$ could be |
903 |
|
|
set to 1 ps using the {\tt tauThermostat = 1000; } command. |
904 |
|
|
|
905 |
|
|
|
906 |
mmeineke |
1054 |
\subsection{\label{oopseSec:zcons}Z-Constraint Method} |
907 |
mmeineke |
1044 |
|
908 |
mmeineke |
1054 |
Based on fluctuation-dissipation theorem,\bigskip\ force auto-correlation |
909 |
mmeineke |
1044 |
method was developed to investigate the dynamics of ions inside the ion |
910 |
|
|
channels.\cite{Roux91} Time-dependent friction coefficient can be calculated |
911 |
mmeineke |
1054 |
from the deviation of the instantaneous force from its mean force. |
912 |
mmeineke |
1044 |
|
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} |
918 |
|
|
where% |
919 |
|
|
\begin{equation} |
920 |
|
|
\delta F(z,t)=F(z,t)-\langle F(z,t)\rangle |
921 |
|
|
\end{equation} |
922 |
|
|
|
923 |
|
|
|
924 |
|
|
If the time-dependent friction decay rapidly, static friction coefficient can |
925 |
|
|
be approximated by% |
926 |
|
|
|
927 |
|
|
\begin{equation} |
928 |
|
|
\xi^{static}(z)=\int_{0}^{\infty}\langle\delta F(z,t)\delta F(z,0)\rangle dt |
929 |
|
|
\end{equation} |
930 |
|
|
|
931 |
|
|
|
932 |
|
|
Hence, diffusion constant can be estimated by |
933 |
|
|
\begin{equation} |
934 |
|
|
D(z)=\frac{k_{B}T}{\xi^{static}(z)}=\frac{(k_{B}T)^{2}}{\int_{0}^{\infty |
935 |
|
|
}\langle\delta F(z,t)\delta F(z,0)\rangle dt}% |
936 |
|
|
\end{equation} |
937 |
|
|
|
938 |
|
|
|
939 |
|
|
\bigskip Z-Constraint method, which fixed the z coordinates of the molecules |
940 |
|
|
with respect to the center of the mass of the system, was proposed to obtain |
941 |
|
|
the forces required in force auto-correlation method.\cite{Marrink94} However, |
942 |
|
|
simply resetting the coordinate will move the center of the mass of the whole |
943 |
|
|
system. To avoid this problem, a new method was used at {\sc oopse}. Instead of |
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 |
mmeineke |
1054 |
\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 |
mmeineke |
1044 |
|
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 |
956 |
|
|
position, a simple harmonic potential is used% |
957 |
|
|
|
958 |
|
|
\begin{equation} |
959 |
|
|
U(t)=\frac{1}{2}k_{Harmonic}(z(t)-z_{cons})^{2}% |
960 |
|
|
\end{equation} |
961 |
|
|
where $k_{Harmonic}$\bigskip\ is the harmonic force constant, $z(t)$ is |
962 |
|
|
current z coordinate of the center of mass of the z-constraint molecule, and |
963 |
|
|
$z_{cons}$ is the restraint position. Therefore, the harmonic force operated |
964 |
|
|
on the z-constraint molecule at time $t$ can be calculated by% |
965 |
|
|
\begin{equation} |
966 |
|
|
F_{z_{Harmonic}}(t)=-\frac{\partial U(t)}{\partial z(t)}=-k_{Harmonic}% |
967 |
|
|
(z(t)-z_{cons}) |
968 |
|
|
\end{equation} |
969 |
|
|
Worthy of mention, other kinds of potential functions can also be used to |
970 |
|
|
drive the z-constraint molecule. |
971 |
|
|
|
972 |
mmeineke |
1051 |
\section{\label{oopseSec:props}Trajectory Analysis} |
973 |
mmeineke |
1044 |
|
974 |
mmeineke |
1051 |
\subsection{\label{oopseSec:staticProps}Static Property Analysis} |
975 |
mmeineke |
1044 |
|
976 |
|
|
The static properties of the trajectories are analyzed with the |
977 |
|
|
program \texttt{staticProps}. The code is capable of calculating the following |
978 |
|
|
pair correlations between species A and B: |
979 |
|
|
\begin{itemize} |
980 |
|
|
\item $g_{\text{AB}}(r)$: Eq.~\ref{eq:gofr} |
981 |
|
|
\item $g_{\text{AB}}(r, \cos \theta)$: Eq.~\ref{eq:gofrCosTheta} |
982 |
|
|
\item $g_{\text{AB}}(r, \cos \omega)$: Eq.~\ref{eq:gofrCosOmega} |
983 |
|
|
\item $g_{\text{AB}}(x, y, z)$: Eq.~\ref{eq:gofrXYZ} |
984 |
|
|
\item $\langle \cos \omega \rangle_{\text{AB}}(r)$: |
985 |
|
|
Eq.~\ref{eq:cosOmegaOfR} |
986 |
|
|
\end{itemize} |
987 |
|
|
|
988 |
|
|
The first pair correlation, $g_{\text{AB}}(r)$, is defined as follows: |
989 |
|
|
\begin{equation} |
990 |
|
|
g_{\text{AB}}(r) = \frac{V}{N_{\text{A}}N_{\text{B}}}\langle %% |
991 |
|
|
\sum_{i \in \text{A}} \sum_{j \in \text{B}} %% |
992 |
|
|
\delta( r - |\mathbf{r}_{ij}|) \rangle \label{eq:gofr} |
993 |
|
|
\end{equation} |
994 |
|
|
Where $\mathbf{r}_{ij}$ is the vector |
995 |
|
|
\begin{equation*} |
996 |
|
|
\mathbf{r}_{ij} = \mathbf{r}_j - \mathbf{r}_i \notag |
997 |
|
|
\end{equation*} |
998 |
|
|
and $\frac{V}{N_{\text{A}}N_{\text{B}}}$ normalizes the average over |
999 |
|
|
the expected pair density at a given $r$. |
1000 |
|
|
|
1001 |
|
|
The next two pair correlations, $g_{\text{AB}}(r, \cos \theta)$ and |
1002 |
|
|
$g_{\text{AB}}(r, \cos \omega)$, are similar in that they are both two |
1003 |
|
|
dimensional histograms. Both use $r$ for the primary axis then a |
1004 |
|
|
$\cos$ for the secondary axis ($\cos \theta$ for |
1005 |
|
|
Eq.~\ref{eq:gofrCosTheta} and $\cos \omega$ for |
1006 |
|
|
Eq.~\ref{eq:gofrCosOmega}). This allows for the investigator to |
1007 |
|
|
correlate alignment on directional entities. $g_{\text{AB}}(r, \cos |
1008 |
|
|
\theta)$ is defined as follows: |
1009 |
|
|
\begin{equation} |
1010 |
|
|
g_{\text{AB}}(r, \cos \theta) = \frac{V}{N_{\text{A}}N_{\text{B}}}\langle |
1011 |
|
|
\sum_{i \in \text{A}} \sum_{j \in \text{B}} |
1012 |
|
|
\delta( \cos \theta - \cos \theta_{ij}) |
1013 |
|
|
\delta( r - |\mathbf{r}_{ij}|) \rangle |
1014 |
|
|
\label{eq:gofrCosTheta} |
1015 |
|
|
\end{equation} |
1016 |
|
|
Where |
1017 |
|
|
\begin{equation*} |
1018 |
|
|
\cos \theta_{ij} = \mathbf{\hat{i}} \cdot \mathbf{\hat{r}}_{ij} |
1019 |
|
|
\end{equation*} |
1020 |
|
|
Here $\mathbf{\hat{i}}$ is the unit directional vector of species $i$ |
1021 |
|
|
and $\mathbf{\hat{r}}_{ij}$ is the unit vector associated with vector |
1022 |
|
|
$\mathbf{r}_{ij}$. |
1023 |
|
|
|
1024 |
|
|
The second two dimensional histogram is of the form: |
1025 |
|
|
\begin{equation} |
1026 |
|
|
g_{\text{AB}}(r, \cos \omega) = |
1027 |
|
|
\frac{V}{N_{\text{A}}N_{\text{B}}}\langle |
1028 |
|
|
\sum_{i \in \text{A}} \sum_{j \in \text{B}} |
1029 |
|
|
\delta( \cos \omega - \cos \omega_{ij}) |
1030 |
|
|
\delta( r - |\mathbf{r}_{ij}|) \rangle \label{eq:gofrCosOmega} |
1031 |
|
|
\end{equation} |
1032 |
|
|
Here |
1033 |
|
|
\begin{equation*} |
1034 |
|
|
\cos \omega_{ij} = \mathbf{\hat{i}} \cdot \mathbf{\hat{j}} |
1035 |
|
|
\end{equation*} |
1036 |
|
|
Again, $\mathbf{\hat{i}}$ and $\mathbf{\hat{j}}$ are the unit |
1037 |
|
|
directional vectors of species $i$ and $j$. |
1038 |
|
|
|
1039 |
|
|
The static analysis code is also cable of calculating a three |
1040 |
|
|
dimensional pair correlation of the form: |
1041 |
|
|
\begin{equation}\label{eq:gofrXYZ} |
1042 |
|
|
g_{\text{AB}}(x, y, z) = |
1043 |
|
|
\frac{V}{N_{\text{A}}N_{\text{B}}}\langle |
1044 |
|
|
\sum_{i \in \text{A}} \sum_{j \in \text{B}} |
1045 |
|
|
\delta( x - x_{ij}) |
1046 |
|
|
\delta( y - y_{ij}) |
1047 |
|
|
\delta( z - z_{ij}) \rangle |
1048 |
|
|
\end{equation} |
1049 |
|
|
Where $x_{ij}$, $y_{ij}$, and $z_{ij}$ are the $x$, $y$, and $z$ |
1050 |
|
|
components respectively of vector $\mathbf{r}_{ij}$. |
1051 |
|
|
|
1052 |
|
|
The final pair correlation is similar to |
1053 |
|
|
Eq.~\ref{eq:gofrCosOmega}. $\langle \cos \omega |
1054 |
|
|
\rangle_{\text{AB}}(r)$ is calculated in the following way: |
1055 |
|
|
\begin{equation}\label{eq:cosOmegaOfR} |
1056 |
|
|
\langle \cos \omega \rangle_{\text{AB}}(r) = |
1057 |
|
|
\langle \sum_{i \in \text{A}} \sum_{j \in \text{B}} |
1058 |
|
|
(\cos \omega_{ij}) \delta( r - |\mathbf{r}_{ij}|) \rangle |
1059 |
|
|
\end{equation} |
1060 |
|
|
Here $\cos \omega_{ij}$ is defined in the same way as in |
1061 |
|
|
Eq.~\ref{eq:gofrCosOmega}. This equation is a single dimensional pair |
1062 |
|
|
correlation that gives the average correlation of two directional |
1063 |
|
|
entities as a function of their distance from each other. |
1064 |
|
|
|
1065 |
|
|
All static properties are calculated on a frame by frame basis. The |
1066 |
|
|
trajectory is read a single frame at a time, and the appropriate |
1067 |
|
|
calculations are done on each frame. Once one frame is finished, the |
1068 |
|
|
next frame is read in, and a running average of the property being |
1069 |
|
|
calculated is accumulated in each frame. The program allows for the |
1070 |
|
|
user to specify more than one property be calculated in single run, |
1071 |
|
|
preventing the need to read a file multiple times. |
1072 |
|
|
|
1073 |
|
|
\subsection{\label{dynamicProps}Dynamic Property Analysis} |
1074 |
|
|
|
1075 |
|
|
The dynamic properties of a trajectory are calculated with the program |
1076 |
|
|
\texttt{dynamicProps}. The program will calculate the following properties: |
1077 |
|
|
\begin{gather} |
1078 |
|
|
\langle | \mathbf{r}(t) - \mathbf{r}(0) |^2 \rangle \label{eq:rms}\\ |
1079 |
|
|
\langle \mathbf{v}(t) \cdot \mathbf{v}(0) \rangle \label{eq:velCorr} \\ |
1080 |
|
|
\langle \mathbf{j}(t) \cdot \mathbf{j}(0) \rangle \label{eq:angularVelCorr} |
1081 |
|
|
\end{gather} |
1082 |
|
|
|
1083 |
|
|
Eq.~\ref{eq:rms} is the root mean square displacement |
1084 |
|
|
function. Eq.~\ref{eq:velCorr} and Eq.~\ref{eq:angularVelCorr} are the |
1085 |
|
|
velocity and angular velocity correlation functions respectively. The |
1086 |
|
|
latter is only applicable to directional species in the simulation. |
1087 |
|
|
|
1088 |
|
|
The \texttt{dynamicProps} program handles he file in a manner different from |
1089 |
|
|
\texttt{staticProps}. As the properties calculated by this program are time |
1090 |
|
|
dependent, multiple frames must be read in simultaneously by the |
1091 |
|
|
program. For small trajectories this is no problem, and the entire |
1092 |
|
|
trajectory is read into memory. However, for long trajectories of |
1093 |
|
|
large systems, the files can be quite large. In order to accommodate |
1094 |
|
|
large files, \texttt{dynamicProps} adopts a scheme whereby two blocks of memory |
1095 |
|
|
are allocated to read in several frames each. |
1096 |
|
|
|
1097 |
|
|
In this two block scheme, the correlation functions are first |
1098 |
|
|
calculated within each memory block, then the cross correlations |
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 |
mmeineke |
1054 |
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 |
mmeineke |
1044 |
|
1106 |
|
|
|
1107 |
mmeineke |
1054 |
|
1108 |
mmeineke |
1051 |
\section{\label{oopseSec:design}Program Design} |
1109 |
mmeineke |
1044 |
|
1110 |
mmeineke |
1054 |
\subsection{\label{sec:architecture} {\sc oopse} Architecture} |
1111 |
mmeineke |
1044 |
|
1112 |
mmeineke |
1054 |
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 |
mmeineke |
1044 |
|
1122 |
mmeineke |
1054 |
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 |
mmeineke |
1044 |
|
1131 |
mmeineke |
1054 |
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 |
mmeineke |
1044 |
|
1142 |
mmeineke |
1054 |
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{oopseSec:parallelization} Parallelization of {\sc oopse}} |
1157 |
|
|
|
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 |
mmeineke |
1044 |
Algorithmically simplest of the three method's is atomic decomposition |
1168 |
|
|
where N particles in a simulation are split among P processors for the |
1169 |
|
|
duration of the simulation. Computational cost scales as an optimal |
1170 |
|
|
$O(N/P)$ for atomic decomposition. Unfortunately all processors must |
1171 |
|
|
communicate positions and forces with all other processors leading |
1172 |
|
|
communication to scale as an unfavorable $O(N)$ independent of the |
1173 |
|
|
number of processors. This communication bottleneck led to the |
1174 |
|
|
development of spatial and force decomposition methods in which |
1175 |
|
|
communication among processors scales much more favorably. Spatial or |
1176 |
|
|
domain decomposition divides the physical spatial domain into 3D boxes |
1177 |
|
|
in which each processor is responsible for calculation of forces and |
1178 |
|
|
positions of particles located in its box. Particles are reassigned to |
1179 |
|
|
different processors as they move through simulation space. To |
1180 |
|
|
calculate forces on a given particle, a processor must know the |
1181 |
|
|
positions of particles within some cutoff radius located on nearby |
1182 |
|
|
processors instead of the positions of particles on all |
1183 |
|
|
processors. Both communication between processors and computation |
1184 |
|
|
scale as $O(N/P)$ in the spatial method. However, spatial |
1185 |
|
|
decomposition adds algorithmic complexity to the simulation code and |
1186 |
|
|
is not very efficient for small N since the overall communication |
1187 |
|
|
scales as the surface to volume ratio $(N/P)^{2/3}$ in three |
1188 |
|
|
dimensions. |
1189 |
|
|
|
1190 |
|
|
Force decomposition assigns particles to processors based on a block |
1191 |
|
|
decomposition of the force matrix. Processors are split into a |
1192 |
|
|
optimally square grid forming row and column processor groups. Forces |
1193 |
|
|
are calculated on particles in a given row by particles located in |
1194 |
|
|
that processors column assignment. Force decomposition is less complex |
1195 |
|
|
to implement then the spatial method but still scales computationally |
1196 |
|
|
as $O(N/P)$ and scales as $(N/\sqrt{p})$ in communication |
1197 |
|
|
cost. Plimpton also found that force decompositions scales more |
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 |
mmeineke |
1054 |
\subsection{\label{oopseSec:memAlloc}Memory Issues in Trajectory Analysis} |
1202 |
mmeineke |
1044 |
|
1203 |
mmeineke |
1054 |
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 |
mmeineke |
1044 |
|
1215 |
mmeineke |
1054 |
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 |
mmeineke |
1044 |
|
1234 |
mmeineke |
1054 |
\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 |
mmeineke |
1044 |
|
1241 |
mmeineke |
1054 |
\subsection{\label{openSource}Open Source and Distribution License} |
1242 |
mmeineke |
1044 |
|
1243 |
mmeineke |
1054 |
\section{\label{oopseSec:conclusion}Conclusion} |
1244 |
mmeineke |
1044 |
|
1245 |
mmeineke |
1054 |
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 |
mmeineke |
1044 |
|
1256 |
mmeineke |
1054 |
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 |
mmeineke |
1044 |
|