| 1 |
|
\appendix |
| 2 |
|
\chapter{\label{chapt:oopse}Object-Oriented Parallel Simulation Engine} |
| 3 |
|
|
| 4 |
< |
Designing object-oriented software is hard, and designing reusable |
| 5 |
< |
object-oriented scientific software is even harder. Absence of |
| 6 |
< |
applying modern software development practices is the bottleneck of |
| 7 |
< |
Scientific Computing community\cite{Wilson2006}. For instance, in |
| 8 |
< |
the last 20 years , there are quite a few MD packages that were |
| 9 |
< |
developed to solve common MD problems and perform robust simulations |
| 10 |
< |
. However, many of the codes are legacy programs that are either |
| 11 |
< |
poorly organized or extremely complex. Usually, these packages were |
| 12 |
< |
contributed by scientists without official computer science |
| 13 |
< |
training. The development of most MD applications are lack of strong |
| 14 |
< |
coordination to enforce design and programming guidelines. Moreover, |
| 15 |
< |
most MD programs also suffer from missing design and implement |
| 16 |
< |
documents which is crucial to the maintenance and extensibility. |
| 17 |
< |
Along the way of studying structural and dynamic processes in |
| 18 |
< |
condensed phase systems like biological membranes and nanoparticles, |
| 19 |
< |
we developed and maintained an Object-Oriented Parallel Simulation |
| 20 |
< |
Engine ({\sc OOPSE}). This new molecular dynamics package has some |
| 21 |
< |
unique features |
| 4 |
> |
Absence of applying modern software development practices is the |
| 5 |
> |
bottleneck of Scientific Computing community\cite{Wilson2006}. In |
| 6 |
> |
the last 20 years , there are quite a few MD |
| 7 |
> |
packages\cite{Brooks1983, Vincent1995, Kale1999} that were developed |
| 8 |
> |
to solve common MD problems and perform robust simulations . |
| 9 |
> |
Unfortunately, most of them are commercial programs that are either |
| 10 |
> |
poorly written or extremely complicate. Consequently, it prevents |
| 11 |
> |
the researchers to reuse or extend those packages to do cutting-edge |
| 12 |
> |
research effectively. Along the way of studying structural and |
| 13 |
> |
dynamic processes in condensed phase systems like biological |
| 14 |
> |
membranes and nanoparticles, we developed an open source |
| 15 |
> |
Object-Oriented Parallel Simulation Engine ({\sc OOPSE}). This new |
| 16 |
> |
molecular dynamics package has some unique features |
| 17 |
|
\begin{enumerate} |
| 18 |
|
\item {\sc OOPSE} performs Molecular Dynamics (MD) simulations on non-standard |
| 19 |
|
atom types (transition metals, point dipoles, sticky potentials, |
| 59 |
|
program of the package, \texttt{oopse} and it corresponding parallel |
| 60 |
|
version \texttt{oopse\_MPI}, as well as other useful utilities, such |
| 61 |
|
as \texttt{StatProps} (see Sec.~\ref{appendixSection:StaticProps}), |
| 62 |
< |
\texttt{DynamicProps} (see |
| 63 |
< |
Sec.~\ref{appendixSection:appendixSection:DynamicProps}), |
| 64 |
< |
\texttt{Dump2XYZ} (see |
| 70 |
< |
Sec.~\ref{appendixSection:appendixSection:Dump2XYZ}), \texttt{Hydro} |
| 71 |
< |
(see Sec.~\ref{appendixSection:appendixSection:hydrodynamics}) |
| 62 |
> |
\texttt{DynamicProps} (see Sec.~\ref{appendixSection:DynamicProps}), |
| 63 |
> |
\texttt{Dump2XYZ} (see Sec.~\ref{appendixSection:Dump2XYZ}), |
| 64 |
> |
\texttt{Hydro} (see Sec.~\ref{appendixSection:hydrodynamics}) |
| 65 |
|
\textit{etc}. |
| 66 |
|
|
| 67 |
|
\begin{figure} |
| 106 |
|
As one of the latest advanced techniques emerged from |
| 107 |
|
object-oriented community, design patterns were applied in some of |
| 108 |
|
the modern scientific software applications, such as JMol, {\sc |
| 109 |
< |
OOPSE}\cite{Meineke05} and PROTOMOL\cite{Matthey05} \textit{etc}. |
| 110 |
< |
The following sections enumerates some of the patterns used in {\sc |
| 111 |
< |
OOPSE}. |
| 109 |
> |
OOPSE}\cite{Meineke2005} and PROTOMOL\cite{Matthey2005} |
| 110 |
> |
\textit{etc}. The following sections enumerates some of the patterns |
| 111 |
> |
used in {\sc OOPSE}. |
| 112 |
|
|
| 113 |
|
\subsection{\label{appendixSection:singleton}Singleton} |
| 114 |
|
|
| 249 |
|
diagram of Visitor patten.} \label{appendixFig:visitorUML} |
| 250 |
|
\end{figure} |
| 251 |
|
|
| 252 |
< |
%\begin{figure} |
| 253 |
< |
%\centering |
| 254 |
< |
%\includegraphics[width=\linewidth]{hierarchy.eps} |
| 255 |
< |
%\caption[Class hierarchy for ojects in {\sc OOPSE}]{ A diagram of |
| 256 |
< |
%the class hierarchy. |
| 257 |
< |
%\begin{itemize} |
| 265 |
< |
%\item A {\bf StuntDouble} is {\it any} object that can be manipulated by the |
| 266 |
< |
%integrators and minimizers. |
| 267 |
< |
%\item An {\bf Atom} is a fundamental point-particle that can be moved around during a simulation. |
| 268 |
< |
%\item A {\bf DirectionalAtom} is an atom which has {\it orientational} as well as translational degrees of freedom. |
| 269 |
< |
%\item A {\bf RigidBody} is a collection of {\bf Atom}s or {\bf |
| 270 |
< |
%DirectionalAtom}s which behaves as a single unit. |
| 271 |
< |
%\end{itemize} |
| 272 |
< |
%} \label{oopseFig:hierarchy} |
| 273 |
< |
%\end{figure} |
| 252 |
> |
\begin{figure} |
| 253 |
> |
\centering |
| 254 |
> |
\includegraphics[width=\linewidth]{hierarchy.eps} |
| 255 |
> |
\caption[Class hierarchy for ojects in {\sc OOPSE}]{ A diagram of |
| 256 |
> |
the class hierarchy. } \label{oopseFig:hierarchy} |
| 257 |
> |
\end{figure} |
| 258 |
|
|
| 259 |
|
\begin{lstlisting}[float,caption={[The implementation of Visitor pattern (II)]Source code of the element classes.},label={appendixScheme:element}] |
| 260 |
|
|
| 358 |
|
on the specifics of the simulation). The names of rigid bodies are |
| 359 |
|
generated automatically. For example, the name of the first rigid |
| 360 |
|
body in a DMPC molecule is DMPC\_RB\_0. |
| 361 |
+ |
\begin{itemize} |
| 362 |
+ |
\item A {\bf StuntDouble} is {\it any} object that can be manipulated by the |
| 363 |
+ |
integrators and minimizers. |
| 364 |
+ |
\item An {\bf Atom} is a fundamental point-particle that can be moved around during a simulation. |
| 365 |
+ |
\item A {\bf DirectionalAtom} is an atom which has {\it orientational} as well as translational degrees of freedom. |
| 366 |
+ |
\item A {\bf RigidBody} is a collection of {\bf Atom}s or {\bf |
| 367 |
+ |
DirectionalAtom}s which behaves as a single unit. |
| 368 |
+ |
\end{itemize} |
| 369 |
|
|
| 370 |
|
\section{\label{appendixSection:syntax}Syntax of the Select Command} |
| 371 |
|
|