C $Header: /u/gcmpack/MITgcm/pkg/ecco/ecco_cost_init_fixed.F,v 1.11 2007/10/09 00:02:51 jmc Exp $
C $Name:  $

#include "PACKAGES_CONFIG.h"
#include "AD_CONFIG.h"
#include "COST_CPPOPTIONS.h"


      subroutine ecco_cost_init_fixed( mythid ) 1,20

c     ==================================================================
c     SUBROUTINE ecco_cost_init_fixed
c     ==================================================================
c
c     o Set contributions to the cost function and the cost function
c       itself to zero. The cost function and the individual contribu-
c       tions are defined in the header file "ecco_cost.h".
c
c     started: Christian Eckert eckert@mit.edu 30-Jun-1999
c
c     changed: Christian Eckert eckert@mit.edu 25-Feb-2000
c
c              - Restructured the code in order to create a package
c                for the MITgcmUV.
c
c     changed: Ralf Giering 18-Jan-2001
c
c              - move namelist reading to cost_readparms.F
c
c     ==================================================================
c     SUBROUTINE ecco_cost_init_fixed
c     ==================================================================

      implicit none

c     == global variables ==

#include "EEPARAMS.h"
#include "SIZE.h"
#include "GRID.h"
#include "PARAMS.h"

#ifdef ALLOW_CAL
#include "cal.h"
#endif
#include "ecco_cost.h"

c     == routine arguments ==

      integer mythid

c     == local variables ==

      integer tempDate1(4)
      integer tempDate2(4)
      integer gwunit
      integer ilo,ihi
      integer irec
      logical exst
      _RL     dummy
      _RL     missingObsFlag
      PARAMETER ( missingObsFlag = 1. _d 23 )

c     == external functions ==

      integer  cal_IntYears
      external cal_IntYears
      integer  cal_IntMonths
      external cal_IntMonths
      integer  cal_IntDays
      external cal_IntDays
      integer  ifnblnk
      external ifnblnk
      integer  ilnblnk
      external ilnblnk

c     == end of interface ==

#ifdef ALLOW_CAL

c--   The number of monthly and daily averages generated by the
c--   current model integration.
      nyearsrec = cal_IntYears( mythid )
      nmonsrec = cal_IntMonths( mythid )
      ndaysrec = cal_IntDays( mythid )

      _BEGIN_MASTER( myThid )

c--     Get the complete dates of the ...
c--     ... TMI data.
        call cal_FullDate( tmistartdate1,   tmistartdate2,
     &                     tmistartdate,    mythid )
c--     ... SST data.
        call cal_FullDate( sststartdate1,   sststartdate2,
     &                     sststartdate,    mythid )
c--     ... SSS data.
        call cal_FullDate( sssstartdate1,   sssstartdate2,
     &                     sssstartdate,    mythid )
c--     ... BP data.
        call cal_FullDate( bpstartdate1,   bpstartdate2,
     &                     bpstartdate,    mythid )
c--     ... T/P data.
        call cal_FullDate( topexstartdate1, topexstartdate2,
     &                     topexstartdate,  mythid )
c--     ... ERS data.
        call cal_FullDate( ersstartdate1,   ersstartdate2,
     &                     ersstartdate,    mythid )
c--     ... GFO data.
        call cal_FullDate( gfostartdate1,   gfostartdate2,
     &                     gfostartdate,    mythid )
c--     ... SCAT data.
        call cal_FullDate( scatstartdate1,  scatstartdate2,
     &                     scatxstartdate,  mythid )
        call cal_FullDate( scatstartdate1,  scatstartdate2,
     &                     scatystartdate,  mythid )
c--     ... ARGO data.
        call cal_FullDate( argotstartdate1,   argotstartdate2,
     &                     argotstartdate,    mythid )
        call cal_FullDate( argosstartdate1,   argotstartdate2,
     &                     argosstartdate,    mythid )

      _END_MASTER( mythid )

#endif /* ALLOW_CAL */

c--   Get the weights that are to be used for the individual cost
c--   function contributions.
      call ecco_cost_weights( mythid )

c--   Initialise adjoint of monthly mean files calculated
c--   in cost_averagesfields (and their ad...).
cph(
cph   The following init. shoud not be applied if in the middle
cph   of a divided adjoint run
cph)
#ifndef ALLOW_TANGENTLINEAR_RUN
cph!!! and I think it needs to be seen by TAF
cph!!! for repeated TLM runs
cph!!!
      inquire( file='costfinal', exist=exst )
      if ( .NOT. exst) then
         call ecco_cost_init_barfiles( mythid )
      endif
#endif

#ifdef ALLOW_TRANSPORT_COST_CONTRIBUTION
      _BEGIN_MASTER(myThid)
      ilo = ifnblnk(costTranspDataFile)
      ihi = ilnblnk(costTranspDataFile)
      CALL OPEN_COPY_DATA_FILE(
     I                          costTranspDataFile(ilo:ihi),
     I                          'ECCO_COST_INIT_FIXED',
     O                          gwunit,
     I                          myThid )
      do irec = 1, ndaysrec
c-- read daily transport time series
c-- 1st: transport in m/s
c-- 2nd: date in YYYYMMDD
c-- 3rd: uncertainty in m/s
         read(gwunit,*) transpobs(irec), dummy, wtransp(irec)
c-- convert std.dev. to weight
         if ( wtransp(irec) .NE. 0. )
     &        wtransp(irec) =1./(wtransp(irec)*wtransp(irec))
c-- set weight to zero for missing values
         if ( transpobs(irec) .EQ. missingObsFlag )
     &        wtransp(irec) = 0.
      enddo
      _END_MASTER(myThid)
      _BARRIER
#endif /* ALLOW_TRANSPORT_COST_CONTRIBUTION */

c--   Summarize the cost function's setup.
      _BEGIN_MASTER( mythid )
      call ecco_cost_summary( mythid )
      _END_MASTER( mythid )

      _BARRIER

      end