C $Header: /u/gcmpack/MITgcm/pkg/ecco/cost_averagesfields.F,v 1.56 2015/11/24 21:26:31 gforget Exp $
C $Name: $
#include "ECCO_OPTIONS.h"
#ifdef ALLOW_OBCS
# include "OBCS_OPTIONS.h"
#endif
#ifdef ALLOW_SEAICE
# include "SEAICE_OPTIONS.h"
#endif
#ifdef ALLOW_CTRL
# include "CTRL_OPTIONS.h"
#endif
subroutine COST_AVERAGESFIELDS( mytime, mythid )
c ==================================================================
c SUBROUTINE cost_averagesfields
c ==================================================================
c
c o Compute time averages of etaN, theta, and salt. The counters
c are explicitly calculated instead of being incremented. This
c reduces dependencies. The latter is useful for the adjoint code
c generation.
c
c started: Christian Eckert eckert@mit.edu 30-Jun-1999
c
c changed: Christian Eckert eckert@mit.edu 24-Feb-2000
c
c - Restructured the code in order to create a package
c for the MITgcmUV.
c
c ==================================================================
c SUBROUTINE cost_averagesfields
c ==================================================================
implicit none
c == global variables ==
#include "EEPARAMS.h"
#include "SIZE.h"
#include "PARAMS.h"
#include "DYNVARS.h"
#include "FFIELDS.h"
#include "GRID.h"
#include "CG2D.h"
#ifndef ECCO_CTRL_DEPRECATED
# include "ecco.h"
#else
# include "ecco_cost.h"
# ifdef ALLOW_CTRL
# include "optim.h"
# include "CTRL_SIZE.h"
# include "ctrl.h"
# include "ctrl_dummy.h"
# include "CTRL_GENARR.h"
# endif
# ifdef ALLOW_EXF
# include "EXF_FIELDS.h"
# endif
# ifdef ALLOW_SEAICE
# include "SEAICE_SIZE.h"
# include "SEAICE.h"
# include "SEAICE_COST.h"
# endif
#endif
c == routine arguments ==
_RL mytime
integer mythid
c == local variables ==
integer myiter
#ifdef ECCO_CTRL_DEPRECATED
integer bi,bj
integer i,j
integer ig,jg
integer itlo,ithi
integer jtlo,jthi
integer jmin,jmax
integer imin,imax
integer ilps, ils,ilt
integer locdayrec
logical intmp
#endif
integer k
logical first
logical startofday
logical startofmonth
logical startofyear
logical inday
logical inmonth
logical inyear
logical last
logical endofday
logical endofmonth
logical endofyear
#ifdef ALLOW_GENCOST_CONTRIBUTION
logical startofgen(NGENCOST)
logical endofgen(NGENCOST)
logical ingen(NGENCOST)
integer sum1gen(NGENCOST)
integer genrec(NGENCOST)
integer kk
#endif
#if (defined (ALLOW_CTRL)
defined (ALLOW_GENTIM2D_CONTROL)
defined (ALLOW_PSBAR_GENPRECIP))
_RL genprecipGloH
INTEGER iarr
#endif
#ifdef ECCO_CTRL_DEPRECATED
character*(128) fnamepsbar
character*(128) fnametbar
character*(128) fnamesbar
character*(128) fnameubar
character*(128) fnamevbar
character*(128) fnamewbar
character*(128) fnametauxbar
character*(128) fnametauybar
_RL etanLeads (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
#ifdef ALLOW_PSBAR_STERIC
Real*8 sterGloH
CHARACTER*(MAX_LEN_MBUF) msgBuf
#endif
#ifdef ALLOW_IESTAU_COST_CONTRIBUTION
_RL iestau(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
_RL c0mm,prmm,salmm,vtmm,tmpmm,vsmm,vpmm,vstpmm
_RL csmm(1-Olx:sNx+Olx,1-Oly:sNy+Oly,nr,nsx,nsy)
_RL SW_TEMP
#endif
c == external functions ==
integer ilnblnk
external
#ifdef ALLOW_IESTAU_COST_CONTRIBUTION
external
#endif
c == end of interface ==
jtlo = mybylo(mythid)
jthi = mybyhi(mythid)
itlo = mybxlo(mythid)
ithi = mybxhi(mythid)
jmin = 1
jmax = sny
imin = 1
imax = snx
#endif /* ECCO_CTRL_DEPRECATED */
myiter = niter0 + INT((mytime-starttime)/deltaTClock+0.5)
c-- Get the time flags and record numbers for the time averaging.
#ifdef ALLOW_DEBUG
IF ( debugMode ) CALL DEBUG_CALL('cost_averagesflags',myThid)
#endif
call COST_AVERAGESFLAGS(
I myiter, mytime, mythid,
O first, last,
O startofday, startofmonth, startofyear,
O inday, inmonth, inyear,
O endofday, endofmonth, endofyear,
O sum1day, dayrec,
O sum1mon, monrec,
O sum1year, yearrec
& )
#ifdef ALLOW_GENCOST_CONTRIBUTION
call COST_GENCOST_ASSIGNPERIOD(
I startofday, startofmonth, startofyear,
I inday, inmonth, inyear,
I endofday, endofmonth, endofyear,
O startofgen, endofgen, ingen,
O sum1gen, genrec,
I myiter, mythid )
call COST_GENCOST_CUSTOMIZE( mythid )
#endif
#ifdef ECCO_CTRL_DEPRECATED
#ifdef ALLOW_SSH_COST_CONTRIBUTION
IF (using_cost_altim) THEN
#ifdef ALLOW_DEBUG
IF ( debugMode )
& CALL DEBUG_CALL('cost_averagesgeneric psbar',myThid)
#endif
#ifdef ALLOW_PSBAR_STERIC
sterGloH=VOLsumGlob_0/globalArea
& *(1. _d 0 - RHOsumGlob/RHOsumGlob_0)
WRITE(msgBuf,'(A,I6,A,1PE21.14)')
& ' iter=', myiter, ' ; sterGloH= ', sterGloH
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT, myThid )
#endif
do bj = jtlo,jthi
do bi = itlo,ithi
do j = jmin,jmax
do i = imin,imax
#if (defined (ALLOW_CTRL)
defined (ALLOW_GENTIM2D_CONTROL)
defined (ALLOW_PSBAR_GENPRECIP))
genprecipGloH=0. _d 0
do iarr = 1, maxCtrlTim2D
if (xx_gentim2d_file(iarr).EQ.'xx_gen_precip')
& genprecipGloH=xx_gentim2d(i,j,bi,bj,iarr)
& *rhoConstFresh*recip_rhoConst*deltaTClock
enddo
#endif
etanLeads(i,j,bi,bj)=etan(i,j,bi,bj)
#ifdef ALLOW_SEAICE
& +sIceLoad(i,j,bi,bj)*recip_rhoConst
#endif
#ifdef ALLOW_PSBAR_STERIC
& +sterGloH
#endif
#if (defined (ALLOW_CTRL)
defined (ALLOW_GENTIM2D_CONTROL)
defined (ALLOW_PSBAR_GENPRECIP))
& +genprecipGloH
#endif
enddo
enddo
enddo
enddo
call COST_AVERAGESGENERIC(
& psbarfile,
& psbar, etanLeads, xx_psbar_mean_dummy,
& first, last, startofday, endofday, inday,
& sum1day, dayrec, 1, mythid )
ENDIF
#endif
#ifdef ALLOW_SIGMAR_COST_CONTRIBUTION
#ifdef ALLOW_DEBUG
IF ( debugMode )
& CALL DEBUG_CALL('cost_averagesgeneric sigmaRbar',myThid)
#endif
call COST_AVERAGESGENERIC(
& sigmaRbarfile,
& sigmaRbar, sigmaRfield, xx_sigmaRbar_mean_dummy,
& first, last, startofmonth, endofmonth, inmonth,
& sum1mon, monrec, nr, mythid )
#endif /* ALLOW_SIGMAR_COST_CONTRIBUTION */
#if (defined (ALLOW_THETA_COST_CONTRIBUTION)
defined (ALLOW_CTDT_COST_CONTRIBUTION)
defined (ALLOW_XBT_COST_CONTRIBUTION)
defined (ALLOW_ARGO_THETA_COST_CONTRIBUTION)
defined (ALLOW_DRIFT_COST_CONTRIBUTION)
defined (ALLOW_OBCS_COST_CONTRIBUTION))
#ifdef ALLOW_DEBUG
IF ( debugMode )
& CALL DEBUG_CALL('cost_averagesgeneric tbar',myThid)
#endif
call COST_AVERAGESGENERIC(
& tbarfile,
& tbar, theta, xx_tbar_mean_dummy,
& first, last, startofmonth, endofmonth, inmonth,
& sum1mon, monrec, nr, mythid )
#else
#ifdef ALLOW_SST_COST_CONTRIBUTION
call COST_AVERAGESGENERIC(
& tbarfile,
& tbar, theta(1-Olx,1-Oly,1,1,1), xx_tbar_mean_dummy,
& first, last, startofmonth, endofmonth, inmonth,
& sum1mon, monrec, 1, mythid )
#endif
#endif
#ifdef ALLOW_DAILYSST_COST_CONTRIBUTION
IF (using_cost_sst) THEN
cph#ifdef ALLOW_SEAICE_COST_AREASST
#ifdef ALLOW_DEBUG
IF ( debugMode )
& CALL DEBUG_CALL('cost_averagesgeneric sstbar',myThid)
#endif
call COST_AVERAGESGENERIC(
& sstbarfile,
& sstbar, theta(1-Olx,1-Oly,1,1,1), xx_sstbar_mean_dummy,
& first, last, startofday, endofday, inday,
& sum1day, dayrec, 1, mythid )
ENDIF ! IF (using_cost_sst) THEN
#endif
#if (defined (ALLOW_SALT_COST_CONTRIBUTION)
defined (ALLOW_CTDS_COST_CONTRIBUTION)
defined (ALLOW_ARGO_SALT_COST_CONTRIBUTION)
defined (ALLOW_DRIFT_COST_CONTRIBUTION)
defined (ALLOW_OBCS_COST_CONTRIBUTION))
#ifdef ALLOW_DEBUG
IF ( debugMode )
& CALL DEBUG_CALL('cost_averagesgeneric sbar',myThid)
#endif
call COST_AVERAGESGENERIC(
& sbarfile,
& sbar, salt, xx_sbar_mean_dummy,
& first, last, startofmonth, endofmonth, inmonth,
& sum1mon, monrec, nr, mythid )
#else
#ifdef ALLOW_SSS_COST_CONTRIBUTION
call COST_AVERAGESGENERIC(
& sbarfile,
& sbar, salt(1-Olx,1-Oly,1,1,1), xx_sbar_mean_dummy,
& first, last, startofmonth, endofmonth, inmonth,
& sum1mon, monrec, 1, mythid )
#endif
#endif
#ifdef ALLOW_DRIFTW_COST_CONTRIBUTION
call COST_AVERAGESGENERIC(
& wbarfile,
& wbar, wvel, xx_wbar_mean_dummy,
& first, last, startofmonth, endofmonth, inmonth,
& sum1mon, monrec, nr, mythid )
#endif
#if (defined (ALLOW_DRIFTER_COST_CONTRIBUTION)
defined (ALLOW_OBCS_COST_CONTRIBUTION))
cph There is a mismatch between the cost_drifer and the
cph cost_obcs usage of ubar, vbar.
cph cost_obcs refers to monthly means, cost_drifer to total mean.
cph Needs to be updated for cost_obcs!!!.
c-- Next, do the averages for velocitty.
if (first.or.startofmonth) then
do bj = jtlo,jthi
do bi = itlo,ithi
do k = 1,nr
do j = jmin,jmax
do i = imin,imax
ubar(i,j,k,bi,bj) = uVel(i,j,k,bi,bj)
vbar(i,j,k,bi,bj) = vVel(i,j,k,bi,bj)
enddo
enddo
enddo
enddo
enddo
else if (last .or. endofmonth) then
do bj = jtlo,jthi
do bi = itlo,ithi
do k = 1,nr
do j = jmin,jmax
do i = imin,imax
ubar(i,j,k,bi,bj) = (ubar (i,j,k,bi,bj) +
& uVel(i,j,k,bi,bj) )/
& float(sum1mon)
vbar(i,j,k,bi,bj) = (vbar (i,j,k,bi,bj) +
& vVel(i,j,k,bi,bj) )/
& float(sum1mon)
enddo
enddo
enddo
enddo
enddo
c-- Save ubar and vbar.
if (optimcycle .ge. 0) then
ils=ilnblnk( ubarfile )
write(fnameubar,'(2a,i10.10)') ubarfile(1:ils),'.',
& optimcycle
write(fnamevbar,'(2a,i10.10)') vbarfile(1:ils),'.',
& optimcycle
endif
call ACTIVE_WRITE_XYZ( fnameubar, ubar, monrec, optimcycle,
& mythid, xx_ubar_mean_dummy)
call ACTIVE_WRITE_XYZ( fnamevbar, vbar, monrec, optimcycle,
& mythid, xx_vbar_mean_dummy)
ce , myiter, mytime )
else if ( ( inmonth ) .and.
& .not. (first .or. startofmonth) .and.
& .not. (last .or. endofmonth ) ) then
c-- Accumulate ubar and vbar.
do bj = jtlo,jthi
do bi = itlo,ithi
do k = 1,nr
do j = jmin,jmax
do i = imin,imax
ubar(i,j,k,bi,bj) = ubar (i,j,k,bi,bj) +
& uVel (i,j,k,bi,bj)
vbar(i,j,k,bi,bj) = vbar (i,j,k,bi,bj) +
& vVel (i,j,k,bi,bj)
enddo
enddo
enddo
enddo
enddo
else
stop ' ... stopped in cost_averagesfields; ubar part.'
endif
#endif
IF (using_cost_scat) THEN
#ifdef ALLOW_SCAT_COST_CONTRIBUTION
c-- Next, do the averages for velocitty.
if (first.or. startofmonth) then
do bj = jtlo,jthi
do bi = itlo,ithi
do j = jmin,jmax
do i = imin,imax
tauxbar(i,j,bi,bj) = ustress(i,j,bi,bj)
tauybar(i,j,bi,bj) = vstress(i,j,bi,bj)
enddo
enddo
enddo
enddo
else if (last .or. endofmonth) then
do bj = jtlo,jthi
do bi = itlo,ithi
do j = jmin,jmax
do i = imin,imax
tauxbar(i,j,bi,bj) = (tauxbar (i,j,bi,bj) +
& ustress(i,j,bi,bj) )/
& float(sum1mon)
tauybar(i,j,bi,bj) = (tauybar (i,j,bi,bj) +
& vstress(i,j,bi,bj) )/
& float(sum1mon)
enddo
enddo
enddo
enddo
c-- Save ubar and vbar.
if (optimcycle .ge. 0) then
ils=ilnblnk( tauxbarfile )
write(fnametauxbar,'(2a,i10.10)') tauxbarfile(1:ils),'.',
& optimcycle
ils=ilnblnk( tauybarfile )
write(fnametauybar,'(2a,i10.10)') tauybarfile(1:ils),'.',
& optimcycle
endif
call ACTIVE_WRITE_XY( fnametauxbar, tauxbar, monrec, optimcycle,
& mythid, xx_taux_mean_dummy)
call ACTIVE_WRITE_XY( fnametauybar, tauybar, monrec, optimcycle,
& mythid, xx_tauy_mean_dummy)
else if ( .not. (first.or. startofmonth) .and.
& .not. (last .or. endofmonth) ) then
c-- Accumulate ubar and vbar.
do bj = jtlo,jthi
do bi = itlo,ithi
do j = jmin,jmax
do i = imin,imax
tauxbar(i,j,bi,bj) = tauxbar (i,j,bi,bj) +
& ustress (i,j,bi,bj)
tauybar(i,j,bi,bj) = tauybar (i,j,bi,bj) +
& vstress (i,j,bi,bj)
enddo
enddo
enddo
enddo
else
stop ' ... stopped in cost_averagesfields; tauxbar part.'
endif
#else
#ifdef ALLOW_DAILYSCAT_COST_CONTRIBUTION
call COST_AVERAGESGENERIC(
& tauxbarfile,
& tauxbar, ustress, xx_taux_mean_dummy,
& first, last, startofday, endofday, inday,
& sum1day, dayrec, 1, mythid )
call COST_AVERAGESGENERIC(
& tauybarfile,
& tauybar, vstress, xx_tauy_mean_dummy,
& first, last, startofday, endofday, inday,
& sum1day, dayrec, 1, mythid )
#endif
#endif
ENDIF ! IF (using_cost_scat) THEN
#ifdef ALLOW_MEAN_HFLUX_COST_CONTRIBUTION
cph: this is one mean over whole integration:
c intmp = (.NOT. first) .and. (.NOT. last)
c call cost_averagesgeneric(
c & hfluxmeanbarfile,
c & hfluxmeanbar, qnet, xx_hflux_mean_dummy,
c & first, last, .false., .false., intmp,
c & ntimesteps, 1, 1, mythid )
cph: switch to annual means:
#ifdef ALLOW_DEBUG
IF ( debugMode )
& CALL DEBUG_CALL('cost_averagesgeneric hfluxmeanbar',myThid)
#endif
call COST_AVERAGESGENERIC(
& hfluxmeanbarfile,
& hfluxmeanbar, qnet, xx_hflux_mean_dummy,
& first, last, startofyear, endofyear, inyear,
& sum1year, yearrec, 1, mythid )
#endif
#ifdef ALLOW_MEAN_SFLUX_COST_CONTRIBUTION
cph: these are annual means
# ifndef ALLOW_SEAICE
#ifdef ALLOW_DEBUG
IF ( debugMode )
& CALL DEBUG_CALL('cost_averagesgeneric sfluxmeanbar',myThid)
#endif
call COST_AVERAGESGENERIC(
& sfluxmeanbarfile,
& sfluxmeanbar, empmr, xx_sflux_mean_dummy,
& first, last, startofyear, endofyear, inyear,
& sum1year, yearrec, 1, mythid )
else
#ifdef ALLOW_DEBUG
IF ( debugMode )
& CALL DEBUG_CALL('cost_averagesgeneric sfluxmeanbar',myThid)
#endif
call COST_AVERAGESGENERIC(
& sfluxmeanbarfile,
& sfluxmeanbar, frWtrAtm, xx_sflux_mean_dummy,
& first, last, startofyear, endofyear, inyear,
& sum1year, yearrec, 1, mythid )
# endif
#endif
#ifdef ALLOW_BP_COST_CONTRIBUTION
IF (using_cost_bp) call COST_AVERAGESGENERIC(
& bpbarfile,
& bpbar, phiHydLow, xx_bpbar_mean_dummy,
& first, last, startofmonth, endofmonth, inmonth,
& sum1mon, monrec, 1, mythid )
#endif
#ifdef ALLOW_SEAICE
if (useSEAICE) then
# ifdef ALLOW_SEAICE_COST_SMR_AREA
c
#ifdef ALLOW_DEBUG
IF ( debugMode )
& CALL DEBUG_CALL('cost_averagesgeneric smrareabar',myThid)
#endif
call COST_AVERAGESGENERIC(
& smrareabarfile,
& smrareabar, area, xx_smrareabar_mean_dummy,
& first, last, startofday, endofday, inday,
& sum1day, dayrec, 1, mythid )
c
#ifdef ALLOW_DEBUG
IF ( debugMode )
& CALL DEBUG_CALL('cost_averagesgeneric smrsstbar',myThid)
#endif
call COST_AVERAGESGENERIC(
& smrsstbarfile,
& smrsstbar, theta(1-Olx,1-Oly,1,1,1),
& xx_smrsstbar_mean_dummy,
& first, last, startofday, endofday, inday,
& sum1day, dayrec, 1, mythid )
c
#ifdef ALLOW_DEBUG
IF ( debugMode )
& CALL DEBUG_CALL('cost_averagesgeneric smrsssbar',myThid)
#endif
call COST_AVERAGESGENERIC(
& smrsssbarfile,
& smrsssbar, salt(1-Olx,1-Oly,1,1,1),
& xx_smrsssbar_mean_dummy,
& first, last, startofday, endofday, inday,
& sum1day, dayrec, 1, mythid )
c
# endif
endif
#endif /* ALLOW_SEAICE */
#ifdef ALLOW_IESTAU_COST_CONTRIBUTION
cmm First need to determine sound speed for each cell
c0mm=1402.392
prmm = 0.0
salmm = 0.0
vtmm = 0.0
tmpmm = 0.0
vsmm = 0.0
vpmm = 0.0
vstpmm = 0.0
do bj = jtlo,jthi
do bi = itlo,ithi
do j = jmin,jmax
do i = imin,imax
iestau(i,j,bi,bj) = 0.0
enddo
enddo
enddo
enddo
do bj = jtlo,jthi
do bi = itlo,ithi
do k = 1,nr
do j = jmin,jmax
do i = imin,imax
csmm(i,j,k,bi,bj) = 0.0
enddo
enddo
enddo
enddo
enddo
do bj = jtlo,jthi
do bi = itlo,ithi
do k = 1,nr
do j = jmin,jmax
do i = imin,imax
if (hFacC(i,j,k,bi,bj).gt.0.0) then
prmm = totPhiHyd(i,j,k,bi,bj)/gravity
& -rC(k)
tmpmm = SW_TEMP(SALT(i,j,k,bi,bj),
& THETA(i,j,k,bi,bj),prmm,0. _d 0)
prmm = rhoConst*(
& totPhiHyd(i,j,k,bi,bj)
& -rC(k)*gravity )
cmm convert pressure to kg/cm^2 for compliance with aog_vsdg script
prmm = prmm*0.0001/gravity
salmm = SALT(i,j,k,bi,bj)
vtmm = (5.01109398873-(0.0550946843172
& - 0.000221535969240*tmpmm)*tmpmm)*tmpmm
vsmm=(1.32952290781 + 0.000128955756844*salmm)*salmm
vpmm=(0.156059257041 + (0.0000244998688441
& - 0.00000000883392332513*prmm)*prmm)*prmm
vstpmm=-0.0127562783426*tmpmm*salmm
& + 0.00635191613389*tmpmm*prmm
& + 0.0000000265484716608*tmpmm*tmpmm*prmm*prmm
& - 0.00000159349479045*tmpmm*prmm*prmm
& + 0.000000000522116437235*tmpmm*prmm*prmm*prmm
& - 0.000000438031096213*tmpmm*tmpmm*tmpmm*prmm
& - 0.00000000161674495909*salmm*salmm*prmm*prmm
& + 0.0000968403156410*tmpmm*tmpmm*salmm
& + 0.00000485639620015*tmpmm*salmm*salmm*prmm
& - 0.000340597039004*tmpmm*salmm*prmm
csmm(i,j,k,bi,bj) = c0mm+vtmm+vsmm+vpmm+vstpmm
endif
enddo
enddo
enddo
enddo
enddo
CMM now integrate to get round trip travel time
do bj = jtlo,jthi
do bi = itlo,ithi
do k = 1,nr
do j = jmin,jmax
do i = imin,imax
if (csmm(i,j,k,bi,bj).ne.0.0) then
iestau(i,j,bi,bj) = iestau(i,j,bi,bj)
& + 2*drF(k)*hFacC(i,j,k,bi,bj)
& /csmm(i,j,k,bi,bj)
if (k.eq.1) then
iestau(i,j,bi,bj) = iestau(i,j,bi,bj)
& + 2*etaN(i,j,bi,j)
& /csmm(i,j,k,bi,bj)
endif
endif
enddo
enddo
enddo
enddo
enddo
cmm accumulate average
call COST_AVERAGESGENERIC(
& iestaubarfile,
& iestaubar, iestau(1-Olx,1-Oly,1,1),
& xx_iestaubar_mean_dummy,
& first, last, startofday, endofday, inday,
& sum1day, dayrec, 1, mythid )
#endif
#endif /* ECCO_CTRL_DEPRECATED */
#ifdef ALLOW_GENCOST_CONTRIBUTION
do k = 1, NGENCOST
if ( (using_gencost(k)).AND.(.NOT.gencost_barskip(k)) ) then
if ( .NOT.gencost_is3d(k) ) then
call COST_AVERAGESGENERIC(
& gencost_barfile(k),
& gencost_barfld(1-Olx,1-Oly,1,1,k),
& gencost_modfld(1-Olx,1-Oly,1,1,k),
& gencost_dummy(k),
& first, last,
& startofgen(k), endofgen(k), ingen(k),
& sum1gen(k), genrec(k), 1, mythid )
#ifdef ALLOW_GENCOST3D
else
kk=gencost_pointer3d(k)
call COST_AVERAGESGENERIC(
& gencost_barfile(k),
& gencost_bar3d(1-Olx,1-Oly,1,1,1,kk),
& gencost_mod3d(1-Olx,1-Oly,1,1,1,kk),
& gencost_dummy(k),
& first, last,
& startofgen(k), endofgen(k), ingen(k),
& sum1gen(k), genrec(k), nr, mythid )
#endif
endif
endif
end
do
#endif /* ALLOW_GENCOST_CONTRIBUTION */
#ifdef ECCO_CTRL_DEPRECATED
#ifdef ALLOW_TRANSPORT_COST_CONTRIBUTION
c-- Currently hard-coded Florida Strait transport for 1x1 deg.
c-- ECCO-GODAE version 1,2,3
c-- Next, do the averages for velocitty.
cph For some funny reason cal only increments dayrec at the end
cph of the day, i.e. for endofday.EQ.T
cph Should fix/change this at some point.
cph In the mean time increment ad hoc during day
locdayrec = 0
if (last .or. endofday) then
locdayrec = dayrec
else
locdayrec = dayrec+1
endif
do bj = jtlo,jthi
do bi = itlo,ithi
if (first.or.startofday)
& transpbar(locdayrec,bi,bj) = 0. _d 0
do k = 1,nr
do j = jmin,jmax
jg = myYGlobalLo-1+(bj-1)*sNy+j
do i = imin,imax
ig = myXGlobalLo-1+(bi-1)*sNx+i
if ( jg.EQ.106 .AND. ig.GE.280 .AND. ig.LE.285 ) then
transpbar(locdayrec,bi,bj) = transpbar(locdayrec,bi,bj)
& +vVel(i,j,k,bi,bj)
& *_dxG(i,j,bi,bj)*drF(k)*_hFacS(i,j,k,bi,bj)
endif
enddo
enddo
enddo
if (last .or. endofday) then
transpbar(locdayrec,bi,bj) =
& transpbar(locdayrec,bi,bj)/float(sum1day)
endif
enddo
enddo
#endif
c#ifdef ALLOW_COST_ATLANTIC
c-- Compute meridional heat transport
c call timer_start('cost_atlantic [ECCO SPIN-DOWN]', mythid)
c call cost_atlantic( mytime, myiter,mythid )
c call timer_stop ('cost_atlantic [ECCO SPIN-DOWN]', mythid)
c#endif
#endif /* ECCO_CTRL_DEPRECATED */
#ifdef ALLOW_DEBUG
IF ( debugMode ) CALL DEBUG_LEAVE('cost_averagesfields',myThid)
#endif
return
end