!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE JULDAY ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE julday( year, month, day, jday ) 17
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Compute Julian day from year, month, and day
!
! Start from 1 (Jan. 1) to 365, or 366 for leap year (Dec. 31)
!
! The rule is that a year will be a leap year if
!
! the year can be divided by 400, or
! the year can by divided by 4, but not by 100
!
! Form this rule year 1972, 1984, 1996, and 2000 are leap years,
! but 1700, 1800 and 1900 are not.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Yuhe Liu
! 07/29/93
!
! MODIFICATIONS:
!
! 05/06/1998 (Yuhe Liu)
! Corrected the leap year calculation.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! year Reference calendar year
! month Reference monthe of the year
! day Reference day of the month
!
! OUTPUT:
!
! jday Julian day, start from 1 -- Jan. 1 to 365 -- Dec. 31
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: year, month, day, jday
INTEGER :: lpyear, lp
INTEGER :: mndys(12) ! Day numbers for each month
DATA mndys/0,31,59,90,120,151,181,212,243,273,304,334/
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
IF ( MOD(year,400) == 0 .OR. &
(MOD(year,4) == 0 .AND. MOD(year,100) /= 0 ) ) THEN
lpyear = 1
ELSE
lpyear = 0
END IF
lp = 0
IF ( month > 2 ) lp = lpyear
jday = mndys(month) + day + lp
RETURN
END SUBROUTINE julday
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE CALDAY ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE calday( jday, year, month, day ) 1
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Computes the month and day from Julian day.
!
! Start from Jan. 1 -- day 1 to Dec. 31 -- day 365, or 366 for leap.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Yuhe Liu
! 07/29/93
!
! MODIFICATIONS:
!
! 05/06/1998 (Yuhe Liu)
! Corrected the leap year calculation.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! year Calendar year
! jday Julian day, start from 1 -- Jan. 1 to 365 -- Dec. 31
!
! OUTPUT:
!
! month Monthe of the year
! day Day of the month
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: jday
INTEGER :: year, month, day
INTEGER :: i, lpyear, lp
INTEGER :: mndys(12) ! Day numbers for each month
DATA mndys/0,31,59,90,120,151,181,212,243,273,304,334/
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
IF ( MOD(year,400) == 0 .OR. &
(MOD(year,4) == 0 .AND. MOD(year,100) /= 0) ) THEN
lp = 1
ELSE
lp = 0
END IF
DO i = 1, 2
IF ( jday > mndys(i) ) THEN
month = i
END IF
END DO
DO i = 3, 12
IF ( jday > mndys(i)+lp ) THEN
month = i
END IF
END DO
day = jday - mndys(month)
IF ( month > 2 ) day = day - lp
!
RETURN
END SUBROUTINE calday
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE CTIM2ABSS ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE ctim2abss( iyr,imon,idy,ihr,imin,isec, abstsec ) 29,1
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Convert the calendar date and time to absolute time in second
! beginning from 00:00:00 UTC, Jan. 1, 1960
!
!-----------------------------------------------------------------------
!
! AUTHOR:
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! iyr Calendar year
! imon Monthe of the year
! idy Day of the month
!
! ihr Hours in the day
! imin Minute of the hour
! isec Seconds of the minute
!
! OUTPUT:
!
! abstsec Time in seconds referred to 00:00:00, Jan. 1, 1960
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: iyr, imon, idy, ihr, imin, isec
INTEGER :: abstsec
INTEGER :: lp,jdy
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
lp = (iyr + 3 - 1960) / 4 ! Number of leap days since 1960
CALL julday
(iyr, imon, idy, jdy)
abstsec = (iyr-1960) * 31536000 &
+ (jdy-1) * 86400 &
+ ihr * 3600 &
+ imin * 60 &
+ isec
abstsec = abstsec + 86400 * lp
RETURN
END SUBROUTINE ctim2abss
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE ABSS2CTIM ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE abss2ctim( abstsec, iyr, imon, idy, ihr, imin, isec ) 18,1
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Convert the absolute time(sec) starting from 00:00:00 UTC, Jan.
! 1, 1960, to calendar day time.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Yuhe Liu
! 05/24/94
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! abstsec Time in seconds starting from 00:00:00, Jan. 1, 1960
!
! OUTPUT:
!
! iyr Calendar year
! jdy Julian day
!
! ihr Hours in the day
! imin Minutes of the hour
! isec Seconds of the minute
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
!
INTEGER :: abstsec
INTEGER :: iyr, imon, idy, ihr, imin, isec
INTEGER :: i,j,k,lp,jdy
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
isec = MOD( abstsec, 60 )
imin = MOD( abstsec/60, 60)
ihr = MOD( abstsec/3600, 24)
jdy = abstsec/86400 + 1
i = ( jdy - 1 ) / 1461
j = MOD( jdy - 1, 1461) + 1
k = ( j - 2 ) / 365
iyr = i * 4 + k + 1960
lp = i + ( k + 3 ) / 4
jdy = jdy - ( i * 4 + k ) * 365 - lp
CALL calday
( jdy, iyr, imon, idy )
RETURN
END SUBROUTINE abss2ctim