C $Header: /u/gcmpack/MITgcm/pkg/ebm/ebm_zonalmean.F,v 1.6 2011/09/27 23:43:36 jmc Exp $
C $Name: $
#include "EBM_OPTIONS.h"
CBOP 0
C !ROUTINE: EBM_ZONALMEAN
C !INTERFACE:
SUBROUTINE EBM_ZONALMEAN( myTime, myIter, myThid )
C !DESCRIPTION:
C *==========================================================*
C | S/R CALCULATE ZONAL MEAN TEMPERATURE
C *==========================================================*
C !USES:
IMPLICIT NONE
C === Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "GRID.h"
#include "DYNVARS.h"
#include "FFIELDS.h"
#ifdef ALLOW_EBM
# include "EBM.h"
#endif
#ifdef ALLOW_AUTODIFF_TAMC
# include "tamc.h"
# include "tamc_keys.h"
#endif
C !INPUT PARAMETERS:
C === Routine arguments ===
C myThid :: my Thread Id number
_RL myTime
INTEGER myIter
INTEGER myThid
CEOP
#ifdef ALLOW_EBM
C !LOCAL VARIABLES:
C i, j, k :: Loop counters
INTEGER i, j, k, bi, bj
INTEGER jg
_RL tileSumMask(nSx,nSy)
_RL tileSumSST (nSx,nSy)
_RL locSumMask(Ny)
_RL locSumSST (Ny)
C-- Top layer only
k = 1
C-- Calculate the zonal mean
DO jg = 1,Ny
DO bj=myByLo(myThid),myByHi(myThid)
DO bi=myBxLo(myThid),myBxHi(myThid)
tileSumMask(bi,bj) = 0.
tileSumSST (bi,bj) = 0.
j = jg + 1 - myYGlobalLo - (bj-1)*sNy
IF ( j.GE.1 .AND. j.LE.sNy ) THEN
DO i = 1,sNx
tileSumMask(bi,bj) = tileSumMask(bi,bj)
& + maskC(i,j,k,bi,bj)
tileSumSST (bi,bj) = tileSumSST (bi,bj)
& + maskC(i,j,k,bi,bj)*theta(i,j,k,bi,bj)
ENDDO
ENDIF
ENDDO
ENDDO
CALL GLOBAL_SUM_TILE_RL( tileSumMask, locSumMask(jg), myThid )
CALL GLOBAL_SUM_TILE_RL( tileSumSST, locSumSST(jg), myThid )
ENDDO
#ifdef ALLOW_AUTODIFF_TAMC
CADJ STORE CountX = comlev1, key = ikey_dynamics
#endif
_BEGIN_MASTER(myThid)
DO bj=1,nSy
DO j=1-OLy,sNy+OLy
jg = myYGlobalLo + j-1 + (bj-1)*sNy
C cyclic domain in Y:
c jg = 1 + MOD( jg-1+Ny, Ny)
C closed domain in Y:
jg = MAX(MIN(jg,Ny),1)
CountX(j,bj) = locSumMask(jg)
ZonalMeanSST(j,bj) = locSumSST(jg)
IF ( CountX(j,bj).GT.0. _d 0 ) THEN
ZonalMeanSST(j,bj) = ZonalMeanSST(j,bj)/CountX(j,bj)
ENDIF
ENDDO
ENDDO
_END_MASTER(myThid)
_BARRIER
IF ( tauThetaZonRelax .NE. 0. _d 0 ) THEN
C- replace SST with ZonalMeanSST for relaxation towards Zonal-Mean value
DO bj=myByLo(myThid),myByHi(myThid)
DO bi=myBxLo(myThid),myBxHi(myThid)
DO j = 1-OLy, sNy+OLy
DO i = 1-OLx, sNx+OLx
SST(i,j,bi,bj) = ZonalMeanSST(j,bj)
ENDDO
ENDDO
ENDDO
ENDDO
c _EXCH_XY_RS( SST, myThid )
ENDIF
#endif /* ALLOW_EBM */
RETURN
END