subroutine bnddyi (ncdate, ncsec, doy) 4,5
!-----------------------------------------------------------------------
!
! Purpose: Convert date and seconds of day to floating point calendar day, for
! boundary dataset handling
!
! Method: Use table of days per month to do conversion
!
! Author: CCM Core Group
!
!-----------------------------------------------------------------------
use shr_kind_mod
, only: r8 => shr_kind_r8
use abortutils
, only: endrun
use cam_logfile
, only: iulog
!-----------------------------------------------------------------------
implicit none
!--------------------------Arguments------------------------------------
!
! Arguments
!
integer, intent(in) :: ncdate ! Current date as yymmdd or yyyymmdd
integer, intent(in) :: ncsec ! Seconds of day for current date
real(r8), intent(out) :: doy ! Day of year
!
! Local Variables
!
integer mnth ! Month number
integer mday ! Day number of month
integer jdcon(12) ! Starting day number for each month
save jdcon
data jdcon/0,31,59,90,120,151,181,212,243,273,304,334/
!
! Decode month and day
!
mnth = mod(ncdate,10000)/100
if (mnth < 1 .or. mnth > 12) then
write(iulog,*)'BNDDYI: Bad month index=', mnth
call endrun
end if
mday = mod(ncdate,100)
doy = jdcon(mnth) + mday + ncsec/86400._r8
if (doy < 1._r8 .or. doy > 366._r8) then
write(iulog,*)'BNDDYI: bad day of year = ',doy
call endrun
end if
!
return
end subroutine bnddyi