17 |
features that are employed. |
features that are employed. |
18 |
|
|
19 |
\section{Overall architectural goals} |
\section{Overall architectural goals} |
20 |
|
\begin{rawhtml} |
21 |
|
<!-- CMIREDIR:overall_architectural_goals: --> |
22 |
|
\end{rawhtml} |
23 |
|
|
24 |
Broadly, the goals of the software architecture employed in MITgcm are |
Broadly, the goals of the software architecture employed in MITgcm are |
25 |
three-fold |
three-fold |
79 |
\end{figure} |
\end{figure} |
80 |
|
|
81 |
\section{WRAPPER} |
\section{WRAPPER} |
82 |
|
\begin{rawhtml} |
83 |
|
<!-- CMIREDIR:wrapper: --> |
84 |
|
\end{rawhtml} |
85 |
|
|
86 |
A significant element of the software architecture utilized in |
A significant element of the software architecture utilized in |
87 |
MITgcm is a software superstructure and substructure collectively |
MITgcm is a software superstructure and substructure collectively |
156 |
computer architecture currently available to the scientific computing community. |
computer architecture currently available to the scientific computing community. |
157 |
|
|
158 |
\subsection{Machine model parallelism} |
\subsection{Machine model parallelism} |
159 |
|
\begin{rawhtml} |
160 |
|
<!-- CMIREDIR:domain_decomp: --> |
161 |
|
\end{rawhtml} |
162 |
|
|
163 |
Codes operating under the WRAPPER target an abstract machine that is assumed to |
Codes operating under the WRAPPER target an abstract machine that is assumed to |
164 |
consist of one or more logical processors that can compute concurrently. |
consist of one or more logical processors that can compute concurrently. |
546 |
last 50 years. |
last 50 years. |
547 |
|
|
548 |
\section{Using the WRAPPER} |
\section{Using the WRAPPER} |
549 |
|
\begin{rawhtml} |
550 |
|
<!-- CMIREDIR:using_the_wrapper: --> |
551 |
|
\end{rawhtml} |
552 |
|
|
553 |
In order to support maximum portability the WRAPPER is implemented primarily |
In order to support maximum portability the WRAPPER is implemented primarily |
554 |
in sequential Fortran 77. At a practical level the key steps provided by the |
in sequential Fortran 77. At a practical level the key steps provided by the |
1279 |
the cube-sphere grid. In this class of grid a rotation may be required |
the cube-sphere grid. In this class of grid a rotation may be required |
1280 |
between tiles. Aligning the coordinate requiring rotation with the |
between tiles. Aligning the coordinate requiring rotation with the |
1281 |
tile decomposition, allows the coordinate transformation to |
tile decomposition, allows the coordinate transformation to |
1282 |
be embedded within a custom form of the \_EXCH primitive. |
be embedded within a custom form of the \_EXCH primitive. In these |
1283 |
|
cases \_EXCH is mapped to exch2 routines, as detailed in the exch2 |
1284 |
|
package documentation \ref{sec:exch2}. |
1285 |
|
|
1286 |
\item {\bf Reverse Mode} |
\item {\bf Reverse Mode} |
1287 |
The communication primitives \_EXCH and \_GSUM both employ |
The communication primitives \_EXCH and \_GSUM both employ |
1298 |
is set to the value {\em REVERSE\_SIMULATION}. This signifies |
is set to the value {\em REVERSE\_SIMULATION}. This signifies |
1299 |
ti the low-level routines that the adjoint forms of the |
ti the low-level routines that the adjoint forms of the |
1300 |
appropriate communication operation should be performed. |
appropriate communication operation should be performed. |
1301 |
|
|
1302 |
\item {\bf MAX\_NO\_THREADS} |
\item {\bf MAX\_NO\_THREADS} |
1303 |
The variable {\em MAX\_NO\_THREADS} is used to indicate the |
The variable {\em MAX\_NO\_THREADS} is used to indicate the |
1304 |
maximum number of OS threads that a code will use. This |
maximum number of OS threads that a code will use. This |
1403 |
This is done to allow a large number of variations on the exchange |
This is done to allow a large number of variations on the exchange |
1404 |
process to be maintained. One set of variations supports the |
process to be maintained. One set of variations supports the |
1405 |
cube sphere grid. Support for a cube sphere grid in MITgcm is based |
cube sphere grid. Support for a cube sphere grid in MITgcm is based |
1406 |
on having each face of the cube as a separate tile (or tiles). |
on having each face of the cube as a separate tile or tiles. |
1407 |
The exchange routines are then able to absorb much of the |
The exchange routines are then able to absorb much of the |
1408 |
detailed rotation and reorientation required when moving around the |
detailed rotation and reorientation required when moving around the |
1409 |
cube grid. The set of {\em \_EXCH} routines that contain the |
cube grid. The set of {\em \_EXCH} routines that contain the |
1427 |
|
|
1428 |
|
|
1429 |
\section{MITgcm execution under WRAPPER} |
\section{MITgcm execution under WRAPPER} |
1430 |
|
\begin{rawhtml} |
1431 |
|
<!-- CMIREDIR:mitgcm_wrapper: --> |
1432 |
|
\end{rawhtml} |
1433 |
|
|
1434 |
Fitting together the WRAPPER elements, package elements and |
Fitting together the WRAPPER elements, package elements and |
1435 |
MITgcm core equation elements of the source code produces calling |
MITgcm core equation elements of the source code produces calling |