NCEPLIBS-w3emc  2.9.2
w3ymdh4.f
Go to the documentation of this file.
1 C> @file
2 C
3 C> SUBPROGRAM: W3YMDH4 4-BYTE DATE WORD UNPACKER AND PACKER
4 C> AUTHOR: Brill,K.F. ORG: NP/22 DATE: 98-07-29
5 C>
6 C> ABSTRACT: OBTAINS THE COMPONENTS OF THE NMC DATE WORD (NCEP Y2K
7 C> COMPLIANT FORM), OR GIVEN ITS COMPONENTS, FORMS AN NMC TYPE DATE
8 C> WORD. THE PACKING IS DONE USING BASE 32.
9 C>
10 C> If the first byte of IDATE is less than 101, then the old
11 C> Office Note 84 packing is assumed. A four-digit year is
12 C> always returned. To pack the "old" way, pass in a 2-digit
13 C> year.
14 C>
15 C> This program will work for the years ranging from A.D. 101
16 C> through 79359.
17 C>
18 C> On unpacking, years less than or equal to 100 are returned
19 C> as follows:
20 C>
21 C> 0-50 2000--2050
22 C> 51-100 1951--2000
23 C>
24 C>
25 C> PROGRAM HISTORY LOG:
26 C> 98-07-29 K.F.BRILL
27 C> 1999-03-15 Gilbert - Removed Call to W3FS11 and put its
28 C> processing inline. W3FS11 was deleted
29 C> from the W3LIB.
30 C>
31 C> USAGE: CALL W3YMDH4 (IDATE, IYEAR, MONTH, IDAY, IHOUR, NN)
32 C>
33 C> INPUT VARIABLES:
34 C> NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES
35 C> ------ --------- -----------------------------------------------
36 C> IDATE ARG LIST LEFT 4 BYTES OF INTEGER 64 BIT WORD, OR CAN BE
37 C> CHARACTER*1 IDATE(4) OR CHARACTER*4 IDATE.
38 C> IYEAR ARG LIST INTEGER YEAR (4 DIGITS or 2 DIGITS for ON84)
39 C> MONTH ARG LIST INTEGER MONTH
40 C> IDAY ARG LIST INTEGER DAY
41 C> IHOUR ARG LIST INTEGER HOUR
42 C> NN ARG LIST INTEGER CODE:
43 C> .EQ. 0 PACK IYEAR, MONTH, IDAY, IHOUR INTO IDATE
44 C> .NE. 0 UNPACK IDATE INTO IYEAR, MONTH, IDAY, IHOUR
45 C>
46 C> OUTPUT VARIABLES:
47 C> NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES
48 C> ------ --------- -----------------------------------------------
49 C> IDATE ARG LIST LEFT 4 BYTES OF INTEGER 64 BIT WORD, OR CAN BE
50 C> CHARACTER*1 IDATE(4) OR CHARACTER*4 IDATE.
51 C> IYEAR ARG LIST INTEGER YEAR (4 DIGITS)
52 C> MONTH ARG LIST INTEGER MONTH
53 C> IDAY ARG LIST INTEGER DAY
54 C> IHOUR ARG LIST INTEGER HOUR
55 C>
56 C> SUBROGRAMS CALLED:
57 C> NAMES LIBRARY
58 C> ------------------------------------------------------- --------
59 C> CHAR F90
60 C> MOVA2I W3
61 C>
62 C> ATTRIBUTES:
63 C> LANGUAGE: CRAY CFT90 FORTRAN
64 C> MACHINE: CRAY Y-MP8/832
65 C>
66  SUBROUTINE w3ymdh4 (IDATE,IYEAR,MONTH,IDAY,IHOUR,NN)
67 C
68  CHARACTER IDATE(4)
69 C
70  IF (nn.NE.0) THEN
71 C
72  itemp = mova2i(idate(1))
73  IF ( itemp .lt. 101 ) THEN
74  iyear = mova2i(idate(1))
75  month = mova2i(idate(2))
76  iday = mova2i(idate(3))
77  ihour = mova2i(idate(4))
78  IF(iyear.LE.100) iyear=2050-mod(2050-iyear,100)
79  RETURN
80  END IF
81  itemp = itemp - 101
82  itemp = itemp * 256 + mova2i(idate(2))
83  itemp = itemp * 256 + mova2i(idate(3))
84  itemp = itemp * 256 + mova2i(idate(4))
85  ihour = mod( itemp, 32 )
86  itemp = itemp / 32
87  iday = mod( itemp, 32 )
88  itemp = itemp / 32
89  month = mod( itemp, 32 )
90  iyear = itemp / 32
91 C
92  ELSE
93 C
94  itemp = iyear
95  IF ( itemp .lt. 101 ) THEN
96  idate(1) = char(iyear)
97  idate(2) = char(month)
98  idate(3) = char(iday)
99  idate(4) = char(ihour)
100  RETURN
101  END IF
102  itemp = itemp * 32 + month
103  itemp = itemp * 32 + iday
104  itemp = itemp * 32 + ihour
105 C*
106  idate(4)=char(mod(itemp,256))
107  itemp = itemp / 256
108  idate(3)=char(mod(itemp,256))
109  itemp = itemp / 256
110  idate(2)=char(mod(itemp,256))
111  itemp = itemp / 256
112  itemp = itemp + 101
113  idate(1)=char(itemp)
114 C
115  ENDIF
116 C
117  RETURN
118  END
mova2i
integer function mova2i(a)
This Function copies a bit string from a Character*1 variable to an integer variable.
Definition: mova2i.f:25
w3ymdh4
subroutine w3ymdh4(IDATE, IYEAR, MONTH, IDAY, IHOUR, NN)
SUBPROGRAM: W3YMDH4 4-BYTE DATE WORD UNPACKER AND PACKER AUTHOR: Brill,K.F.
Definition: w3ymdh4.f:67