text: C $Header: /u/gcmpack/MITgcm/model/inc/GRID.h,v 1.43 2013/07/26 14:20:01 jmc Exp $
  C $Name:  $
  C
  CBOP
  C    !ROUTINE: GRID.h
  C    !INTERFACE:
  C    include GRID.h
  C    !DESCRIPTION: \bv
  C     *==========================================================*
  C     | GRID.h
  C     | o Header file defining model grid.
  C     *==========================================================*
  C     | Model grid is defined for each process by reference to
  C     | the arrays set here.
  C     | Notes
  C     | =====
  C     | The standard MITgcm convention of westmost, southern most
  C     | and upper most having the (1,1,1) index is used here.
  C     | i.e.
  C     |----------------------------------------------------------
  C     | (1)  Plan view schematic of model grid (top layer i.e. )
  C     |      ================================= ( ocean surface )
  C     |                                        ( or top of     )
  C     |                                        ( atmosphere    )
  C     |      This diagram shows the location of the model
  C     |      prognostic variables on the model grid. The "T"
  C     |      location is used for all tracers. The figure also
  C     |      shows the southern most, western most indexing
  C     |      convention that is used for all model variables.
  C     |
  C     |
  C     |             V(i=1,                     V(i=Nx,
  C     |               j=Ny+1,                    j=Ny+1,
  C     |               k=1)                       k=1)
  C     |                /|\                       /|\  "PWX"
  C     |       |---------|------------------etc..  |---- *---
  C     |       |                     |                   *  |
  C     |"PWY"*******************************etc..  **********"PWY"
  C     |       |                     |                   *  |
  C     |       |                     |                   *  |
  C     |       |                     |                   *  |
  C     |U(i=1, ==>       x           |             x     *==>U
  C     |  j=Ny,|      T(i=1,         |          T(i=Nx,  *(i=Nx+1,
  C     |  k=1) |        j=Ny,        |            j=Ny,  *  |j=Ny,
  C     |       |        k=1)         |            k=1)   *  |k=1)
  C     |
  C     |       .                     .                      .
  C     |       .                     .                      .
  C     |       .                     .                      .
  C     |       e                     e                   *  e
  C     |       t                     t                   *  t
  C     |       c                     c                   *  c
  C     |       |                     |                   *  |
  C     |       |                     |                   *  |
  C     |U(i=1, ==>       x           |             x     *  |
  C     |  j=2, |      T(i=1,         |          T(i=Nx,  *  |
  C     |  k=1) |        j=2,         |            j=2,   *  |
  C     |       |        k=1)         |            k=1)   *  |
  C     |       |                     |                   *  |
  C     |       |        /|\          |            /|\    *  |
  C     |      -----------|------------------etc..  |-----*---
  C     |       |       V(i=1,        |           V(i=Nx, *  |
  C     |       |         j=2,        |             j=2,  *  |
  C     |       |         k=1)        |             k=1)  *  |
  C     |       |                     |                   *  |
  C     |U(i=1, ==>       x         ==>U(i=2,       x     *==>U
  C     |  j=1, |      T(i=1,         |  j=1,    T(i=Nx,  *(i=Nx+1,
  C     |  k=1) |        j=1,         |  k=1)      j=1,   *  |j=1,
  C     |       |        k=1)         |            k=1)   *  |k=1)
  C     |       |                     |                   *  |
  C     |       |        /|\          |            /|\    *  |
  C     |"SB"++>|---------|------------------etc..  |-----*---
  C     |      /+\      V(i=1,                    V(i=Nx, *
  C     |       +         j=1,                      j=1,  *
  C     |       +         k=1)                      k=1)  *
  C     |     "WB"                                      "PWX"
  C     |
  C     |   N, y increasing northwards
  C     |  /|\ j increasing northwards
  C     |   |
  C     |   |
  C     |   ======>E, x increasing eastwards
  C     |             i increasing eastwards
  C     |
  C     |    i: East-west index
  C     |    j: North-south index
  C     |    k: up-down index
  C     |    U: x-velocity (m/s)
  C     |    V: y-velocity (m/s)
  C     |    T: potential temperature (oC)
  C     | "SB": Southern boundary
  C     | "WB": Western boundary
  C     |"PWX": Periodic wrap around in X.
  C     |"PWY": Periodic wrap around in Y.
  C     |----------------------------------------------------------
  C     | (2) South elevation schematic of model grid
  C     |     =======================================
  C     |     This diagram shows the location of the model
  C     |     prognostic variables on the model grid. The "T"
  C     |     location is used for all tracers. The figure also
  C     |     shows the upper most, western most indexing
  C     |     convention that is used for all model variables.
  C     |
  C     |      "WB"
  C     |       +
  C     |       +
  C     |      \+/       /|\                       /|\       .
  C     |"UB"++>|-------- | -----------------etc..  | ----*---
  C     |       |    rVel(i=1,        |        rVel(i=Nx, *  |
  C     |       |         j=1,        |             j=1,  *  |
  C     |       |         k=1)        |             k=1)  *  |
  C     |       |                     |                   *  |
  C     |U(i=1, ==>       x         ==>U(i=2,       x     *==>U
  C     |  j=1, |      T(i=1,         |  j=1,    T(i=Nx,  *(i=Nx+1,
  C     |  k=1) |        j=1,         |  k=1)      j=1,   *  |j=1,
  C     |       |        k=1)         |            k=1)   *  |k=1)
  C     |       |                     |                   *  |
  C     |       |        /|\          |            /|\    *  |
  C     |       |-------- | -----------------etc..  | ----*---
  C     |       |    rVel(i=1,        |        rVel(i=Nx, *  |
  C     |       |         j=1,        |             j=1,  *  |
  C     |       |         k=2)        |             k=2)  *  |
  C     |
  C     |       .                     .                      .
  C     |       .                     .                      .
  C     |       .                     .                      .
  C     |       e                     e                   *  e
  C     |       t                     t                   *  t
  C     |       c                     c                   *  c
  C     |       |                     |                   *  |
  C     |       |                     |                   *  |
  C     |       |                     |                   *  |
  C     |       |                     |                   *  |
  C     |       |        /|\          |            /|\    *  |
  C     |       |-------- | -----------------etc..  | ----*---
  C     |       |    rVel(i=1,        |        rVel(i=Nx, *  |
  C     |       |         j=1,        |             j=1,  *  |
  C     |       |         k=Nr)       |             k=Nr) *  |
  C     |U(i=1, ==>       x         ==>U(i=2,       x     *==>U
  C     |  j=1, |      T(i=1,         |  j=1,    T(i=Nx,  *(i=Nx+1,
  C     |  k=Nr)|        j=1,         |  k=Nr)     j=1,   *  |j=1,
  C     |       |        k=Nr)        |            k=Nr)  *  |k=Nr)
  C     |       |                     |                   *  |
  C     |"LB"++>==============================================
  C     |                                               "PWX"
  C     |
  C     | Up   increasing upwards.
  C     |/|\                                                       .
  C     | |
  C     | |
  C     | =====> E  i increasing eastwards
  C     | |         x increasing eastwards
  C     | |
  C     |\|/
  C     | Down,k increasing downwards.
  C     |
  C     | Note: r => height (m) => r increases upwards
  C     |       r => pressure (Pa) => r increases downwards
  C     |
  C     |
  C     |    i: East-west index
  C     |    j: North-south index
  C     |    k: up-down index
  C     |    U: x-velocity (m/s)
  C     | rVel: z-velocity ( units of r )
  C     |       The vertical velocity variable rVel is in units of
  C     |       "r" the vertical coordinate. r in m will give
  C     |       rVel m/s. r in Pa will give rVel Pa/s.
  C     |    T: potential temperature (oC)
  C     | "UB": Upper boundary.
  C     | "LB": Lower boundary (always solid - therefore om|w == 0)
  C     | "WB": Western boundary
  C     |"PWX": Periodic wrap around in X.
  C     |----------------------------------------------------------
  C     | (3) Views showing nomenclature and indexing
  C     |     for grid descriptor variables.
  C     |
  C     |      Fig 3a. shows the orientation, indexing and
  C     |      notation for the grid spacing terms used internally
  C     |      for the evaluation of gradient and averaging terms.
  C     |      These varaibles are set based on the model input
  C     |      parameters which define the model grid in terms of
  C     |      spacing in X, Y and Z.
  C     |
  C     |      Fig 3b. shows the orientation, indexing and
  C     |      notation for the variables that are used to define
  C     |      the model grid. These varaibles are set directly
  C     |      from the model input.
  C     |
  C     | Figure 3a
  C     | =========
  C     |       |------------------------------------
  C     |       |                       |
  C     |"PWY"********************************* etc...
  C     |       |                       |
  C     |       |                       |
  C     |       |                       |
  C     |       |                       |
  C     |       |                       |
  C     |       |                       |
  C     |       |                       |
  C     |
  C     |       .                       .
  C     |       .                       .
  C     |       .                       .
  C     |       e                       e
  C     |       t                       t
  C     |       c                       c
  C     |       |-----------v-----------|-----------v----------|-
  C     |       |                       |                      |
  C     |       |                       |                      |
  C     |       |                       |                      |
  C     |       |                       |                      |
  C     |       |                       |                      |
  C     |       u<--dxF(i=1,j=2,k=1)--->u           t          |
  C     |       |/|\       /|\          |                      |
  C     |       | |         |           |                      |
  C     |       | |         |           |                      |
  C     |       | |         |           |                      |
  C     |       |dyU(i=1,  dyC(i=1,     |                      |
  C     | ---  ---|--j=2,---|--j=2,-----------------v----------|-
  C     | /|\   | |  k=1)   |  k=1)     |          /|\         |
  C     |  |    | |         |           |          dyF(i=2,    |
  C     |  |    | |         |           |           |  j=1,    |
  C     |dyG(   |\|/       \|/          |           |  k=1)    |
  C     |   i=1,u---        t<---dxC(i=2,j=1,k=1)-->t          |
  C     |   j=1,|                       |           |          |
  C     |   k=1)|                       |           |          |
  C     |  |    |                       |           |          |
  C     |  |    |                       |           |          |
  C     | \|/   |           |<---dxV(i=2,j=1,k=1)--\|/         |
  C     |"SB"++>|___________v___________|___________v__________|_
  C     |       <--dxG(i=1,j=1,k=1)----->
  C     |      /+\                                              .
  C     |       +
  C     |       +
  C     |     "WB"
  C     |
  C     |   N, y increasing northwards
  C     |  /|\ j increasing northwards
  C     |   |
  C     |   |
  C     |   ======>E, x increasing eastwards
  C     |             i increasing eastwards
  C     |
  C     |    i: East-west index
  C     |    j: North-south index
  C     |    k: up-down index
  C     |    u: x-velocity point
  C     |    V: y-velocity point
  C     |    t: tracer point
  C     | "SB": Southern boundary
  C     | "WB": Western boundary
  C     |"PWX": Periodic wrap around in X.
  C     |"PWY": Periodic wrap around in Y.
  C     |
  C     | Figure 3b
  C     | =========
  C     |
  C     |       .                       .
  C     |       .                       .
  C     |       .                       .
  C     |       e                       e
  C     |       t                       t
  C     |       c                       c
  C     |       |-----------v-----------|-----------v--etc...
  C     |       |                       |
  C     |       |                       |
  C     |       |                       |
  C     |       |                       |
  C     |       |                       |
  C     |       u<--delX(i=1)---------->u           t
  C     |       |                       |
  C     |       |                       |
  C     |       |                       |
  C     |       |                       |
  C     |       |                       |
  C     |       |-----------v-----------------------v--etc...
  C     |       |          /|\          |
  C     |       |           |           |
  C     |       |           |           |
  C     |       |           |           |
  C     |       u        delY(j=1)      |           t
  C     |       |           |           |
  C     |       |           |           |
  C     |       |           |           |
  C     |       |           |           |
  C     |       |          \|/          |
  C     |"SB"++>|___________v___________|___________v__etc...
  C     |      /+\                                                 .
  C     |       +
  C     |       +
  C     |     "WB"
  C     |
  C     *==========================================================*
  C     \ev
  CEOP
  
  C     Macros that override/modify standard definitions
  #include "GRID_MACROS.h"
  
  C--   COMMON /GRID_RL/ RL valued grid defining variables.
  C     deepFacC  :: deep-model grid factor (fct of vertical only) for dx,dy
  C     deepFacF     at level-center (deepFacC)  and level interface (deepFacF)
  C     deepFac2C :: deep-model grid factor (fct of vertical only) for area dx*dy
  C     deepFac2F    at level-center (deepFac2C) and level interface (deepFac2F)
  C     gravitySign :: indicates the direction of gravity relative to R direction
  C                   (= -1 for R=Z (Z increases upward, -gravity direction  )
  C                   (= +1 for R=P (P increases downward, +gravity direction)
  C     rkSign     :: Vertical coordinate to vertical index orientation.
  C                   ( +1 same orientation, -1 opposite orientation )
  C     globalArea :: Domain Integrated horizontal Area [m2]
        COMMON /GRID_RL/
       &  cosFacU, cosFacV, sqCosFacU, sqCosFacV,
       &  deepFacC, deepFac2C, recip_deepFacC, recip_deepFac2C,
       &  deepFacF, deepFac2F, recip_deepFacF, recip_deepFac2F,
       &  gravitySign, rkSign, globalArea
        _RL cosFacU        (1-OLy:sNy+OLy,nSx,nSy)
        _RL cosFacV        (1-OLy:sNy+OLy,nSx,nSy)
        _RL sqCosFacU      (1-OLy:sNy+OLy,nSx,nSy)
        _RL sqCosFacV      (1-OLy:sNy+OLy,nSx,nSy)
        _RL deepFacC       (Nr)
        _RL deepFac2C      (Nr)
        _RL deepFacF       (Nr+1)
        _RL deepFac2F      (Nr+1)
        _RL recip_deepFacC (Nr)
        _RL recip_deepFac2C(Nr)
        _RL recip_deepFacF (Nr+1)
        _RL recip_deepFac2F(Nr+1)
        _RL gravitySign
        _RL rkSign
        _RL globalArea
  
  C--   COMMON /GRID_RS/ RS valued grid defining variables.
  C     dxC     :: Cell center separation in X across western cell wall (m)
  C     dxG     :: Cell face separation in X along southern cell wall (m)
  C     dxF     :: Cell face separation in X thru cell center (m)
  C     dxV     :: V-point separation in X across south-west corner of cell (m)
  C     dyC     :: Cell center separation in Y across southern cell wall (m)
  C     dyG     :: Cell face separation in Y along western cell wall (m)
  C     dyF     :: Cell face separation in Y thru cell center (m)
  C     dyU     :: U-point separation in Y across south-west corner of cell (m)
  C     drC     :: Cell center separation along Z axis ( units of r ).
  C     drF     :: Cell face separation along Z axis ( units of r ).
  C     R_low   :: base of fluid in r_unit (Depth(m) / Pressure(Pa) at top Atmos.)
  C     rLowW   :: base of fluid column in r_unit at Western  edge location.
  C     rLowS   :: base of fluid column in r_unit at Southern edge location.
  C     Ro_surf :: surface reference (at rest) position, r_unit.
  C     rSurfW  :: surface reference position at Western  edge location [r_unit].
  C     rSurfS  :: surface reference position at Southern edge location [r_unit].
  C     hFac    :: Fraction of cell in vertical which is open i.e how
  C              "lopped" a cell is (dimensionless scale factor).
  C              Note: The code needs terms like MIN(hFac,hFac(I-1))
  C                    On some platforms it may be better to precompute
  C                    hFacW, hFacS, ... here than do MIN on the fly.
  C     maskInC :: Cell Center 2-D Interior mask (i.e., zero beyond OB)
  C     maskInW :: West  face 2-D Interior mask (i.e., zero on and beyond OB)
  C     maskInS :: South face 2-D Interior mask (i.e., zero on and beyond OB)
  C     maskC   :: cell Center land mask
  C     maskW   :: West face land mask
  C     maskS   :: South face land mask
  C     recip_dxC   :: Reciprocal of dxC
  C     recip_dxG   :: Reciprocal of dxG
  C     recip_dxF   :: Reciprocal of dxF
  C     recip_dxV   :: Reciprocal of dxV
  C     recip_dyC   :: Reciprocal of dxC
  C     recip_dyG   :: Reciprocal of dyG
  C     recip_dyF   :: Reciprocal of dyF
  C     recip_dyU   :: Reciprocal of dyU
  C     recip_drC   :: Reciprocal of drC
  C     recip_drF   :: Reciprocal of drF
  C     recip_Rcol  :: Inverse of cell center column thickness (1/r_unit)
  C     recip_hFacC :: Inverse of cell open-depth f[X,Y,Z] ( dimensionless ).
  C     recip_hFacW    rhFacC center, rhFacW west, rhFacS south.
  C     recip_hFacS    Note: This is precomputed here because it involves division.
  C     xC        :: X-coordinate of cell center f[X,Y]. The units of xc, yc
  C                  depend on the grid. They are not used in differencing or
  C                  averaging but are just a convient quantity for I/O,
  C                  diagnostics etc.. As such xc is in m for cartesian
  C                  coordinates but degrees for spherical polar.
  C     yC        :: Y-coordinate of center of cell f[X,Y].
  C     yG        :: Y-coordinate of corner of cell ( c-grid vorticity point) f[X,Y].
  C     rA        :: R-face are f[X,Y] ( m^2 ).
  C                  Note: In a cartesian framework rA is simply dx*dy,
  C                      however we use rA to allow for non-globally
  C                      orthogonal coordinate frames (with appropriate
  C                      metric terms).
  C     rC        :: R-coordinate of center of cell f[Z] (units of r).
  C     rF        :: R-coordinate of face of cell f[Z] (units of r).
  C - *HybSigm* - :: Hybrid-Sigma vert. Coord coefficients
  C     aHybSigmF    at level-interface (*HybSigmF) and level-center (*HybSigmC)
  C     aHybSigmC    aHybSigm* = constant r part, bHybSigm* = sigma part, such as
  C     bHybSigmF    r(ij,k,t) = rLow(ij) + aHybSigm(k)*[rF(1)-rF(Nr+1)]
  C     bHybSigmC              + bHybSigm(k)*[eta(ij,t)+Ro_surf(ij) - rLow(ij)]
  C     dAHybSigF :: vertical increment of Hybrid-Sigma coefficient: constant r part,
  C     dAHybSigC    between interface (dAHybSigF) and between center (dAHybSigC)
  C     dBHybSigF :: vertical increment of Hybrid-Sigma coefficient: sigma part,
  C     dBHybSigC    between interface (dBHybSigF) and between center (dBHybSigC)
  C     tanPhiAtU :: tan of the latitude at U point. Used for spherical polar
  C                  metric term in U equation.
  C     tanPhiAtV :: tan of the latitude at V point. Used for spherical polar
  C                  metric term in V equation.
  C     angleCosC :: cosine of grid orientation angle relative to Geographic direction
  C               at cell center: alpha=(Eastward_dir,grid_uVel_dir)=(North_d,vVel_d)
  C     angleSinC :: sine   of grid orientation angle relative to Geographic direction
  C               at cell center: alpha=(Eastward_dir,grid_uVel_dir)=(North_d,vVel_d)
  C     u2zonDir  :: cosine of grid orientation angle at U point location
  C     v2zonDir  :: minus sine of  orientation angle at V point location
  C     fCori     :: Coriolis parameter at grid Center point
  C     fCoriG    :: Coriolis parameter at grid Corner point
  C     fCoriCos  :: Coriolis Cos(phi) parameter at grid Center point (for NH)
  
        COMMON /GRID_RS/
       &  dxC,dxF,dxG,dxV,dyC,dyF,dyG,dyU,
       &  R_low, rLowW, rLowS,
       &  Ro_surf, rSurfW, rSurfS,
       &  hFacC, hFacW, hFacS,
       &  recip_dxC,recip_dxF,recip_dxG,recip_dxV,
       &  recip_dyC,recip_dyF,recip_dyG,recip_dyU,
       &  recip_Rcol,
       &  recip_hFacC,recip_hFacW,recip_hFacS,
       &  xC,yC,rA,rAw,rAs,rAz,xG,yG,
       &  maskInC, maskInW, maskInS,
       &  maskC, maskW, maskS,
       &  recip_rA,recip_rAw,recip_rAs,recip_rAz,
       &  drC, drF, recip_drC, recip_drF, rC, rF,
       &  aHybSigmF, bHybSigmF, aHybSigmC, bHybSigmC,
       &  dAHybSigF, dBHybSigF, dBHybSigC, dAHybSigC,
       &  tanPhiAtU, tanPhiAtV,
       &  angleCosC, angleSinC, u2zonDir, v2zonDir,
       &  fCori, fCoriG, fCoriCos
        _RS dxC            (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS dxF            (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS dxG            (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS dxV            (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS dyC            (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS dyF            (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS dyG            (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS dyU            (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS R_low          (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS rLowW          (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS rLowS          (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS Ro_surf        (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS rSurfW         (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS rSurfS         (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS hFacC          (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
        _RS hFacW          (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
        _RS hFacS          (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
        _RS recip_dxC      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS recip_dxF      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS recip_dxG      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS recip_dxV      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS recip_dyC      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS recip_dyF      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS recip_dyG      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS recip_dyU      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS recip_Rcol     (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS recip_hFacC    (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
        _RS recip_hFacW    (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
        _RS recip_hFacS    (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
        _RS xC             (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS xG             (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS yC             (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS yG             (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS rA             (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS rAw            (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS rAs            (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS rAz            (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS recip_rA       (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS recip_rAw      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS recip_rAs      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS recip_rAz      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS maskInC        (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS maskInW        (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS maskInS        (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS maskC          (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
        _RS maskW          (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
        _RS maskS          (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
        _RS drC            (Nr+1)
        _RS drF            (Nr)
        _RS recip_drC      (Nr+1)
        _RS recip_drF      (Nr)
        _RS rC             (Nr)
        _RS rF             (Nr+1)
        _RS aHybSigmF      (Nr+1)
        _RS bHybSigmF      (Nr+1)
        _RS aHybSigmC      (Nr)
        _RS bHybSigmC      (Nr)
        _RS dAHybSigF      (Nr)
        _RS dBHybSigF      (Nr)
        _RS dBHybSigC      (Nr+1)
        _RS dAHybSigC      (Nr+1)
        _RS tanPhiAtU      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS tanPhiAtV      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS angleCosC      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS angleSinC      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS u2zonDir       (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS v2zonDir       (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS fCori          (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS fCoriG         (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        _RS fCoriCos       (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
  
  #ifdef ALLOW_DEPTH_CONTROL
  C--   COMMON /GRID_DEPTH_CTRL/ grid defining variables for Depth Control code.
  C     xx_r_low  :: in TAF-sense active replacement of R_low
        COMMON /GRID_DEPTH_CTRL/
       &  xx_r_low
        _RL xx_r_low       (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
  #endif /* ALLOW_DEPTH_CONTROL */
  
  C--   COMMON /GRID_I/ INTEGER valued grid defining variables.
  C     kSurfC  :: vertical index of the surface tracer cell
  C     kSurfW  :: vertical index of the surface U point
  C     kSurfS  :: vertical index of the surface V point
  C     kLowC   :: index of the r-lowest "wet cell" (2D)
  C IMPORTANT: kSurfC,W,S = Nr+1 and kLowC = 0 where the fluid column
  C            is empty (continent)
        COMMON /GRID_I/
       &  kSurfC, kSurfW, kSurfS,
       &  kLowC
        INTEGER kSurfC(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        INTEGER kSurfW(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        INTEGER kSurfS(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
        INTEGER kLowC (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
  
  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
  