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

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

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


Revision 1.26 - (show annotations) (download) (as text)
Wed Jun 28 15:35:07 2006 UTC (17 years, 11 months 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 % $Header: /u/gcmpack/manual/part6/exch2.tex,v 1.25 2005/08/09 21:52:09 edhill Exp $
2 % $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 \subsection{exch2: Extended Cubed Sphere \mbox{Topology}}
14 \label{sec:exch2}
15
16
17 \subsubsection{Introduction}
18
19 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 number of processors.
27
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 \filelink{pkg/exch2/w2\_e2setup.F}{pkg-exch2-w2_e2setup.F}. The
32 validity of the cube topology depends on the \file{SIZE.h} file as
33 detailed below. The default files provided in the release configure a
34 cubed sphere topology of six tiles, one per subdomain, each with
35 32$\times$32 grid points, with all tiles running on a single processor. Both
36 files are generated by Matlab scripts in
37 \file{utils/exch2/matlab-topology-generator}; see Section
38 \ref{sec:topogen} \sectiontitle{Generating Topology Files for exch2}
39 for details on creating alternate topologies. Pregenerated examples
40 of these files with alternate topologies are provided under
41 \file{utils/exch2/code-mods} along with the appropriate \file{SIZE.h}
42 file for single-processor execution.
43
44 \subsubsection{Invoking exch2}
45
46 To use exch2 with the cubed sphere, the following conditions must be
47 met:
48
49 \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
56 \item An example of \file{W2\_EXCH2\_TOPOLOGY.h} and
57 \file{w2\_e2setup.F} must reside in a directory containing files
58 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 \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 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
88 At the time of this writing the following examples use exch2 and may
89 be used for guidance:
90
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 \subsubsection{Generating Topology Files for exch2}
103 \label{sec:topogen}
104
105 Alternate cubed sphere topologies may be created using the Matlab
106 scripts in \file{utils/exch2/matlab-topology-generator}. Running the
107 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 the topology via Matlab -- figures \ref{fig:6tile}, \ref{fig:12tile},
113 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 for development purposes. \\
117
118 The parameters that determine the dimensions and topology of the
119 generated configuration are \code{nr}, \code{nb}, \code{ng},
120 \code{tnx} and \code{tny}, and all are assigned early in the script. \\
121
122 The first three determine the height and width of the subdomains and
123 hence the size of the overall domain. Each one determines the number
124 of grid points, and therefore the resolution, along the subdomain
125 sides in a ``great circle'' around each the three spatial axes of the cube. At the time
126 of this writing MITgcm requires these three parameters to be equal,
127 but they provide for future releases to accomodate different
128 resolutions around the axes to allow subdomains with differing resolutions.\\
129
130 The parameters \code{tnx} and \code{tny} determine the width and height of
131 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 \ref{fig:24tile} shows one possible topology for a twenty-four-tile
135 cube, and figure \ref{fig:12tile} shows one for twelve tiles. \\
136
137 \begin{figure}
138 \begin{center}
139 \resizebox{4in}{!}{
140 \includegraphics{part6/s24t_16x16.ps}
141 }
142 \end{center}
143
144 \caption{Plot of a cubed sphere topology with a 32$\times$192 domain
145 divided into six 32$\times$32 subdomains, each of which is divided
146 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 \end{figure}
151
152 \begin{figure}
153 \begin{center}
154 \resizebox{4in}{!}{
155 \includegraphics{part6/s12t_16x32.ps}
156 }
157 \end{center}
158 \caption{Plot of a cubed sphere topology with a 32$\times$192 domain
159 divided into six 32$\times$32 subdomains of two tiles each
160 (\code{tnx=16, tny=32}).
161 } \label{fig:12tile}
162 \end{figure}
163
164 \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 Tiles can be selected from the topology to be omitted from being
179 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
186
187
188 \subsubsection{exch2, SIZE.h, and Multiprocessing}
189 \label{sec:exch2mpi}
190
191 Once the topology configuration files are created, the Fortran
192 \code{PARAMETER}s in \file{SIZE.h} must be configured to match.
193 Section \ref{sect:specifying_a_decomposition} \sectiontitle{Specifying
194 a decomposition} provides a general description of domain
195 decomposition within MITgcm and its relation to \file{SIZE.h}. The
196 current section specifies constraints that the exch2 package imposes
197 and describes how to enable parallel execution with MPI.
198
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 \code{tny} in \file{driver.m}.
203
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 case. The same holds for \varlink{Nr}{Nr}, the number of vertical
207 levels in the model.
208
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 the tiles are stored in the $x$ dimension, and so
213 \code{\varlink{nSy}{nSy}=1} in all cases. Since the tiles as
214 configured by exch2 cannot be split up accross processors without
215 regenerating the topology, \code{\varlink{nPy}{nPy}=1} as well.
216
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 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 obtain maximum usage from a given number of processors in some cases,
224 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 \file{blanklist.txt}.
233
234 The following is an example of \file{SIZE.h} for the twelve-tile
235 configuration illustrated in figure \ref{fig:12tile} running on one
236 processor:
237
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 The following is an example for the twenty-four-tile topology in
254 figure \ref{fig:24tile} running on six processors:
255
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 \subsubsection{Key Variables}
273
274 The descriptions of the variables are divided up into scalars,
275 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 scalars are common to every part of the topology, the tile-indexed
279 arrays to individual tiles, and the arrays indexed by tile and
280 neighbor to relationships between tiles and their neighbors. \\
281
282 Scalars:
283
284 The number of tiles in a particular topology is set with the parameter
285 \code{NTILES}, and the maximum number of neighbors of any tiles by
286 \code{MAX\_NEIGHBOURS}. These parameters are used for defining the
287 size of the various one and two dimensional arrays that store tile
288 parameters indexed to the tile number and are assigned in the files
289 generated by \file{driver.m}.\\
290
291 The scalar parameters \varlink{exch2\_domain\_nxt}{exch2_domain_nxt}
292 and \varlink{exch2\_domain\_nyt}{exch2_domain_nyt} express the number
293 of tiles in the $x$ and $y$ global indices. For example, the default
294 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 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 $x$ axis, and the $y$ axis variable \varlink{bj}{bj} is assumed to
303 equal \code{1} throughout the package. \\
304
305 Arrays indexed to tile number:
306
307 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 \textsf{t}$n$. The indices are omitted in the descriptions. \\
310
311 The arrays \varlink{exch2\_tnx}{exch2_tnx} and
312 \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 Section \ref{sec:exch2mpi} \sectiontitle{exch2, SIZE.h, and
316 Multiprocessing}. Future releases of MITgcm may allow varying tile
317 sizes. \\
318
319 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 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 its entire subdomain. The twenty-four-tile case discussed above will
326 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 \varlink{exch2\_txglobalo}{exch2_txglobalo} and
329 \varlink{exch2\_txglobalo}{exch2_txglobalo} are similar to
330 \varlink{exch2\_tbasex}{exch2_tbasex} and
331 \varlink{exch2\_tbasey}{exch2_tbasey}, but locate the tile edges within the
332 global address space, similar to that used by global output and input
333 files. \\
334
335 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 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 \varlink{exch2\_tProc}{exch2_tProc} holds the process rank of each
343 tile, and is used in interprocess communication. \\
344
345
346 The arrays \varlink{exch2\_isWedge}{exch2_isWedge},
347 \varlink{exch2\_isEedge}{exch2_isEedge},
348 \varlink{exch2\_isSedge}{exch2_isSedge}, and
349 \varlink{exch2\_isNedge}{exch2_isNedge} are set to \code{1} if the
350 indexed tile lies on the edge of its subdomain, \code{0} if
351 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 exchange and numerical handling for the singularities at the eight
355 corners of the cube. \\
356
357
358 Arrays Indexed to Tile Number and Neighbor:
359
360 The following arrays have vectors of length \code{MAX\_NEIGHBOURS} and
361 \code{NTILES} and describe the orientations between the the tiles. \\
362
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 \code{a}. The neighbor tiles are indexed
366 \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
370 The \code{exch2\_opposingSend\_record(a,T)} array holds the
371 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 \begin{verbatim}
375 exch2_neighbourId( exch2_opposingSend_record(a,T),
376 exch2_neighbourId(a,T) ) = T
377 \end{verbatim}
378 This provides a back-reference from the neighbor tiles. \\
379
380 The arrays \varlink{exch2\_pi}{exch2_pi} and
381 \varlink{exch2\_pj}{exch2_pj} specify the transformations of indices
382 in exchanges between the neighboring tiles. These transformations are
383 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 ``folding'' of two-dimensional arrays into a three-dimensional
388 cube. \\
389
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 above, plus a vector of length \code{2} containing transformation
393 factors \code{t}. The first element of the transformation vector
394 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 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
401 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 \code{(1,0)}, since all tiles on the same subdomain are oriented
408 identically. An axis that corresponds to the orthogonal dimension
409 with the same index direction in a particular tile-neighbor
410 orientation will have \code{(0,1)}. Those with the opposite index
411 direction will have \code{(0,-1)} in order to reverse the ordering. \\
412
413 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 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 (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 (\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 \code{(-1:-32)}. \code{exch2\_oi(1,1)} is then added to this range to
448 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
453
454
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 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 height of the subdomain, the $y$ axis bounds \code{exch2\_jtlo\_c} to
479 \code{exch2\_jthi\_c} cover the height of \code{(1:32)}, plus 1 in
480 either direction to cover part of the halo. \\
481
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 \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 \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 \code{exch2\_jtlo\_c} and \code{exch2\_jthi\_c} correspond to the
499 width of \code{T}'s northern edge, expanded by one into the halo. \\
500
501
502 \subsubsection{Key Routines}
503
504 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 templates which the local Makefile converts from \code{RX} into
509 \code{RL} and \code{RS} forms. \\
510
511 The interfaces with the core model subroutines are
512 \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
523 The separate scalar and vector forms of \code{EXCH2\_RX1\_CUBE} and
524 \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 \code{EXCH2\_SEND\_RX1} and \code{EXCH2\_SEND\_RX2}, which do most of
530 the work using the variables discussed above. \\
531
532 \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