/WPS/ungrib/src/ngl/w3/w3fs26.f
FORTRAN Legacy | 87 lines | 16 code | 0 blank | 71 comment | 0 complexity | dc6c11d98a9bbf14257e32a8a34816a4 MD5 | raw file
Possible License(s): AGPL-1.0
- SUBROUTINE W3FS26(JLDAYN,IYEAR,MONTH,IDAY,IDAYWK,IDAYYR)
- C$$$ SUBPROGRAM DOCUMENTATION BLOCK
- C
- C SUBPROGRAM: W3FS26 YEAR, MONTH, DAY FROM JULIAN DAY NUMBER
- C AUTHOR: JONES,R.E. ORG: W342 DATE: 87-03-29
- C
- C ABSTRACT: COMPUTES YEAR (4 DIGITS), MONTH, DAY, DAY OF WEEK, DAY
- C OF YEAR FROM JULIAN DAY NUMBER. THIS SUBROUTINE WILL WORK
- C FROM 1583 A.D. TO 3300 A.D.
- C
- C PROGRAM HISTORY LOG:
- C 87-03-29 R.E.JONES
- C 89-10-25 R.E.JONES CONVERT TO CRAY CFT77 FORTRAN
- C
- C USAGE: CALL W3FS26(JLDAYN,IYEAR,MONTH,IDAY,IDAYWK,IDAYYR)
- C
- C INPUT VARIABLES:
- C NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES
- C ------ --------- -----------------------------------------------
- C JLDAYN ARG LIST INTEGER JULIAN DAY NUMBER
- C
- C OUTPUT VARIABLES:
- C NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES
- C ------ --------- -----------------------------------------------
- C IYEAR ARG LIST INTEGER YEAR (4 DIGITS)
- C MONTH ARG LIST INTEGER MONTH
- C IDAY ARG LIST INTEGER DAY
- C IDAYWK ARG LIST INTEGER DAY OF WEEK (1 IS SUNDAY, 7 IS SAT)
- C IDAYYR ARG LIST INTEGER DAY OF YEAR (1 TO 366)
- C
- C REMARKS: A JULIAN DAY NUMBER CAN BE COMPUTED BY USING ONE OF THE
- C FOLLOWING STATEMENT FUNCTIONS. A DAY OF WEEK CAN BE COMPUTED
- C FROM THE JULIAN DAY NUMBER. A DAY OF YEAR CAN BE COMPUTED FROM
- C A JULIAN DAY NUMBER AND YEAR.
- C
- C IYEAR (4 DIGITS)
- C
- C JDN(IYEAR,MONTH,IDAY) = IDAY - 32075
- C & + 1461 * (IYEAR + 4800 + (MONTH - 14) / 12) / 4
- C & + 367 * (MONTH - 2 - (MONTH -14) / 12 * 12) / 12
- C & - 3 * ((IYEAR + 4900 + (MONTH - 14) / 12) / 100) / 4
- C
- C IYR (4 DIGITS) , IDYR(1-366) DAY OF YEAR
- C
- C JULIAN(IYR,IDYR) = -31739 + 1461 * (IYR + 4799) / 4
- C & -3 * ((IYR + 4899) / 100) / 4 + IDYR
- C
- C DAY OF WEEK FROM JULIAN DAY NUMBER, 1 IS SUNDAY, 7 IS SATURDAY.
- C
- C JDAYWK(JLDAYN) = MOD((JLDAYN + 1),7) + 1
- C
- C DAY OF YEAR FROM JULIAN DAY NUMBER AND 4 DIGIT YEAR.
- C
- C JDAYYR(JLDAYN,IYEAR) = JLDAYN -
- C & (-31739+1461*(IYEAR+4799)/4-3*((IYEAR+4899)/100)/4)
- C
- C THE FIRST FUNCTION WAS IN A LETTER TO THE EDITOR COMMUNICATIONS
- C OF THE ACM VOLUME 11 / NUMBER 10 / OCTOBER, 1968. THE 2ND
- C FUNCTION WAS DERIVED FROM THE FIRST. THIS SUBROUTINE WAS ALSO
- C INCLUDED IN THE SAME LETTER. JULIAN DAY NUMBER 1 IS
- C JAN 1,4713 B.C. A JULIAN DAY NUMBER CAN BE USED TO REPLACE A
- C DAY OF CENTURY, THIS WILL TAKE CARE OF THE DATE PROBLEM IN
- C THE YEAR 2000, OR REDUCE PROGRAM CHANGES TO ONE LINE CHANGE
- C OF 1900 TO 2000. JULIAN DAY NUMBERS CAN BE USED FOR FINDING
- C RECORD NUMBERS IN AN ARCHIVE OR DAY OF WEEK, OR DAY OF YEAR.
- C
- C ATTRIBUTES:
- C LANGUAGE: CRAY CFT77 FORTRAN
- C MACHINE: CRAY Y-MP8/864
- C
- C$$$
- C
- L = JLDAYN + 68569
- N = 4 * L / 146097
- L = L - (146097 * N + 3) / 4
- I = 4000 * (L + 1) / 1461001
- L = L - 1461 * I / 4 + 31
- J = 80 * L / 2447
- IDAY = L - 2447 * J / 80
- L = J / 11
- MONTH = J + 2 - 12 * L
- IYEAR = 100 * (N - 49) + I + L
- IDAYWK = MOD((JLDAYN + 1),7) + 1
- IDAYYR = JLDAYN -
- & (-31739 +1461 * (IYEAR+4799) / 4 - 3 * ((IYEAR+4899)/100)/4)
- RETURN
- END