C $Header: /u/gcmpack/MITgcm/pkg/ctrl/ctrl_init_rec.F,v 1.1 2013/01/26 14:45:56 heimbach Exp $
C $Name:  $

#include "CTRL_OPTIONS.h"

C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|

      subroutine CTRL_INIT_REC(
     I     fldname,
     I     fldstartdate1, fldstartdate2, fldperiod, nfac,
     O     fldstartdate, diffrec, startrec, endrec,
     I     mythid )

c     ==================================================================
c     SUBROUTINE ctrl_init_rec
c     ==================================================================
c
c     helper routine to compute the first and last record of a
c     time dependent control variable
c
c     Martin.Losch@awi.de, 2011-Mar-15
c
c     ==================================================================
c     SUBROUTINE ctrl_init_rec
c     ==================================================================

      implicit none

c     == global variables ==
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#ifdef ALLOW_CAL
# include "cal.h"
#endif

c     == input variables ==
c     fldstartdate1/2 : start time (date/time) of fld
c     fldperod        : sampling interval of fld
c     nfac            : factor for the case that fld is an obcs variable
c                       in this case nfac = 4, otherwise nfac = 1
c     mythid          : thread ID of this instance
      character*(*) fldname
      integer fldstartdate1
      integer fldstartdate2
      _RL     fldperiod
      integer nfac
      integer mythid

c     == output variables ==
c     fldstartdate : full date from fldstartdate1 and 2
c     startrec     : first record of ctrl variable
c     startrec     : last record of ctrl variable
c     diffrec      : difference between first and last record of ctrl variable
      integer fldstartdate(4)
      integer startrec
      integer endrec
      integer diffrec

c     == local variables ==
      integer i
#ifdef ALLOW_CAL
      integer difftime(4)
      _RL     diffsecs
#endif /* ALLOW_CAL */
      character*(max_len_mbuf) msgbuf
      integer il

c     == functions ==
      integer  ilnblnk
      external 

      if ( debugLevel .GE. debLevB ) then
       il=ilnblnk(fldname)
       WRITE( msgBuf,'(A,A)')
     &     'CTRL_INIT_REC: Getting record indices for ',fldname(1:il)
       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
     &      SQUEEZE_RIGHT , myThid )
      endif

c     initialise some output
      do i = 1,4
       fldstartdate(i) = 0
      end


do startrec = 0 endrec = 0 diffrec = 0 if ( fldperiod .EQ. -12. ) then startrec = 1 endrec = 12*nfac elseif ( fldperiod .EQ. 0. ) then startrec = 1 endrec = 1*nfac else # ifdef ALLOW_CAL call CAL_FULLDATE( fldstartdate1, fldstartdate2, & fldstartdate , mythid ) call CAL_TIMEPASSED( fldstartdate, modelstartdate, & difftime, mythid ) call CAL_TOSECONDS ( difftime, diffsecs, mythid ) startrec = int((modelstart + startTime - diffsecs)/ & fldperiod) + 1 endrec = int((modelend + startTime - diffsecs + modelstep/2)/ & fldperiod) + 2 if ( nfac .ne. 1 ) then c This is the case of obcs. startrec = (startrec - 1)*nfac + 1 endrec = endrec*nfac endif else /* ndef ALLOW_CAL */ startrec = 1 endrec = (int((endTime - startTime)/fldperiod) + 1)*nfac #endif /* ALLOW_CAL */ endif diffrec = endrec - startrec + 1 if ( debugLevel .GE. debLevB ) then WRITE( msgBuf,'(A,A,A)') & 'CTRL_INIT_REC: Record indices for ',fldname(1:il),':' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , myThid ) WRITE( msgBuf,'(A,I10,A,I10)') & 'CTRL_INIT_REC: startrec = ',startrec,', endrec = ',endrec CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , myThid ) endif return end