There are major architectural differences between MOM 1 and MOM 2. As a result, there is no simple utility which will provide a meaningful upgrade path from MOM 1 to MOM 2. One of the first differences to notice is a change in naming variables. To remove lack of uniformity and to provide guidance in choosing variable names for future parameterizations, a naming convention has been adopted as described in Section 14.1. Not only variable names but details of subscripts and numerics within this documentation consistently match what is found in the model code. Therefore, understanding this documentation will allow the researcher to take a big step towards gaining a working knowledge of MOM 2.
Apart from renaming of variables, the next thing to notice is that a latitude ``j'' index has been added to expose all indices of arrays in MOM 2. Although the organization of the code bears similarity to MOM 1, this added ``j'' index results in fewer variable names being required and triply nested ``do loops'' replacing the doubly nested loop structure in MOM 1. It also allows the slab architecture of MOM 1 to be extended to a more general memory window structure which permits solving equations on one or more latitude rows at a time. This has implications for parallelization and simplifies incorporating parameterizations (such as fourth order accurate schemes, flux corrected transport schemes, etc.) which require referencing data from more than one grid point away. For such parameterizations, the memory window is simply opened up to contain four latitude rows as opposed to the usual three. In the limit when enough central memory is available, the memory window can be opened all the way to contain all latitude rows, in which case all data is entirely within central memory, and therefore no movement of data between central memory and disk is needed. Also, in contrast to a partially opened memory window, there are no redundant computations necessary. The main point is that all arrays and equations look the same regardless of the size of the memory window and whether one, a few, or all latitude rows are being solved at once. The details are given in Chapter 10.
The memory window also allows flexibility in parallelization as described in Chapter 12. When executing on multiple processors, MOM 2 can make use of fine grained parallelism (``autotasking'') or the coarse grained parallelism (``microtasking''). Each method has its advantages and disadvantages. Fine grained parallelism makes efficient use of available memory and offers a robust coding environment which is easy to use thereby keeping the researchers efforts focused on science as opposed to debugging. It suffers from relatively low parallel efficiency2.3 which limits its use to multi-tasking with a small number of processors. However, the highest parallel efficiency may not be important when multi-tasking on systems with tens of processors and when the number of jobs in the system exceeds the number of processors. Higher parallel efficiency, which is necessary when executing in a dedicated system, can be achieved through coarse grained parallelism. The down side is that this approach uses significantly more memory than fine grained parallelism and is more prone to introducing errors. The researcher who is intent on developing new parameterizations with coarse grained parallelism in mind may find the focus shifts from science to debugging.