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