ESMF_CheckTime Function

function ESMF_CheckTime(testType, YYl, MM, DD, Dl, cal, rc)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: testType
integer(kind=ESMF_KIND_I8), intent(in) :: YYl
integer, intent(in) :: MM
integer, intent(in) :: DD
integer(kind=ESMF_KIND_I8), intent(in) :: Dl
type(ESMF_Calendar), intent(inout) :: cal
integer, intent(out), optional :: rc

Return Value logical


Calls

proc~~esmf_checktime~~CallsGraph proc~esmf_checktime ESMF_CheckTime interface~esmf_timeset ESMF_TimeSet proc~esmf_checktime->interface~esmf_timeset proc~esmf_timeget ESMF_TimeGet proc~esmf_checktime->proc~esmf_timeget proc~esmf_timesetdefault ESMF_TimeSetDefault interface~esmf_timeset->proc~esmf_timesetdefault proc~esmf_timesetstring ESMF_TimeSetString interface~esmf_timeset->proc~esmf_timesetstring c_esmc_timeget c_esmc_timeget proc~esmf_timeget->c_esmc_timeget proc~esmf_calendarsetinitcreated ESMF_CalendarSetInitCreated proc~esmf_timeget->proc~esmf_calendarsetinitcreated proc~esmf_imerrs ESMF_IMErrS proc~esmf_timeget->proc~esmf_imerrs proc~esmf_logfounderror ESMF_LogFoundError proc~esmf_timeget->proc~esmf_logfounderror proc~esmf_timegetinit ESMF_TimeGetInit proc~esmf_timeget->proc~esmf_timegetinit proc~esmf_timeinit ESMF_TimeInit proc~esmf_timeget->proc~esmf_timeinit proc~esmf_timeintervalinit ESMF_TimeIntervalInit proc~esmf_timeget->proc~esmf_timeintervalinit proc~esmf_imerrs->proc~esmf_logfounderror proc~esmf_initcheckshallow ESMF_InitCheckShallow proc~esmf_imerrs->proc~esmf_initcheckshallow esmf_breakpoint esmf_breakpoint proc~esmf_logfounderror->esmf_breakpoint proc~esmf_logrc2msg ESMF_LogRc2Msg proc~esmf_logfounderror->proc~esmf_logrc2msg proc~esmf_logwrite ESMF_LogWrite proc~esmf_logfounderror->proc~esmf_logwrite proc~esmf_timesetdefault->proc~esmf_logfounderror proc~esmf_timesetdefault->proc~esmf_timeinit c_esmc_timeset c_esmc_timeset proc~esmf_timesetdefault->c_esmc_timeset proc~esmf_calendargetinit ESMF_CalendarGetInit proc~esmf_timesetdefault->proc~esmf_calendargetinit proc~esmf_imerr ESMF_IMErr proc~esmf_timesetdefault->proc~esmf_imerr proc~esmf_timesetstring->interface~esmf_timeset proc~esmf_timesetstring->proc~esmf_logfounderror proc~esmf_imerr->proc~esmf_logfounderror proc~esmf_initcheckdeep ESMF_InitCheckDeep proc~esmf_imerr->proc~esmf_initcheckdeep c_esmc_loggeterrormsg c_esmc_loggeterrormsg proc~esmf_logrc2msg->c_esmc_loggeterrormsg c_esmc_vmwtime c_esmc_vmwtime proc~esmf_logwrite->c_esmc_vmwtime proc~esmf_logclose ESMF_LogClose proc~esmf_logwrite->proc~esmf_logclose proc~esmf_logflush ESMF_LogFlush proc~esmf_logwrite->proc~esmf_logflush proc~esmf_logopenfile ESMF_LogOpenFile proc~esmf_logwrite->proc~esmf_logopenfile proc~esmf_utiliounitflush ESMF_UtilIOUnitFlush proc~esmf_logwrite->proc~esmf_utiliounitflush proc~esmf_utilstring2array ESMF_UtilString2Array proc~esmf_logwrite->proc~esmf_utilstring2array

Called by

proc~~esmf_checktime~~CalledByGraph proc~esmf_checktime ESMF_CheckTime proc~esmf_runtestbackwards ESMF_RunTestBackwards proc~esmf_runtestbackwards->proc~esmf_checktime proc~esmf_runtestforwards ESMF_RunTestForwards proc~esmf_runtestforwards->proc~esmf_checktime

Source Code

      function ESMF_CheckTime(testType, YYl, MM, DD, Dl, cal, rc)

! !RETURN VALUE:      
      logical :: ESMF_CheckTime

! !ARGUMENTS:
      integer, intent(in) :: testType
      integer(ESMF_KIND_I8), intent(in) :: YYl
      integer, intent(in) :: MM
      integer, intent(in) :: DD
      integer(ESMF_KIND_I8), intent(in) :: Dl
      type(ESMF_Calendar), intent(inout) :: cal
      integer, intent(out), optional :: rc

      !character(ESMF_MAXSTR) :: calName
        
! !DESCRIPTION:
!     Checks given values against those set/get with ESMF
!
!EOPI

      ! ESMF returned variables
      integer(ESMF_KIND_I8) :: rYYl, rDl
      integer :: rMM, rDD
      logical :: broken 
      type(ESMF_Time) :: time

      broken = .false.

      if(testType.eq.CONVERT_TO_TIME .or. testType.eq.CONVERT_TO_BOTH) then

        !
        ! Input calendar conversion test
        !

        ! set date via given ESMF calendar
        call ESMF_TimeSet(time, yy_i8=YYl, mm=MM, dd=DD, calendar=cal, rc=rc)
        if (rc .ne. ESMF_SUCCESS) then
           ESMF_CheckTime = .true.
           return
        endif

        ! see what we get back
        call ESMF_TimeGet(time, yy_i8=rYYl, mm=rMM, dd=rDD, d_i8=rDl)

        ! must match
        if (.not.(rYYl.eq.YYl .and. rMM.eq.MM .and. rDD.eq.DD .and. &
                  rDl.eq.Dl)) then
          broken = .true.
          !call ESMF_CalendarGet(cal, name=calName)
          !print *, trim(calName), " Set/Get breaks,"
          !print *, " should be = ", YYl, "/", MM, "/", DD, " ", Dl
          !print *, " returned  = ", rYYl, "/", rMM, "/", rDD, " ", rDl
          !print *
        end if

        !
        ! Input calendar Set/Julian Day Get test
        !

        ! see what we get back via Julian Day calendar
        call ESMF_TimeSet(time, calendar=julianDayCalendar)
        call ESMF_TimeGet(time, d_i8=rDl)

        if (.not.(rDl.eq.Dl)) then
          broken = .true.
          !call ESMF_CalendarGet(cal, name=calName)
          !print *, trim(calName), " Set/Julian Day Get breaks,"
          !print *,                " should be = ", Dl
          !print *,                " returned  = ", rDl
          !print *
        end if

      end if

      if(testType.eq.CONVERT_TO_DATE .or. testType.eq.CONVERT_TO_BOTH) then

        !
        ! Julian Day test
        !

        ! set date via ESMF Julian Day calendar
        call ESMF_TimeSet(time, d_i8=Dl, calendar=julianDayCalendar)

        ! see what we get back
        call ESMF_TimeGet(time, d_i8=rDl)

        if (.not.(rDl.eq.Dl)) then
          broken = .true.
          !print *, "Julian Day Set/Get breaks,"
          !print *, " should be = ", Dl
          !print *, " returned  = ", rDl
          !print *
        end if
  
        !
        ! Julian Day Set/Input calendar Get test
        !

        ! see what we get back via input calendar
        call ESMF_TimeSet(time, calendar=cal)
        call ESMF_TimeGet(time, yy_i8=rYYl, mm=rMM, dd=rDD, d_i8=rDl, rc=rc)
        if (rc /= ESMF_SUCCESS) then
          broken = .true.
        else
          if (.not.(rYYl.eq.YYl .and. rMM.eq.MM .and. rDD.eq.DD .and. &
                  rDl.eq.Dl)) then
            broken = .true.
          !print *, "Julian Day Set/"
          !call ESMF_CalendarGet(cal, name=calName)
          !print *, trim(calName), " Get breaks,"
          !print *, " should be = ", YYl, "/", MM, "/", DD, " ", Dl
          !print *, " returned  = ", rYYl, "/", rMM, "/", rDD, " ", rDl
          !print *
          end if
        end if

      end if

      ! function return value
      ESMF_CheckTime = broken

      end function ESMF_CheckTime