module time_utils 1,3 use shr_kind_mod, only : r8 => shr_kind_r8 use abortutils, only : endrun use cam_logfile, only : iulog private public :: flt_date, moz_findplb contains subroutine moz_findplb( x, nx, xval, index ) !----------------------------------------------------------------------- ! ... find periodic lower bound ! search the input array for the lower bound of the interval that ! contains the input value. the returned index satifies: ! x(index) .le. xval .lt. x(index+1) ! assume the array represents values in one cycle of a periodic coordinate. ! so, if xval .lt. x(1), then index=nx. !----------------------------------------------------------------------- implicit none !----------------------------------------------------------------------- ! ... dummy args !----------------------------------------------------------------------- integer, intent(in) :: nx integer, intent(out) :: index real(r8), intent(in) :: x(nx) ! strictly increasing array real(r8), intent(in) :: xval !----------------------------------------------------------------------- ! ... local variables !----------------------------------------------------------------------- integer :: i if( xval < x(1) .or. xval >= x(nx) ) then index = nx return end if do i = 2,nx if( xval < x(i) ) then index = i - 1 exit end if end do end subroutine moz_findplb real(r8) function flt_date( ncdate, ncsec ) 3,2 !----------------------------------------------------------------------- ! Purpose: Convert date and seconds of day to floating point days since ! 0001/01/01 !----------------------------------------------------------------------- use time_manager, only : timemgr_datediff implicit none !----------------------------------------------------------------------- ! ... dummy arguments !----------------------------------------------------------------------- integer, intent(in) :: ncdate ! Current date as yyyymmdd integer, intent(in) :: ncsec ! Seconds of day for current date integer :: refymd = 00010101 integer :: reftod = 0 call timemgr_datediff(refymd, reftod, ncdate, ncsec, flt_date) end function flt_date end module time_utils