!-------------------------------------- LICENCE BEGIN ------------------------------------ !Environment Canada - Atmospheric Science and Technology License/Disclaimer, ! version 3; Last Modified: May 7, 2008. !This is free but copyrighted software; you can use/redistribute/modify it under the terms !of the Environment Canada - Atmospheric Science and Technology License/Disclaimer !version 3 or (at your option) any later version that should be found at: !http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html ! !This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; !without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. !See the above mentioned License/Disclaimer for more details. !You should have received a copy of the License/Disclaimer along with this software; !if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec), !CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca !-------------------------------------- LICENCE END -------------------------------------- !SUBROUTINE LISTREJ 1 #if defined (DOC) * * ************************************************************************ * *PURPOSE: LIST ALL OBSERVATIONS REJECTED BY THE VARIATIONAL QC * SET QC FLAGS CONSISTENT WITH VARQC DECISIONS * SET GLOBAL FLAG INDICATING REPORT CONTAINS REJECTED OBSERVATION * AS REQUIRED * * *ARGUMENTS: NONE * *AUTHOR: B. BRASNETT (CMDA/MSC) MARCH 2000 *REVISION: B. BRASNETT (CMDA/MSC) NOV 2001 * - Added idtyp 177 * S. Pellerin *ARMA/SMC nov. 2001 * - reordering of declaration dependencies (for Linux compilation) * N. Wagnewur (CMDA/MSC) Juin 2002 * - Added idtyp 180 for GOES Raidiances * B. Brasnett (CMDA/MSC) Sept 2003 * - List TOVS rejects * J. Halle (CMDA/MSC) Sept 2005 * - Added idtyp 182 for MHS. * A. Beaulne (CMDA/SMC) June 2006 * - Added idtyp 183 for AIRS. * R. Sarrazin CMDA April 2008 * - added idtyp 185 for CSR * S. Heilliette * - added idtyp 186 for IASI * S. Pellerin (ARMA/MRB) January 2009 * - Use of robdata8(ncmomn,*) as zpost value * S. Macpherson (ARMA/MRD) Sep 2009 * - List GP family (GPS) rejects (idtyp 189) ************************************************************************ #endif * IMPLICIT NONE #include "comlun.cdk"
#include "cvcord.cdk"
#include "comdimo.cdk"
#include "comoahdr.cdk"
#include "comoabdy.cdk"
#include "comoba.cdk"
#include "comcst.cdk"
#include "comvfiles.cdk"
#include "comnumbr.cdk"
#include "comstate.cdk"
#include "comphy.cdk"
* *IMPLICITS: INTEGER JPMAXTYP,JPMXITM PARAMETER (JPMAXTYP=254, JPMXITM=13) CHARACTER *16 CLOBTP(JPMAXTYP) INTEGER ICOUNT(JPMXITM,JPFILES) * * INTEGER IDATA,J,JJ,JJJ,JREP INTEGER ITY,JDATA,IDATEND,ITYP,ISTYP INTEGER ISPDO,IDIRO,ISPDF,IDIRF,ISPDA,IDIRA,ILEV INTEGER IDBURP,IOTHER,IBEGIN,IBEGINOB,ILAST,ILASTOB REAL*8 ZVAR,ZFCST,ZOER,ZANA,ZPOST,ZTODEG,ZLAT,ZLON,ZUU,ZVV REAL*8 SPD,DEG,ZLEV,ZSLEV,ZCUT CHARACTER *4 CLITM(JPMXITM),CLDESC CHARACTER *2 CLUNITS * LOGICAL LLOK,LLELREJ * * ------NOTE---------- * CURRENTLY SUPPORTED FAMILIES OF DATA 'UA' 'AI' 'SF' 'HU' 'TO' 'GO' 'GP' * DATA ZCUT /0.75D0/ DATA CLITM(1), CLITM(2), CLITM(3), CLITM(4), CLITM(5), CLITM(6) 1 /'WND', 'WND', 'HGT', 'TMP', 'DPD', 'STNP'/ DATA CLITM(7), CLITM(8), CLITM(9), CLITM(10), CLITM(11), CLITM(12) 1 /'MSLP', 'TSFC', 'SDPD', 'SWND', 'SWND', 'BTMP'/ DATA CLITM(13) /'ZTD'/ DATA CLOBTP(12), CLOBTP(13), CLOBTP(14), CLOBTP(15) 1 / 'SYNOP', 'SHIP', 'SYNOP MOBIL', 'METAR'/ DATA CLOBTP(16), CLOBTP(18), CLOBTP(20), CLOBTP(32) 1 / 'SPECI', 'DRIFTER', 'RADOB', 'PILOT'/ DATA CLOBTP(33), CLOBTP(34), CLOBTP(35), CLOBTP(36) 1 / 'PILOT SHIP','PILOT MOBIL', 'TEMP', 'TEMP SHIP'/ DATA CLOBTP(37), CLOBTP(38), CLOBTP(39), CLOBTP(40) 1 / 'TEMP DROP', 'TEMP MOBIL', 'ROCOB', 'ROCOB SHIP'/ DATA CLOBTP(42), CLOBTP(54), CLOBTP(61), CLOBTP(62) 1 / 'AMDAR', 'ROFOR', 'MAFOR', 'TRACKOB'/ DATA CLOBTP(63), CLOBTP(64), CLOBTP(65), CLOBTP(67) 1 / 'BATHY', 'TESAC', 'WAVEOB', 'HYDRA'/ DATA CLOBTP(68), CLOBTP(71), CLOBTP(72) 1 / 'HYFOR', 'CLIMAT', 'CLIMAT SHIP'/ DATA CLOBTP(73), CLOBTP(75), CLOBTP(76) 1 / 'NACLI/CLINP', 'CLIMATE TEMP','CLIMATE TEMP SHP'/ DATA CLOBTP(85), CLOBTP(86), CLOBTP(87) 1 / 'SAREP', 'SATEM', 'SARAD'/ DATA CLOBTP(88), CLOBTP(128), CLOBTP(129) 1 / 'SATOB', 'AIREP', 'PIREP'/ DATA CLOBTP(130), CLOBTP(131), CLOBTP(132) 1 / 'PROFILER', 'SUPER SYNOP', 'SUPER AIREP'/ DATA CLOBTP(135), CLOBTP(136), CLOBTP(137) 1 / 'TEMP+PILOT', 'TEMP+SYNOP', 'PILOT+SYNOP'/ DATA CLOBTP(138), CLOBTP(139), CLOBTP(140) 1 /'TEMP+PILOT+SYNOP', 'TEMP SHIP+PILOT', 'TEMP SHIP+SHIP'/ DATA CLOBTP(141), CLOBTP(142), CLOBTP(143) 1 /'PILOT SHIP+SHIP','TEMPSHP+PILOT+SH', 'SAWR'/ DATA CLOBTP(144), CLOBTP(145), CLOBTP(146) 1 /'AUTOMATIC SAWR', 'SYNOP PATROL','AUTOMATIC SYNOP'/ DATA CLOBTP(147), CLOBTP(148), CLOBTP(149) 1 /'AUTOMATIC SHIP', 'SAWR SPECIAL','AUTOSAWR SPECIAL'/ DATA CLOBTP(150), CLOBTP(151), CLOBTP(152) 1 /'ANAL BOGUS SFC', 'ANAL BOGUS ALT','REPAIR BOGUS SFC'/ DATA CLOBTP(153), CLOBTP(157), CLOBTP(158) 1 /'REPAIR BOGUS ALT', 'ACARS', 'HUMSAT'/ DATA CLOBTP(159), CLOBTP(160), CLOBTP(161) 1 /'TEMP MOBIL+PILOT','TEMP MOBIL+SYNOP','PILOT MOBIL+SYNP'/ DATA CLOBTP(162), CLOBTP(163), CLOBTP(164) 1 /'TEMP MOBIL+PI+SY', 'RADAR', 'TOVS AMSU-A'/ DATA CLOBTP(167), CLOBTP(168), CLOBTP(169) 1 / 'ERS-1', 'SSM/I', 'GPSMET'/ DATA CLOBTP(170), CLOBTP(177), CLOBTP(180) 1 / 'OZONE', 'ADS', 'GOES'/ DATA CLOBTP(181), CLOBTP(182), CLOBTP(183) 1 / 'TOVS AMSU-B', 'TOVS MHS', 'AIRS'/ DATA CLOBTP(185), CLOBTP(186), CLOBTP(188) 1 / 'GEORAD', 'IASI', 'SATOB'/ DATA CLOBTP(189), CLOBTP(254) 1 / 'GB-GPS', 'SCATTEROMETER'/ * ZTODEG = 180./RPI * DO J=1,NKOUNT DO JJJ=1,JPMXITM ICOUNT(JJJ,J) = 0 ENDDO ENDDO WRITE(NULOUT,610) 610 FORMAT(//'LIST OF DATA REJECTED BY VARIATIONAL QUALITY CONTROL') * *_____LOOP OVER ALL REPORTS, ONE FAMILY AT A TIME * DO J = 1,NFILES IF (.NOT. (CFAMTYP(J) .EQ. 'HU' 1 .OR. CFAMTYP(J) .EQ. 'GO')) THEN IBEGIN=NBEGINTYP(J) ILAST=NENDTYP(J) IF (IBEGIN .GT. 0) THEN IBEGINOB = MOBDATA(NCMOBS,IBEGIN) ILASTOB = MOBDATA(NCMOBS,ILAST) WRITE(NULOUT,600) 600 FORMAT(1X) IF (CFAMTYP(J) .NE. 'TO') THEN WRITE(NULOUT,601) ELSE WRITE(NULOUT,602) ENDIF 601 FORMAT('IDENT TYPE DESCRIPTION LAT LONG ', 1 'LEVEL ITEM OBSVD BKGND ANAL POST PROB', 2 ' REPORT') 602 FORMAT('IDENT TYPE DESCRIPTION LAT LONG ', 1 'CHNL ITEM OBSVD BKGND ANAL POST PROB', 2 ' REPORT') * DO 10 JREP = IBEGINOB, ILASTOB LLELREJ = .FALSE. IDATA = MOBHDR(NCMRLN,JREP) IDATEND = MOBHDR(NCMNLV,JREP) + IDATA -1 ITY = MOBHDR(NCMITY,JREP) IDBURP = MOD(ITY,1000) ZLAT = ROBHDR(NCMLAT,JREP)*ZTODEG ZLON = ROBHDR(NCMLON,JREP)*ZTODEG DO JDATA=IDATA, IDATEND ITYP = MOBDATA(NCMVNM,JDATA) IF (ITYP .EQ. NETS .OR. ITYP .EQ. NEPS .OR. 1 ITYP .EQ. NEPN .OR. ITYP .EQ. NESS .OR. 2 ITYP .EQ. NEUS .OR. ITYP .EQ. NEVS .OR. 3 ITYP .EQ. NEZD) THEN LLOK = (MOBDATA(NCMASS,JDATA) .EQ. 1) ELSE LLOK = (MOBDATA(NCMASS,JDATA) .EQ. 1 .AND. 1 MOBDATA(NCMXTR,JDATA) .EQ. 0) .OR. 2 (MOBDATA(NCMXTR,JDATA) .EQ. 2 .AND. 3 MOBDATA(NCMVNM,JDATA) .EQ. NVNUMB(3)) ENDIF IF (LLOK) THEN zpost = ROBDATA8(NCMOMN,JDATA) ZLEV = ROBDATA8(NCMPPP,JDATA)*RPATMB IF (MOBDATA(NCMVCO,JDATA) .EQ. 2) THEN ZLEV = ROBDATA8(NCMPPP,JDATA)*RPATMB CLUNITS = 'MB' ENDIF IF (MOBDATA(NCMVCO,JDATA) .EQ. 1) THEN * *___________________VERTICAL COORDINATE IS HEIGHT * ZLEV = ROBDATA8(NCMPPP,JDATA) CLUNITS = ' M' ENDIF IF (MOBDATA(NCMVCO,JDATA) .EQ. -1) THEN * *___________________TOVS CHANNEL NUMBER * ZLEV = ROBDATA8(NCMPPP,JDATA) CLUNITS = ' ' ENDIF ZVAR = ROBDATA8(NCMVAR,JDATA) ZOER = ROBDATA8(NCMOER,JDATA) ZFCST = ROBDATA8(NCMOMF,JDATA)*ZOER + ZVAR ZANA = ROBDATA8(NCMOMA,JDATA)*ZOER + ZVAR * *_______________TREAT WINDS AS SPECIAL CASE * NVNUMB( 1) = 011003 (U COMPONENT) (m/s) * NVNUMB( 2) = 011004 (V COMPONENT) (m/s) * NEUS = 011215 (U COMPONENT AT 10 M) (m/s) * NEVS = 011216 (V COMPONENT AT 10 M) (m/s) * IF (((ITYP.EQ.NVNUMB(1) .OR. ITYP .EQ. NEUS) .AND. 1 NMVOEXIST(NOUU).EQ.1).OR. 2 ((ITYP.EQ.NVNUMB(2) .OR. ITYP .EQ. NEVS) .AND. 3 NMVOEXIST(NOVV).EQ.1)) THEN IOTHER = -1 IF (ITYP .EQ. NVNUMB(1) .OR. ITYP .EQ. NEUS) THEN DO JJ=IDATA,JDATA ISTYP = MOBDATA(NCMVNM,JJ) IF (MOBDATA(NCMVCO,JJ) .EQ. 2) THEN ZSLEV = ROBDATA8(NCMPPP,JJ)*RPATMB ENDIF IF (MOBDATA(NCMVCO,JJ) .EQ. 1) THEN ZSLEV = ROBDATA8(NCMPPP,JJ) ENDIF IF ((ISTYP .EQ. NVNUMB(2) .OR. ISTYP .EQ. NEVS) 1 .AND. ZLEV .EQ. ZSLEV) THEN IOTHER = JJ ENDIF ENDDO ELSE DO JJ=IDATA,JDATA ISTYP = MOBDATA(NCMVNM,JJ) IF (MOBDATA(NCMVCO,JJ) .EQ. 2) THEN ZSLEV = ROBDATA8(NCMPPP,JJ)*RPATMB ENDIF IF (MOBDATA(NCMVCO,JJ) .EQ. 1) THEN ZSLEV = ROBDATA8(NCMPPP,JJ) ENDIF IF ((ISTYP .EQ. NVNUMB(1) .OR. ISTYP .EQ. NEUS) 1 .AND. ZLEV .EQ. ZSLEV) THEN IOTHER = JJ ENDIF ENDDO ENDIF IF (IOTHER .NE. -1) THEN IF (ITYP .EQ. NVNUMB(1) .OR. ITYP .EQ. NEUS) THEN ZUU = ZVAR ZVV = ROBDATA8(NCMVAR,IOTHER) ELSE ZVV = ZVAR ZUU = ROBDATA8(NCMVAR,IOTHER) ENDIF SPD = SQRT(ZUU*ZUU + ZVV*ZVV) ISPDO = NINT(SPD) IF (ZUU.EQ.0. .AND. ZVV.EQ.0.)THEN IDIRO = 999 ELSE DEG = 270. - ATAN2(ZVV,ZUU)*ZTODEG IF (DEG .GT. 360.)DEG = DEG - 360. IF (DEG .LT. 0.) DEG = DEG + 360. IDIRO = NINT(DEG) ENDIF IF (ITYP .EQ. NVNUMB(1) .OR. ITYP .EQ. NEUS) THEN ZUU = ZFCST ZVV = ROBDATA8(NCMOMF,IOTHER)*ZOER 1 + ROBDATA8(NCMVAR,IOTHER) ELSE ZVV = ZFCST ZUU = ROBDATA8(NCMOMF,IOTHER)*ZOER 1 + ROBDATA8(NCMVAR,IOTHER) ENDIF SPD=SQRT(ZUU*ZUU + ZVV*ZVV) ISPDF = NINT(SPD) IF (ZUU .EQ. 0. .AND. ZVV .EQ. 0.) THEN IDIRF = 999 ELSE DEG = 270. - ATAN2(ZVV,ZUU)*ZTODEG IF (DEG .GT. 360.)DEG = DEG - 360. IF (DEG .LT. 0.) DEG = DEG + 360. IDIRF = NINT(DEG) ENDIF IF (ITYP .EQ. NVNUMB(1) .OR. ITYP .EQ. NEUS) THEN ZUU = ZANA ZVV = ROBDATA8(NCMOMA,IOTHER)*ZOER 1 + ROBDATA8(NCMVAR,IOTHER) ELSE ZVV = ZANA ZUU = ROBDATA8(NCMOMA,IOTHER)*ZOER 1 + ROBDATA8(NCMVAR,IOTHER) ENDIF SPD=SQRT(ZUU*ZUU + ZVV*ZVV) ISPDA = NINT(SPD) IF (ZUU.EQ.0. .AND. ZVV.EQ.0.) THEN IDIRA = 999 ELSE DEG = 270. - ATAN2(ZVV,ZUU)*ZTODEG IF (DEG .GT. 360.)DEG = DEG - 360. IF (DEG .LT. 0.) DEG = DEG + 360. IDIRA = NINT(DEG) ENDIF ILEV = NINT(ZLEV) IF (ZPOST .GT. ZCUT) THEN LLELREJ = .TRUE. MOBDATA(NCMFLG,JDATA) = 1 IBSET(MOBDATA(NCMFLG,JDATA),9) MOBDATA(NCMFLG,IOTHER) = 1 IBSET(MOBDATA(NCMFLG,IOTHER),9) MOBDATA(NCMFLG,JDATA) = 1 IBSET(MOBDATA(NCMFLG,JDATA),17) MOBDATA(NCMFLG,IOTHER) = 1 IBSET(MOBDATA(NCMFLG,IOTHER),17) IF (ITYP .EQ. NVNUMB(1) .OR. 1 ITYP .EQ. NVNUMB(2)) THEN ICOUNT(1,J) = ICOUNT(1,J) + 1 ENDIF IF (ITYP .EQ. NEUS .OR. ITYP .EQ. NEVS) THEN ICOUNT(10,J) = ICOUNT(10,J) + 1 ENDIF WRITE(NULOUT,620) 1 CSTNID(JREP),IDBURP,CLOBTP(IDBURP),ZLAT,ZLON, 2 ILEV,CLUNITS,IDIRO,ISPDO,IDIRF,ISPDF,IDIRA, 3 ISPDA,ZPOST,MOBHDR(NCMONM,JREP) 620 FORMAT(A9,1X,i3,1x,A16,F5.1,2X,F5.1,2X,I4,A2,2X, 1 'WND',3X,I3,'/',I3,3X,I3,'/',I3,3X,I3, 2 '/',I3,2X,F6.4,1X,I5) ENDIF ENDIF ELSE ILEV = NINT(ZLEV) IF (ZPOST .GT. ZCUT) THEN LLELREJ = .TRUE. IF (ITYP .EQ. NVNUMB(3)) THEN CLDESC = CLITM(3) ICOUNT(3,J) = ICOUNT(3,J) + 1 * *___________________CONVERT FROM GEOPOTENTIAL TO GEOPOTENTIAL HEIGHT * ZVAR = ZVAR/RG ZFCST = ZFCST/RG ZANA = ZANA/RG ENDIF IF (ITYP .EQ. NVNUMB(8)) THEN CLDESC = CLITM(4) ICOUNT(4,J) = ICOUNT(4,J) + 1 * *___________________CONVERT FROM KELVIN TO CELCIUS * ZVAR = ZVAR - TCDK ZFCST = ZFCST - TCDK ZANA = ZANA - TCDK ENDIF IF (ITYP .EQ. NVNUMB(9)) THEN CLDESC = CLITM(5) ICOUNT(5,J) = ICOUNT(5,J) + 1 ENDIF IF (ITYP .EQ. NEPS) THEN CLDESC = CLITM(6) ICOUNT(6,J) = ICOUNT(6,J) + 1 * *___________________CONVERT FROM PASCALS TO MILLIBARS * ZVAR = ZVAR*RPATMB ZANA = ZANA*RPATMB ZFCST = ZFCST*RPATMB ENDIF IF (ITYP .EQ. NEPN) THEN CLDESC = CLITM(7) ICOUNT(7,J) = ICOUNT(7,J) + 1 * *___________________CONVERT FROM PASCALS TO MILLIBARS * ZVAR = ZVAR*RPATMB ZANA = ZANA*RPATMB ZFCST = ZFCST*RPATMB ENDIF IF (ITYP .EQ. NETS) THEN CLDESC = CLITM(8) ICOUNT(8,J) = ICOUNT(8,J) + 1 * *___________________CONVERT FROM KELVIN TO CELCIUS * ZVAR = ZVAR - TCDK ZFCST = ZFCST - TCDK ZANA = ZANA - TCDK ENDIF IF (ITYP .EQ. NESS) THEN CLDESC = CLITM(9) ICOUNT(9,J) = ICOUNT(9,J) + 1 ENDIF IF ( ITYP.EQ.NBT1 .OR. ITYP.EQ.NBT2 .OR. 1 ITYP.EQ.NBT3 ) THEN CLDESC = CLITM(12) ICOUNT(12,J) = ICOUNT(12,J) + 1 ENDIF IF (ITYP .EQ. NEZD) THEN CLDESC = CLITM(13) ICOUNT(13,J) = ICOUNT(13,J) + 1 * *___________________CONVERT ZTD FROM METRES TO MILLIMETRES * ZVAR = ZVAR * 1000. ZFCST = ZFCST * 1000. ZANA = ZANA * 1000. ENDIF * MOBDATA(NCMFLG,JDATA) = 1 IBSET(MOBDATA(NCMFLG,JDATA),9) MOBDATA(NCMFLG,JDATA) = 1 IBSET(MOBDATA(NCMFLG,JDATA),17) WRITE(NULOUT,630) CSTNID(JREP),IDBURP, 1 CLOBTP(IDBURP),ZLAT,ZLON,ILEV,CLUNITS,CLDESC, 2 ZVAR,ZFCST,ZANA,ZPOST,MOBHDR(NCMONM,JREP) 630 FORMAT(A9,1X,I3,1X,A16,F5.1,2X,F5.1,2X,I4,A2,2X, 2 A4,2X,F7.1,3X,F7.1,3X,F7.1,2X,F6.4,1X,I5,1X) ENDIF ENDIF ENDIF ENDDO * *_________NOW SET THE GLOBAL FLAGS IN THE BURP RECORD HEADER * IF (LLELREJ) THEN MOBHDR(NCMST1,JREP)= IBSET( MOBHDR(NCMST1,JREP) , 06) ENDIF 10 CONTINUE ENDIF ENDIF ENDDO * * WRITE(NULOUT,640) 640 FORMAT(//) WRITE(NULOUT,665) 665 FORMAT(' REJECTED DATA ACCORDING TO FAMILY OF REPORT.') WRITE(NULOUT,670)(CFAMTYP(J),J=1,NKOUNT) 670 FORMAT(5X,11(7X,A2)) DO J=1,JPMXITM IF ( .NOT. (J .EQ. 2 .OR. J .EQ. 11)) THEN WRITE(NULOUT,680)CLITM(J),(ICOUNT(J,JJJ),JJJ=1,NKOUNT) 680 FORMAT(1X,A4,11(4X,I5)) ENDIF ENDDO WRITE(NULOUT,640) * RETURN END