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