C $Header: /u/gcmpack/MITgcm/pkg/cal/cal_getdate.F,v 1.6 2012/06/08 02:17:01 jmc Exp $
C $Name:  $

#include "CAL_OPTIONS.h"

      SUBROUTINE CAL_GETDATE(
     I                        myIter,
     I                        myTime,
     O                        mydate,
     I                        myThid )

C     ==================================================================
C     SUBROUTINE cal_GetDate
C     ==================================================================
C
C     o Determine the current date given the iteration number and/or the
C       current time of integration.
C     <- changed to be function of current time only (less ambiguous)
C
C     started: Christian Eckert eckert@mit.edu  30-Jun-1999
C     changed: Christian Eckert eckert@mit.edu  29-Dec-1999
C              - restructured the original version in order to have a
C                better interface to the MITgcmUV.
C              Christian Eckert eckert@mit.edu  03-Feb-2000
C              - Introduced new routine and function names, cal_,
C                for verion 0.1.3.
C
C     ==================================================================
C     SUBROUTINE cal_GetDate
C     ==================================================================

      IMPLICIT NONE

C     == global variables ==
#include "EEPARAMS.h"
#include "cal.h"

C     == routine arguments ==
      INTEGER myIter
      _RL     myTime
      INTEGER mydate(4)
      INTEGER myThid

C     == local variables ==
      _RL     secs
      INTEGER workdate(4)
      CHARACTER*(MAX_LEN_MBUF) msgBuf
C     == end of interface ==

      IF ( myIter .EQ. -1 ) THEN

C-    Special case to return starDate_1 & _2 :
        mydate(1) = startdate_1
        mydate(2) = startdate_2
        mydate(3) = 1
        mydate(4) = 1

      ELSEIF ( cal_setStatus .LT. 3 ) THEN

        WRITE( msgBuf,'(2A,I10,A,F19.2)') 'CAL_GETDATE: ',
     &       'myIter=', myIter, ' , myTime=', myTime
        CALL PRINT_ERROR( msgBuf, myThid )
        WRITE( msgBuf,'(2A,I2,A)') 'CAL_GETDATE: ',
     &    'called too early (cal_setStatus=',cal_setStatus,' )'
        CALL PRINT_ERROR( msgBuf, myThid )
        STOP 'ABNORMAL END: S/R CAL_GETDATE'

c     ELSEIF ( myIter.EQ.modelIter0 .OR. myTime.EQ.modelStart ) THEN
      ELSEIF ( myTime.EQ.modelStart ) THEN

C-    faster to just copy modelStartDate:
        mydate(1) = modelStartDate(1)
        mydate(2) = modelStartDate(2)
        mydate(3) = modelStartDate(3)
        mydate(4) = modelStartDate(4)

      ELSE

c       if ( myTime.lt.0. ) then
c         if (myIter .ge. 0) then
c           secs = float(myIter - modelIter0)*modelStep
c         else
c           print*,' cal_GetDate: Not a valid input!'
c           STOP 'ABNORMAL END: S/R CAL_GETDATE'
c         endif
c       else
          secs = myTime - modelStart
c       endif

        CALL CAL_TIMEINTERVAL( secs, 'secs', workdate, myThid )
        CALL CAL_ADDTIME( modelStartDate, workdate, mydate, myThid )

      ENDIF

      RETURN
      END