/[MITgcm]/MITgcm_contrib/llc_hires/llc_1080/code-async/SIZE.h
ViewVC logotype

Annotation of /MITgcm_contrib/llc_hires/llc_1080/code-async/SIZE.h

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


Revision 1.1 - (hide annotations) (download)
Sat Mar 2 19:31:13 2019 UTC (6 years, 5 months ago) by dimitri
Branch: MAIN
CVS Tags: HEAD
File MIME type: text/plain
updated asyncio code from Bron Nelson, which can now be use to read pickup files

1 dimitri 1.1
2     #if 0
3    
4     The somewhat weird looking format of this file is so that it can be
5     included in both C and FORTRAN routines. The general problem is that
6     FORTRAN requires that the definitions in this header file be included
7     in each *subroutine*, and thus possibly multiple times in a single
8     source file if that source file defines multiple subroutines, while C
9     demands that the actual definitions only appear once per *file*, even
10     if this header file is (accidently) #include'd multiple times.
11    
12     N.B.: Do NOT remove the parentheses in the "enum" or "PARAMETER"
13     declarations. We want the user to be able to use an expression
14     in the "#define" (e.g. "#define __sNx 64 + 8 "), and not have
15     to worry about precedence in the substituted expressions (e.g.
16     if "__sNx" is defined as 64 + 8, then "__sNx * __sNy" would not
17     behave the way you might expect, unlike "(__sNx) * (__sNy)").
18    
19     #endif
20    
21    
22    
23     #if 0
24     Define the magic constants. If you want to add (or delete) entries,
25     note that the change needs to also be made to the C "enum" and the
26     Fortran "parameter" statements.
27    
28     __sFacet : The fundamental unit size of a facet in llc. Facets
29     one and two are 1unit x 3units, facet three (the arctic
30     polar facet) is 1unit x 1unit, and facets four and five
31     are 3units x 1unit.
32    
33     __sNx, __sNy : The (sub)tile dimensions. Each must divide __sFacet.
34     Note that if sub-tiles are being used (i.e. __nSx
35     and/or __nSy are greater than one), these dimensions
36     are the extent of each sub-tile.
37    
38     __OLx, __OLy : The overlap, i.e. the number of ghost cells.
39    
40     __nSx, __nSy : If the code uses parallel threads in (addition to MPI),
41     the sub-division of an individual tile into sub-tiles.
42     An MPI process is assigned a whole tile, and each thread
43     within that process is assigned a sub-tile. Thus, each
44     MPI process will use (__nSx * __nSy) threads. These
45     values are usually both "1" (i.e. no threading).
46    
47     __nPx, __nPy : The full llc decomposition of the earth contains
48     (__sFacet/__sNx) * (__sFacet/__sNy) * 13
49     total tiles. However, some of these tiles represent
50     areas that have no water, and so MITgcm doesn't care
51     about them. (These are called "dry" tiles, or "blank"
52     tiles.) We take that sub-set of the tiles we care
53     about (i.e. the "wet" tiles; the ones we are actually
54     going to do computations on), and imagine those tiles
55     being in a 2D array, with extent (__nPx, __nPy).
56     As a practical matter, for the llc decomposition,
57     __nPy is almost always 1 (and __nPx is equal to the
58     number of "wet" tiles).
59    
60     __Nr : The number of vertical levels in the 3D fields.
61     #endif
62    
63     #if !defined(_MITGCM_MAGIC_CONSTANTS)
64     #define _MITGCM_MAGIC_CONSTANTS
65    
66     #define __sFacet 1080
67     #define __sNx 90
68     #define __sNy 90
69     #define __OLx 8
70     #define __OLy 8
71     #define __nSx 1
72     #define __nSy 1
73     #define __nPx 1872-530
74     #define __nPy 1
75     #define __Nr 90
76    
77     #endif
78    
79    
80    
81    
82     #if defined(__STDC__) || defined(__cplusplus)
83    
84     /* For C, only include this part once */
85     #if !defined(SIZE_h)
86     #define SIZE_h
87    
88     /*
89     ** We use the "enum" hack in order to force the names into the symbol
90     ** table, which "#define" by itself typically does not do.
91     */
92     enum {
93     sFacet = (__sFacet),
94     sNx = (__sNx),
95     sNy = (__sNy),
96     OLx = (__OLx),
97     OLy = (__OLy),
98     nSx = (__nSx),
99     nSy = (__nSy),
100     nPx = (__nPx),
101     nPy = (__nPy),
102     Nr = (__Nr),
103    
104     Nx = ((__sNx)*(__nSx)*(__nPx)),
105     Ny = ((__sNy)*(__nSy)*(__nPy)),
106     MAX_OLX = (OLx),
107     MAX_OLY = (OLy),
108     };
109    
110     /* end of "if !defined(SIZE_h)" */
111     #endif
112    
113    
114     #else
115    
116    
117     ! There are no pre-processor symbols that are guarenteed to be defined
118     ! for a Fortran compile, so we just assume that since this wasn't C/C++,
119     ! it must be Fortran.
120    
121     C $Header: /u/gcmpack/MITgcm_contrib/llc_hires/llc_4320/code/SIZE.h_45x45x73408,v 1.2 2016/04/14 03:51:44 dimitri Exp $
122     C $Name: $
123     C
124     CBOP
125     C !ROUTINE: SIZE.h
126     C !INTERFACE:
127     C include SIZE.h
128     C !DESCRIPTION: \bv
129     C *==========================================================*
130     C | SIZE.h Declare size of underlying computational grid.
131     C *==========================================================*
132     C | The design here support a three-dimensional model grid
133     C | with indices I,J and K. The three-dimensional domain
134     C | is comprised of nPx*nSx blocks of size sNx along one axis
135     C | nPy*nSy blocks of size sNy along another axis and one
136     C | block of size Nz along the final axis.
137     C | Blocks have overlap regions of size OLx and OLy along the
138     C | dimensions that are subdivided.
139     C *==========================================================*
140     C \ev
141     CEOP
142     C Voodoo numbers controlling data layout.
143     C sNx :: No. X points in sub-grid.
144     C sNy :: No. Y points in sub-grid.
145     C OLx :: Overlap extent in X.
146     C OLy :: Overlat extent in Y.
147     C nSx :: No. sub-grids in X.
148     C nSy :: No. sub-grids in Y.
149     C nPx :: No. of processes to use in X.
150     C nPy :: No. of processes to use in Y.
151     C Nx :: No. points in X for the total domain.
152     C Ny :: No. points in Y for the total domain.
153     C Nr :: No. points in Z for full process domain.
154    
155     INTEGER sFacet
156     INTEGER sNx
157     INTEGER sNy
158     INTEGER OLx
159     INTEGER OLy
160     INTEGER nSx
161     INTEGER nSy
162     INTEGER nPx
163     INTEGER nPy
164     INTEGER Nx
165     INTEGER Ny
166     INTEGER Nr
167    
168     PARAMETER (
169     & sFacet = (__sFacet),
170     & sNx = (__sNx),
171     & sNy = (__sNy),
172     & OLx = (__OLx),
173     & OLy = (__OLy),
174     & nSx = (__nSx),
175     & nSy = (__nSy),
176     & nPx = (__nPx),
177     & nPy = (__nPy),
178     & Nr = (__Nr) )
179    
180     PARAMETER ( Nx = (__sNx)*(__nSx)*(__nPx) )
181     PARAMETER ( Ny = (__sNy)*(__nSy)*(__nPy) )
182    
183     C MAX_OLX :: Set to the maximum overlap region size of any array
184     C MAX_OLY that will be exchanged. Controls the sizing of exch
185     C routine buffers.
186     INTEGER MAX_OLX
187     INTEGER MAX_OLY
188     PARAMETER ( MAX_OLX = (OLx),
189     & MAX_OLY = (OLy) )
190    
191    
192     #endif
193    

  ViewVC Help
Powered by ViewVC 1.1.22