C $Header: /u/gcmpack/MITgcm/pkg/exf/exf_init_fixed.F,v 1.15 2010/05/12 01:08:14 dimitri Exp $
C $Name:  $

#include "EXF_OPTIONS.h"
#ifdef ALLOW_OBCS
# include "OBCS_OPTIONS.h"
#endif

CBOP
C     !ROUTINE: EXF_INIT_FIXED
C     !INTERFACE:
      SUBROUTINE EXF_INIT_FIXED( myThid )

C     !DESCRIPTION: \bv
C     *==========================================================*
C     | SUBROUTINE EXF_INIT_FIXED
C     | o Routine to initialize EXF variables
C     |   that are kept fixed during the run.
C     *==========================================================*
C     \ev
C     !USES:
      IMPLICIT NONE

C     === Global variables ===
#include "EEPARAMS.h"
#include "SIZE.h"
#include "PARAMS.h"
#include "cal.h"
#include "EXF_PARAM.h"
#include "EXF_CONSTANTS.h"
#ifdef ALLOW_ICEFRONT
# include "ICEFRONT_OPTIONS.h"
# include "ICEFRONT.h"
#endif
#ifdef ALLOW_OBCS
# include "OBCS.h"
#endif

C     !INPUT/OUTPUT PARAMETERS:
C     === Routine arguments ===
C     myThid ::  my Thread Id number
      INTEGER myThid
CEOP

C     !LOCAL VARIABLES:
C     === Local variables ===
      INTEGER date_array(4), difftime(4), yearStartDate(4)

c     Complete the start date specifications for the forcing
c     fields to get a complete calendar date array.
c     FLDstartdate, for FLD = { uwind, vwind, wspeed, etc. },
c     returns time in seconds of first FLD record from the
c     beginning of the model integration or, if useYearlyFields,
c     from the beginning of the year.

      _BEGIN_MASTER( myThid )

#ifdef ALLOW_ATM_WIND
      IF ( uwindfile .NE. ' ' .AND. uwindperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE  ( uwindstartdate1, uwindstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   uwindstartdate       ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   uwindstartdate       ,myThid)
        uwindstartdate   =  modelstart + uwindstartdate
       ENDIF
      ENDIF
      IF ( vwindfile .NE. ' ' .AND. vwindperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE  ( vwindstartdate1, vwindstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   vwindstartdate       ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   vwindstartdate       ,myThid)
        vwindstartdate   =  modelstart + vwindstartdate
       ENDIF
      ENDIF
#endif /* ALLOW_ATM_WIND */
      IF ( wspeedfile .NE. ' ' .AND. wspeedperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE  ( wspeedstartdate1, wspeedstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   wspeedstartdate      ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   wspeedstartdate      ,myThid)
        wspeedstartdate  =  modelstart + wspeedstartdate
       ENDIF
      ENDIF
      IF ( ustressfile .NE. ' ' .AND. ustressperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE  ( ustressstartdate1, ustressstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   ustressstartdate     ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   ustressstartdate     ,myThid)
        ustressstartdate =  modelstart + ustressstartdate
       ENDIF
      ENDIF
      IF ( vstressfile .NE. ' ' .AND. vstressperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE  ( vstressstartdate1, vstressstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   vstressstartdate     ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   vstressstartdate     ,myThid)
        vstressstartdate =  modelstart + vstressstartdate
       ENDIF
      ENDIF

#ifdef ALLOW_ATM_TEMP
      IF ( atempfile .NE. ' ' .AND. atempperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE  ( atempstartdate1, atempstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   atempstartdate       ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   atempstartdate       ,myThid)
        atempstartdate   =  modelstart + atempstartdate
       ENDIF
      ENDIF
      IF ( aqhfile .NE. ' ' .AND. aqhperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE  ( aqhstartdate1, aqhstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   aqhstartdate         ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   aqhstartdate         ,myThid)
        aqhstartdate     =  modelstart + aqhstartdate
       ENDIF
      ENDIF
      IF ( lwfluxfile .NE. ' ' .AND. lwfluxperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE  ( lwfluxstartdate1, lwfluxstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   lwfluxstartdate      ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   lwfluxstartdate      ,myThid)
        lwfluxstartdate  =  modelstart + lwfluxstartdate
       ENDIF
      ENDIF
      IF ( precipfile .NE. ' ' .AND. precipperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE  ( precipstartdate1, precipstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   precipstartdate      ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   precipstartdate      ,myThid)
        precipstartdate  =  modelstart + precipstartdate
       ENDIF
      ENDIF
      IF ( snowprecipfile .NE. ' ' .AND. snowprecipperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE( snowprecipstartdate1, snowprecipstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   snowprecipstartdate  ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   snowprecipstartdate  ,myThid)
        snowprecipstartdate=modelstart + snowprecipstartdate
       ENDIF
      ENDIF
#else /* ifndef ALLOW_ATM_TEMP */
      IF ( hfluxfile .NE. ' ' .AND. hfluxperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE  ( hfluxstartdate1, hfluxstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   hfluxstartdate       ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   hfluxstartdate       ,myThid)
        hfluxstartdate   =  modelstart + hfluxstartdate
       ENDIF
      ENDIF
      IF ( sfluxfile .NE. ' ' .AND. sfluxperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE  ( sfluxstartdate1, sfluxstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   sfluxstartdate       ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   sfluxstartdate       ,myThid)
        sfluxstartdate   =  modelstart + sfluxstartdate
       ENDIF
      ENDIF
#endif /* ALLOW_ATM_TEMP */

#if defined(ALLOW_ATM_TEMP)  defined(SHORTWAVE_HEATING)
      IF ( swfluxfile .NE. ' ' .AND. swfluxperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE  ( swfluxstartdate1, swfluxstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   swfluxstartdate      ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   swfluxstartdate      ,myThid)
        swfluxstartdate  =  modelstart + swfluxstartdate
       ENDIF
      ENDIF
#endif /* defined(ALLOW_ATM_TEMP) || defined(SHORTWAVE_HEATING) */

#ifdef EXF_READ_EVAP
      IF ( evapfile .NE. ' ' .AND. evapperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE  ( evapstartdate1, evapstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   evapstartdate        ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   evapstartdate        ,myThid)
        evapstartdate    =  modelstart + evapstartdate
       ENDIF
      ENDIF
#endif /* EXF_READ_EVAP */

#ifdef ALLOW_RUNOFF
      IF ( runofffile .NE. ' ' .AND. runoffperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE  ( runoffstartdate1, runoffstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   runoffstartdate      ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   runoffstartdate      ,myThid)
        runoffstartdate  =  modelstart + runoffstartdate
       ENDIF
      ENDIF
#endif /* ALLOW_RUNOFF */

#ifdef ALLOW_ICEFRONT
      IF ( sgrunofffile .NE. ' ' .AND. sgrunoffperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE  ( sgrunoffstartdate1, sgrunoffstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime, sgrunoffstartdate      ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime, sgrunoffstartdate      ,myThid)
        sgrunoffstartdate  =  modelstart + sgrunoffstartdate
       ENDIF
      ENDIF
#endif /* ALLOW_ICEFRONT */

#ifdef ALLOW_DOWNWARD_RADIATION
      IF ( swdownfile .NE. ' ' .AND. swdownperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE  ( swdownstartdate1, swdownstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   swdownstartdate      ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   swdownstartdate      ,myThid)
        swdownstartdate  =  modelstart + swdownstartdate
       ENDIF
      ENDIF
      IF ( lwdownfile .NE. ' ' .AND. lwdownperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE  ( lwdownstartdate1, lwdownstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   lwdownstartdate      ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   lwdownstartdate      ,myThid)
        lwdownstartdate  =  modelstart + lwdownstartdate
       ENDIF
      ENDIF
#endif /* ALLOW_DOWNWARD_RADIATION */

#ifdef ATMOSPHERIC_LOADING
      IF ( apressurefile .NE. ' ' .AND. apressureperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE  ( apressurestartdate1,  apressurestartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   apressurestartdate   ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   apressurestartdate   ,myThid)
        apressurestartdate= modelstart + apressurestartdate
       ENDIF
      ENDIF
#endif /* ATMOSPHERIC_LOADING */

#ifdef ALLOW_ICE_AREAMASK
      IF ( areamaskfile .NE. ' ' .AND. areamaskperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE  ( areamaskstartdate1,  areamaskstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   areamaskstartdate   ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   areamaskstartdate   ,myThid)
        areamaskstartdate= modelstart + areamaskstartdate
       ENDIF
      ENDIF
#endif /* ALLOW_ICE_AREAMASK */

#ifdef ALLOW_OBCS
# ifdef ALLOW_OBCS_NORTH
      IF ( obcsNperiod .GT. 0 ) THEN
       CALL CAL_FULLDATE  ( obcsNstartdate1, obcsNstartdate2,
     &      date_array, myThid )
       IF ( useOBCSYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   obcsNstartdate       ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   obcsNstartdate       ,myThid)
        obcsNstartdate   =  modelstart + obcsNstartdate
       ENDIF
      ENDIF
# endif /* ALLOW_OBCS_NORTH */
# ifdef ALLOW_OBCS_SOUTH
      IF ( obcsSperiod .GT. 0 ) THEN
       CALL CAL_FULLDATE  ( obcsSstartdate1, obcsSstartdate2,
     &      date_array, myThid )
       IF ( useOBCSYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   obcsSstartdate       ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   obcsSstartdate       ,myThid)
        obcsSstartdate   =  modelstart + obcsSstartdate
       ENDIF
      ENDIF
# endif /* ALLOW_OBCS_SOUTH */
# ifdef ALLOW_OBCS_EAST
      IF ( obcsEperiod .GT. 0 ) THEN
       CALL CAL_FULLDATE  ( obcsEstartdate1, obcsEstartdate2,
     &      date_array, myThid )
       IF ( useOBCSYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   obcsEstartdate       ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   obcsEstartdate       ,myThid)
        obcsEstartdate   =  modelstart + obcsEstartdate
       ENDIF
      ENDIF
# endif /* ALLOW_OBCS_EAST */
# ifdef ALLOW_OBCS_WEST
      IF ( obcsWperiod .GT. 0 ) THEN
       CALL CAL_FULLDATE  ( obcsWstartdate1, obcsWstartdate2,
     &      date_array, myThid )
       IF ( useOBCSYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   obcsWstartdate       ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   obcsWstartdate       ,myThid)
        obcsWstartdate   =  modelstart + obcsWstartdate
       ENDIF
      ENDIF
# endif /* ALLOW_OBCS_WEST */
# ifdef ALLOW_SEAICE
#  ifdef ALLOW_OBCS_NORTH
      IF ( siobNperiod .GT. 0 ) THEN
       CALL CAL_FULLDATE  ( siobNstartdate1, siobNstartdate2,
     &      date_array, myThid )
       IF ( useOBCSYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   siobNstartdate       ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   siobNstartdate       ,myThid)
        siobNstartdate   =  modelstart + siobNstartdate
       ENDIF
      ENDIF
#  endif /* ALLOW_OBCS_NORTH */
#  ifdef ALLOW_OBCS_SOUTH
      IF ( siobSperiod .GT. 0 ) THEN
       CALL CAL_FULLDATE  ( siobSstartdate1, siobSstartdate2,
     &      date_array, myThid )
       IF ( useOBCSYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   siobSstartdate       ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   siobSstartdate       ,myThid)
        siobSstartdate   =  modelstart + siobSstartdate
       ENDIF
      ENDIF
#  endif /* ALLOW_OBCS_SOUTH */
#  ifdef ALLOW_OBCS_EAST
      IF ( siobEperiod .GT. 0 ) THEN
       CALL CAL_FULLDATE  ( siobEstartdate1, siobEstartdate2,
     &      date_array, myThid )
       IF ( useOBCSYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   siobEstartdate       ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   siobEstartdate       ,myThid)
        siobEstartdate   =  modelstart + siobEstartdate
       ENDIF
      ENDIF
#  endif /* ALLOW_OBCS_EAST */
#  ifdef ALLOW_OBCS_WEST
      IF ( siobWperiod .GT. 0 ) THEN
       CALL CAL_FULLDATE  ( siobWstartdate1, siobWstartdate2,
     &      date_array, myThid )
       IF ( useOBCSYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   siobWstartdate       ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS ( difftime,   siobWstartdate       ,myThid)
        siobWstartdate   =  modelstart + siobWstartdate
       ENDIF
      ENDIF
#  endif /* ALLOW_OBCS_WEST */
# endif /* ALLOW_SEAICE */
#endif /* ALLOW_OBCS */

#ifdef ALLOW_CLIMSST_RELAXATION
      IF ( climsstfile .NE. ' ' .AND. climsstperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE( climsststartdate1, climsststartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS (difftime,    climsststartdate     ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS (difftime,    climsststartdate     ,myThid)
        climsststartdate =  modelstart + climsststartdate
       ENDIF
      ENDIF
#endif /* ALLOW_CLIMSST_RELAXATION */

#ifdef ALLOW_CLIMSSS_RELAXATION
      IF ( climsssfile .NE. ' ' .AND. climsssperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE( climsssstartdate1, climsssstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS (difftime,    climsssstartdate     ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS (difftime,    climsssstartdate     ,myThid)
        climsssstartdate =  modelstart + climsssstartdate
       ENDIF
      ENDIF
#endif /* ALLOW_CLIMSSS_RELAXATION */

#ifdef ALLOW_CLIMSTRESS_RELAXATION
      IF ( climustrfile .NE. ' ' .AND. climustrperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE( climustrstartdate1, climustrstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS (difftime,    climustrstartdate     ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS (difftime,    climustrstartdate     ,myThid)
        climustrstartdate =  modelstart + climustrstartdate
       ENDIF
      ENDIF
c
      IF ( climvstrfile .NE. ' ' .AND. climvstrperiod .GT. 0. ) THEN
       CALL CAL_FULLDATE( climvstrstartdate1, climvstrstartdate2,
     &      date_array, myThid )
       IF ( useExfYearlyFields ) THEN
        yearStartDate(1) = int(date_array(1)/10000.) * 10000 + 101
        yearStartDate(2) = 0
        yearStartDate(3) = date_array(3)
        yearStartDate(4) = date_array(4)
        CALL CAL_TIMEPASSED( yearStartDate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS (difftime,    climvstrstartdate     ,myThid)
       ELSE
        CALL CAL_TIMEPASSED(modelstartdate,date_array,difftime,myThid)
        CALL CAL_TOSECONDS (difftime,    climvstrstartdate     ,myThid)
        climvstrstartdate =  modelstart + climvstrstartdate
       ENDIF
      ENDIF
#endif /* ALLOW_CLIMSTRESS_RELAXATION */

      _END_MASTER( myThid )
      _BARRIER

#if defined(ALLOW_ZENITHANGLE)  defined(SHORTWAVE_HEATING)
      IF ( useExfZenAlbedo .OR. useExfZenIncoming ) THEN
       CALL EXF_ZENITHANGLE_TABLE(myThid)
      ENDIF
#endif

C--   Summarize the External forcing setup.
      CALL EXF_SUMMARY( myThid )

#ifdef ALLOW_DIAGNOSTICS
      IF ( useDiagnostics ) THEN
        CALL EXF_DIAGNOSTICS_INIT( myThid )
      ENDIF
#endif

      RETURN
      END