/[MITgcm]/manual/s_phys_pkgs/text/exch2.tex
ViewVC logotype

Annotation of /manual/s_phys_pkgs/text/exch2.tex

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.26 - (hide annotations) (download) (as text)
Wed Jun 28 15:35:07 2006 UTC (19 years, 1 month ago) by molod
Branch: MAIN
Changes since 1.25: +8 -1 lines
File MIME type: application/x-tex
Rename files, connect packages and epxeriments that use them.

1 molod 1.26 % $Header: /u/gcmpack/manual/part6/exch2.tex,v 1.25 2005/08/09 21:52:09 edhill Exp $
2 afe 1.1 % $Name: $
3    
4     %% * Introduction
5     %% o what it does, citations (refs go into mitgcm_manual.bib,
6     %% preferably in alphabetic order)
7     %% o Equations
8     %% * Key subroutines and parameters
9     %% * Reference material (auto generated from Protex and structured comments)
10     %% o automatically inserted at \section{Reference}
11    
12    
13 molod 1.24 \subsection{exch2: Extended Cubed Sphere \mbox{Topology}}
14 afe 1.3 \label{sec:exch2}
15    
16 afe 1.1
17 molod 1.24 \subsubsection{Introduction}
18 afe 1.2
19 afe 1.17 The \texttt{exch2} package extends the original cubed sphere topology
20     configuration to allow more flexible domain decomposition and
21     parallelization. Cube faces (also called subdomains) may be divided
22     into any number of tiles that divide evenly into the grid point
23     dimensions of the subdomain. Furthermore, the tiles can run on
24     separate processors individually or in groups, which provides for
25     manual compile-time load balancing across a relatively arbitrary
26 edhill 1.25 number of processors.
27 edhill 1.8
28     The exchange parameters are declared in
29     \filelink{pkg/exch2/W2\_EXCH2\_TOPOLOGY.h}{pkg-exch2-W2_EXCH2_TOPOLOGY.h}
30     and assigned in
31 afe 1.9 \filelink{pkg/exch2/w2\_e2setup.F}{pkg-exch2-w2_e2setup.F}. The
32 afe 1.11 validity of the cube topology depends on the \file{SIZE.h} file as
33 afe 1.12 detailed below. The default files provided in the release configure a
34     cubed sphere topology of six tiles, one per subdomain, each with
35 afe 1.18 32$\times$32 grid points, with all tiles running on a single processor. Both
36 afe 1.12 files are generated by Matlab scripts in
37 afe 1.11 \file{utils/exch2/matlab-topology-generator}; see Section
38     \ref{sec:topogen} \sectiontitle{Generating Topology Files for exch2}
39 afe 1.12 for details on creating alternate topologies. Pregenerated examples
40     of these files with alternate topologies are provided under
41 afe 1.11 \file{utils/exch2/code-mods} along with the appropriate \file{SIZE.h}
42     file for single-processor execution.
43 afe 1.9
44 molod 1.24 \subsubsection{Invoking exch2}
45 afe 1.9
46 afe 1.10 To use exch2 with the cubed sphere, the following conditions must be
47 edhill 1.25 met:
48 afe 1.9
49 edhill 1.25 \begin{itemize}
50     \item The exch2 package is included when \file{genmake2} is run. The
51     easiest way to do this is to add the line \code{exch2} to the
52     \file{packages.conf} file -- see Section \ref{sect:buildingCode}
53     \sectiontitle{Building the code} for general
54     details.
55 afe 1.23
56 edhill 1.25 \item An example of \file{W2\_EXCH2\_TOPOLOGY.h} and
57 afe 1.17 \file{w2\_e2setup.F} must reside in a directory containing files
58 edhill 1.25 symbolically linked by the \file{genmake2} script. The safest place
59     to put these is the directory indicated in the \code{-mods=DIR}
60     command line modifier (typically \file{../code}), or the build
61     directory. The default versions of these files reside in
62     \file{pkg/exch2} and are linked automatically if no other versions
63     exist elsewhere in the build path, but they should be left untouched
64     to avoid breaking configurations other than the one you intend to
65     modify.
66    
67     \item Files containing grid parameters, named \file{tile00$n$.mitgrid}
68     where $n$=\code{(1:6)} (one per subdomain), must be in the working
69     directory when the MITgcm executable is run. These files are
70     provided in the example experiments for cubed sphere configurations
71     with 32$\times$32 cube sides -- please contact MITgcm support if you
72     want to generate files for other configurations.
73    
74     \item As always when compiling MITgcm, the file \file{SIZE.h} must be
75     placed where \file{genmake2} will find it. In particular for exch2,
76     the domain decomposition specified in \file{SIZE.h} must correspond
77     with the particular configuration's topology specified in
78 afe 1.12 \file{W2\_EXCH2\_TOPOLOGY.h} and \file{w2\_e2setup.F}. Domain
79     decomposition issues particular to exch2 are addressed in Section
80     \ref{sec:topogen} \sectiontitle{Generating Topology Files for exch2}
81 edhill 1.25 and \ref{sec:exch2mpi} \sectiontitle{exch2, SIZE.h, and
82     Multiprocessing}; a more general background on the subject
83     relevant to MITgcm is presented in Section
84     \ref{sect:specifying_a_decomposition}
85     \sectiontitle{Specifying a decomposition}.
86     \end{itemize}
87 afe 1.9
88 afe 1.17 At the time of this writing the following examples use exch2 and may
89     be used for guidance:
90 afe 1.9
91     \begin{verbatim}
92     verification/adjust_nlfs.cs-32x32x1
93     verification/adjustment.cs-32x32x1
94     verification/aim.5l_cs
95     verification/global_ocean.cs32x15
96     verification/hs94.cs-32x32x5
97     \end{verbatim}
98    
99    
100    
101    
102 molod 1.24 \subsubsection{Generating Topology Files for exch2}
103 afe 1.10 \label{sec:topogen}
104    
105     Alternate cubed sphere topologies may be created using the Matlab
106 afe 1.11 scripts in \file{utils/exch2/matlab-topology-generator}. Running the
107 afe 1.12 m-file
108     \filelink{driver.m}{utils-exch2-matlab-topology-generator_driver.m}
109     from the Matlab prompt (there are no parameters to pass) generates
110     exch2 topology files \file{W2\_EXCH2\_TOPOLOGY.h} and
111     \file{w2\_e2setup.F} in the working directory and displays a figure of
112 afe 1.18 the topology via Matlab -- figures \ref{fig:6tile}, \ref{fig:12tile},
113 afe 1.19 and \ref{fig:24tile} are examples of the generated diagrams. The other
114     m-files in the directory are
115     subroutines called from \file{driver.m} and should not be run ``bare'' except
116 afe 1.12 for development purposes. \\
117 afe 1.10
118     The parameters that determine the dimensions and topology of the
119 afe 1.11 generated configuration are \code{nr}, \code{nb}, \code{ng},
120 afe 1.12 \code{tnx} and \code{tny}, and all are assigned early in the script. \\
121 afe 1.10
122 afe 1.19 The first three determine the height and width of the subdomains and
123 afe 1.10 hence the size of the overall domain. Each one determines the number
124     of grid points, and therefore the resolution, along the subdomain
125 afe 1.18 sides in a ``great circle'' around each the three spatial axes of the cube. At the time
126 afe 1.10 of this writing MITgcm requires these three parameters to be equal,
127 afe 1.12 but they provide for future releases to accomodate different
128 afe 1.19 resolutions around the axes to allow subdomains with differing resolutions.\\
129 afe 1.10
130 afe 1.18 The parameters \code{tnx} and \code{tny} determine the width and height of
131 afe 1.11 the tiles into which the subdomains are decomposed, and must evenly
132     divide the integer assigned to \code{nr}, \code{nb} and \code{ng}.
133     The result is a rectangular tiling of the subdomain. Figure
134 afe 1.17 \ref{fig:24tile} shows one possible topology for a twenty-four-tile
135 afe 1.11 cube, and figure \ref{fig:12tile} shows one for twelve tiles. \\
136 afe 1.10
137     \begin{figure}
138     \begin{center}
139     \resizebox{4in}{!}{
140     \includegraphics{part6/s24t_16x16.ps}
141     }
142     \end{center}
143 afe 1.12
144 afe 1.13 \caption{Plot of a cubed sphere topology with a 32$\times$192 domain
145 afe 1.17 divided into six 32$\times$32 subdomains, each of which is divided
146 afe 1.18 into four tiles of width \code{tnx=16} and height \code{tny=16} for a
147     total of twenty-four tiles. The colored borders of the subdomains
148     represent the parameters \code{nr} (red), \code{nb} (blue), and
149     \code{ng} (green). } \label{fig:24tile}
150 afe 1.10 \end{figure}
151    
152     \begin{figure}
153     \begin{center}
154     \resizebox{4in}{!}{
155     \includegraphics{part6/s12t_16x32.ps}
156     }
157     \end{center}
158 afe 1.13 \caption{Plot of a cubed sphere topology with a 32$\times$192 domain
159 afe 1.12 divided into six 32$\times$32 subdomains of two tiles each
160     (\code{tnx=16, tny=32}).
161 afe 1.10 } \label{fig:12tile}
162     \end{figure}
163    
164 afe 1.13 \begin{figure}
165     \begin{center}
166     \resizebox{4in}{!}{
167     \includegraphics{part6/s6t_32x32.ps}
168     }
169     \end{center}
170     \caption{Plot of a cubed sphere topology with a 32$\times$192 domain
171     divided into six 32$\times$32 subdomains with one tile each
172     (\code{tnx=32, tny=32}). This is the default configuration.
173     }
174     \label{fig:6tile}
175     \end{figure}
176    
177    
178 afe 1.10 Tiles can be selected from the topology to be omitted from being
179 afe 1.12 allocated memory and processors. This tuning is useful in ocean
180     modeling for omitting tiles that fall entirely on land. The tiles
181     omitted are specified in the file
182     \filelink{blanklist.txt}{utils-exch2-matlab-topology-generator_blanklist.txt}
183     by their tile number in the topology, separated by a newline. \\
184    
185 afe 1.10
186    
187    
188 molod 1.24 \subsubsection{exch2, SIZE.h, and Multiprocessing}
189 afe 1.12 \label{sec:exch2mpi}
190    
191     Once the topology configuration files are created, the Fortran
192 afe 1.13 \code{PARAMETER}s in \file{SIZE.h} must be configured to match.
193     Section \ref{sect:specifying_a_decomposition} \sectiontitle{Specifying
194 edhill 1.25 a decomposition} provides a general description of domain
195 afe 1.13 decomposition within MITgcm and its relation to \file{SIZE.h}. The
196 edhill 1.25 current section specifies constraints that the exch2 package imposes
197     and describes how to enable parallel execution with MPI.
198 afe 1.12
199     As in the general case, the parameters \varlink{sNx}{sNx} and
200     \varlink{sNy}{sNy} define the size of the individual tiles, and so
201     must be assigned the same respective values as \code{tnx} and
202 edhill 1.25 \code{tny} in \file{driver.m}.
203 afe 1.12
204     The halo width parameters \varlink{OLx}{OLx} and \varlink{OLy}{OLy}
205     have no special bearing on exch2 and may be assigned as in the general
206 edhill 1.25 case. The same holds for \varlink{Nr}{Nr}, the number of vertical
207     levels in the model.
208 afe 1.12
209     The parameters \varlink{nSx}{nSx}, \varlink{nSy}{nSy},
210     \varlink{nPx}{nPx}, and \varlink{nPy}{nPy} relate to the number of
211     tiles and how they are distributed on processors. When using exch2,
212 afe 1.19 the tiles are stored in the $x$ dimension, and so
213 afe 1.12 \code{\varlink{nSy}{nSy}=1} in all cases. Since the tiles as
214     configured by exch2 cannot be split up accross processors without
215 edhill 1.25 regenerating the topology, \code{\varlink{nPy}{nPy}=1} as well.
216 afe 1.12
217     The number of tiles MITgcm allocates and how they are distributed
218     between processors depends on \varlink{nPx}{nPx} and
219     \varlink{nSx}{nSx}. \varlink{nSx}{nSx} is the number of tiles per
220 afe 1.23 processor and \varlink{nPx}{nPx} is the number of processors. The
221     total number of tiles in the topology minus those listed in
222     \file{blanklist.txt} must equal \code{nSx*nPx}. Note that in order to
223 afe 1.19 obtain maximum usage from a given number of processors in some cases,
224 afe 1.23 this restriction might entail sharing a processor with a tile that
225     would otherwise be excluded because it is topographically outside of
226     the domain and therefore in \file{blanklist.txt}. For example,
227     suppose you have five processors and a domain decomposition of
228     thirty-six tiles that allows you to exclude seven tiles. To evenly
229     distribute the remaining twenty-nine tiles among five processors, you
230     would have to run one ``dummy'' tile to make an even six tiles per
231     processor. Such dummy tiles are \emph{not} listed in
232 edhill 1.25 \file{blanklist.txt}.
233 afe 1.12
234     The following is an example of \file{SIZE.h} for the twelve-tile
235 edhill 1.25 configuration illustrated in figure \ref{fig:12tile} running on one
236     processor:
237 afe 1.12
238     \begin{verbatim}
239     PARAMETER (
240     & sNx = 16,
241     & sNy = 32,
242     & OLx = 2,
243     & OLy = 2,
244     & nSx = 12,
245     & nSy = 1,
246     & nPx = 1,
247     & nPy = 1,
248     & Nx = sNx*nSx*nPx,
249     & Ny = sNy*nSy*nPy,
250     & Nr = 5)
251     \end{verbatim}
252    
253 afe 1.17 The following is an example for the twenty-four-tile topology in
254     figure \ref{fig:24tile} running on six processors:
255 afe 1.12
256     \begin{verbatim}
257     PARAMETER (
258     & sNx = 16,
259     & sNy = 16,
260     & OLx = 2,
261     & OLy = 2,
262     & nSx = 4,
263     & nSy = 1,
264     & nPx = 6,
265     & nPy = 1,
266     & Nx = sNx*nSx*nPx,
267     & Ny = sNy*nSy*nPy,
268     & Nr = 5)
269     \end{verbatim}
270    
271    
272 molod 1.24 \subsubsection{Key Variables}
273 afe 1.4
274     The descriptions of the variables are divided up into scalars,
275 afe 1.17 one-dimensional arrays indexed to the tile number, and two and
276     three-dimensional arrays indexed to tile number and neighboring tile.
277     This division reflects the functionality of these variables: The
278 edhill 1.8 scalars are common to every part of the topology, the tile-indexed
279 afe 1.12 arrays to individual tiles, and the arrays indexed by tile and
280     neighbor to relationships between tiles and their neighbors. \\
281 afe 1.4
282 molod 1.24 Scalars:
283 afe 1.4
284     The number of tiles in a particular topology is set with the parameter
285 afe 1.12 \code{NTILES}, and the maximum number of neighbors of any tiles by
286     \code{MAX\_NEIGHBOURS}. These parameters are used for defining the
287 edhill 1.8 size of the various one and two dimensional arrays that store tile
288 afe 1.12 parameters indexed to the tile number and are assigned in the files
289     generated by \file{driver.m}.\\
290 edhill 1.8
291     The scalar parameters \varlink{exch2\_domain\_nxt}{exch2_domain_nxt}
292     and \varlink{exch2\_domain\_nyt}{exch2_domain_nyt} express the number
293 afe 1.12 of tiles in the $x$ and $y$ global indices. For example, the default
294 afe 1.15 setup of six tiles (Fig. \ref{fig:6tile}) has
295     \code{exch2\_domain\_nxt=6} and \code{exch2\_domain\_nyt=1}. A
296     topology of twenty-four square tiles, four per subdomain (as in figure
297     \ref{fig:24tile}), will have \code{exch2\_domain\_nxt=12} and
298     \code{exch2\_domain\_nyt=2}. Note that these parameters express the
299 afe 1.19 tile layout in order to allow global data files that are tile-layout-neutral.
300     They have no bearing on the internal storage of the arrays. The tiles
301     are stored internally in a range from \code{\varlink{bi}{bi}=(1:NTILES)} in the
302 afe 1.18 $x$ axis, and the $y$ axis variable \varlink{bj}{bj} is assumed to
303     equal \code{1} throughout the package. \\
304 afe 1.4
305 molod 1.24 Arrays indexed to tile number:
306 afe 1.4
307 afe 1.17 The following arrays are of length \code{NTILES} and are indexed to
308     the tile number, which is indicated in the diagrams with the notation
309 afe 1.23 \textsf{t}$n$. The indices are omitted in the descriptions. \\
310 afe 1.4
311 edhill 1.8 The arrays \varlink{exch2\_tnx}{exch2_tnx} and
312 afe 1.12 \varlink{exch2\_tny}{exch2_tny} express the $x$ and $y$ dimensions of
313     each tile. At present for each tile \texttt{exch2\_tnx=sNx} and
314     \texttt{exch2\_tny=sNy}, as assigned in \file{SIZE.h} and described in
315 afe 1.19 Section \ref{sec:exch2mpi} \sectiontitle{exch2, SIZE.h, and
316     Multiprocessing}. Future releases of MITgcm may allow varying tile
317 afe 1.12 sizes. \\
318 edhill 1.8
319 afe 1.19 The arrays \varlink{exch2\_tbasex}{exch2_tbasex} and
320     \varlink{exch2\_tbasey}{exch2_tbasey} determine the tiles'
321     Cartesian origin within a subdomain
322     and locate the edges of different tiles relative to each other. As
323 afe 1.13 an example, in the default six-tile topology (Fig. \ref{fig:6tile})
324     each index in these arrays is set to \code{0} since a tile occupies
325 afe 1.17 its entire subdomain. The twenty-four-tile case discussed above will
326 afe 1.19 have values of \code{0} or \code{16}, depending on the quadrant of the
327     tile within the subdomain. The elements of the arrays
328 afe 1.13 \varlink{exch2\_txglobalo}{exch2_txglobalo} and
329     \varlink{exch2\_txglobalo}{exch2_txglobalo} are similar to
330 edhill 1.8 \varlink{exch2\_tbasex}{exch2_tbasex} and
331 afe 1.19 \varlink{exch2\_tbasey}{exch2_tbasey}, but locate the tile edges within the
332 afe 1.17 global address space, similar to that used by global output and input
333     files. \\
334 edhill 1.8
335 afe 1.13 The array \varlink{exch2\_myFace}{exch2_myFace} contains the number of
336     the subdomain of each tile, in a range \code{(1:6)} in the case of the
337 afe 1.23 standard cube topology and indicated by \textbf{\textsf{f}}$n$ in
338     figures \ref{fig:12tile} and
339     \ref{fig:24tile}. \varlink{exch2\_nNeighbours}{exch2_nNeighbours}
340     contains a count of the neighboring tiles each tile has, and sets
341     the bounds for looping over neighboring tiles.
342 afe 1.13 \varlink{exch2\_tProc}{exch2_tProc} holds the process rank of each
343     tile, and is used in interprocess communication. \\
344    
345    
346 edhill 1.8 The arrays \varlink{exch2\_isWedge}{exch2_isWedge},
347     \varlink{exch2\_isEedge}{exch2_isEedge},
348     \varlink{exch2\_isSedge}{exch2_isSedge}, and
349 afe 1.12 \varlink{exch2\_isNedge}{exch2_isNedge} are set to \code{1} if the
350 afe 1.19 indexed tile lies on the edge of its subdomain, \code{0} if
351 afe 1.15 not. The values are used within the topology generator to determine
352     the orientation of neighboring tiles, and to indicate whether a tile
353     lies on the corner of a subdomain. The latter case requires special
354 afe 1.12 exchange and numerical handling for the singularities at the eight
355 afe 1.13 corners of the cube. \\
356    
357 afe 1.4
358 molod 1.24 Arrays Indexed to Tile Number and Neighbor:
359 afe 1.4
360 afe 1.17 The following arrays have vectors of length \code{MAX\_NEIGHBOURS} and
361     \code{NTILES} and describe the orientations between the the tiles. \\
362 afe 1.12
363     The array \code{exch2\_neighbourId(a,T)} holds the tile number
364     \code{Tn} for each of the tile number \code{T}'s neighboring tiles
365 afe 1.15 \code{a}. The neighbor tiles are indexed
366 afe 1.17 \code{(1:exch2\_nNeighbours(T))} in the order right to left on the
367     north then south edges, and then top to bottom on the east then west
368     edges. \\
369 afe 1.15
370 afe 1.17 The \code{exch2\_opposingSend\_record(a,T)} array holds the
371 afe 1.15 index \code{b} of the element in \texttt{exch2\_neighbourId(b,Tn)}
372     that holds the tile number \code{T}, given
373     \code{Tn=exch2\_neighborId(a,T)}. In other words,
374 edhill 1.8 \begin{verbatim}
375     exch2_neighbourId( exch2_opposingSend_record(a,T),
376     exch2_neighbourId(a,T) ) = T
377 afe 1.5 \end{verbatim}
378 afe 1.12 This provides a back-reference from the neighbor tiles. \\
379 afe 1.5
380 afe 1.13 The arrays \varlink{exch2\_pi}{exch2_pi} and
381 afe 1.15 \varlink{exch2\_pj}{exch2_pj} specify the transformations of indices
382 afe 1.13 in exchanges between the neighboring tiles. These transformations are
383 afe 1.19 necessary in exchanges between subdomains because a horizontal dimension
384     in one subdomain
385     may map to other horizonal dimension in an adjacent subdomain, and
386     may also have its indexing reversed. This swapping arises from the
387 afe 1.17 ``folding'' of two-dimensional arrays into a three-dimensional
388     cube. \\
389 afe 1.13
390     The dimensions of \code{exch2\_pi(t,N,T)} and \code{exch2\_pj(t,N,T)}
391     are the neighbor ID \code{N} and the tile number \code{T} as explained
392 afe 1.15 above, plus a vector of length \code{2} containing transformation
393     factors \code{t}. The first element of the transformation vector
394 afe 1.19 holds the factor to multiply the index in the same dimension, and the
395     second element holds the the same for the orthogonal dimension. To
396 afe 1.15 clarify, \code{exch2\_pi(1,N,T)} holds the mapping of the $x$ axis
397     index of tile \code{T} to the $x$ axis of tile \code{T}'s neighbor
398     \code{N}, and \code{exch2\_pi(2,N,T)} holds the mapping of \code{T}'s
399     $x$ index to the neighbor \code{N}'s $y$ index. \\
400 afe 1.12
401 afe 1.15 One of the two elements of \code{exch2\_pi} or \code{exch2\_pj} for a
402     given tile \code{T} and neighbor \code{N} will be \code{0}, reflecting
403     the fact that the two axes are orthogonal. The other element will be
404     \code{1} or \code{-1}, depending on whether the axes are indexed in
405     the same or opposite directions. For example, the transform vector of
406     the arrays for all tile neighbors on the same subdomain will be
407 afe 1.13 \code{(1,0)}, since all tiles on the same subdomain are oriented
408 afe 1.15 identically. An axis that corresponds to the orthogonal dimension
409     with the same index direction in a particular tile-neighbor
410 afe 1.19 orientation will have \code{(0,1)}. Those with the opposite index
411 afe 1.15 direction will have \code{(0,-1)} in order to reverse the ordering. \\
412 afe 1.13
413 afe 1.14 The arrays \varlink{exch2\_oi}{exch2_oi},
414     \varlink{exch2\_oj}{exch2_oj}, \varlink{exch2\_oi\_f}{exch2_oi_f}, and
415     \varlink{exch2\_oj\_f}{exch2_oj_f} are indexed to tile number and
416     neighbor and specify the relative offset within the subdomain of the
417 afe 1.17 array index of a variable going from a neighboring tile \code{N} to a
418     local tile \code{T}. Consider \code{T=1} in the six-tile topology
419 afe 1.16 (Fig. \ref{fig:6tile}), where
420    
421     \begin{verbatim}
422     exch2_oi(1,1)=33
423     exch2_oi(2,1)=0
424     exch2_oi(3,1)=32
425     exch2_oi(4,1)=-32
426     \end{verbatim}
427    
428     The simplest case is \code{exch2\_oi(2,1)}, the southern neighbor,
429     which is \code{Tn=6}. The axes of \code{T} and \code{Tn} have the
430     same orientation and their $x$ axes have the same origin, and so an
431     exchange between the two requires no changes to the $x$ index. For
432     the western neighbor (\code{Tn=5}), \code{code\_oi(3,1)=32} since the
433     \code{x=0} vector on \code{T} corresponds to the \code{y=32} vector on
434     \code{Tn}. The eastern edge of \code{T} shows the reverse case
435 afe 1.17 (\code{exch2\_oi(4,1)=-32)}), where \code{x=32} on \code{T} exchanges
436     with \code{x=0} on \code{Tn=2}. \\
437    
438     The most interesting case, where \code{exch2\_oi(1,1)=33} and
439     \code{Tn=3}, involves a reversal of indices. As in every case, the
440     offset \code{exch2\_oi} is added to the original $x$ index of \code{T}
441     multiplied by the transformation factor \code{exch2\_pi(t,N,T)}. Here
442     \code{exch2\_pi(1,1,1)=0} since the $x$ axis of \code{T} is orthogonal
443     to the $x$ axis of \code{Tn}. \code{exch2\_pi(2,1,1)=-1} since the
444     $x$ axis of \code{T} corresponds to the $y$ axis of \code{Tn}, but the
445     index is reversed. The result is that the index of the northern edge
446     of \code{T}, which runs \code{(1:32)}, is transformed to
447 afe 1.16 \code{(-1:-32)}. \code{exch2\_oi(1,1)} is then added to this range to
448 afe 1.17 get back \code{(32:1)} -- the index of the $y$ axis of \code{Tn}
449     relative to \code{T}. This transformation may seem overly convoluted
450     for the six-tile case, but it is necessary to provide a general
451     solution for various topologies. \\
452 afe 1.16
453    
454 afe 1.14
455     Finally, \varlink{exch2\_itlo\_c}{exch2_itlo_c},
456     \varlink{exch2\_ithi\_c}{exch2_ithi_c},
457     \varlink{exch2\_jtlo\_c}{exch2_jtlo_c} and
458     \varlink{exch2\_jthi\_c}{exch2_jthi_c} hold the location and index
459     bounds of the edge segment of the neighbor tile \code{N}'s subdomain
460     that gets exchanged with the local tile \code{T}. To take the example
461     of tile \code{T=2} in the twelve-tile topology
462     (Fig. \ref{fig:12tile}): \\
463    
464     \begin{verbatim}
465     exch2_itlo_c(4,2)=17
466     exch2_ithi_c(4,2)=17
467     exch2_jtlo_c(4,2)=0
468     exch2_jthi_c(4,2)=33
469     \end{verbatim}
470    
471 afe 1.17 Here \code{N=4}, indicating the western neighbor, which is
472     \code{Tn=1}. \code{Tn} resides on the same subdomain as \code{T}, so
473     the tiles have the same orientation and the same $x$ and $y$ axes.
474     The $x$ axis is orthogonal to the western edge and the tile is 16
475     points wide, so \code{exch2\_itlo\_c} and \code{exch2\_ithi\_c}
476     indicate the column beyond \code{Tn}'s eastern edge, in that tile's
477     halo region. Since the border of the tiles extends through the entire
478 afe 1.14 height of the subdomain, the $y$ axis bounds \code{exch2\_jtlo\_c} to
479 afe 1.17 \code{exch2\_jthi\_c} cover the height of \code{(1:32)}, plus 1 in
480     either direction to cover part of the halo. \\
481 afe 1.14
482     For the north edge of the same tile \code{T=2} where \code{N=1} and
483     the neighbor tile is \code{Tn=5}:
484    
485     \begin{verbatim}
486     exch2_itlo_c(1,2)=0
487     exch2_ithi_c(1,2)=0
488     exch2_jtlo_c(1,2)=0
489     exch2_jthi_c(1,2)=17
490     \end{verbatim}
491    
492     \code{T}'s northern edge is parallel to the $x$ axis, but since
493 afe 1.17 \code{Tn}'s $y$ axis corresponds to \code{T}'s $x$ axis, \code{T}'s
494     northern edge exchanges with \code{Tn}'s western edge. The western
495     edge of the tiles corresponds to the lower bound of the $x$ axis, so
496 afe 1.19 \code{exch2\_itlo\_c} and \code{exch2\_ithi\_c} are \code{0}, in the
497     western halo region of \code{Tn}. The range of
498 afe 1.17 \code{exch2\_jtlo\_c} and \code{exch2\_jthi\_c} correspond to the
499 afe 1.19 width of \code{T}'s northern edge, expanded by one into the halo. \\
500 afe 1.14
501    
502 molod 1.24 \subsubsection{Key Routines}
503 afe 1.1
504 afe 1.16 Most of the subroutines particular to exch2 handle the exchanges
505     themselves and are of the same format as those described in
506     \ref{sect:cube_sphere_communication} \sectiontitle{Cube sphere
507     communication}. Like the original routines, they are written as
508 afe 1.19 templates which the local Makefile converts from \code{RX} into
509     \code{RL} and \code{RS} forms. \\
510 afe 1.16
511     The interfaces with the core model subroutines are
512 afe 1.17 \code{EXCH\_UV\_XY\_RX}, \code{EXCH\_UV\_XYZ\_RX} and
513     \code{EXCH\_XY\_RX}. They override the standard exchange routines
514     when \code{genmake2} is run with \code{exch2} option. They in turn
515     call the local exch2 subroutines \code{EXCH2\_UV\_XY\_RX} and
516     \code{EXCH2\_UV\_XYZ\_RX} for two and three-dimensional vector
517     quantities, and \code{EXCH2\_XY\_RX} and \code{EXCH2\_XYZ\_RX} for two
518     and three-dimensional scalar quantities. These subroutines set the
519     dimensions of the area to be exchanged, call \code{EXCH2\_RX1\_CUBE}
520     for scalars and \code{EXCH2\_RX2\_CUBE} for vectors, and then handle
521     the singularities at the cube corners. \\
522 afe 1.16
523     The separate scalar and vector forms of \code{EXCH2\_RX1\_CUBE} and
524 afe 1.19 \code{EXCH2\_RX2\_CUBE} reflect that the vector-handling subroutine
525     needs to pass both the $u$ and $v$ components of the physical vectors.
526     This swapping arises from the topological folding discussed above, where the
527     $x$ and $y$ axes get swapped in some cases, and is not an
528     issue with the scalar case. These subroutines call
529 afe 1.17 \code{EXCH2\_SEND\_RX1} and \code{EXCH2\_SEND\_RX2}, which do most of
530     the work using the variables discussed above. \\
531 afe 1.1
532 molod 1.26 \subsubsection{Experiments and tutorials that use exch2}
533     \label{sec:pkg:exch2:experiments}
534    
535     \begin{itemize}
536     \item{Held Suarez tutorial, in tutorial\_held\_suarez\_cs verification directory,
537     described in section \ref{sect:eg-hs} }
538     \end{itemize}

  ViewVC Help
Powered by ViewVC 1.1.22