! source file: /usr/local/models/UVic_ESCM/2.9/source/mom/xbt.h
!====================== include file "xbt.h" ===========================

!     Each XBT station is located at latitude "xbtlat" and longitude
!     "xbtlon". Data is collected at each grid point from the first
!     level down through the nearest model level corresponding to a
!     depth of "xbtdpt" cm. Actually, all coordinates are converted to
!     the nearest model temperature grid point.

!     All basic quantities as well as all terms in the momentum,
!     temperature, and salinity equations are averaged over the time
!     period specified by "xbtint".

!     The maximum number of XBTs may be increased by changing parameter
!     "maxxbt" below.

!     inputs:

!     maxxbt  = maximum number of XBTs allowed.
!     kmxbt   = maximum number of levels from surface downward (<=km)
!               set kmxbt  < km to save space
!     xbtlat  = real latitude of XBTs in degrees
!     xbtlon  = real longitude of XBTs in degrees
!     xbtdpt  = real depths of XBTs in cm
!     items   = number of items in the XBT
!     xname   = character*12 names of XBT quantities

!     outputs:

!     numxbt  = actual number of XBTs used
!     nxbtts  = current number of time steps in accumulated XTB data

!     ixbt    = longitude index of nearest model temperature grid point
!               corresponding to "xbtlon"
!     jxbt    = latitude index of nearest model temperature grid point
!               corresponding to "xbtlat"
!     kxbt    = depth index of nearest model temperature grid point
!               corresponding to "xbtdpt"
!     nsxbt   = starting number for the XBTs on each latitude
!     nexbt   = ending number for the XBTs on each latitude

!     txbt    = accumulator array for time rate of change of
!                tracers. the total time rate of change
!                is broken down into components as follows:
!                the form is d( )/dt = terms (2) ... (10) where each
!                term has the units of "tracer units/sec" using
!                schematic terms for illustration.
!                (1)  = total time rate of change for the tracer
!                (2)  = change due to zonal nonlinear term (UT)x
!                (3)  = change due to meridional nonlinear term (VT)y
!                (4)  = change due to vertical nonlinear term (WT)z
!                (5)  = change due to zonal diffusion: Ah*Txx
!                (6)  = change due to meridional diffusion: Ah*Tyy
!                (7)  = change due to vertical diffusion:  kappa_h*Tzz
!                (8)  = change due to source term
!                (9)  = change due to explicit convection
!                (10) = change due to filtering
!     the nonlinear terms can be broken into two parts: advection and a
!     continuity part: The physically meaningful part is advection.
!     eg: Zonal advection of tracer "A" is -U(A)x = A(Ux) - (UA)x
!                (11) = zonal advection U(Ax)
!                (12) = meridional advection V(Ay)
!                (13) = vertical advection W(Az)
!                (14) = change of tracer variance
!                (15) = average tracer within volume (tracer units)
!     uxbt    = accumulator array for time rate of change of
!                momentum. the total time rate of change
!                is broken down into components as follows:
!                the form is d( )/dt = terms (2) ... (13) where each
!                term has the units of "cm/sec**2" and "Q" is the
!                momentum component {zonal or meridional} using
!                schematic terms for illustration.
!                (1)  = total time rate of change for the momentum
!                (2)  = change due to the pressure gradient: grad_p
!                       without the surface pressure gradients
!                       (i.e., for computing the internal modes)
!                (3)  = change due to zonal nonlinear term: (UQ)x
!                (4)  = change due to meridional nonlinear term: (VQ)y
!                (5)  = change due to vertical nonlinear term: (wQ)z
!                (6)  = change due to zonal viscosity: Am*Qxx
!                (7)  = change due to meridional viscosity: Am*Qyy
!                (8)  = change due to vertical viscosity: kappa_m*Qzz
!                (9)  = change due to metric terms
!                (10) = change due to coriolis terms: fQ
!                (11) = change due to source terms
!                (12) = change due to surface pressure gradient
!                       this is obtained after solving the external mode
!                       in the stream function technique. It is solved
!                       directly from the elliptic equation for the
!                       prognostic surface pressure technique
!                (13) = change due to metric advection
!     the nonlinear terms can be broken into two parts: advection and a
!     continuity part: The physically meaningful part is advection.
!     eg: Zonal advection of vel component "Q" is -U(Q)x = Q(U)x - (UQ)x
!                (14) = zonal advection U(Qx)
!                (15) = meridional advection V(Qy)
!                (16) = vertical advection W(Qz)
!                (17) = average velocity component
!     xbtw    = accumulator array for vertical velocity. (cm/sec)
!               this is the average of adv_vbu at top and bottom of cell
!     txbtsf  = accumulator array for tracer surface flux terms.
!                tracer (#1,#2) units = (cal/cm**2/sec, gm/cm**2/sec)
!     uxbtsf  = accumulator array for wind stress terms. (dynes/cm**2)

!     ntxbt   = number of terms for tracers
!     nuxbt   = number of terms for velocity

      integer maxxbt, kmxbt, ntxbt, nuxbt
      parameter (maxxbt=3, kmxbt=4)
      parameter (ntxbt=15, nuxbt=17)

      integer nxbtts, numxbt, nsxbt, nexbt, ixbt, jxbt, kxbt
      common /cxbt_i/ nxbtts, numxbt, nsxbt(jmt), nexbt(jmt)
      common /cxbt_i/ ixbt(maxxbt), jxbt(maxxbt), kxbt(maxxbt)

      character(12) :: xnamet, xnameu, xnamex
      common /cxbt_c/ xnamet(ntxbt), xnameu(nuxbt,2), xnamex(4)

      real xbtlat, xbtlon, xbtdpt, txbt, txbtsf, uxbt, uxbtsf, xbtw
      common /cxbt_r/ xbtlat(maxxbt), xbtlon(maxxbt), xbtdpt(maxxbt)
      common /cxbt_r/ txbt(kmxbt,ntxbt,nt,maxxbt), txbtsf(nt,maxxbt)
      common /cxbt_r/ uxbt(kmxbt,nuxbt,2,maxxbt), uxbtsf(2,maxxbt)
      common /cxbt_r/ xbtw(kmxbt,maxxbt)