parse_timeunit_i4 Subroutine

public subroutine parse_timeunit_i4(tunit, n, t0, dt, rc)

Uses

  • proc~~parse_timeunit_i4~~UsesGraph proc~parse_timeunit_i4 Plain_netCDF_Time::parse_timeunit_i4 ESMF ESMF proc~parse_timeunit_i4->ESMF

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: tunit
integer, intent(in) :: n
type(ESMF_Time), intent(out) :: t0
type(ESMF_TimeInterval), intent(out) :: dt
integer, intent(out), optional :: rc

Calls

proc~~parse_timeunit_i4~~CallsGraph proc~parse_timeunit_i4 Plain_netCDF_Time::parse_timeunit_i4 ESMF_CalendarCreate ESMF::ESMF_CalendarCreate proc~parse_timeunit_i4->ESMF_CalendarCreate ESMF_TimeIntervalSet ESMF::ESMF_TimeIntervalSet proc~parse_timeunit_i4->ESMF_TimeIntervalSet ESMF_TimeSet ESMF::ESMF_TimeSet proc~parse_timeunit_i4->ESMF_TimeSet interface~mapl_assert MAPL_ErrorHandlingMod::MAPL_Assert proc~parse_timeunit_i4->interface~mapl_assert proc~mapl_return MAPL_ErrorHandlingMod::MAPL_Return proc~parse_timeunit_i4->proc~mapl_return proc~mapl_verify MAPL_ErrorHandlingMod::MAPL_Verify proc~parse_timeunit_i4->proc~mapl_verify at at proc~mapl_return->at insert insert proc~mapl_return->insert proc~mapl_throw_exception MAPL_ThrowMod::MAPL_throw_exception proc~mapl_return->proc~mapl_throw_exception proc~mapl_verify->proc~mapl_throw_exception

Called by

proc~~parse_timeunit_i4~~CalledByGraph proc~parse_timeunit_i4 Plain_netCDF_Time::parse_timeunit_i4 interface~parse_timeunit Plain_netCDF_Time::parse_timeunit interface~parse_timeunit->proc~parse_timeunit_i4 proc~time_esmf_2_nc_int Plain_netCDF_Time::time_esmf_2_nc_int proc~time_esmf_2_nc_int->interface~parse_timeunit proc~time_nc_int_2_esmf Plain_netCDF_Time::time_nc_int_2_esmf proc~time_nc_int_2_esmf->interface~parse_timeunit interface~convert_time_esmf2nc Plain_netCDF_Time::convert_time_esmf2nc interface~convert_time_esmf2nc->proc~time_esmf_2_nc_int interface~convert_time_nc2esmf Plain_netCDF_Time::convert_time_nc2esmf interface~convert_time_nc2esmf->proc~time_nc_int_2_esmf

Source Code

  subroutine parse_timeunit_i4(tunit, n, t0, dt, rc)
    use ESMF
    implicit none

    character(len=*), intent(in) :: tunit
    integer, intent(in) :: n
    type(ESMF_Time), intent(out) :: t0
    type(ESMF_TimeInterval), intent(out) :: dt
    integer, optional, intent(out) :: rc
    integer :: status

    integer :: i
    character(len=ESMF_MAXSTR) :: s1, s2, s_time, s_unit
    character(len=1) :: c1
    integer :: y,m,d,hour,min,sec
    integer :: isec
    type(ESMF_Calendar) :: gregorianCalendar

    i=index(trim(tunit), 'since')
    s_time=trim(tunit(i+5:))
    s_unit=trim(tunit(1:i-1))
    read(s_time,*) s1, s2
    read(s1, '(i4,a1,i2,a1,i2)') y, c1, m, c1, d
    read(s2, '(i2,a1,i2,a1,i2)') hour, c1, min, c1, sec

    _ASSERT(trim(s_unit) == 'seconds', "s_unit /= 'seconds' is not handled")
    isec=n

    gregorianCalendar = ESMF_CalendarCreate(ESMF_CALKIND_GREGORIAN, name='Gregorian_obs', _RC)
    call ESMF_timeSet(t0, yy=y,mm=m,dd=m,h=hour,m=min,s=sec,&
         calendar=gregorianCalendar, _RC)
    call ESMF_timeintervalSet(dt, d=0, h=0, m=0, s=isec, _RC)

   _RETURN(_SUCCESS)

  end subroutine parse_timeunit_i4