C $Header: /u/gcmpack/MITgcm/pkg/cost/cost_atlantic_heat.F,v 1.11 2012/08/10 19:36:02 jmc Exp $
C $Name:  $

#include "COST_OPTIONS.h"

      subroutine COST_ATLANTIC_HEAT( myThid )
C     /==========================================================\
C     | subroutine cost_atlantic_heat                            |
C     | o This routine computes the meridional heat transport.   |
C     |   The current indices are for North Atlantic 29N         |
C     |   2x2 global setup.                                      |
C     \==========================================================/
       implicit none

C     == Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "GRID.h"
#include "DYNVARS.h"
#include "cost.h"

C     ======== Routine arguments ======================
C     myThid - Thread number for this instance of the routine.
      integer myThid

#ifdef ALLOW_COST_ATLANTIC_HEAT
C     ========= Local variables =========================
      integer    isecbeg      , isecend      , jsec
      integer    jsecbeg      , jsecend      , isec
      integer    kmaxdepth
      integer i, j, k
      integer ig, jg
      integer bi, bj
      _RL     locfc
      _RL     uVel_bar(Nr), vVel_bar(Nr), theta_bar(Nr)
      _RL     thetaUvel_bar(Nr), thetaVvel_bar(Nr)
      _RL     countU(Nr), countV(Nr), countT(Nr)
      _RL     countTU(Nr), countTV(Nr)
      _RL     petawatt
      _RL     sum
      parameter( petawatt = 1. _d +15 )

C     80W - 0W at 24N
      parameter( isecbeg = 69, isecend = 87, jsec = 28 )
cph      parameter( isecbeg = 70, isecend = 90, jsec = 30 )
      parameter( jsecbeg = 10, jsecend = 27, isec = 59 )
#ifdef ALLOW_COST_ATLANTIC_HEAT_DOMASS
      parameter ( kmaxdepth = 8 )
#else
      parameter ( kmaxdepth = 14 )
#endif

C------------------------------------------------------
C     Accumulate meridionally integrated transports
C     Note bar(V)*bar(T) not bar(VT)
C     Attention pYFaceA [m^2*gravity*rhoConst]
C------------------------------------------------------

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

        locfc = 0.0
        sum = 0.0

#define MERID_TRANSPORT

#ifdef MERID_TRANSPORT

#undef ENERGYNORM
#ifdef ENERGYNORM

        do i=1,sNx
         ig = myXGlobalLo-1+(bi-1)*sNx+i
         if ((ig .ge. isecbeg) .and. (ig .le. isecend)) then
          sum = 0.0
          do k = 1, kmaxdepth
           sum = sum
     &            + (vVel(i,j,k,bi,bj) * maskS(i,j,k,bi,bj)
     &            * drF(k))**2
          end


do locfc = locfc + sum*dxG(i,j,bi,bj) end


if end


do #else do j=1,sNy jg = myYGlobalLo-1+(bj-1)*sNy+j if (jg .eq. jsec) then do k = 1, Nr vVel_bar(k) = 0.0 thetaVvel_bar(k) = 0.0 countV(k) = 0.0 countTV(k) = 0.0 do i=1,sNx ig = myXGlobalLo-1+(bi-1)*sNx+i c if ((ig .ge. isecbeg) .and. (ig .le. isecend)) then vVel_bar(k) = vVel_bar(k) & + cMeanVVel(i,j,k,bi,bj)*dxG(i,j,bi,bj) & *maskS(i,j,k,bi,bj) thetaVvel_bar(k) = thetaVvel_bar(k) & + cMeanThetaVVel(i,j,k,bi,bj)*dxG(i,j,bi,bj) & *maskS(i,j,k,bi,bj)*maskC(i,j,k,bi,bj) countTV(k) = countTV(k) + & maskS(i,j,k,bi,bj)*maskC(i,j,k,bi,bj) countV(k) = countV(k) + & maskS(i,j,k,bi,bj) end


if enddo enddo c do k = 1, Nr #ifdef ALLOW_COST_ATLANTIC_HEAT_DOMASS if ( k .LE. kmaxdepth .AND. countV(k) .NE. 0) then sum = sum & + vVel_bar(k)*drF(k)/countV(k) end


if #else if ( k .LE. kmaxdepth .AND. countTV(k) .NE. 0) then sum = sum & + thetaVVel_bar(k)*drF(k)/countTV(k) end


if #endif end


do #endif /* ENERGYNORM */ #else cph need to change this part to go from cph \bar{u}*\bar{T} to \bar{u*T} cph (required store dir. are now in place) do i=1,sNx ig = myXGlobalLo-1+(bi-1)*sNx+i if (ig .eq. isec) then do k = 1, Nr uVel_bar(k) = 0.0 theta_bar(k) = 0.0 countT(k) = 0.0 countU(k) = 0.0 do j=1,sNy jg = myYGlobalLo-1+(bj-1)*sNy+j c if ((jg .ge. jsecbeg) .and. (jg .le. jsecend)) then uVel_bar(k) = uVel_bar(k) & + cMeanUVel(i,j,k,bi,bj) & *maskW(i,j,k,bi,bj) & *maskC(i,j,k,bi,bj)*maskC(i-1,j,k,bi,bj) theta_bar(k) = theta_bar(k) + & 0.5*( cMeanTheta(i,j,k,bi,bj) & +cMeanTheta(i-,j,k,bi,bj) ) & *maskW(i,j,k,bi,bj)*dyG(i,j,bi,bj) & *maskC(i,j,k,bi,bj)*maskC(i-1,j,k,bi,bj) countT(k) = countT(k) + maskW(i,j,k,bi,bj) & *maskC(i,j,k,bi,bj)*maskC(i-1,j,k,bi,bj) countU(k) = countU(k) + maskW(i,j,k,bi,bj) & *maskC(i,j,k,bi,bj)*maskC(i-1,j,k,bi,bj) end


if enddo enddo c do k = 1, Nr if ( k .LE. kmaxdepth .AND. & countT(k) .NE. 0 .AND. countU(k) .NE. 0) then sum = sum & + uVel_bar(k) * theta_bar(k) * drF(k) & / ( countT(k) * countU(k) ) end


if end


do #endif end


if end


do #if ( !defined (ALLOW_ECCO) || !defined (ALLOW_COST_ATLANTIC) ) #ifdef ALLOW_COST_ATLANTIC_HEAT_DOMASS objf_atl(bi,bj) = & sum*1.E-6 #else objf_atl(bi,bj) = & sum*HeatCapacity_Cp*rhoConst/petawatt #endif #endif c-- end of bi,bj loop end


do end


do #endif end