\hypertarget{Domain_Decomposition_section_domain_decomp}{}\doxysection{Domain Decomposition}\label{Domain_Decomposition_section_domain_decomp}
M\+O\+M6 supports serial, Open\+MP, and M\+PI computations, with the user choosing between them at run time. All are accomplished through domain decomposition in the horizontal. All of the horizontal operations are explicit with a relatively small footprint, so the tiling is a logical choice. Some goals in the parallel design of M\+O\+M6 were\+:

\begin{DoxyItemize}
\item Don\textquotesingle{}t hard-\/code the number of processes. \item M\+PI and Open\+MP share the same basic structure. \item Don\textquotesingle{}t break the serial optimizations. \item Same result as serial code for any number of processes. \item Portability -\/ able to run on any (Unix) system.\end{DoxyItemize}
The whole horizontal M\+O\+M6 grid is shown in \mbox{\hyperlink{Horizontal_Indexing_section_Memory}{Declaration of variables}}. The computations are done over the cells inside the darker line; the cells are numbered 1 to N\+I\+G\+L\+O\+B\+AL in the $x$-\/direction and 1 to N\+J\+G\+L\+O\+B\+AL in the $y$-\/direction. Those looking ahead to running in parallel would be wise to include factors of two and three in their choice of N\+I\+G\+L\+O\+B\+AL and N\+J\+G\+L\+O\+B\+AL when building new grids. M\+O\+M6 will run in parallel with any values of these, but the computations might not be load-\/balanced.\hypertarget{Domain_Decomposition_section_wide_halos}{}\doxysection{Wide Halos}\label{Domain_Decomposition_section_wide_halos}
