SUBROUTINE W3FP06(ID,KTITLE,N) ! SUBPROGRAM DOCUMENTATION BLOCK ! ! SUBPROGRAM: W3FP06 NMC TITLE SUBROUTINE ! AUTHOR: JONES,R.E. ORG: W342 DATE: 86-12-03 ! ! ABSTRACT: PROVIDES A TITLE FOR DATA FIELDS FORMULATED ACCORDING TO ! NMC O.N. 84. THE EXTRACTED INFORMATION IS CONVERTED INTO UP TO ! 81 WORDS AND STORED AT A USER PROVIDED LOCATION. ! ! PROGRAM HISTORY LOG: ! 88-11-28 R.E.JONES ! 90-02-12 R.E.JONES CONVERT TO CRAY CFT77 FORTRAN ! 91-04-26 R.E.JONES ADD Q TYPE 23, 136, 137, 71, 159, 75, 118, ! 119, 24 TO TABLES, CHANGES FOR BIG RECORDS. ! 93-02-23 R.E.JONES ADD Q TYPE 157 & 158 (CORE & TKE) TO TABLES ! ! USAGE: CALL W3FP06 (ARG1, ARG2, N) ! ! INPUT VARIABLES: ! NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES ! ------ --------- ----------------------------------------------- ! ARG1 ARG LIST 12 WORD FIELD LABEL DESCRIBING THE DATA (6 ! INTEGER WORDS) OFFICE NOTE 84 ! N ARG LIST INTEGER NUMBER OF LINES OF OUTPUT DESIRED ! = 1 FIRST 88 CHAR. THE ABBREVIATED TITLE ! (LINE 1 STARTS AT ARG2(1)) ! = 2 FIRST 216 CHAR. DECIMAL VALUES OF THE ! PARAMETERS ! = 3 ALL 324 CHAR., HEXIDECIMAL DUMP OF THE 12 ! WORD FIELD LABEL (LINE 3 CHAR. 221 ! ! OUTPUT VARIABLES: ! NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES ! ------ --------- ----------------------------------------------- ! ARG2 ARG LIST CHARACTER*324 SIZE ARRAY TO CONTAIN ! THE TITLE IN ACSII ! ! SUBPROGRAMS CALLED: ! NAMES LIBRARY ! ------------------------------------------------------- -------- ! LINE01 LINE02 LINE03 VALUE1 UNIQUE ! INTERNAL (WRITE) AND SHIFT SYSTEM ! ! REMARKS: SEE NMC O.N. 84 FOR DATA FIELD ABBREVIATIONS ! ! ATTRIBUTES: ! LANGUAGE: IBM XL FORTRAN ! MACHINE: IBM SP ! ! ! INTEGER(8) ID(6) INTEGER(4) MASK(8) ! CHARACTER * 324 KTITLE ! DATA MASK(1)/X'0000000F'/ DATA MASK(2)/X'000000FF'/ DATA MASK(3)/X'00000FFF'/ DATA MASK(4)/X'0000FFFF'/ DATA MASK(5)/X'000FFFFF'/ DATA MASK(6)/X'00FFFFFF'/ DATA MASK(7)/X'0FFFFFFF'/ DATA MASK(8)/X'FFFFFFFF'/ ! CALL LINE01(ID,MASK,KTITLE) IF (N.GT.1) GO TO 10 RETURN ! 10 CONTINUE CALL LINE02(ID,MASK,KTITLE) IF (N.GT.2) GO TO 20 RETURN ! 20 CONTINUE CALL LINE03(ID,KTITLE) RETURN END SUBROUTINE LINE01(ID,MASK,KTITLE) ! SUBPROGRAM DOCUMENTATION BLOCK ! ! SUBPROGRAM: LINE01 CREATES THE FIRST LINE OF TITLE ! AUTHOR: JONES,R.E. ORG: W342 DATE: 86-12-03 ! ! ABSTRACT: CREATES THE FIST LINE OF THE TITLE FROM THE ID WORDS. ! CALL BY W3FP06 TO MAKE 1ST LINE OF TITLE. WORDS 1 TO 22. ! ! PROGRAM HISTORY LOG: ! 88-09-02 R.E.JONES ! 93-02-23 R.E.JONES ADD Q TYPE 157 & 158 (CORE & TKE) TO TABLES ! ! USAGE: CALL LINE01(ID,MASK,KTITLE) ! ! INPUT VARIABLES: ! NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES ! ------ --------- ----------------------------------------------- ! ID ARG LIST ID WORDS (6 INTEGER WORDS) OFFICE NOTE 84 ! MASK ARG LIST MASK FOR UNPACKING ID WORDS (8 INTEGER WORDS) ! ! OUTPUT VARIABLES: ! NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES ! ------ --------- ----------------------------------------------- ! KTITLE ARG LIST CHARACTER *324 ARRAY ! TAPE6 ERROR MESSAGES ! ! SUBPROGRAMS CALLED: ! NAMES LIBRARY ! ------------------------------------------------------- -------- ! AND SHIFT SYSLIB ! VALUE1 CLIMO SETCL UNIQUE ! ! ATTRIBUTES: ! LANGUAGE: IBM XL FORTRAN ! MACHINE: IBM SP ! ! ! ! CREATES THE FIRST 22 WORDS OF TITLER ! INTEGER(8) ID(6) INTEGER(4) MASK(8) INTEGER(4) SHFMSK(17) ! CHARACTER * 4 UNIT CHARACTER * 4 UNIT1 CHARACTER * 4 DAYS CHARACTER * 5 FOR CHARACTER * 5 FOR1 CHARACTER * 1 DASH CHARACTER * 8 KNAME(9) CHARACTER * 8 KNAME1(3) CHARACTER * 324 KTITLE CHARACTER * 8 KWRITE(3) CHARACTER * 8 INUM1 CHARACTER * 8 INUM2 CHARACTER * 6 QNAME1 CHARACTER * 6 QNAME2 CHARACTER * 6 QNAME3 CHARACTER * 2 DN CHARACTER * 6 QNAME(166) CHARACTER * 6 QWRITE CHARACTER * 4 SNAME(18) CHARACTER * 20 VUNIT(2) CHARACTER * 7 AFTER CHARACTER * 7 AFTBEF ! INTEGER KK(3) INTEGER LL(166) INTEGER JKEEP(17) INTEGER JLIST(17) INTEGER C1,C2,E1,E2,S1,S2,Q,M,G INTEGER YY,MM,DD,HH,F1,F2,JT,JN ! ! IDWORDS: MASK CONTROL (INTEGER) ! DATA SHFMSK( 1)/X'20020100'/ DATA SHFMSK( 2)/X'28020400'/ DATA SHFMSK( 3)/X'30020400'/ DATA SHFMSK( 4)/X'38020400'/ DATA SHFMSK( 5)/X'08050100'/ DATA SHFMSK( 6)/X'00020100'/ DATA SHFMSK( 7)/X'08050200'/ DATA SHFMSK( 8)/X'00020200'/ DATA SHFMSK( 9)/X'3C010200'/ DATA SHFMSK(10)/X'28030100'/ DATA SHFMSK(11)/X'28030200'/ DATA SHFMSK(12)/X'34030100'/ DATA SHFMSK(13)/X'20020400'/ DATA SHFMSK(14)/X'30020400'/ DATA SHFMSK(15)/X'1C010100'/ DATA SHFMSK(16)/X'1C010200'/ DATA SHFMSK(17)/X'20020200'/ ! ! REFERENCE TABLE FOR SNAME. ! DATA JLIST(1)/1/ DATA JLIST(2)/2/ DATA JLIST(3)/6/ DATA JLIST(4)/7/ DATA JLIST(5)/8/ DATA JLIST(6)/16/ DATA JLIST(7)/19/ DATA JLIST(8)/128/ DATA JLIST(9)/129/ DATA JLIST(10)/130/ DATA JLIST(11)/144/ DATA JLIST(12)/145/ DATA JLIST(13)/146/ DATA JLIST(14)/147/ DATA JLIST(15)/148/ DATA JLIST(16)/131/ DATA JLIST(17)/132/ ! ! SNAME TABLE. ! DATA SNAME( 1)/' GPM'/ DATA SNAME( 2)/' PA '/ DATA SNAME( 3)/' M '/ DATA SNAME( 4)/' M '/ DATA SNAME( 5)/' MB '/ DATA SNAME( 6)/' DEG'/ DATA SNAME( 7)/' POT'/ DATA SNAME( 8)/' MSL'/ DATA SNAME( 9)/' SFC'/ DATA SNAME(10)/' TRO'/ DATA SNAME(11)/' BDY'/ DATA SNAME(12)/' TRS'/ DATA SNAME(13)/' STS'/ DATA SNAME(14)/' QCP'/ DATA SNAME(15)/' SIG'/ DATA SNAME(16)/'MWSL'/ DATA SNAME(17)/'PLYR'/ DATA SNAME(18)/' '/ ! ! REFERENCE TABLE FOR QNAME. ! DATA LL( 1)/ 1/ DATA LL( 2)/ 2/ DATA LL( 3)/ 6/ DATA LL( 4)/ 8/ DATA LL( 5)/ 16/ DATA LL( 6)/ 17/ DATA LL( 7)/ 18/ DATA LL( 8)/ 19/ DATA LL( 9)/ 20/ DATA LL(10)/ 21/ DATA LL(11)/ 40/ DATA LL(12)/ 41/ DATA LL(13)/ 42/ DATA LL(14)/ 43/ DATA LL(15)/ 44/ DATA LL(16)/ 48/ DATA LL(17)/ 49/ DATA LL(18)/ 50/ DATA LL(19)/ 51/ DATA LL(20)/ 52/ DATA LL(21)/ 53/ DATA LL(22)/ 54/ DATA LL(23)/ 55/ DATA LL(24)/ 56/ DATA LL(25)/ 57/ DATA LL(26)/ 58/ DATA LL(27)/ 59/ DATA LL(28)/ 60/ DATA LL(29)/ 72/ DATA LL(30)/ 73/ DATA LL(31)/ 74/ DATA LL(32)/ 80/ DATA LL(33)/ 81/ DATA LL(34)/ 88/ DATA LL(35)/ 89/ DATA LL(36)/ 90/ DATA LL(37)/ 91/ DATA LL(38)/ 92/ DATA LL(39)/ 93/ DATA LL(40)/ 94/ DATA LL(41)/ 95/ DATA LL(42)/ 96/ DATA LL(43)/112/ DATA LL(44)/113/ DATA LL(45)/114/ DATA LL(46)/115/ DATA LL(47)/120/ DATA LL(48)/121/ DATA LL(49)/160/ DATA LL(50)/161/ DATA LL(51)/162/ DATA LL(52)/163/ DATA LL(53)/164/ DATA LL(54)/165/ DATA LL(55)/166/ DATA LL(56)/167/ DATA LL(57)/168/ DATA LL(58)/169/ DATA LL(59)/170/ DATA LL(60)/171/ DATA LL(61)/176/ DATA LL(62)/177/ DATA LL(63)/178/ DATA LL(64)/184/ DATA LL(65)/185/ DATA LL(66)/186/ DATA LL(67)/187/ DATA LL(68)/188/ DATA LL(69)/384/ DATA LL(70)/385/ DATA LL(71)/386/ DATA LL(72)/387/ DATA LL(73)/388/ DATA LL(74)/389/ DATA LL(75)/390/ DATA LL(76)/391/ DATA LL(77)/ 97/ DATA LL(78)/ 98/ DATA LL(79)/ 99/ DATA LL(80)/100/ DATA LL(81)/101/ DATA LL(82)/102/ DATA LL(83)/103/ DATA LL(84)/172/ DATA LL(85)/200/ DATA LL(86)/201/ DATA LL(87)/202/ DATA LL(88)/203/ DATA LL(89)/392/ DATA LL(90)/ 7/ DATA LL(91)/ 61/ DATA LL(92)/104/ DATA LL(93)/173/ DATA LL(94)/174/ DATA LL(95)/175/ DATA LL(96)/304/ DATA LL(97)/305/ DATA LL(98)/400/ DATA LL(99)/401/ DATA LL(100)/402/ DATA LL(101)/403/ DATA LL(102)/404/ DATA LL(103)/405/ DATA LL(104)/ 9/ DATA LL(105)/105/ DATA LL(106)/116/ DATA LL(107)/106/ DATA LL(108)/107/ DATA LL(109)/108/ DATA LL(110)/179/ DATA LL(111)/180/ DATA LL(112)/181/ DATA LL(113)/182/ DATA LL(114)/183/ DATA LL(115)/189/ DATA LL(116)/190/ DATA LL(117)/191/ DATA LL(118)/192/ DATA LL(119)/193/ DATA LL(120)/194/ DATA LL(121)/195/ DATA LL(122)/196/ DATA LL(123)/197/ DATA LL(124)/198/ DATA LL(125)/199/ DATA LL(126)/204/ DATA LL(127)/210/ DATA LL(128)/211/ DATA LL(129)/212/ DATA LL(130)/213/ DATA LL(131)/214/ DATA LL(132)/215/ DATA LL(133)/216/ DATA LL(134)/117/ DATA LL(135)/209/ DATA LL(136)/ 22/ DATA LL(137)/ 62/ DATA LL(138)/ 63/ DATA LL(139)/ 82/ DATA LL(140)/ 83/ DATA LL(141)/ 84/ DATA LL(142)/ 85/ DATA LL(143)/205/ DATA LL(144)/206/ DATA LL(145)/207/ DATA LL(146)/208/ DATA LL(147)/217/ DATA LL(148)/109/ DATA LL(149)/110/ DATA LL(150)/111/ DATA LL(151)/86/ DATA LL(152)/87/ DATA LL(153)/218/ DATA LL(154)/133/ DATA LL(155)/134/ DATA LL(156)/135/ DATA LL(157)/23/ DATA LL(158)/136/ DATA LL(159)/137/ DATA LL(160)/71/ DATA LL(161)/159/ DATA LL(162)/75/ DATA LL(163)/157/ DATA LL(164)/119/ DATA LL(165)/24/ DATA LL(166)/158/ ! ! QNAME TABLE: CHARACTER*6 ! DATA QNAME( 1)/' HGT '/ DATA QNAME( 2)/' P ALT'/ DATA QNAME( 3)/' DIST '/ DATA QNAME( 4)/' PRES '/ DATA QNAME( 5)/' TMP '/ DATA QNAME( 6)/' DPT '/ DATA QNAME( 7)/' DEPR '/ DATA QNAME( 8)/' POT '/ DATA QNAME( 9)/' T MAX'/ DATA QNAME(10)/' T MIN'/ DATA QNAME(11)/' V VEL'/ DATA QNAME(12)/' NETVD'/ DATA QNAME(13)/' DZDT '/ DATA QNAME(14)/' OROW '/ DATA QNAME(15)/' FRCVV'/ DATA QNAME(16)/' U GRD'/ DATA QNAME(17)/' V GRD'/ DATA QNAME(18)/' WIND '/ DATA QNAME(19)/' T WND'/ DATA QNAME(20)/' VW SH'/ DATA QNAME(21)/' U DIV'/ DATA QNAME(22)/' V DIV'/ DATA QNAME(23)/' WDIR '/ DATA QNAME(24)/' WWND '/ DATA QNAME(25)/' SWND '/ DATA QNAME(26)/' RATS '/ DATA QNAME(27)/' VECW '/ DATA QNAME(28)/' SFAC '/ DATA QNAME(29)/' ABS V'/ DATA QNAME(30)/' REL V'/ DATA QNAME(31)/' DIV '/ DATA QNAME(32)/' STRM '/ DATA QNAME(33)/' V POT'/ DATA QNAME(34)/' R H '/ DATA QNAME(35)/' P WAT'/ DATA QNAME(36)/' A PCP'/ DATA QNAME(37)/' P O P'/ DATA QNAME(38)/' P O Z'/ DATA QNAME(39)/' SNO D'/ DATA QNAME(40)/' ACPCP'/ DATA QNAME(41)/' SPF H'/ DATA QNAME(42)/' L H2O'/ DATA QNAME(43)/' LFT X'/ DATA QNAME(44)/' TOTOS'/ DATA QNAME(45)/' K X '/ DATA QNAME(46)/' C INS'/ DATA QNAME(47)/' L WAV'/ DATA QNAME(48)/' S WAV'/ DATA QNAME(49)/' DRAG '/ DATA QNAME(50)/' LAND '/ DATA QNAME(51)/' KFACT'/ DATA QNAME(52)/' 10TSL'/ DATA QNAME(53)/' 7TSL '/ DATA QNAME(54)/' RCPOP'/ DATA QNAME(55)/' RCMT '/ DATA QNAME(56)/' RCMP '/ DATA QNAME(57)/' ORTHP'/ DATA QNAME(58)/' ALBDO'/ DATA QNAME(59)/' ENFLX'/ DATA QNAME(60)/' TTHTG'/ DATA QNAME(61)/' LAT '/ DATA QNAME(62)/' LON '/ DATA QNAME(63)/' RADIC'/ DATA QNAME(64)/' PROB '/ DATA QNAME(65)/' CPROB'/ DATA QNAME(66)/' USTAR'/ DATA QNAME(67)/' TSTAR'/ DATA QNAME(68)/' MIXHT'/ DATA QNAME(69)/' WTMP '/ DATA QNAME(70)/' WVHGT'/ DATA QNAME(71)/' SWELL'/ DATA QNAME(72)/' WVSWL'/ DATA QNAME(73)/' WVPER'/ DATA QNAME(74)/' WVDIR'/ DATA QNAME(75)/' SWPER'/ DATA QNAME(76)/' SWDIR'/ DATA QNAME(77)/' RRATE'/ DATA QNAME(78)/' TSTM '/ DATA QNAME(79)/' CSVR '/ DATA QNAME(80)/' CTDR '/ DATA QNAME(81)/' MIXR '/ DATA QNAME(82)/' PSVR '/ DATA QNAME(83)/' MCONV'/ DATA QNAME(84)/' ENRGY'/ DATA QNAME(85)/' RDNCE'/ DATA QNAME(86)/' BRTMP'/ DATA QNAME(87)/' TCOZ '/ DATA QNAME(88)/' OZMR '/ DATA QNAME(89)/' ICWAT'/ DATA QNAME(90)/' DEPTH'/ DATA QNAME(91)/' GUST '/ DATA QNAME(92)/' VAPP '/ DATA QNAME(93)/' TOTHF'/ DATA QNAME(94)/' SPEHF'/ DATA QNAME(95)/' SORAD'/ DATA QNAME(96)/' UOGRD'/ DATA QNAME(97)/' VOGRD'/ DATA QNAME(98)/' HTSGW'/ DATA QNAME(99)/' PERPW'/ DATA QNAME(100)/' DIRPW'/ DATA QNAME(101)/' PERSW'/ DATA QNAME(102)/' DIRSW'/ DATA QNAME(103)/' WCAPS'/ DATA QNAME(104)/' PTEND'/ DATA QNAME(105)/' NCPCP'/ DATA QNAME(106)/' 4LFTX'/ DATA QNAME(107)/' ICEAC'/ DATA QNAME(108)/' NPRAT'/ DATA QNAME(109)/' CPRAT'/ DATA QNAME(110)/'CEILHT'/ DATA QNAME(111)/' VISIB'/ DATA QNAME(112)/'LIQPCP'/ DATA QNAME(113)/'FREPCP'/ DATA QNAME(114)/'FROPCP'/ DATA QNAME(115)/' MIXLY'/ DATA QNAME(116)/' DLRFL'/ DATA QNAME(117)/' ULRFL'/ DATA QNAME(118)/' DSRFL'/ DATA QNAME(119)/' USRFL'/ DATA QNAME(120)/' UTHFL'/ DATA QNAME(121)/' UTWFL'/ DATA QNAME(122)/' TTLWR'/ DATA QNAME(123)/' TTSWR'/ DATA QNAME(124)/' TTRAD'/ DATA QNAME(125)/' MSTAV'/ DATA QNAME(126)/' SWABS'/ DATA QNAME(127)/' CDLYR'/ DATA QNAME(128)/' CDCON'/ DATA QNAME(129)/' PBCLY'/ DATA QNAME(130)/' PTCLY'/ DATA QNAME(131)/' PBCON'/ DATA QNAME(132)/' PTCON'/ DATA QNAME(133)/' SFEXC'/ DATA QNAME(134)/' A EVP'/ DATA QNAME(135)/' STCOF'/ DATA QNAME(136)/' TSOIL'/ DATA QNAME(137)/'D DUDT'/ DATA QNAME(138)/'D DVDT'/ DATA QNAME(139)/' U STR'/ DATA QNAME(140)/' V STR'/ DATA QNAME(141)/' TUVRD'/ DATA QNAME(142)/' TVVRD'/ DATA QNAME(143)/' TTLRG'/ DATA QNAME(144)/' TTSHL'/ DATA QNAME(145)/' TTDEP'/ DATA QNAME(146)/' TTVDF'/ DATA QNAME(147)/' ZSTAR'/ DATA QNAME(148)/' TQDEP'/ DATA QNAME(149)/' TQSHL'/ DATA QNAME(150)/' TQVDF'/ DATA QNAME(151)/'XGWSTR'/ DATA QNAME(152)/'YGWSTR'/ DATA QNAME(153)/' STDZG'/ DATA QNAME(154)/' A LEV'/ DATA QNAME(155)/' T AIL'/ DATA QNAME(156)/' B AIL'/ DATA QNAME(157)/' EPOT '/ DATA QNAME(158)/' MSLSA'/ DATA QNAME(159)/' MSLMA'/ DATA QNAME(160)/'MGSTRM'/ DATA QNAME(161)/' CONDP'/ DATA QNAME(162)/' POT V'/ DATA QNAME(163)/' CAPE '/ DATA QNAME(164)/' CIN '/ DATA QNAME(165)/' VTMP '/ DATA QNAME(166)/' TKE '/ ! ! REFERENCE TABLE FOR G (GENERATING PROGRAM NAME) ! DATA KK(1)/57/ DATA KK(2)/58/ DATA KK(3)/59/ ! ! G TABLE (GENERATING PROGRM NAME): ! DATA KNAME/' ECMWF', ' READING', ',UK. ', & ' FNOC', ' MONTERE', 'Y, CA. ', & ' AFGWC ', 'OFFUTT A', 'FB, NB. '/ DATA KNAME1/' WMC N','MC WASHI', 'NGTON '/ ! DATA AFTER /' AFTER '/ DATA DN /'DN'/ DATA QNAME1/' THCK '/ DATA QNAME2/' THKDN'/ DATA QNAME3/' PRSDN'/ ! DATA VUNIT(1)/' 0-HR FCST VALID AT '/ DATA VUNIT(2)/' ANALYSIS VALID AT '/ DATA UNIT1 /' HRS'/ DATA DAYS /' DYS'/ DATA FOR1 /' FOR '/ DATA DASH /'-'/ ! 200 FORMAT ( ' ',A7,A4,' ',A7) 210 FORMAT ( A4,1X,A6,A5,F4.1,A4,A7, & I2.2,A1,I2.2,A1,I2.2,1X,I2.2,'Z',3A8) 220 FORMAT ( 13X,A7) 230 FORMAT ( ' Q IS AN ILLEGAL OFFICE NOTE 84 DATA TYPE, Q = ', & I5,35X) 240 FORMAT ( A4,1X,A6,A20, & I2.2,A1,I2.2,A1,I2.2,1X,I2.2,'Z',3A8) ! ! 1. UNPACK ID WORDS. ! DO 10 N = 1,17 ITEMP = 0 KTEMP = 0 ITEMP = SHFMSK(N) NSHIFT = IAND(ISHFT(ITEMP,-24),255) NMASK = IAND(ISHFT(ITEMP,-16),255) NID = IAND(ISHFT(ITEMP,-8),255) ITEMP = MASK(NMASK) KTEMP = ID(NID) JKEEP(N) = IAND(ITEMP,ISHFT(KTEMP,-NSHIFT)) 10 CONTINUE ! F1 = JKEEP(1) DD = JKEEP(2) MM = JKEEP(3) YY = JKEEP(4) C1 = JKEEP(5) E1 = JKEEP(6) C2 = JKEEP(7) E2 = JKEEP(8) M = JKEEP(9) S1 = JKEEP(10) S2 = JKEEP(11) Q = JKEEP(12) HH = JKEEP(13) G = JKEEP(14) JT = JKEEP(15) JN = JKEEP(16) F2 = JKEEP(17) ! KS = IAND(ISHFT(ID(3),-40_8),255_8) ! ! 2. FIND WHICH PARAMETER (Q) IS INDICATED BE THE ID WORDS. ! DO 20 N = 1,166 NN = N IF (Q.EQ.LL(N)) GO TO 30 20 CONTINUE ! ! CAN NOT FIND A LEGAL Q GO TO 170 ! 30 CONTINUE UNIT(1:4) = UNIT1(1:4) FOR(1:5) = FOR1(1:5) AFTBEF(1:7) = AFTER(1:7) ! IF (E1.GT.128) E1 = -(JKEEP(6)-128) IF (E2.GT.128) E2 = -(JKEEP(8)-128) ! ! 3. FIND WHICH SURFACE IS INDICATED BY THE ID WORDS ! AS BEING THE FIRST SURFACE. ! DO 40 I = 1,17 IF (S1.EQ.JLIST(I)) THEN K1 = I GO TO 50 ENDIF 40 CONTINUE K1 = 18 ! 50 CONTINUE ! ! 4. BEGIN PROCESSING OF A ONE-SURFACE TITLE ! IF (M.EQ.0.OR.M.EQ.8) THEN K2 = K1 CALL VALUE1(S1,C1,E1,INUM1) WRITE (KTITLE(1:20),220) INUM1 GO TO 80 ENDIF ! ! 5. FIND WHICH SURFACE IS INDICATED BY THE ID WORDS ! AS BEING THE SECOND SURFACE. ! DO 60 I = 1,17 IF (S2.EQ.JLIST(I)) THEN K2 = I GO TO 70 ENDIF 60 CONTINUE K2 = 18 ! 70 CONTINUE ! ! 6. BEGIN PROCESSING OF A TWO-SURFACE TITLE ! CALL VALUE1(S1,C1,E1,INUM1) CALL VALUE1(S2,C2,E2,INUM2) WRITE (KTITLE(1:20),200) INUM1 , SNAME(K1) , INUM2 ! 80 CONTINUE QWRITE = QNAME(NN) ! IF (Q.EQ.1 .AND. M.EQ.1.AND. S1.EQ.8) QWRITE = QNAME1 IF (Q.EQ.1 .AND. M.EQ.1.AND. S1.EQ.8.AND.KS.EQ.2) QWRITE = QNAME2 IF (Q.EQ.8 .AND. S1.EQ.128.AND.KS.EQ.2) QWRITE = QNAME3 IF (JT.EQ.6) QWRITE(5:6) = DN(1:2) ! ! 7. SET DATE/TIME FIELDS ! ! A. CHECK IF F1 AND F2 ARE IN HRS, HALF DAYS OR DAYS. ! RF1 = F1 RF2 = F2 ! ! B: IF F1 IN HALF DAYS: CONVERT TO HOURS ! IF (JN.EQ.15.OR.JT.EQ.7) THEN RF1 = RF1 * 12.0 RF2 = RF2 * 12.0 ENDIF ! ! C: IF F1 IN DAYS: CONVERT TO HOURS ! IF (JT.EQ.10) THEN RF1 = RF1 * 24.0 RF2 = RF2 * 24.0 ENDIF ! ! D: CONVERT HOURS TO DAYS IF HOURS GREATER THAN 72 ! IF (JT.NE.6) THEN IF (RF1.GT.72.0.OR.RF2.GT.72.0) THEN RF1 = RF1 / 24.0 RF2 = RF2 / 24.0 UNIT(1:4) = DAYS(1:4) ENDIF ENDIF ! IF (JT.EQ.6) THEN IF (F1.GT.127) THEN F1 = AND(F1,127) F1 = -F1 ENDIF CF1 = F1 CF2 = F2 CALL CLIMO(CF1,CF2,UNIT,FOR,AFTBEF) RF1 = CF1 CALL SETCL(CF2,UNIT,KTITLE) ENDIF ! ! 8. SET GENERATING PROGRAM NAME ! DO 110 K = 1,3 IF (G.EQ.KK(K)) GO TO 130 110 CONTINUE ! DO 120 L = 1,3 KWRITE(L) = KNAME1(L) 120 CONTINUE GO TO 150 ! 130 CONTINUE DO 140 L = 1,3 KWRITE(L) = KNAME( 3*(K-1) + L) 140 CONTINUE ! ! 9. ENCODE THE TITLE LINE ! ! 9.1 DISTINGUISH BETWEEN ANALYSIS AND ZERO FORECASTS ! AND 'REAL' FORECASTS ! 150 CONTINUE IF (F1.NE.0) GO TO 160 IF (G.EQ.19.OR.G.EQ.22.OR.G.EQ.43.OR.G.EQ.44.OR.G.EQ.49.OR. & G.EQ.55.OR.G.EQ.56.OR.G.EQ.64) THEN III = 2 IF (M.EQ.8.OR.M.EQ.9.OR.M.EQ.10) III = 1 ELSE III = 1 ENDIF ! WRITE (KTITLE(21:88),240) SNAME(K2), QWRITE, VUNIT(III), & YY, DASH, MM, DASH, DD, HH, (KWRITE(L),L=1,3) RETURN ! 160 CONTINUE WRITE (KTITLE(21:88),210) SNAME(K2), QWRITE, FOR, RF1, UNIT, & AFTBEF, YY, DASH, MM, DASH, DD, HH, (KWRITE(L),L=1,3) RETURN ! 170 CONTINUE WRITE (KTITLE(1:88),230) Q RETURN END SUBROUTINE VALUE1(S,C,E,NUM) ! SUBPROGRAM DOCUMENTATION BLOCK ! ! SUBPROGRAM: VALUE1 CREATES VALUE1 OF SURFACE FROM IDS ! AUTHOR: JONES,R.E. ORG: W342 DATE: 86-12-03 ! ! ABSTRACT: CREATES THE NUMERICAL VALUE FOR THE SURFACE ! TO BE BUILT INTO THE FIRST LINE OF THE TITLE. ! ! PROGRAM HISTORY LOG: ! 88-11-28 R.E.JONES ! 89-11-01 R.E.JONES CONVERT TO CRAY CFT77 FORTRAN ! ! USAGE: CALL VALUE1(S,C,E,NUM) ! ! INPUT VARIABLES: ! NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES ! ------ --------- ----------------------------------------------- ! S ARG LIST INTEGER NUMBER OF SURFACE ! C,E NUMERICAL VALUE OF THE SURFACE ! SURFACE = S * 10 ** E ! ! OUTPUT VARIABLES: ! NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES ! ------ --------- ----------------------------------------------- ! NUM ARG LIST 7 CHARACTER VALUE OF THE SURFACE FOR THE TITLE ! ! SUBPROGRAMS CALLED: ! NAMES LIBRARY ! ------------------------------------------------------- -------- ! INTERNAL (WRITE) SYSLIB ! ! ATTRIBUTES: ! LANGUAGE: CRAY CFT77 FORTRAN ! MACHINE: CRAY Y-MP8/832 ! ! ! INTEGER C INTEGER E INTEGER S ! CHARACTER*8 JNUM CHARACTER*8 KNUM CHARACTER*7 LTEMP CHARACTER*8 NUM CHARACTER*1 POINT CHARACTER*1 ZERO ! DATA JNUM /' 0.0000 '/ DATA KNUM /' '/ DATA POINT /'.'/ DATA ZERO /'0'/ ! 101 FORMAT ( I6,' ') ! IF (S.GE.128.AND.S.LE.132) GO TO 110 IF (C.EQ.0) GO TO 100 WRITE (LTEMP(1:7),101) C J = E + 6 K = J + 1 IF (J.EQ.0) GO TO 90 NUM(1:J) = LTEMP(1:J) ! 90 CONTINUE NUM(K:K) = POINT NUM(K+1:8) = LTEMP(K:7) IF (J.EQ.0) NUM(2:2) = ZERO GO TO 150 ! 100 CONTINUE NUM = JNUM GO TO 150 ! 110 CONTINUE NUM = KNUM ! 150 CONTINUE ! RETURN END SUBROUTINE LINE02(ID,MASK,KTITLE) ! SUBPROGRAM DOCUMENTATION BLOCK ! ! SUBPROGRAM: LINE02 CREATES THE SECOND LINE OF TITLE ! AUTHOR: JONES,R.E. ORG: W342 DATE: 86-12-03 ! ! ABSTRACT: CREATES THE SECOND LINE OF THE TITLE FROM THE ID WORDS. ! CALLED BY W3FP06. WORDS 23 TO 54. ! ! PROGRAM HISTORY LOG: ! 88-11-28 R.E.JONES ! 89-11-01 R.E.JONES CONVERT TO CRAY CFT77 FORTRAN ! 91-03-01 R.E.JONES CHANGES FOR BIG RECORDS ! ! USAGE: CALL LINE02(ID,MASK,KTITLE) ! ! INPUT VARIABLES: ! NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES ! ------ --------- ----------------------------------------------- ! ID ARG LIST ID WORDS (6 INTEGER WORDS) OFFICE NOTE 84 ! MASK ARG LIST MASK FOR UNPACKING ID WORDS (8 WORDS) ! ! OUTPUT VARIABLES: ! NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES ! ------ --------- ----------------------------------------------- ! KTITLE ARG LIST TITLE CHARACTER*324 ! ! SUBPROGRAMS CALLED: ! NAMES LIBRARY ! ------------------------------------------------------- -------- ! INTERNAL (WRITE) SHIFT AND SYSLIB ! q9ie32 W3LIB ! ! ATTRIBUTES: ! LANGUAGE: IBM XL FORTRAN ! MACHINE: IBM SP ! ! ! INTEGER(8) ID(6) INTEGER(8) IKEEP(17) INTEGER(4) MASK(8) INTEGER(8) MASK32,MASKN INTEGER(4) SHFMSK(17) integer(8) irtemp real(4) rtemp(2) equivalence (irtemp,rtemp(1)) ! CHARACTER * 324 KTITLE ! ! IDWORDS: MASK CONTROL (INTEGER) ! DATA MASKN /X'FFFFFFFFFFFF0000'/ DATA MASK32/X'00000000FFFFFFFF'/ DATA SHFMSK( 1)/X'3C010200'/ DATA SHFMSK( 2)/X'1C010100'/ DATA SHFMSK( 3)/X'1C010200'/ DATA SHFMSK( 4)/X'20020100'/ DATA SHFMSK( 5)/X'20020200'/ DATA SHFMSK( 6)/X'38020300'/ DATA SHFMSK( 7)/X'30020300'/ DATA SHFMSK( 8)/X'28020300'/ DATA SHFMSK( 9)/X'20020300'/ DATA SHFMSK(10)/X'3C010300'/ DATA SHFMSK(11)/X'18020400'/ DATA SHFMSK(12)/X'10020400'/ DATA SHFMSK(13)/X'00040400'/ DATA SHFMSK(14)/X'30040500'/ DATA SHFMSK(15)/X'00040500'/ DATA SHFMSK(16)/X'00080500'/ DATA SHFMSK(17)/X'20040600'/ ! 100 FORMAT(' M=',I2,' T=',I2,' N=',I2,' F1=',I3,' F2=',I3,' CD=',I3, 1' CM=',I3,' KS=',I3,' K=',I3,' GES=',I2,' R=',I3,' G=',I3, 2' J=',I5,' B=',I5,' Z=',I5,' A=',E15.8,' N=',I5,' ') ! ! UNPACK ID WORDS. ! DO 10 N = 1,17 ITEMP = SHFMSK(N) NSHIFT = IAND(ISHFT(ITEMP,-24),255) NMASK = IAND(ISHFT(ITEMP,-16),255) NID = IAND(ISHFT(ITEMP,-8),255) JTEMP = MASK(NMASK) KTEMP = ID(NID) IKEEP(N) = IAND(JTEMP,ISHFT(KTEMP,-NSHIFT)) 10 CONTINUE ! ! CONVERT IBM 32 BIT F.P. NUMBER TO IEEE F.P. NUMBER ! ! CALL USSCTC(ID(5),5,A,1) irtemp=ID(5) call q9ie32(rtemp(2),rtemp(1),1,istat) a=rtemp(1) ! ! CONVERT 16 BIT SIGNED INTEGER INTO A 64 BIT INTEGER. ! IF (BTEST(IKEEP(17),15_8)) THEN IKEEP(17) = IOR(IKEEP(17),MASKN) ENDIF ! ! TEST FOR BIG RECORD ! IF (IKEEP(13).EQ.0) THEN IKEEP(13) = IAND(ID(6),MASK32) END IF ! WRITE (KTITLE(89:216),100) (IKEEP(I),I=1,15) , A , IKEEP(17) RETURN END SUBROUTINE LINE03(ID,KTITLE) ! SUBPROGRAM DOCUMENTATION BLOCK ! ! SUBPROGRAM: LINE03 CREATES THE THIRD LINE OF TITLE ! AUTHOR: JONES,R.E ORG: W342 DATE: 86-12-03 ! ! ABSTRACT: CREATES THE THIRD LINE OF THE TITLE FROM THE ID WORDS. ! CALLED BY W3FP06 TO CREATE WORDS 55 TO 81 OF THE TITLE. ! ! PROGRAM HISTORY LOG: ! 88-11-28 R.E.JONES ! 90-02-03 R.E.JONES CONVERT TO CRAY CFT77 FORTRAN ! ! USAGE: CALL LINE03(ID,KTITLE) ! ! INPUT VARIABLES: ! NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES ! ------ --------- ----------------------------------------------- ! ID ARG LIST ID WORDS (6 INTEGER) OFFICE NOTE 84 ! ! OUTPUT VARIABLES: ! NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES ! ------ --------- ----------------------------------------------- ! KTITLE ARG LIST CHARACTER*324 ARRAY ! ! SUBPROGRAMS CALLED: ! NAMES LIBRARY ! ------------------------------------------------------- -------- ! INTERNAL (WRITE) SYSLIB ! ! ! ATTRIBUTES: ! LANGUAGE: CRAY CFT77 FORTRAN ! MACHINE: CRAY Y-MP8/832 ! ! ! INTEGER(8) ID(6) INTEGER(8) MASK32 INTEGER ID84(12) ! CHARACTER * 324 KTITLE ! DATA MASK32/X'00000000FFFFFFFF'/ ! ! FORTRAN INTERNAL WRITE STATEMENT REPLACES ENCODE ! 100 FORMAT ( 12(1X,Z8)) ! DO 10 J = 1,11,2 ID84(J) = ISHFT(ID(J/2+1),-32_8) ID84(J+1) = IAND(ID(J/2+1),MASK32) 10 CONTINUE ! WRITE (KTITLE(217:324),100) (ID84(I),I=1,12) RETURN END SUBROUTINE CLIMO(CF1,CF2,UNIT,FOR,AFTBEF) ! SUBPROGRAM DOCUMENTATION BLOCK ! ! SUBPROGRAM: CLIMO SETS TIME-AVERAGED TITLES ! AUTHOR: JONES,R.E. ORG: W342 DATE: 86-12-03 ! ! ABSTRACT: FILLS IN THE FIRST THIRTEEN CHARACTERS IN THE TITLE ! TO MAKE THE TITLE A TIME-AVERAGED TITLE. ! ! PROGRAM HISTORY LOG: ! 88-11-28 R.E.JONES ! 89-11-01 R.E.JONES CONVERT TO CRAY CFT77 FORTRAN ! ! USAGE: CALL CLIMO(CF1,CF2,UNIT,FOR) ! ! INPUT VARIABLES: ! NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES ! ------ --------- ----------------------------------------------- ! CF1 ARG LIST FORECAST PERIOD LENGTH ! CF2 ARG LIST LENGTH OF THE AVERAGE ! UNIT ARG LIST ORIGINALLY SET TO ' HRS' ! FOR ARG LIST ORIGINALLY SET TO ' FOR ' ! AFTBEF ARG LIST ORIGINALLY SET TO ' AFTER ' ! ! OUTPUT VARIABLES: ! NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES ! ------ --------- ----------------------------------------------- ! UNIT ARG LIST SET TO ' DYS' IF NECESSARY ! FOR ARG LIST SET TO ' CTR ' ! AFTBEF ARG LIST SET TO ' BEFOR ' IF NECESSARY ! ! ATTRIBUTES: ! LANGUAGE: CRAY CFT77 FORTRAN ! MACHINE: CRAY Y-MP8/832 ! ! ! REAL CF1 REAL CF2 ! CHARACTER*7 AFTBEF CHARACTER*7 BEFOR CHARACTER*5 FOR CHARACTER*5 FOR1 CHARACTER*4 UNIT CHARACTER*4 UNIT1 CHARACTER*4 UNIT2 ! DATA BEFOR /' BEFOR '/ DATA FOR1 /' CTR '/ DATA UNIT1 /' DYS'/ DATA UNIT2 /' HRS'/ ! ! SET FOR TO ' CTR ' ! FOR(1:5) = FOR1(1:5) ! ! DIFFERENCE = CENTERDAY - RUNDATE = F1 + 2 DAYS ! CHANGE CF1 TO HOURS, ADD 48 HOURS ! DIFF = CF1 * 12.0 + 48.0 ! ! IF DIFF NEGATIVE, SET AFTBEF TO ' BEFOR ' ! IF (DIFF.LT.0.0) AFTBEF(1:7) = BEFOR(1:7) ! CF2 = CF2 * 12.0 ! IF (ABS(DIFF).LE.72.0) THEN CF1 = ABS(DIFF) CF2 = CF2 / 24.0 ! ! SET UNIT TO ' HRS ' ! UNIT(1:4) = UNIT2(1:4) GO TO 100 ENDIF ! CF1 = ABS(DIFF / 24.0 ) CF2 = CF2 / 24.0 ! ! SET UNIT TO ' DYS ' ! UNIT(1:4) = UNIT1(1:4) ! 100 CONTINUE RETURN END SUBROUTINE SETCL(CF2,UNIT,KTITLE) ! SUBPROGRAM DOCUMENTATION BLOCK ! ! SUBPROGRAM: SETCL ENCODES TIME-AVERAGED TITLE ! AUTHOR: JONES,R.E. ORG: W342 DATE: 86-12-03 ! ! ABSTRACT: ENCODES THE FIRST THIRTEEN CHARACTERS IN THE TITLE ! TO MAKE THE TITLE A TIME-AVERAGED TITLE. ! ! PROGRAM HISTORY LOG: ! 88-11-28 R.E.JONES ! 89-11-01 R.E.JONES CONVERT TO CRAY CFT77 FORTRAN ! ! USAGE: CALL CLIMO(F2,UNIT,KTITLE) ! ! INPUT VARIABLES: ! NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES ! ------ --------- ----------------------------------------------- ! CF2 ARG LIST LENGTH OF THE FORECAST PERIOD ! UNIT ARG LIST UNITS FOR CF2 ! KTITLE ARG LIST TITLE TO BE MODIFIED ! ! OUTPUT VARIABLES: ! NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES ! ------ --------- ----------------------------------------------- ! KTITLE ARG LIST TITLE WITH THE TIME-AVERAGED INCLUDED ! ! ATTRIBUTES: ! LANGUAGE: CRAY CFT77 FORTRAN ! MACHINE: CRAY Y-MP8/832 ! ! ! CHARACTER*324 KTITLE CHARACTER*13 BLANK CHARACTER*4 UNIT CHARACTER*4 DUNIT CHARACTER*4 HUNIT ! DATA BLANK /' '/ DATA DUNIT /'-DAY'/ DATA HUNIT /'-HR '/ ! 100 FORMAT (1X, F4.1, A4, ' AVG' ) ! KTITLE(1:13) = BLANK(1:13) ! WRITE (KTITLE(1:13),100) CF2 , DUNIT(1:4) ! RETURN END