C $Header: /u/gcmpack/MITgcm/pkg/ecco/ecco_cost_init_barfiles.F,v 1.20 2010/08/28 18:35:16 gforget Exp $
C $Name:  $

#include "PACKAGES_CONFIG.h"
#include "AD_CONFIG.h"
#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 "PARAMS.h"

#include "optim.h"
#include "ecco_cost.h"
#include "ctrl.h"
#include "ctrl_dummy.h"
#ifdef ALLOW_SEAICE
# include "SEAICE_COST.h"
#endif

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) fnamesstbar
      character*(128) fnameubar
      character*(128) fnamevbar
      character*(128) fnamewbar
      character*(128) fnametauxbar
      character*(128) fnametauybar
      character*(128) fnamehfluxmeanbar
      character*(128) fnamesfluxmeanbar
      character*(128) fnamebpbar
      character*(128) fnamesmrareabar
      character*(128) fnamesmrsstbar
      character*(128) fnamesmrsssbar
#ifdef ALLOW_GENCOST_CONTRIBUTION
      character*(128) fname_gencostbar(NGENCOST)
#endif /* ALLOW_GENCOST_CONTRIBUTION */
c
      character*(128) adfnamepsbar
      character*(128) adfnametbar
      character*(128) adfnamesbar
      character*(128) adfnamesstbar
      character*(128) adfnameubar
      character*(128) adfnamevbar
      character*(128) adfnamewbar
      character*(128) adfnametauxbar
      character*(128) adfnametauybar
      character*(128) adfnamehfluxmeanbar
      character*(128) adfnamesfluxmeanbar
      character*(128) adfnamebpbar
      character*(128) adfnamesmrareabar
      character*(128) adfnamesmrsstbar
      character*(128) adfnamesmrsssbar
#ifdef ALLOW_GENCOST_CONTRIBUTION
      character*(128) adfname_gencostbar(NGENCOST)
#endif /* ALLOW_GENCOST_CONTRIBUTION */

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
#ifndef ALLOW_TANGENTLINEAR_RUN
        call ACTIVE_WRITE_XY( adfnamepsbar, tmpfld2d, irec,
     &                         optimcycle,mythid, xx_psbar_mean_dummy )
#endif
      enddo
#endif /* ALLOW_SSH_COST_CONTRIBUTION */

#ifdef ALLOW_BP_COST_CONTRIBUTION
c--   Save bpbar on file.
      ilps=ilnblnk( bpbarfile )
      write(fnamebpbar,'(2a,i10.10)')
     &     bpbarfile(1:ilps), '.', optimcycle
      write(adfnamebpbar,'(3a,i10.10)')
     &     yadprefix, bpbarfile(1:ilps), '.', optimcycle

      do irec = 1, nmonsrec
#ifndef ALLOW_TANGENTLINEAR_RUN
        call ACTIVE_WRITE_XY( adfnamebpbar, tmpfld2d, irec,
     &                         optimcycle,mythid, xx_bpbar_mean_dummy )
#endif
      enddo
#endif

#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
#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
#ifndef ALLOW_TANGENTLINEAR_RUN
        call ACTIVE_WRITE_XY( adfnametbar, tmpfld2d, irec,
     &                        optimcycle, mythid, xx_tbar_mean_dummy )
#endif
      enddo
#endif
#endif

#ifdef ALLOW_DAILYSST_COST_CONTRIBUTION
cph#ifdef ALLOW_SEAICE_COST_AREASST
c--   Save tbar on file.
      ilt=ilnblnk( sstbarfile )
      write(fnamesstbar,'(2a,i10.10)')
     &     sstbarfile(1:ilt), '.', optimcycle
      write(adfnamesstbar,'(3a,i10.10)')
     &     yadprefix, sstbarfile(1:ilt), '.', optimcycle
      do irec = 1,ndaysrec
#ifndef ALLOW_TANGENTLINEAR_RUN
         call ACTIVE_WRITE_XY( adfnamesstbar, tmpfld2d, irec,
     &                        optimcycle, mythid, xx_sstbar_mean_dummy )
#endif
       enddo
#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
#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
#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 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_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
#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
#ifndef ALLOW_TANGENTLINEAR_RUN
        call ACTIVE_WRITE_XYZ( adfnamewbar, tmpfld3d, irec,
     &                         optimcycle, mythid, xx_wbar_mean_dummy)
#endif
      enddo
#endif

#if (defined (ALLOW_SCAT_COST_CONTRIBUTION)  
     defined (ALLOW_DAILYSCAT_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

#ifdef ALLOW_SCAT_COST_CONTRIBUTION
      do irec = 1, nmonsrec
#else
      do irec = 1, ndaysrec
#endif
#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 hfluxmeanbar on file.
      ilps=ilnblnk( hfluxmeanbarfile )
      write(fnamehfluxmeanbar,'(2a,i10.10)')
     &     hfluxmeanbarfile(1:ilps), '.', optimcycle
      write(adfnamehfluxmeanbar,'(3a,i10.10)')
     &     yadprefix, hfluxmeanbarfile(1:ilps), '.', optimcycle

      do irec = 1, nyearsrec
#ifndef ALLOW_TANGENTLINEAR_RUN
        call ACTIVE_WRITE_XY( adfnamehfluxmeanbar, tmpfld2d, irec,
     &                         optimcycle,mythid, xx_hflux_mean_dummy )
#endif
      enddo
#endif

#ifdef ALLOW_MEAN_SFLUX_COST_CONTRIBUTION
c--   Save sfluxmeanbar on file.
      ilps=ilnblnk( sfluxmeanbarfile )
      write(fnamesfluxmeanbar,'(2a,i10.10)')
     &     sfluxmeanbarfile(1:ilps), '.', optimcycle
      write(adfnamesfluxmeanbar,'(3a,i10.10)')
     &     yadprefix, sfluxmeanbarfile(1:ilps), '.', optimcycle

      do irec = 1, nyearsrec
#ifndef ALLOW_TANGENTLINEAR_RUN
        call ACTIVE_WRITE_XY( adfnamesfluxmeanbar, tmpfld2d, irec,
     &                         optimcycle,mythid, xx_sflux_mean_dummy )
#endif
      enddo
#endif

#ifdef ALLOW_SEAICE
      if (useSEAICE) then

#ifdef ALLOW_SEAICE_COST_SMR_AREA
c initialize smr area bar
      ilps=ilnblnk( smrareabarfile )
      write(fnamesmrareabar,'(2a,i10.10)')
     &     smrareabarfile(1:ilps), '.', optimcycle
      write(adfnamesmrareabar,'(3a,i10.10)')
     &     yadprefix, smrareabarfile(1:ilps), '.', optimcycle
c initialize smr sst bar
      ilps=ilnblnk( smrsstbarfile )
      write(fnamesmrsstbar,'(2a,i10.10)') 
     &     smrsstbarfile(1:ilps), '.', optimcycle
      write(adfnamesmrsstbar,'(3a,i10.10)')
     &     yadprefix, smrsstbarfile(1:ilps), '.', optimcycle
c initialize smr sss bar
      ilps=ilnblnk( smrsssbarfile )
      write(fnamesmrsssbar,'(2a,i10.10)') 
     &     smrsssbarfile(1:ilps), '.', optimcycle
      write(adfnamesmrsssbar,'(3a,i10.10)')
     &     yadprefix, smrsssbarfile(1:ilps), '.', optimcycle

      do irec = 1, ndaysrec
#ifndef ALLOW_TANGENTLINEAR_RUN
        call ACTIVE_WRITE_XY( adfnamesmrareabar, tmpfld2d, irec,
     &        optimcycle,mythid, xx_smrareabar_mean_dummy )
        call ACTIVE_WRITE_XY( adfnamesmrsstbar, tmpfld3d, irec,
     &        optimcycle,mythid, xx_smrsstbar_mean_dummy )
        call ACTIVE_WRITE_XY( adfnamesmrsssbar, tmpfld3d, irec,
     &        optimcycle,mythid, xx_smrsssbar_mean_dummy )
#endif
      enddo
#endif /* ALLOW_SEAICE_COST_SMR_AREA */

      endif
#endif /* ALLOW_SEAICE */


#ifdef ALLOW_GENCOST_CONTRIBUTION
c--   Save gencost_barfile on file.
      do k=1,NGENCOST
      if ( gencost_barfile(k) .ne. ' ' ) then
      ilt=ilnblnk( gencost_barfile(k) )
      write(fname_gencostbar,'(2a,i10.10)')
     &     gencost_barfile(k)(1:ilt), '.', optimcycle
      write(adfname_gencostbar,'(3a,i10.10)')
     &     yadprefix, gencost_barfile(k)(1:ilt), '.', optimcycle
      do irec = 1,gencost_nrec(k)
#ifndef ALLOW_TANGENTLINEAR_RUN
        call ACTIVE_WRITE_XY( adfname_gencostbar, tmpfld2d, irec,
     &       optimcycle, mythid, xx_genbar_dummy(k) )
#endif
      enddo
      endif
      enddo 
#endif /* ALLOW_GENCOST_CONTRIBUTION */


#endif /* ALLOW_COST */

      return
      end