Skip to content
This repository has been archived by the owner on Apr 18, 2018. It is now read-only.

Latest commit

 

History

History
137 lines (112 loc) · 8.01 KB

horiz-grid.rst

File metadata and controls

137 lines (112 loc) · 8.01 KB

Horizontal grid

The model domain is decomposed into tiles and within each tile a quasi-regular grid is used. A tile is the basic unit of domain decomposition for parallelization but may be used whether parallelized or not; see section [sec:domain_decomposition] for more details. Although the tiles may be patched together in an unstructured manner (i.e. irregular or non-tessilating pattern), the interior of tiles is a structured grid of quadrilateral cells. The horizontal coordinate system is orthogonal curvilinear meaning we can not necessarily treat the two horizontal directions as separable. Instead, each cell in the horizontal grid is described by the length of it’s sides and it’s area.

The grid information is quite general and describes any of the available coordinates systems, cartesian, spherical-polar or curvilinear. All that is necessary to distinguish between the coordinate systems is to initialize the grid data (descriptors) appropriately.

In the following, we refer to the orientation of quantities on the computational grid using geographic terminology such as points of the compass. This is purely for convenience but should not be confused with the actual geographic orientation of model quantities.

hgrid-abcd (a) shows the tracer cell (synonymous with the continuity cell). The length of the southern edge, Δxg, western edge, Δyg and surface area, Ac, presented in the vertical are stored in arrays dxG, dyG and rA. The “g” suffix indicates that the lengths are along the defining grid boundaries. The “c” suffix associates the quantity with the cell centers. The quantities are staggered in space and the indexing is such that dxG(i,j) is positioned to the south of rA(i,j) and dyG(i,j) positioned to the west.

hgrid-abcd (b) shows the vorticity cell. The length of the southern edge, Δxc, western edge, Δyc and surface area, Aζ, presented in the vertical are stored in arrays dxC, dyC and rAz. The “z” suffix indicates that the lengths are measured between the cell centers and the “ζ” suffix associates points with the vorticity points. The quantities are staggered in space and the indexing is such that dxC(i,j) is positioned to the north of rAz(i,j) and dyC(i,j) positioned to the east.

hgrid-abcd (c) shows the “u” or western (w) cell. The length of the southern edge, Δxv, eastern edge, Δyf and surface area, Aw, presented in the vertical are stored in arrays dxV, dyF and rAw. The “v” suffix indicates that the length is measured between the v-points, the “f” suffix indicates that the length is measured between the (tracer) cell faces and the “w” suffix associates points with the u-points (w stands for west). The quantities are staggered in space and the indexing is such that dxV(i,j) is positioned to the south of rAw(i,j) and dyF(i,j) positioned to the east.

hgrid-abcd (d) shows the “v” or southern (s) cell. The length of the northern edge, Δxf, western edge, Δyu and surface area, As, presented in the vertical are stored in arrays dxF, dyU and rAs. The “u” suffix indicates that the length is measured between the u-points, the “f” suffix indicates that the length is measured between the (tracer) cell faces and the “s” suffix associates points with the v-points (s stands for south). The quantities are staggered in space and the indexing is such that dxF(i,j) is positioned to the north of rAs(i,j) and dyU(i,j) positioned to the west.

S/R INI_CARTESIAN_GRID <model/src/ini_cartesian_grid.F> , INI_SPHERICAL_POLAR_GRID <model/src/ini_spherical_polar_grid.F> , INI_CURVILINEAR_GRID <model/src/ini_curvilinear_grid.F>

Ac, Aζ, Aw, As : rA, rAz, rAw, rAs ( GRID.h <model/inc/GRID.h> )
Δxg, Δyg : dxG, dyG ( GRID.h <model/inc/GRID.h> )
Δxc, Δyc : dxC, dyC ( GRID.h <model/inc/GRID.h> )
Δxf, Δyf : dxF, dyF ( GRID.h <model/inc/GRID.h> )
Δxv, Δyu : dxV, dyU ( GRID.h <model/inc/GRID.h> )

Reciprocals of horizontal grid descriptors

Lengths and areas appear in the denominator of expressions as much as in the numerator. For efficiency and portability, we pre-calculate the reciprocal of the horizontal grid quantities so that in-line divisions can be avoided.

For each grid descriptor (array) there is a reciprocal named using the prefix recip_. This doubles the amount of storage in GRID.h <model/inc/GRID.h> but they are all only 2-D descriptors.

S/R INI_MASKS_ETC <model/src/ini_masks_etc.F>

Ac − 1, Aζ − 1, Aw − 1, As − 1 : recip_rA, recip_rAz, recip_rAw, recip_rAs ( GRID.h <model/inc/GRID.h> )
Δxg − 1, Δyg − 1 : recip_dxG, recip_dyG ( GRID.h <model/inc/GRID.h> )
Δxc − 1, Δyc − 1 : recip_dxC, recip_dyC ( GRID.h <model/inc/GRID.h> )
Δxf − 1, Δyf − 1 : recip_dxF, recip_dyF ( GRID.h <model/inc/GRID.h> )
Δxv − 1, Δyu − 1 : recip_dxV, recip_dyU ( GRID.h <model/inc/GRID.h> )

Cartesian coordinates

Cartesian coordinates are selected when the logical flag usingCartesianGrid in namelist PARM04 is set to true. The grid spacing can be set to uniform via scalars dXspacing and dYspacing in namelist PARM04 or to variable resolution by the vectors DELX and DELY. Units are normally meters. Non-dimensional coordinates can be used by interpreting the gravitational constant as the Rayleigh number.

Spherical-polar coordinates

Spherical coordinates are selected when the logical flag usingSphericalPolarGrid in namelist PARM04 is set to true. The grid spacing can be set to uniform via scalars dXspacing and dYspacing in namelist PARM04 or to variable resolution by the vectors DELX and DELY. Units of these namelist variables are alway degrees. The horizontal grid descriptors are calculated from these namelist variables have units of meters.

Curvilinear coordinates

Curvilinear coordinates are selected when the logical flag usingCurvilinearGrid in namelist PARM04 is set to true. The grid spacing can not be set via the namelist. Instead, the grid descriptors are read from data files, one for each descriptor. As for other grids, the horizontal grid descriptors have units of meters.