C$$$ MAIN PROGRAM DOCUMENTATION BLOCK C C MAIN PROGRAM: dupelim_metar C PRGMMR: George G. Fulwood ORG: NP53 DATE: 02-05-22 C C ABSTRACT: Removes duplicate metar reports from CPC hourly file C C PROGRAM HISTORY LOG: C 02-05-22 GEORGE G. FULWOOD INITIAL IMPLEMENTATION C YY-MM-DD MODIFIER2 DESCRIPTION OF CHANGE C C USAGE: C INPUT FILES: C FT11F001 - cpc.sorted.formatted.metar.in C PARM - UNIT 5 (STANDARD READ) C C OUTPUT FILES: (INCLUDING SCRATCH FILES) C FT51F001 - cpc.sorted.formatted.metar.out C FT06F001 - UNIT 6 (STANDARD PRINTFILE) C C SUBPROGRAMS CALLED: NONE C UNIQUE: - NONE C LIBRARY: C C EXIT STATES: C COND = 0 - SUCCESSFUL RUN C =NNNN - TROUBLE OR SPECIAL FLAG - SPECIFY NATURE C C REMARKS: LIST CAVEATS, OTHER HELPFUL HINTS OR INFORMATION C C ATTRIBUTES: C LANGUAGE: FORTRAN-77 COMPILED UNDER FORTRAN-90 C MACHINE: IBM SP C C$$$ C Character*80 FLAGS(200000), CFLAGS Character*20 OBSTME, LSTTME, NAMES(200000), IDTIME Integer PRESS(200000), MDATA(200000,19), IOUT(19) CALL W3TAGB('DUPELIM_METAR ',2003,0007,0050,'NPxx') c c Initialize counters c ICNT = 0 NCNT = 1 NAMES(1) = '00000000000000000000' c c read the sorted hourly file c 10 Read (11,5000,End=80) IDTIME, ISLP, IOUT, CFLAGS c ICNT = ICNT + 1 c c determine if this is a duplicate report c Do 40 J = 1, NCNT If (IDTIME.EQ.NAMES(J)) Then c c replace any parameters with updated values if available c If (ISLP.NE.9999) PRESS(J) = ISLP c c load remaining non-precip values c Do 20 K = 1, 14 If (IOUT(K).NE.9999) MDATA(J,K) = IOUT(K) 20 Continue c Do 30 K = 16, 18 If (IOUT(K).NE.9999) MDATA(J,K) = IOUT(K) 30 Continue c c Check prcp values individually, if new prcp value is c non-missing and greater than the current 6hr or 24hr c replace the current value. c c check the 6hr prcp c IPCP = 9999 MPCP = 9999 c If (IOUT(15).NE.9999) Then c c load current prcp values c IPCP = IOUT(15) MPCP = MDATA(J,15) c c if mdata(j,15) is missing or less than the new prcp, replace it. c 8888 is the CPC identifier for missing prcp. c If (MPCP.GE.8888.OR.MPCP.LT.IPCP) Then MDATA(J,15) = IOUT(15) End If End If c c check the 24hr prcp c IPCP = 9999 MPCP = 9999 c If (IOUT(19).NE.9999) Then c c load current 24hr prcp values c IPCP = IOUT(19) MPCP = MDATA(J,19) c c if mdata(j,19) is missing or less than the new prcp, replace it. c If (MPCP.GE.8888.OR.MPCP.LT.IPCP) Then MDATA(J,19) = IOUT(19) End If End If c c test the quality flags c If (CFLAGS.NE.FLAGS(J)) FLAGS(J) = CFLAGS Go To 60 End If c 40 Continue c c new observation, add this to output file c NCNT = NCNT + 1 NAMES(NCNT) = IDTIME PRESS(NCNT) = ISLP FLAGS(NCNT) = CFLAGS c Do 50 N = 1, 19 MDATA(NCNT,N) = IOUT(N) 50 Continue c c initialize array iout c 60 Continue c Do 70 N = 1, 19 IOUT(N) = 9999 70 Continue c c read next record from summary file c Go To 10 c c eof on input file c 80 Write (6,5100) ICNT c c write out the hourly file c Do 90 K = 2, NCNT Write (51,5000) NAMES(K), PRESS(K), (MDATA(K,J),J = 1,19), * FLAGS(K) 90 Continue c IFCNT = NCNT - 1 IDUPS = ICNT - IFCNT c c how many duplicate records were found c Write (6,5200) IDUPS c Write (6,5300) IFCNT c 5000 Format (A20,20I6,A80) 5100 Format (2X,I10,' records were read from the input file') 5200 Format (2X,I10,' duplicate records were found') 5300 Format (2X,I10,' records were written to the hourly file') Stop C CALL W3TAGE('DUPELIM_METAR ') C End