06/01/27 02:39:51
MODULE mod_subs
IMPLICIT NONE
INTEGER, PARAMETER :: ndays_of_month(12, 2) = &
RESHAPE( (/31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, &
31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 /), (/12, 2/) )
CONTAINS
LOGICAL FUNCTION qleapyear(iyear)
IMPLICIT NONE
INTEGER, INTENT(IN) :: iyear
qleapyear = .FALSE.
IF ( MOD(iyear, 4) == 0 ) qleapyear = .TRUE.
IF ( MOD(iyear, 100) == 0 ) qleapyear = .FALSE.
IF ( MOD(iyear, 1000) == 0 ) qleapyear = .TRUE.
RETURN
END FUNCTION qleapyear
!
INTEGER FUNCTION idays_from_jan1(iyear, imonth, iday)
IMPLICIT NONE
INTEGER, INTENT(IN) :: iyear, imonth, iday
INTEGER :: i, ileap, n
ileap = 1
IF ( qleapyear(iyear) ) ileap = 2
n = 0
DO i = 1, imonth - 1
n = n + ndays_of_month(i, ileap)
END DO
idays_from_jan1 = n + iday
RETURN
END FUNCTION idays_from_jan1
END MODULE mod_subs