C $Header: /u/gcmpack/MITgcm/pkg/ebm/ebm_area_t.F,v 1.3 2004/05/21 21:45:35 heimbach Exp $
C $Name:  $

#include "EBM_OPTIONS.h"

      SUBROUTINE EBM_AREA_T( myTime, myIter, myThid )
C     |==========================================================|
C     | S/R CALCULATE ZONAL MEAN TEMPERATURE                     |
C     |==========================================================|

      IMPLICIT NONE

C     === Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "FFIELDS.h"
#include "DYNVARS.h"
#include "GRID.h"
#ifdef ALLOW_EBM
# include "EBM.h"
#endif
#ifdef ALLOW_AUTODIFF_TAMC
# include "tamc.h"
# include "tamc_keys.h"
#endif

C     === Routine arguments ===
C     myThid - Instance number for this innvocation 
      INTEGER myThid
      INTEGER myIter
      _RL myTime

CEndOfInterface
C     == Local variables ==
C     I, J, K - Loop counters

#ifdef ALLOW_EBM

      INTEGER iMin, iMax, jMin, jMax
      INTEGER i, j, k, bi, bj
      _RL TmlS_tile(nSx, nSy)
      _RL TmlN_tile(nSx, nSy)
      _RL TtS_tile(nSx, nSy)
      _RL TtN_tile(nSx, nSy)
      _RL CountmlS_tile(nSx, nSy)
      _RL CountmlN_tile(nSx, nSy)
      _RL CounttS_tile(nSx, nSy)
      _RL CounttN_tile(nSx, nSy)
      _RL CountmlS
      _RL CountmlN
      _RL CounttS
      _RL CounttN

C--   Top layer only
      k = 1

      TmlS = 0.0
      CountmlS = 0.0
      TmlN = 0.0
      CountmlN = 0.0
      TtS = 0.0
      CounttS = 0.0
      TtN = 0.0
      CounttN = 0.0

      DO bj=myByLo(myThid),myByHi(myThid)
       DO bi=myBxLo(myThid),myBxHi(myThid)

          TmlS_tile(bi,bj) = 0.
          TmlN_tile(bi,bj) = 0.
          TtS_tile(bi,bj) = 0.
          TtN_tile(bi,bj) = 0.
          CountmlS_tile(bi,bj) = 0.
          CountmlN_tile(bi,bj) = 0.
          CounttS_tile(bi,bj) = 0.
          CounttN_tile(bi,bj) = 0.
          
C--   Calculate sum of temperatures over each tile
        DO j = 1,sNy
         DO i = 1, sNx
          IF ( yC(i,j,bi,bj) .GE. -lat(3) .AND. 
     &         yC(i,j,bi,bj) .LE. -lat(2)) THEN
            TmlS_tile(bi,bj) = TmlS_tile(bi,bj) + 
     &           theta(i,j,k,bi,bj)
            CountmlS_tile(bi,bj) = CountmlS_tile(bi,bj) + 
     &           maskC(i,j,k,bi,bj)
          ELSEIF ( yC(i,j,bi,bj) .GT. -lat(2) .AND. 
     &       yC(i,j,bi,bj) .LT. -lat(1)) THEN 
            TtS_tile(bi,bj) = TtS_tile(bi,bj) + 
     &           theta(i,j,k,bi,bj)
            CounttS_tile(bi,bj) = CounttS_tile(bi,bj) + 
     &           maskC(i,j,k,bi,bj)
          ELSEIF ( yC(i,j,bi,bj) .GT. lat(1) .AND. 
     &       yC(i,j,bi,bj) .LT. lat(2)) THEN
            TtN_tile(bi,bj) = TtN_tile(bi,bj) + 
     &           theta(i,j,k,bi,bj)
            CounttN_tile(bi,bj) = CounttN_tile(bi,bj) + 
     &           maskC(i,j,k,bi,bj)
          ELSEIF ( yC(i,j,bi,bj) .GE. lat(2) .AND. 
     &       yC(i,j,bi,bj) .LT. lat(3)) THEN
             TmlN_tile(bi,bj) = TmlN_tile(bi,bj) + 
     &           theta(i,j,k,bi,bj)
            CountmlN_tile(bi,bj) = CountmlN_tile(bi,bj) + 
     &           maskC(i,j,k,bi,bj)
         ENDIF
            
         ENDDO
        ENDDO

C--   Sum over the tiles
        TmlS = TmlS + TmlS_tile(bi,bj)
        CountmlS = CountmlS + CountmlS_tile(bi,bj)
        TmlN = TmlN + TmlN_tile(bi,bj)
        CountmlN = CountmlN + CountmlN_tile(bi,bj)
        TtS = TtS + TtS_tile(bi,bj)
        CounttS = CounttS + CounttS_tile(bi,bj)
        TtN = TtN + TtN_tile(bi,bj)
        CounttN = CounttN + CounttN_tile(bi,bj)
        
       ENDDO
      ENDDO

      _GLOBAL_SUM_R8( TmlS, myThid )
      _GLOBAL_SUM_R8( TmlN, myThid )
      _GLOBAL_SUM_R8( TtS, myThid )
      _GLOBAL_SUM_R8( TtN, myThid )
c
      _GLOBAL_SUM_R8( CountmlS, myThid )
      _GLOBAL_SUM_R8( CountmlN, myThid )
      _GLOBAL_SUM_R8( CounttS, myThid )
      _GLOBAL_SUM_R8( CounttN, myThid )

#ifdef ALLOW_AUTODIFF_TAMC
CADJ STORE CountmlS = comlev1, key = ikey_dynamics
CADJ STORE CountmlN = comlev1, key = ikey_dynamics
CADJ STORE CounttS  = comlev1, key = ikey_dynamics
CADJ STORE CounttN  = comlev1, key = ikey_dynamics
#endif
      if ( CountmlS .NE. 0.) TmlS = TmlS/CountmlS + t_mlt
      if ( CountmlN .NE. 0.) TmlN = TmlN/CountmlN + t_mlt
      if ( CounttS .NE. 0.) TtS = TtS/CounttS + t_mlt
      if ( CounttN .NE. 0.) TtN = TtN/CounttN + t_mlt

#endif /* ALLOW_EBM */

      RETURN
      END