REAL *8 FUNCTION JD ( IDAY, IMON, IYEAR ) C C Returns the julian day for 0 hours ut. IMPLICIT UNDEFINED(A-Z) SAVE INTEGER *4 IDAY, IMON, IYEAR, YEAR0, YEAR1, DOY PARAMETER (YEAR0=1986) PARAMETER (YEAR1=1995) REAL *8 JD0(YEAR0:YEAR1) EXTERNAL DOY DATA JD0 / 2446430.5D0, 2446795.5D0, 2447160.5, 2447526.5, $ 2447891.5D0, 2448256.5D0, 2448621.5, 2448987.5, $ 2449352.5D0, 2449717.5D0 / IF (( IYEAR .LT. YEAR0 ).OR.( IYEAR .GT. YEAR1 ) ) THEN WRITE(0,'(A,I5)') ' INVALID YEAR FOR COMPUTING JD:', IYEAR ELSE JD = JD0(IYEAR) + DOY( IDAY, IMON, IYEAR ) END IF RETURN END INTEGER *4 FUNCTION DOY( IDAY, IMON, IYEAR ) C C Returns Day of Year for date in arguements ( 1 Jan => doy=1 ) IMPLICIT UNDEFINED(A-Z) SAVE INTEGER *4 IDAY, IMON, IYEAR, LEAP, I, NDAY(12,0:1) DATA NDAY / 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, $ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 / C LEAP=0 for leap lear LEAP = MIN( 1, MOD( IYEAR, 4 ) ) DOY = IDAY DO 100 I = 1, IMON DOY = DOY + NDAY(I, LEAP) 100 CONTINUE RETURN END SUBROUTINE NEXTDAY ( IDAY, IMON, IYEAR ) C C Increments the date by one C IMPLICIT UNDEFINED(A-Z) INTEGER *4 IDAY, IMON, IYEAR, DAYS(12,0:1), LEAP DATA DAYS / 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, $ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 / LEAP = MIN ( 1, MOD( IYEAR, 4 ) ) IDAY = IDAY + 1 IF ( IDAY .GT. DAYS(IMON,LEAP) ) THEN IMON = IMON + 1 IDAY = 1 IF ( IMON .EQ. 13 ) THEN IMON = 1 IYEAR = IYEAR + 1 END IF END IF RETURN END