C $Header: /u/gcmpack/MITgcm/pkg/layers/LAYERS.h,v 1.6 2010/12/16 00:56:48 dfer Exp $
C $Name:  $

#ifdef ALLOW_LAYERS

C--   Header for LAYERS package. By Ryan Abernathey.
C--   For computing volume fluxes in isopyncal layers

C --  Parms
      LOGICAL layers_MNC, layers_MDSIO, useBOLUS
      INTEGER LAYER_nb
      _RL layers_taveFreq, layers_diagFreq
      COMMON /LAYERS_PARMS/ layers_MNC, layers_MDSIO,
     &                      layers_taveFreq, layers_diagFreq,
     &                      LAYER_nb, useBOLUS

C     3D Layers fields. The vertical dimension in these fields is nLayers,
C     i.e. the isopycnal coordinate.
C
C      layers_UFlux :: U integrated over layer (m^2/s)
C      layers_VFlux :: V integrated over layer (m^2/s)
C      layers_HU    :: Layer thickness at the U point (m)
C      layers_HV    :: Layer thickness at the V point (m)

#ifdef LAYERS_UFLUX
      _RL layers_UFlux(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nlayers,nSx,nSy)
#ifdef LAYERS_THICKNESS
      _RL layers_HU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nlayers,nSx,nSy)
#endif /* LAYERS_THICKNESS */
      COMMON /LAYERS_U/ layers_UFlux
#ifdef LAYERS_THICKNESS
     &  , layers_HU
#endif /* LAYERS_THICKNESS */
#endif /* LAYERS_UFLUX */

#ifdef LAYERS_VFLUX
      _RL layers_VFlux(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nlayers,nSx,nSy)
#ifdef LAYERS_THICKNESS
      _RL layers_HV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nlayers,nSx,nSy)
#endif /* LAYERS_THICKNESS */
      COMMON /LAYERS_V/ layers_VFlux
#ifdef LAYERS_THICKNESS
     &  , layers_HV
#endif /* LAYERS_THICKNESS */
#endif /* LAYERS_VFLUX */

#ifdef ALLOW_TIMEAVE
C-- The same variables, time-averaged

C     Keep track of time
      _RL layers_TimeAve(nSx,nSy)
      COMMON /LAYERS_TAVE/ layers_TimeAve

#ifdef LAYERS_UFLUX
      _RL layers_UFlux_T(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nlayers,nSx,nSy)
#ifdef LAYERS_THICKNESS
      _RL layers_HU_T(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nlayers,nSx,nSy)
#endif /* LAYERS_THICKNESS */
      COMMON /LAYERS_U_TAVE/ layers_UFlux_T
#ifdef LAYERS_THICKNESS
     &  , layers_HU_T
#endif /* LAYERS_THICKNESS */
#endif /* LAYERS_UFLUX */

#ifdef LAYERS_VFLUX
      _RL layers_VFlux_T(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nlayers,nSx,nSy)
#ifdef LAYERS_THICKNESS
      _RL layers_HV_T(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nlayers,nSx,nSy)
#endif /* LAYERS_THICKNESS */
      COMMON /LAYERS_V_TAVE/ layers_VFlux_T
#ifdef LAYERS_THICKNESS
     &  , layers_HV_T
#endif /* LAYERS_THICKNESS */
#endif /* LAYERS_VFLUX */

#endif /* ALLOW_TIMEAVE */

C     Isopycnal grid parameters:
C      layers_G :: boundaries of isopycnal layers
C      dZZf     :: height of fine grid cells
C      NZZ      :: the number of levels to use in the fine grid
C      MapIndex :: indices for mapping ZZ to Z
C      MapFact  :: factors for interpolating T(Z) to T(ZZ)

      _RL layers_G(nLayers+1)
      _RL dZZf(FineGridMax)
      INTEGER MapIndex(FineGridMax), CellIndex(FineGridMax)
      _RL MapFact(FineGridMax)
      INTEGER NZZ
      COMMON /LAYERS_VERT_GRID_I/
     &      NZZ, MapIndex, CellIndex
      COMMON /LAYERS_VERT_GRID_R/
     &      layers_G, MapFact, dZZf


#endif /* ALLOW_LAYERS */