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