#include "COST_CPPOPTIONS.h"


      subroutine ECCO_COST_INIT_BARFILES( mythid )

c     ==================================================================
c     SUBROUTINE ecco_cost_init_barfiles
c     ==================================================================
c
c--   Initialise adjoint of monthly mean files calculated
c--   in cost_averagesfields (and their ad...).
c
c     started: heimbach@mit.edu 20-Mar-2002
c
c     ==================================================================
c     SUBROUTINE ecco_cost_cost_init_barfiles
c     ==================================================================

      implicit none

c     == global variables ==

#include "EEPARAMS.h"
#include "SIZE.h"

#include "optim.h"
#include "ecco_cost.h"
#include "ctrl.h"
#include "ctrl_dummy.h"

c     == routine arguments ==

      integer mythid

#ifdef ALLOW_COST
c     == local variables ==

      integer bi,bj
      integer i,j,k
      integer itlo,ithi
      integer jtlo,jthi
      integer jmin,jmax
      integer imin,imax

      integer ilps, ils, ilt, irec

      character*(128) fnamepsbar
      character*(128) fnametbar
      character*(128) fnamesbar
      character*(128) fnameubar
      character*(128) fnamevbar
      character*(128) fnamewbar
      character*(128) fnametauxbar
      character*(128) fnametauybar
      character*(128) fnamehfluxbar
      character*(128) fnamesfluxbar
      character*(128) adfnamepsbar
      character*(128) adfnametbar
      character*(128) adfnamesbar
      character*(128) adfnameubar
      character*(128) adfnamevbar
      character*(128) adfnamewbar
      character*(128) adfnametauxbar
      character*(128) adfnametauybar
      character*(128) adfnamehfluxbar
      character*(128) adfnamesfluxbar

c     == external functions ==

      integer  ilnblnk
      external 

c     == end of interface ==

      jtlo = mybylo(mythid)
      jthi = mybyhi(mythid)
      itlo = mybxlo(mythid)
      ithi = mybxhi(mythid)
      jmin = 1
      jmax = sny
      imin = 1
      imax = snx

      do bj = jtlo,jthi
        do bi = itlo,ithi
          do j = jmin,jmax
            do i =  imin,imax
              tmpfld2d(i,j,bi,bj) = 0. _d 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
                tmpfld3d(i,j,k,bi,bj) = 0. _d 0
              enddo
            enddo
          enddo
        enddo
      enddo

cgg(  Also initialize the tmp fields used in ctrl_getobcs and cost_obcs.
#ifdef OBCS_CONTROL
      do bj = jtlo,jthi
        do bi = itlo,ithi
          do k = 1,nr
            do j = jmin,jmax
              tmpfldyz (j,k,bi,bj) = 0. _d 0
              tmpfldyz2(j,k,bi,bj) = 0. _d 0
            enddo
          enddo
        enddo
      enddo
      do bj = jtlo,jthi
        do bi = itlo,ithi
          do k = 1,nr
            do i =  imin,imax
              tmpfldxz (i,k,bi,bj) = 0. _d 0
              tmpfldxz2(i,k,bi,bj) = 0. _d 0
            enddo
          enddo
        enddo
      enddo
#endif
cgg)

#ifdef ALLOW_SSH_COST_CONTRIBUTION
c--   Save psbar on file.
      ilps=ilnblnk( psbarfile )
      write(fnamepsbar,'(2a,i10.10)') 
     &     psbarfile(1:ilps), '.', optimcycle
      write(adfnamepsbar,'(3a,i10.10)')
     &     yadprefix, psbarfile(1:ilps), '.', optimcycle

      do irec = 1, ndaysrec
c        call active_write_xy( fnamepsbar, tmpfld2d, irec,
c     &                        optimcycle, mythid, xx_psbar_mean_dummy )
#ifndef ALLOW_TANGENTLINEAR_RUN
        call ACTIVE_WRITE_XY( adfnamepsbar, tmpfld2d, irec,
     &                         optimcycle,mythid, xx_psbar_mean_dummy )
#endif
      enddo
#endif /* ALLOW_SSH_COST_CONTRIBUTION */

#if (defined (ALLOW_THETA_COST_CONTRIBUTION)  
     defined (ALLOW_CTDT_COST_CONTRIBUTION)  
     defined (ALLOW_CTDTCLIM_COST_CONTRIBUTION)  
     defined (ALLOW_XBT_COST_CONTRIBUTION)  
     defined (ALLOW_DRIFT_COST_CONTRIBUTION)  
     defined (ALLOW_OBCS_COST_CONTRIBUTION))
c--   Save tbar on file.
      ilt=ilnblnk( tbarfile )
      write(fnametbar,'(2a,i10.10)') 
     &     tbarfile(1:ilt), '.', optimcycle
      write(adfnametbar,'(3a,i10.10)') 
     &     yadprefix, tbarfile(1:ilt), '.', optimcycle

      do irec = 1,nmonsrec
c        call active_write_xyz( fnametbar, tmpfld3d, irec,
c     &                         optimcycle, mythid, xx_tbar_mean_dummy )
#ifndef ALLOW_TANGENTLINEAR_RUN
        call ACTIVE_WRITE_XYZ( adfnametbar, tmpfld3d, irec, 
     &                         optimcycle, mythid, xx_tbar_mean_dummy )
#endif
      enddo
#else
#ifdef ALLOW_SST_COST_CONTRIBUTION
c--   Save tbar on file.
      ilt=ilnblnk( tbarfile )
      write(fnametbar,'(2a,i10.10)') 
     &     tbarfile(1:ilt), '.', optimcycle
      write(adfnametbar,'(3a,i10.10)') 
     &     yadprefix, tbarfile(1:ilt), '.', optimcycle
      do irec = 1,nmonsrec
c        call active_write_xy( fnametbar, tmpfld2d, irec,
c     &                        optimcycle, mythid, xx_tbar_mean_dummy )
#ifndef ALLOW_TANGENTLINEAR_RUN
        call ACTIVE_WRITE_XY( adfnametbar, tmpfld2d, irec, 
     &                        optimcycle, mythid, xx_tbar_mean_dummy )
#endif
      enddo
#endif
#endif

#if (defined (ALLOW_SALT_COST_CONTRIBUTION)  
     defined (ALLOW_CTDS_COST_CONTRIBUTION)  
     defined (ALLOW_CTDSCLIM_COST_CONTRIBUTION)  
     defined (ALLOW_DRIFT_COST_CONTRIBUTION)  
     defined (ALLOW_OBCS_COST_CONTRIBUTION))
c--   Save sbar.
      ils=ilnblnk( sbarfile )
      write(fnamesbar,'(2a,i10.10)') 
     &     sbarfile(1:ils), '.', optimcycle
      write(adfnamesbar,'(3a,i10.10)') 
     &     yadprefix, sbarfile(1:ils), '.', optimcycle

      do irec = 1,nmonsrec
c        call active_write_xyz( fnamesbar, tmpfld3d, irec,
c     &                         optimcycle, mythid, xx_sbar_mean_dummy)
#ifndef ALLOW_TANGENTLINEAR_RUN
        call ACTIVE_WRITE_XYZ( adfnamesbar, tmpfld3d, irec,
     &                         optimcycle, mythid, xx_sbar_mean_dummy)
#endif
      enddo
#else
#ifdef ALLOW_SST_COST_CONTRIBUTION
c--   Save sbar.
      ils=ilnblnk( sbarfile )
      write(fnamesbar,'(2a,i10.10)') 
     &     sbarfile(1:ils), '.', optimcycle
      write(adfnamesbar,'(3a,i10.10)') 
     &     yadprefix, sbarfile(1:ils), '.', optimcycle

      do irec = 1,nmonsrec
c        call active_write_xy( fnamesbar, tmpfld2d, irec,
c     &                        optimcycle, mythid, xx_sbar_mean_dummy)
#ifndef ALLOW_TANGENTLINEAR_RUN
        call ACTIVE_WRITE_XY( adfnamesbar, tmpfld2d, irec,
     &                        optimcycle, mythid, xx_sbar_mean_dummy)
#endif
      enddo
#endif
#endif

#if (defined (ALLOW_DRIFTER_COST_CONTRIBUTION)  
     defined (ALLOW_OBCS_COST_CONTRIBUTION))
cph   There's 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_drifer.

c--   Save ubar and vbar.
      ils=ilnblnk( ubarfile )
      write(fnameubar,'(2a,i10.10)') 
     &     ubarfile(1:ils), '.', optimcycle
      write(fnamevbar,'(2a,i10.10)') 
     &     vbarfile(1:ils), '.', optimcycle
      write(adfnameubar,'(3a,i10.10)') 
     &     yadprefix, ubarfile(1:ils), '.', optimcycle
      write(adfnamevbar,'(3a,i10.10)') 
     &     yadprefix, vbarfile(1:ils), '.', optimcycle

      do irec = 1,nmonsrec
c        call active_write_xyz( fnameubar, tmpfld3d, irec,
c     &                         optimcycle, mythid, xx_ubar_mean_dummy)
c        call active_write_xyz( fnamevbar, tmpfld3d, irec,
c     &                         optimcycle, mythid, xx_vbar_mean_dummy)
#ifndef ALLOW_TANGENTLINEAR_RUN
        call ACTIVE_WRITE_XYZ( adfnameubar, tmpfld3d, irec,
     &                         optimcycle, mythid, xx_ubar_mean_dummy)
        call ACTIVE_WRITE_XYZ( adfnamevbar, tmpfld3d, irec,
     &                         optimcycle, mythid, xx_vbar_mean_dummy)
#endif
      enddo
#endif

#ifdef ALLOW_DRIFTW_COST_CONTRIBUTION
c--   Save wbar
      ils=ilnblnk( wbarfile )
      write(fnamewbar,'(2a,i10.10)') 
     &     wbarfile(1:ils), '.', optimcycle
      write(adfnamewbar,'(3a,i10.10)') 
     &     yadprefix, wbarfile(1:ils), '.', optimcycle

      do irec = 1,nmonsrec
c        call active_write_xyz( fnamewbar, tmpfld3d, irec,
c     &                         optimcycle, mythid, xx_wbar_mean_dummy)
#ifndef ALLOW_TANGENTLINEAR_RUN
        call ACTIVE_WRITE_XYZ( adfnamewbar, tmpfld3d, irec,
     &                         optimcycle, mythid, xx_wbar_mean_dummy)
#endif
      enddo
#endif

#ifdef ALLOW_SCAT_COST_CONTRIBUTION
c--   Save tauxbar, tauybar on file.
      ilps=ilnblnk( tauxbarfile )
      write(fnametauxbar,'(2a,i10.10)') 
     &     tauxbarfile(1:ilps), '.', optimcycle
      write(adfnametauxbar,'(3a,i10.10)')
     &     yadprefix, tauxbarfile(1:ilps), '.', optimcycle
      ilps=ilnblnk( tauybarfile )
      write(fnametauybar,'(2a,i10.10)') 
     &     tauybarfile(1:ilps), '.', optimcycle
      write(adfnametauybar,'(3a,i10.10)')
     &     yadprefix, tauybarfile(1:ilps), '.', optimcycle

      do irec = 1, nmonsrec
c        call active_write_xy( fnametauxbar, tmpfld2d, irec,
c     &                        optimcycle, mythid, xx_taux_mean_dummy )
c        call active_write_xy( fnametauybar, tmpfld2d, irec,
c     &                        optimcycle, mythid, xx_tauy_mean_dummy )
#ifndef ALLOW_TANGENTLINEAR_RUN
        call ACTIVE_WRITE_XY( adfnametauxbar, tmpfld2d, irec,
     &                         optimcycle,mythid, xx_taux_mean_dummy )
        call ACTIVE_WRITE_XY( adfnametauybar, tmpfld2d, irec,
     &                         optimcycle,mythid, xx_tauy_mean_dummy )
#endif
      enddo
#endif

#ifdef ALLOW_MEAN_HFLUX_COST_CONTRIBUTION
c--   Save hfluxbar on file.
      ilps=ilnblnk( hfluxbarfile )
      write(fnamehfluxbar,'(2a,i10.10)') 
     &     hfluxbarfile(1:ilps), '.', optimcycle
      write(adfnamehfluxbar,'(3a,i10.10)')
     &     yadprefix, hfluxbarfile(1:ilps), '.', optimcycle

      do irec = 1, 1
c        call active_write_xy( fnamehfluxbar, tmpfld2d, irec,
c     &                        optimcycle, mythid, xx_hflux_mean_dummy )
#ifndef ALLOW_TANGENTLINEAR_RUN
        call ACTIVE_WRITE_XY( adfnamehfluxbar, tmpfld2d, irec,
     &                         optimcycle,mythid, xx_hflux_mean_dummy )
#endif
      enddo
#endif

#ifdef ALLOW_MEAN_SFLUX_COST_CONTRIBUTION
c--   Save sfluxbar on file.
      ilps=ilnblnk( sfluxbarfile )
      write(fnamesfluxbar,'(2a,i10.10)') 
     &     sfluxbarfile(1:ilps), '.', optimcycle
      write(adfnamesfluxbar,'(3a,i10.10)')
     &     yadprefix, sfluxbarfile(1:ilps), '.', optimcycle

      do irec = 1, 1
c        call active_write_xy( fnamesfluxbar, tmpfld2d, irec,
c     &                        optimcycle, mythid, xx_sflux_mean_dummy )
#ifndef ALLOW_TANGENTLINEAR_RUN
        call ACTIVE_WRITE_XY( adfnamesfluxbar, tmpfld2d, irec,
     &                         optimcycle,mythid, xx_sflux_mean_dummy )
#endif
      enddo
#endif

#endif /* ALLOW_COST */

      return
      end