SUBROUTINE BCD5(KFILDO,KFILOG,KFILRA,RACESS,NUMRA,KFILOV,KFILQC, 1 IP14,IP16,IP17,IP18,IP19,IP20,IP21,IP22,I405ADG, 2 ID,IDPARS,JP,IVRBL,MODNO, 3 ISCALD,JFIRST, 4 NDATE,JDATE,XDATA,CCALL,NAME,XP,YP,XYP, 5 STALAT,STALON,XPL,YPL,XPE,YPE,SDATA, 6 TOSS,QUEST,LTAG,LNDSEA,ELEV,QUALST, 7 LAPFG,XLAPSE,ULAPSE,LAPUDB,TELL,TELH,ATEL,BTEL, 8 VRAD,NSTA,NBASTA,ND1,ISETP,LTAGPT,MTAGPT,ILS, 9 WTWTL,WTLTW,HGTTHA,HGTTHB, A P,FD2,CORR,COUNT,NCOUNT,FD6,ND2X3,NX,NY, B IPACK,DATA,IWORK,ND5,MINPK, C TELEV,SEALND,CPNDFD,NXE,NYE,MESHE,EMESH, D IS0,IS1,IS2,IS4,ND7, E MD,IPLAIN,PLAIN,PLAINT,IPLANT, F NAREA,ALATL,ALONL,NPROJ,ORIENT, G MESH,MESHB,MESHL,XLAT, H MSHPAS,ER1, I NTYPE,B,CSTSM,R, J RSTAR,LNDWAT,ITRPLQ, K IALGOR,ELCORR,IBKPN,BK, L ELCORU,IFCOR,RWATO,RWATI,IVRAD, M TLOD,SETLOD,THID,SETHID,CONSTD,NSCALD,EX1D,EX2D, N IALOC,ADIST,AELEV,ND13,N4P,NSHLN,ICUB, O NSMTYP,U,V,WNDWT,WNDGRD,WNDTHR,WNDTRN, P NPRT,JPRT,NTDL,JTDL,NPASS,NREP,NREPNO,MGUESS, Q ERRADJ,NPASSP,NPASSF,NSMN,NPASRR,NPASSR,IORST, R NCLIP,PREPRO,NOPRE, S NOPTN,DIFFA,NOCEAN,LAKE,DISTX,DPOWER,WTAUG,RAY,LH, T CINT,ORIGIN,SMULT,SADD,TITLE,IOPT,POSTDS,NOPROD, U JTOTBY,JTOTRC,MTOTBY,MTOTRC,ITOTBY,ITOTRC,NOTOSS, V L3264B,L3264W,ISTOP,IER) C C JUNE 1993 GLAHN, CHAMBERS TDL HP9000 C AUGUST 2000 GLAHN MODIFIED FOR LAMP-2000 C JUNE 2004 GLAHN MODIFIED SLIGHTLY FOR MOS-2000 C SEPTEMBER 2004 GLAHN MODIFIED LD( ) AND ITAUH FOR WRITING C SEPTEMBER 2004 GLAHN ADDED IQUAL( ) TO CALL, ETC. C OCTOBER 2004 GLAHN SHORTENED LINE TO 72 CHARACTERS C WRITING FORMAT 2787 TO KFILDO; C ADDED QUALWT( ) TO CALL; EXTRA PRINT C TO IP18 WHEN PACKED DATA ARE LISTED C OCTOBER 2004 GLAHN ADDED NELEV( ) TO CALL AND TO CORBC5 C OCTOBER 2004 GLAHN CHANGED NELEV( ) TO ELEV( ); REMOVED C EMESH IN CALL TO CORBC5 C OCTOBER 2004 GLAHN MODIFIED FOR LAT/LON VICE POLE C OCTOBER 2004 GLAHN ADDED LNDSEA( ), LNDWAT( , ), ISETP, C ILS, CALL TO SETPNT C OCTOBER 2004 GLAHN CHANGED CALL TO PAWOTG TO PAWGTS C OCTOBER 2004 GLAHN INSERTED LAMBERT AND MERCATOR C CAPABILITY C NOVEMBER 2004 GLAHN EXCHANGED ACTUAL FOR MSHXMS; SOME C STATEMENT NUMBERS CHANGED C NOVEMBER 2004 GLAHN EXCHANGED 2 ARGUMENTS IN CALL TO C ACTUAL C DECEMBER 2004 GLAHN ADDED ELCORR( ), XLAPSE( , , ), C AA( , , , ), IBASE, IDIMTB, IDIM, C IBASE( ), ND1, ND13, ND14, ND15 TO C CALL; REMOVED IDIM C DECEMBER 2004 GLAHN DIMENSIONED ELCORR( ) C DECEMBER 2004 GLAHN ELIMINATED CALL TO CUTIT IN TWO PLACES C IF INPUT AND OUTPUT GRIDS ARE THE SAME C DECEMBER 2004 GLAHN POSITION TO CALL SETPNT CHANGED AND C 280 CHANGED TO 2799 IN SEVERAL PLACES C DECEMBER 2004 GLAHN CHANGED QUALWT(3) TO QUALWT(4) C JANUARY 2005 GLAHN CHANGED KM TO M IN CALLS TO PSIJLL, C LMIJLL, AND MCIJLL C JANUARY 2005 GLAHN SUBSTITUTED ITRPSL FOR ITRP TO GET C ANALYSIS VALUE; ADDED LNDSEA, C SEALND( ), NXE, NYE, MESHE TO CALL C TO ESP5 C JANUARY 2005 GLAHN ADDED COMMENT AFTER CALL TO ITRPSL C FEBRUARY 2005 GLAHN ADDED ISETP TO CALL TO SETPNT C FEBRUARY 2005 GLAHN ADDED JFIRST TO CALL AND TO CALL TO C ESP5; CHANGED SOME VALUES OF C FRACT( ) FROM .51 TO .6 C FEBRUARY 2005 GLAHN UPDATED IVRBL RELATED COMMENTS C MARCH 2005 GLAHN CHANGED LOCATION OF STATEMENT 400 C MARCH 2005 GLAHN ADDED NOSTM, TRSTL( ), TRSTU( ), C IDST( ), IDPARS( ) TO CALL C MAY 2005 GLAHN ELIMINATED STRATIFICATION FEATURE; C ADDED LAPSE CALCULATION ON THE FLY C JULY 2005 GLAHN ADDED XLAPSE AND ELEV TO CALL TO ESP5 C JULY 2005 GLAHN ADDED NAME( ) TO CALL; ADDED IP21, C NAME( ), AND NPASS TO CALL TO ESP5 C JULY 2005 GLAHN ADDED NOTOSS TO CALL AND CALL TO ESP5 C JULY 2005 GLAHN ADDED CALLS TO SMOTHG C AUGUST 2005 GLAHN ADDED IF TESTS TO DEAL WITH IOPT(1)=0; C ADDED COMMENTS ABOUT SUBSET AREA C AUGUST 2005 GLAHN CHANGED FORMATS 260 AND 262 TO FX.3 C AUGUST 2005 GLAHN CHANGED ARGUMENT MD TO MD(4) C AUGUST 2005 GLAHN MODIFIED USE OF LNDSEA( ) C SEPTEMBER 2005 GLAHN ADDED POSTPROCESSING; POSTDS TO CALL C SEPTEMBER 2005 GLAHN CHANGED NSCALE FOR DISSNO FROM 0 TO 1 C AND TRUNC FROM 0 TO .1 C SEPTEMBER 2005 GLAHN ADDED TRUNC TO CALL C SEPTEMBER 2005 GLAHN CORRECTED ERROR IN DISPOSABLE OUTPUT C WHEN MESH AND GRID SIZE NE BASE VALUE C SEPTEMBER 2005 GLAHN ADDED NSMTYP = 7 CAPABILITY; ADDED C NSMTYP TO CALL TO SMOTHG C SEPTEMBER 2005 GLAHN ADDED IUSEIW (NOT IMPLEMENTED) C OCTOBER 2005 GLAHN ADDED IBKPN AND BK( ) C NOVEMBER 2005 GLAHN MOVED SOME STATEMENTS 3 SPACES LEFT C NOVEMBER 2005 GLAHN ADDED LIMITX C JANUARY 2006 GLAHN REMOVED LIMITX C JANUARY 2006 GLAHN ADDED ELCORU( , ) C JANUARY 2006 GLAHN ADDED IALGOR( , ) C MARCH 2006 GLAHN ADJUSTED CALL FORMAT; CORRECTED FORMAT C 1865 FROM KFILOV TO KFILQC C MARCH 2006 GLAHN ADDED IP14 TO CALL AND IP14 AND C ISTOP( ) TO CALL TO ITRPSL; ADDED C CSTSM, N4P C APRIL 2006 GLAHN CHANGED FORMAT 186 C APRIL 2006 GLAHN REVISED COMPUTATIONAL LOOPS INVOLVING C IP19, 1P20, IP21, IOPT(1) C MAY 2006 GLAHN CHANGED 218461 TO 208462--VECTOR QC C CHANGED 218461 TO 228462--GRIDDED FG C CHANGED 208461 TO 208462--VECTOR TOSS C JUNE 2006 GLAHN ADDED IBKPN = 99 CAPABILITY C JUNE 2006 GLAHN CHANGED CALLS TO SZGRID TO SZGRDM C JULY 2006 GLAHN ADDED DISPOP; COMMENTS C DECEMBER 2006 GLAHN ADDED MGUESS TO CALL & CALL TO CORBC5 C JANUARY 2007 GLAHN ADDED NSHLN( ). C JANUARY 2007 GLAHN ADDED POSTPROCESSING VOR WIND SP C FEBRUARY 2007 GLAHN CHANGED COMMENT TO QUALWT( ) C FEBRUARY 2007 GLAHN ADDED IBKPN TO CALL TO ESP5 C MARCH 2007 GLAHN ADDED COUNT( , ) TO CALL TO SMOTHG C MARCH 2007 GLAHN PULLED THE DO 105 LOOP INTO U405 C MARCH 2007 GLAHN REMOVED IQUAL( ) AND QUALWT( ) C MARCH 2007 GLAHN CORRECTED CALL TO SMTH9 C JUNE 2007 GLAHN ADDED RWATO( ) AND RWATI( ) C JUNE 2007 GLAHN REARRANGED CALL TO CORBC5 C JUNE 2007 GLAHN ELIMINATED TRUNC( ); ADDED C TLOD,SETLOD,THID,SETHID,EX1D,EX2D; C CALL TO POST C AUGUST 2007 GLAHN ADDED VRAD(ND1), IVRAD C SEPTEMBER 2007 GLAHN REPLACED NEWXY WITH NEWXY1 C OCTOBER 2007 GLAHN INCREASED DIMENSION VRAD(ND1,6) C OCTOBER 2007 GLAHN ADDED ND1 TO CALL C NOVEMBER 2007 GLAHN INCREASED POSTDS FROM 1 TO POSTDS(3) C ALONG WITH POSTPROCESSING PARAMETERS C NOVEMBER 2007 GLAHN ADDED ORIENT TO CALL TO CORBC5 C DECEMBER 2007 GLAHN ADDED IP(25) AND ISTOP(6) CAPABILITY C FEBRUARY 2007 GLAHN ADDED NAREA C MARCH 2008 GLAHN SUBSTITUTED ITRPSX FOR ITRPSL C MARCH 2008 GLAHN ADDED DISCIG; CHANGED NVAL TO C NXD*NYD IN CALL TO POST C MARCH 2008 GLAHN ADDED IBKPN, ELCORR(LP), ELCORU(LP) C TO CALL TO ITRPSX C MAY 2008 GLAHN ADDED LNDWAT = 2,3 CAPABILITY; C ELIMINATED IUSEIW C OCTOBER 2008 GLAHN ADDED WTWTL, WTLTW C NOVEMBER 2008 GLAHN CHANGED CORR( ) TO NCOUNT( ) IN C 3 CALLS TO PAWGTS; COMMENTS; SPELLING C JANUARY 2009 GLAHN ADDED CALL TO VISMI C DECEMBER 2009 GLAHN ADDED LTAGPT( ) AND IAUG TO CALL C JANUARY 2010 GLAHN ADDED PREX4 TO CALL AND PREX4 AND C LTAGPT( ) TO CALL TO CORBC5 C JANUARY 2010 GLAHN ADDED KFILRA( ), RACESS( ), NUMRA, C PLAINT, PLAIN TO CALL; ADDED CALL C TO LRSMTH C MARCH 2010 GLAHN ADDED IAUG TO CALL TO LRSMTH; MODIFIED C TO NOT USE AUGMENTATION STATIONS IN C VERIFICATION; CHANGED CALL TO LRSMTH C TO LCSMTH; ADDED IOPT( ) TO LCSMTH C MARCH 2010 GLAHN ADDED NPASSF TO CALL C MARCH 2010 GLAHN ADDED XYP( , 2) AND SDATA( ); CALL TO C INTRPB, ETC.; ADDED IAUGSM C MARCH 2010 GLAHN ADDED NSMNUM, NOCEAN, SQUEZE, WTAUG, C RAY DIFFA TO CALL AND THEIR USE; ADDED C DIFFA, NOCEAN, SQUEZE, RAY TO CALL TO C SPOTRM C MARCH 2010 GLAHN ADDED CPNDFD TO CALL, CALL TO SPOTRM C MARCH 2010 GLAHN ADDED NOPTN TO CALL; ADDED NOPTN AND C ID TO CALL TO SPOTRM C APRIL 2010 GLAHN REMOVED IAUGSM C APRIL 2010 GLAHN ADDED 2ND SPOTRM ON LAST PASS C APRIL 2010 GLAHN ADDED LTAGPT TO CALL TO SPOTRM C APRIL 2010 GLAHN REMOVED 2ND PASS 6 SPOTRM C APRIL 2010 GLAHN ADDED NPASSP; ADDED DIFMAX C APRIL 2010 GLAHN ADDED DIFMAX(3), STAMAX(3) C APRIL 2010 GLAHN ADDED NAMMAX(3) C MAY 2010 GLAHN SET IER=0 AFTER ITRPSX C JUNE 2010 GLAHN ADDED IVRADS C JULY 2010 GLAHN ADDED ERROR CHECK AFTER CORBC5 C JULY 2010 GLAHN INSERTED DIAGNOSTIC 165 C SEPTEMBER 2010 GLAHN INSERTED IF(NAPSSR.EQ.LP) BEFORE 165; C COMMENT DEFINITION OF SQUEZE C OCTOBER 2010 GLAHN ADDED CALL TO SPOTRM WITH LTAG( ) C OCTOBER 2010 GLAHN ADDED SAFETY CHECK 272 ON NSMTYP AND C NOPTN C NOVEMBER 2010 GLAHN MODIFIED DIAGNOSTIC 274 C FEBRUARY 2011 GLAHN CORRECTED NAPSSP TO NPASSP BELOW 155 C MARCH 2011 GLAHN CORRECTED FORMAT 274 C MARCH 2011 GLAHN ADDED SMOTHG SPECIAL CIRCUMSTANCE C BELOW 271--LATER DEACTIVATED C MARCH 2011 GLAHN CHANGED DEFINITION OF SQUEZE TO SQUARE C MARCH 2011 GLAHN ADDED LAKE C JUNE 2011 GLAHN BYPASS SMOOTHING WHEN SPOTRM FAILED C ON IER = 777 C JUNE 2011 GLAHN CHANGED SQUARE IN SPOTRM TO DISTX C JULY 2011 GLAHN ADDED 'SRM' TO TITLE OF DISTANCE GRID C AUGUST 2011 GLAHN DIMENSIONED NOTOSS( ) C AUGUST 2011 GLAHN CHANGED DEFINITION OF LTAGPT( ); C ELIMINATED IAUG; ADDED LTAGPT( ) TO C CALL TO ESP5 C SEPTEMBER 2011 GLAHN REVISED CHECK ON NSMTYP AT 274 C OCTOBER 2011 GLAHN FORMAT 2754 REVISED, NSMTYP COMMENT C DECEMBER 2011 GLAHN ADDED ERRADJ IN CALL AND CALL TO ESP5 C MARCH 2012 GLAHN MODIFIED FORMATS 2753, 2754 C SEPTEMBER 2013 GLAHN CHANGED KFILDO TO IP14 AT 131 C OCTOBER 2013 GLAHN INSERTED CALL TO SMOTHG WHEN C LP < NPASS AND B(LP) = 99 C NOVEMBER 2013 GLAHN ADDED WRITING TOSS( ) ON LAST PASS C WITH ID(2) = 940000 TO FILE KFILOV C NOVEMBER 2013 GLAHN ADDED PRINTING NUMBER OF VALUES TOSSED C JANUARY 2014 GLAHN ADDED NPASS TO CALL TO CORBC5 C JANUARY 2014 GLAHN ADDED LAPUDB TO CALL AND TO CALL TO C CORBC5 C JANUARY 2014 GLAHN MODIFIED TO ACCOMMODATE NOPTN AS C ONLY 2 DIGITS C JANUARY 2014 GLAHN ADDED STALAT( ) AND STALON( ) TO CALL C AND TO CALL TO TO SPOTRM; NAREA ADDED C TO CALL TO SPOTRM C FEBRUARY 2014 GLAHN ADDED NOPROD TO CALL C FEBRUARY 2014 GLAHN MODIFIED LTAG( ) WRITING TO KFILOV C AT DO 1753 C MARCH 2014 GLAHN ADDED TELEV TO CALL TO ESP5 C APRIL 2014 GLAHN ADDED GF C MAY 2014 GLAHN ADDED DIAGNOSTIC TO KFILDO AT 1756 C MAY 2014 GLAHN ADDED MTAGPT( ) C JUNE 2014 GLAHN INSERTED CALL TO W3TAGE BEFORE STOPS C JUNE 2014 GLAHN DEFINED KER TO CARRY ERROR CODE BACK C TO U405A C JUNE 2014 GLAHN INSERTED CALL TO SPOTRM WHEN TOTAL C WIND IS BEING ANALYZED C JULY 2014 GLAHN ADDED KFILRA( ) TO DIMENSIONS C AUGUST 2014 GLAHN MODIFIED GF FOR MAX OF 1.5 VICE 2.0 C DECEMBER 2014 GLAHN REVISED W3TAG PER JUDY IN ONE PLACE C DECEMBER 2014 GHIRARDELLI/GLAHN CHANGED WRITE(IP18,1755)LP C TO WRITE(IP18,177)LP AT 177 C FEBRUARY 2014 GLAHN ADDED / IN DIAGNOSTICS 2645 AND 2787 C MAY 2015 GLAHN QUALST( ) ADDED TO CALL TO ESP5; C ADDED QUALST( ) TO IP19 PRINT; C AUGMENTED PRINT AT 435 C JUNE 2015 GLAHN ADDED FSTGS, ULAPSE( ), TELL, TELH, C ATEL, BTEL C JULY 2015 GLAHN CHANGED TO I6 VICE I5 IN 2785, 2787 C JULY 2015 GLAHN ADDED IZCHK AND CALLS TO ESP5 C JULY 2015 GLAHN ADDED ICUB TO CALL AND CALL TO CORBC5 C JULY 2015 GLAHN ADDED NREP AND NREPNO TO CALL, AND C IMPLEMENTED THEM; PUT ISETP LOGIC C OUTSIDE LOOP; CHANGED GO TO 2799 TO C GO TO 290 C AUGUST 2015 GLAHN ADDED CCALL( ) AND NAME( ) TO CALL C TO SETPNT C SEPTEMBER 2015 GLAHN CORRECTED NOTOSS( ) C NOVEMBER 2015 GLAHN ALLOWED FOR ERROR RETURN FROM SETPNT C NOVEMBER 2015 GLAHN ADDED LNDSEA( ), SEALND( , ), MESH, C MESHE, NXE, NYE TO CALLS TO SETPNT C DECEMBER 2015 GLAHN CHANGED SLIGHTLY DEFINITION OF IZCHK C DECEMBER 2015 GLAHN ADDED WFACT AND CALL TO ESP5 C JANUARY 2016 GLAHN ADDED QUALST( ) > .99 TO COMPUTE C ERROR STATISTICS C JANUARY 2016 GLAHN ADDED GF = 2 FOR MOS GUST C JANUARY 2016 GHIRARDELLI/GLAHN CORRECTED ORDER OF C "NREP,NREPNO" IN CALL SEQUENCE; C JANUARY 2016 GLAHN MOVED "ISCALD,JFIRST" DOWN ONE LINE C TO MATCH CALL C SEPTEMBER 2016 GLAHN CHANGED ND5 TO ND2X3 IN THREE CALLS C TO PAWGTS C OCTOBER 2016 GLAHN ADDED NCLIP TO CALL AND TO CALL TO C SPOTRM C MARCH 2018 GLAHN COMMENTED OUT WRITE 152 AND C ASSOCIATED DO LOOP 154 PER LAMP OPS C APRIL 2018 GLAHN MADE RACESS(6) CHARACTER*60 VICE *6 C JULY 2018 GLAHN ACCEPTED TRI-ROLE FOR NSMN FORMERLY C NSMNUM C FEBRUARY 2019 GLAHN ADDED NBASTA TO CALL, USED TO PRINT C ONLY NON-BOBUSG STATIONS C FEBRUARY 2019 GLAHN ADDED NEAR( , )TO CALL TO SETPT; C NOPTN NOW HAS DUAL PURPOSE; ADDED C NEAR( ,) AND IG TO CALL TO SMOTHG C FEBRUARY 2018 GLAHN DEFINED NSTASV AND RESET NSTA C APRIL 2019 GLAHN ADDED LNDSEA( ) TO IP18 PRINT AT C 258, 259, 261 C APRIL 2019 GLAHN MOD TO LIMIT SETGPT AND SMOTHG C FOLLOWING SPOTRM TO THE LAST PASS C APRIL 2019 GLAHN CHANGED TO VERIFY ONLY LAND C STATIONS WHEN ILS NE 0 C APRIL 2019 GLAHN CORRECTED COMMENT ABOUT N4P C APRIL 2019 GLAHN ADDED ISQ, XDATSV( ); ANALYZED C SQRT OF CEILING C APRIL 2019 GLAHN ADDED NPASRR TO CALL; ADDED CAPABILITY C TO SWITCH BACK TO VARIABLE RADII AFTER C SWITCHING TO FIXED RADII C APRIL 2019 GLAHN ADDED PREPRO,NOPRE TO CALL C MAY 2019 GLAHN ADDED NBASTA TO CALL TO CORBC5 C PURPOSE C TO DO A BERGTHORSSEN-CRESSMAN-DOOS SUCCESSIVE C APPROXIMATION ANALYSIS ON A SCALAR FIELD. ADAPTED FROM C IBM 360/195 M400. THE VARIABLES HANDLED ARE SPECIFIED C IN A TABLE IN THE CALLING PROGRAM, U405A. SURFACE WINDS C CAN BE USED IN SEA LEVEL PRESSURE ANALYSIS (NOT YET C IMPLEMENTED). OUTPUT IS IN MB FOR PRESSURE AND DEG C FAHRENHEIT FOR TEMPERATURE. THE NX BY NY ANALYSIS IS C RETURNED IN P( ). C C "DISPOSABLE" OR "SUBSETTED" GRIDS, DIMENSIONS IN IOPT( ), C CAN BE CREATED FOR (1) GRIDPRINTING AND WRITING TO UNIT C NO. IP22 AND/OR (2) TDLPACKING AND WRITING TO UNIT C NO. KFILOG. THESE GRIDS CAN BE USED FOR CHECKOUT AND C QUALITY CONTROL. THE CAPABILITY PERTAINS TO EACH PASS C AND TO BOTH UNSMOOTHED AND SMOOTHED GRIDS. WHEN C IOPT(1) = 0, THERE IS NO SUBSET AREA AND SOME COMPUTATIONS C ARE BYPASSED. C C BCD5 AND THE CALLED ESP5 DEPEND ON IVRBL BEING 1 FOR C SEA LEVEL PRESSURE AND 4 FOR SATURATION DEFICIT. OTHER C NUMBERS ARE FLEXIBLY USED. C C THE OUTPUT GRIDS FROM BCD5 ARE AT THE CURRENT MESH LENGTH C MESH. WHEN A GRID HAS BEEN CLIPPED TO A LARGER MESH C LENGTH IN FSTGS5 THAN MESH, THE AREA COVERED WITH C NON-MISSING DATA MAY BE SLIGHTLY GRATER THAN THE DESIRED C AREA AT MESH LENGTH MESH. C C ORIGINALLY, THE SMOOTHING OF LAND WAS LINKED WITH C WATER. IN JULY 2018, IT WAS DESIRED TO SMOOTH LAND BUT C NOT WATER, SO THE SPOTRM PARAMETER NSMNUM WAS GIVEN C TRIPLE DUTY SO THAT OCEAN AND LAKE (SEPARATELY) COULD BE C NOT SMOOTHED WHEN LAND WAS. NOTE THAT THIS ASSUMES C SPOTRM IS BEING CALLED. C C FATAL ERRORS, IER: C AT 173. C C DATA SET USE C KFILDO - UNIT NUMBER FOR OUTPUT (PRINT) FILE. (OUTPUT) C KFILOG - UNIT NUMBER FOR DISPOSABLE TDLPACK GRIDPOINT C OUTPUT. (OUTPUT) C KFILRA(J)- HOLDS THE UNIT NUMBERS FOR ACCESSING THE MOS-2000 C EXTERNAL RANDOM ACCESS FILES (J=1,6). (INPUT) C KFILOV - UNIT NUMBER OF OUTPUT VECTOR FILE CONTAINING C ALL OBS EXCEPT THOSE TOSSED OR QUESTIONABLE C OBS AS MISSING. (OUTPUT) C KFILQC - UNIT NUMBER OF OUTPUT VECTOR FILE CONTAINING C QUALITY CONTROLLED OBS AFTER THE FINAL ANALYSIS C PASS. (OUTPUT) C IP14 - UNIT NUMBER FOR LISTING COMPUTED LAPSE C RATES AND PROBLEMS WITH LAPSE RATES. (OUTPUT) C IP16 - UNIT NUMBER FOR INDICATING WHEN A RECORD IS C WRITTEN TO THE SEQUENTIAL FILE. (OUTPUT) C IP17 - UNIT NUMBER FOR LISTING OF STATIONS, THEIR C X/Y POSITIONS, THEIR DATA VALUES, AND LTAGS. C (OUTPUT) C IP18 - UNIT NUMBER FOR LISTING OF STATIONS, C THEIR X/Y POSITIONS, DATA VALUES, LTAGS, C UNSMOOTHED ANALYSIS (INTERPOLATED) VALUES, AND C DIFFERENCES BETWEEN THE DATA AND THE UNSMOOTHED C ANALYSIS VALUES FOR THE WHOLE ANALYSIS AREA. ALSO C USED IN PACKV FOR LISTING OF DATA WRITTEN. C (OUTPUT) C IP19 - UNIT NUMBER FOR LISTING OF STATIONS, THEIR C X/Y POSITIONS, DATA VALUES, LTAGS, C SMOOTHED ANALYSIS (INTERPOLATED) VALUES, AND C DIFFERENCES BETWEEN THE DATA AND THE ANALYSIS C VALUES FOR THE WHOLE ANALYSIS AREA FOR EACH C PASS ON WHICH SMOOTHING IS DONE. (OUTPUT) C IP20 - UNIT NUMBER FOR LISTING OF STATIONS, THEIR C X/Y POSITIONS, DATA VALUES, LTAGS, UNSMOOTHED C ANALYSIS (INTERPOLATED) VALUES, AND DIFFERENCES C BETWEEN THE DATA AND THE UNSMOOTHED ANALYSIS C VALUES FOR THE ANALYSIS AREA. ALSO, WHEN C THERE IS A SUBSETTED AREA, THE MEAN ABSOLUTE C DIFFERENCE BETWEEN THE UNSMOOTHED ANALYSIS C AND THE DATA. (OUTPUT) C IP21 - UNIT NUMBER FOR LISTING THE AVERAGE DEGREE C OF FIT BETWEEN THE UNSMOOTHED AND SMOOTHED, C IF SMOOTHED, ANALYSIS AND THE DATA OVER THE C WHOLE AREA. ALSO USED IN ESP5 TO LIST C STATIONS TOSSED ON THE LAST PASS. (OUTPUT) C IP22 - UNIT NUMBER FOR GRIDPRINTING. (OUTPUT) C C VARIABLES C KFILDO = UNIT NUMBER FOR OUTPUT (PRINT) FILE. (INPUT) C KFILOG = UNIT NUMBER FOR DISPOSABLE TDLPACK GRIDPOINT C OUTPUT. THIS IS FOR DIFFERENT PASSES OF THE C ANALYSES AND THEIR SMOOTHINGS. (INPUT) C KFILRA(J) = HOLDS THE UNIT NUMBERS FOR ACCESSING THE MOS-2000 C EXTERNAL RANDOM ACCESS FILES (J=1,6). C THE ACCESS ROUTINES ALLOW 6 RANDOM ACCESS C FILES. HOWEVER, IT UNLIKELY U155 WILL NEED C MORE THAN 1 OR 2. C RACESS(J) = THE FILE NAMES CORRESPONDING TO KFILRA(J) C (J=1,6). (CHARACTER*60) C NUMRA = THE NUMBER OF UNIT NUMBERS IN KFILRA( ) AND C NAMES IN RACESS( ). C KFILOV = UNIT NUMBER OF OUTPUT VECTOR FILE CONTAINING C ALL OBS EXCEPT THOSE TOSSED OR QUESTIONABLE C OBS AS MISSING. (INPUT) C KFILQC = UNIT NUMBER OF OUTPUT VECTOR FILE CONTAINING C QUALITY CONTROLLED OBS AFTER THE FINAL ANALYSIS C PASS. (OUTPUT) C IP14 = UNIT NUMBER FOR LISTING COMPUTED LAPSE C RATES AND PROBLEMS WITH LAPSE RATES. (INPUT) C IP16 = INDICATES WHETHER (>0) OR NOT (=0) C A STATEMENT WILL BE OUTPUT TO IP(16) C WHEN A SEQUENTIAL FILE IS WRITTEN THROUGH C PAWGTS. (INPUT)) C IP17 = UNIT NUMBER FOR LISTING OF STATIONS, THEIR C X/Y POSITIONS, THEIR DATA VALUES, AND LTAGS. C (INPUT) C IP18 = UNIT NUMBER FOR LISTING OF STATIONS, THEIR C X/Y POSITIONS, DATA VALUES, LTAGS, C UNSMOOTHED ANALYSIS (INTERPOLATED) VALUES, AND C DIFFERENCES BETWEEN THE DATA AND THE ANALYSIS C VALUES FOR THE WHOLE ANALYSIS AREA. ALSO USED C IN PACKV FOR LISTING OF DATA WRITTEN TO THE C RESOLUTION PACKED. ALSO, SEE IP20. (INPUT) C IP19 = UNIT NUMBER FOR LISTING OF STATIONS, THEIR C X/Y POSITIONS, DATA VALUES, LTAGS, C SMOOTHED ANALYSIS (INTERPOLATED) VALUES, AND C DIFFERENCES BETWEEN THE DATA AND THE ANALYSIS C VALUES FOR THE WHOLE ANALYSIS AREA FOR EACH C PASS ON WHICH SMOOTHING IS DONE. (INPUT) C IP20 = UNIT NUMBER FOR LISTING OF STATIONS, THEIR C X/Y POSITIONS, DATA VALUES, LTAGS, UNSMOOTHED C ANALYSIS (INTERPOLATED) VALUES, AND DIFFERENCES C BETWEEN THE DATA AND THE UNSMOOTHED ANALYSIS C VALUES FOR THE ANALYSIS AREA. ALSO, WHEN C THERE IS A SUBSETTED AREA, THE MEAN ABSOLUTE C DIFFERENCE BETWEEN THE UNSMOOTHED ANALYSIS C AND THE DATA. C (INPUT) C IP21 = UNIT NUMBER FOR LISTING THE AVERAGE DEGREE C OF FIT BETWEEN THE UNSMOOTHED AND SMOOTHED, C IF SMOOTHED, ANALYSIS AND THE DATA FOR THE C WHOLE ANALYSIS AREA. ALSO USED IN ESP5 TO C LIST STATIONS TOSSED ON THE LAST PASS. C (INPUT) C IP22 = UNIT NUMBER FOR WRITING GRIDPRINTED UNSMOOTHED C AND SMOOTHED ANALYSES OVER SUBSETTED AREA. C (INPUT) C I405ADG = 1 = DIAGNOSTIC PRINT TO KFILDO; C 0 OTHERWISE. (INTERNAL) C ID(J) = 4 WORD ID OF VARIABLE BEING ANALYZED. C COMES FROM ITABLE( ,2, ) IN U405A. (INPUT) C IDPARS(J) = THE PARSED, INDIVIDUAL COMPONENTS OF THE C PREDICTOR ID'S CORRESPONDING TO ID( ,N) C (J=1,15), (N=1,ND4). C J=1--CCC (CLASS OF VARIABLE), C J=2--FFF (SUBCLASS OF VARIABLE), C J=3--B (BINARY INDICATOR), C J=4--DD (DATA SOURCE, MODEL NUMBER), C J=5--V (VERTICAL APPLICATION), C J=6--LBLBLBLB (BOTTOM OF LAYER, 0 IF ONLY C 1 LAYER), C J=7--LTLTLTLT (TOP OF LAYER), C J=8--T (TRANSFORMATION), C J=9--RR (RUN TIME OFFSET, ALWAYS + AND BACK C IN TIME), C J=10--OT (TIME APPLICATION), C J=11--OH (TIME PERIOD IN HOURS), C J=12--TAU (PROJECTION IN HOURS), C J=13--I (INTERPOLATION TYPE), C J=14--S (SMOOTHING INDICATOR), AND C J=15--G (GRID INDICATOR). C (INPUT) C JP(J,N) = INDICATES WHETHER A PARTICULAR VARIABLE N MAY C HAVE GRIDPRINTS (J=1), INTERMEDIATE TDLPACK C OUTPUT (J=2), OR PRINT OF VECTOR RECORDS IN C PACKV (J=3) (N=1,ND4). PACKV IS FOR THE C DATA SHOWING T0SSED DATA AS MISSING AND C QUESTIONABLE DATA AS MISSING. THIS IS C AN OVERRIDE FEATURE FOR THE PARAMETERS FOR C GRIDPRINTING AND TDLPACKING IN EACH VARIABLE'S C CONTROL FILE. (INPUT) C IVRBL = 1 = VARIABLE IS SLP. C 2 = FLEXIBLE. C 3 = FLEXIBLE. C 4 = SATURATION DEFICIT. C OTHERS - FLEXIBLE. C SEE ITABLE( , , ) IN U405A FOR OTHER VALUES. C NOTE: BCD5 AND CALLED ESP5 DEPEND ON IVRBL C BEING 1 AND 4 FOR SEA LEVEL PRESSURE AND C SATURATION DEFICIT, RESPECTIVELY. (INPUT) C MODNO = OUTPUT MODEL NUMBER. (INPUT) C ISCALD = DECIMAL SCALING FOR TDLPACKING. (INPUT) C JFIRST = USED IN ESP5 VIA BCD5 TO CONTROL PRINTING. C THIS IS SPECIFIC TO THE VARIABLE BEING C ANALYZED. (INPUT/OUTPUT) C NDATE = DATE/TIME, YYYYMMDDHH. THIS IS THE ANALYSIS C RUN TIME, INCLUDING HH. (INPUT) C JDATE(J) = NDATE PARSED INTO ITS 4 COMPONENTS: C J=1 IS YYYY C J=2 IS MM C J=3 IS DD C J=4 IS HH C (INPUT) C XDATA(K) = DATA TO ANALYZE (K=1,NSTA). (INPUT) C CCALL(K) = STATION CALL LETTERS (K=1,NSTA). (CHARACTER*8) C (INPUT) C NAME(K) = NAMES OF STATIONS (K=1,NSTA). (CHARACTER*20) C (INPUT) C XP(K) = THE X POSITION FOR STATION K (K=1,NSTA) ON C THE ANALYSIS GRID AREA AT THE CURRENT GRID MESH C LENGTH MESH. (INPUT) C YP(K) = THE Y POSITION FOR STATION K (K=1,NSTA) ON C THE ANALYSIS GRID AREA AT THE CURRENT GRID MESH C LENGTH MESH. (INPUT) C XYP(K,J) = XYP(1,1) EQUIVALENCED TO XP( ) IN DRIVER. C XYP(1,2) EQUIVALENCED TO YP( ) IN DRIVER. C (INPUT) C STALAT(K) = LATITUDE OF STATIONS (K=1,NSTA). (INPUT) C STALON(K) = LONGITUDE OF STATIONS (K=1,NSTA). (INPUT) C XPL(K) = THE X POSITION FOR STATION K (K=1,NSTA) ON C THE ANALYSIS GRID AT THE MESH LENGTH MESHB. C (INPUT) C YPL(K) = THE Y POSITION FOR STATION K (K=1,NSTA) ON C THE ANALYSIS GRID AT THE MESH LENGTH MESHB. C (INPUT) C XPE(K) = THE X POSITION FOR STATION K (K=1,NSTA) ON C THE ELEVATION GRID AT THE GRID MESH LENGTH C MESHE. (INPUT) C YPE(K) = THE Y POSITION FOR STATION K (K=1,NSTA) ON C THE ELEVATION GRID AT THE GRID MESH LENGTH C MESHE. (INPUT) C SDATA(K) = WORK ARRAY (K=1,NSTA). (INTERNAL) C TOSS(K) = CONTAINS TOSSED OBS (K=1,NSTA). ALL OTHER C VALUES ARE 9999. (INTERNAL) C QUEST(K) = CONTAINS QUESTIONABLE OBS (K=1,NSTA). ALL C OTHER VALUES ARE 9999. QUESTIONABLE IS DEFINED C AS NOT MEETING X PERCENT OF THE ERROR THRESHOLD, C WHERE X IS HARDWIRED BY PASS. (INTERNAL) C LTAG(K) = DENOTES USE OF DATA CORRESPONDING TO CCALL(K). C +4 = TOSSED IN A PREVIOUS OBS RUN AND C MAINTAINED DOWNSTREAM. C +3 = TOSSED IN A PREVIOUS LAMP RUN, AND C MAINTAINED DOWNSTREAM. C +2 = NOT USED FOR ANY PURPOSE. C +1 = PERMANENTLY DISCARDED FOR THE VARIABLE C BEING ANALYZED. INCLUDES DATA FAR C OUTSIDE THE GRID, AS DEFINED BY RMAX C 0 = USE ON CURRENT PASS THROUGH DATA. C -1 = DO NOT USE ON THIS PASS. C -3 = ACCEPT THIS STATION ON EVERY PASS. THIS C FEATURE MAY OR MAY NOT BE IMPLEMENTED IN C THE CALLING PROGRAM. (INPUT/OUTPUT) C LNDSEA(K) = LAND/SEA INFLUENCE FLAG FOR EACH STATION C (K=1,ND1). C 0 = WILL BE USED FOR ONLY OCEAN WATER (=0) C GRIDPOINTS. C 3 = WILL BE USED FOR ONLY INLAND WATER (=3) C GRIDPOINTS. C 6 = WILL BE USED FOR BOTH INLAND WATER (=3) C AND LAND (=9) GRIDPOINTS. C 9 = WILL BE USED FOR ONLY LAND (=9) GRIDPOINTS. C (INPUT) C ELEV(K) = ELEVATION OF STATIONS IN METERS (K=1,NSTA). C (INPUT) C QUALST(K) = THE QUALITY WEIGHTS TO APPLY FOR THIS VARIABLE C (K=1,KSTA). (INTERNAL) C LAPFG = 0 COMPUTE LAPSE FROM DATA C 1 COMPUTE LAPSE FROM FIRST GUESS. C 2 COMPUTE LAPSE FROM UPPER AIR DATA. C 3 COMPUTE LAPSE FROM SURFACE AND UPPER AIR DATA. C 4 USE LAPSE FROM PREVIOUS VARIABLE (E.G., TOTAL C WIND FROM WIND SPEED) C 5 A COMBINATION OF 0 AND 3 ABOVE. C NOTE IT IS COMBINED WITH LAPUDB IN READING. C (INPUT) C XLAPSE(K) = CALCULATED LAPSE RATE IN UNITS OF THE VARIABLE C BEING ANALYZED PER M (K=1,KSTA). THIS IS THE C LAPSE TO USE, UNLESS LAPFG = 5, IN WHICH CASE C THIS IS COMPUTED FROM SURFACE DATA AND ULAPSE( ) C IS CALCULATED FROM SURFACE AND UA DATA, AND C THEY ARE TO BE COMBINED DEPENDING ON DISTANCE C IN ELEVATION BETWEEN THE STATION AND THE C GRIDPOINT BEING CORRECTED. (K=1,KSTA). C ULAPSE(K) = LAPSE CALCULATED FROM SFC AND UA DATA (K=1,NSTA). C LAPUDB = 0 ANY LAPSE WILL BE USED BOTH UP AND DOWN C 1 LAPSE WILL BE USED ONLY IN AN UPWARD MANNER C 2 LAPSE WILL BE USED ONLY IN A DOWNWARD MANNER C THIS WAS ADDED TO KEEP WIND SPEED FROM BEING C VERY LOW IN VALLEYS. (INPUT) C TELL = LOWER THRESHOLD FOR WT TO BE USED WITH XLAPSE C IN CORBC5. THE WEIGHT FOR ULAPSE IS 1-TELL. C CALCULATED IN CLAPSE. (INTERNAL) C TELH = HIGHER THRESHOLD FOR WT. (SEE TELL ABOVE) C (INTERNAL) C ATEL = CONSTANT FOR THE LINE. (SEE TELL ABOVE) C (INTERNAL) C BTEL = COEFFICIENT FOR THE LINE. (SEE TELL ABOVE) C (INTERNAL) C VRAD(K,L) = RADII OF INFLUENCE USED AS OVERRIDE TO U405.CN C CONTROL FILE (K=1,NSTA) (L=1,6). NOTE THAT C THIS APPLIES TO THE TOTAL RUN; ITS USE IS C CONTROLLED BY IVRAD BY ELEMENT. (INPUT) C NSTA = NUMBER OF POINTS FOR WHICH DATA ARE AVAILABLE. C THIS CAN BE BOTH FROM STATION DATA AND FROM C SAMPLING THE FIRST GUESS. (INPUT) C NBASTA = THE NUMBER OF STATIONS BEFORE BOGUSG STATIONS C ARE ADDED. (INPUT) C ISETP = FLAG TO INDICATE WHETHER AFTER THE LAST PASS C A GRIDPOINT WILL BE SET TO THE CLOSEST C STATION (=2), TO A VALUE IN THE DIRECTION C OF THE STATION VALUE BUT NOT CROSS AN INTEGER C BOUNDARY (=1), OR NOT (=0). (THIS COULD BE C PARTICULARIZED TO QUALITY OF DATA.) (INPUT) C LTAGPT(K) = FOR STATION K (K=1NSTA), C 1 = AUGMENTED DATA (FIRST PASS) C 2 = AUGMENTED DATA (2ND PASS) C 3 = BOGUS DATA C 4 = BOGUS DATA FROM BOGUSG C 0 = EVERYTHING ELSE C (INPUT) C MTAGPT(K) = WHEN SPEED ANALYZED, LTAGPT( ) IS SAVED IN C MTAGPT( ) (DONE IN AUGMT2) FOR USE IN TOTAL C WIND (K=1NSTA). (INPUT) C ILS = FLAG FOR HOW THE SEA/LAND CORRECTIONS ARE C GOING TO BE MADE: C 1 = LAND/WATER TREATED SEPARATELY; C 0 = OTHERWISE. THIS OPERATES IN TANDOM WITH C LNDWAT( , ), BUT ILS CAN OVERRIDE FOR EASY CHANGE. C (INPUT) C WTWTL = WEIGHTING FACTOR TO USE FOR OCEAN OR INLAND WATER C POINTS OVER LAND WHEN ILS = 1. OCEAN POINTS C NEVER AFFECT INLAND WATER. (INPUT) C WTLTW = WEIGHTING FACTOR TO USE FOR LAND POINTS OVER C OCEAN AND INLAND WATER WHEN ILS = 1. (INPUT) C HGTTHA = ELEVATION DIFFERENCE IN M BETWEEN A STATION C AND A GRIDPOINT WHICH MUST NOT BE EXCEEDED C FOR THE STATION TO INFLUENCE THE GRIDPOINT. C (INPUT) C HGTTHB = ELEVATION DIFFERENCE IN M BETWEEN A STATION C AND ANY (INTERPOLATED) POINT ON THE ELEVATION C GRID BETWEEN THE STATION AND THE GRIDPOINT C WHICH MUST NOT BE EXCEEDED FOR THE STATION C TO INFLUENCE THE GRIDPOINT. (INPUT) C P(J) = FIELD HOLDING FIRST GUESS AND ANALYSIS C (J=1,NX*NY). (INPUT/OUTPUT) C FD2(J) = WORK ARRAY FOR GRIDPRINTING (J=1,ND2X3). C (INTERNAL) C CORR(J) = CORRECTION FOR GRIDPOINT IX,JY (J=1,NX*NY). C (INTERNAL) C COUNT(J) = SUM OF WEIGHTS FOR GRIDPOINT IX,JY WHEN TYPE 3 C CORRECTION BEING MADE (J=1,NX*NY). C (INTERNAL) C NCOUNT(J) = COUNT OF STATIONS CORRECTING GRIDPOINT IX,JY C (J=1,NX*NY) IN CORBC5. ALSO USED AS SCRATCH C IN PACKV, SMOTHN, SOMTHC, AND PAWGTS. C (INTERNAL) C FD6(J) = WORK ARRAY (J=1,NX*NY). (INTERNAL) C ND2X3 = SIZE OF FD2( ), P( ), CORR( ), COUNT( ), AND C NCOUNT( ). (INPUT) C NX = NUMBER OF GRIDPOINTS IN THE XI (LEFT TO RIGHT) C DIRECTION AT CURRENT MESH LENGTH MESH. C (INPUT/OUTPUT) C NY = NUMBER OF GRIDPOINTS IN THE YJ (BOTTOM TO TOP) C DIRECTION AT CURRENT MESH LENGTH MESH. C (INPUT/OUTPUT) C IPACK(J) = WORK ARRAY (J=1,ND5). (INTERNAL) C DATA(J) = WORK ARRAY (J=1,ND5). (INTERNAL) C IWORK(J) = WORK ARRAY (J=1,ND5). (INTERNAL) C ND5 = DIMENSION OF IPACK( ), IWORK( ), AND DATA( ). C (INPUT) C MINPK = MINIMUM GROUP SIZE WHEN PACKING THE DATA. C (INPUT) C TELEV(J) = THE TERRAIN ELEVATION FROM THE MOS-2000 EXTERNAL C RANDOM ACCESS FILE (J=1,NXE*NYE). (INPUT) C SEALND(J) = THE LAND/SEA MASK (J=1,NXE*NYE). C 0 = OCEAN WATER GRIDPOINTS; C 3 = INLAND WATER GRIDPOINTS. C 9 = LAND GRIDPOINTS. C (INPUT) C CPNDFD(J) = THE NDFD MASK FROM THE MOS-2000 EXTERNAL C RANDOM ACCESS FILE (J=1,NXE*NYE) AT NOMINAL C MESHLENGTH MESHE. (INPUT) C NXE = X-EXTENT OF TELEV( , ), SEALND( , ), C SEALND( , ), AND CPNDFD( , ) AT MESH LENGTH C MESHE. (INPUT) C NYE = Y-EXTENT OF TELEV( , ), SEALND( , ), C SEALND( , ), AND CPNDFD( , ) AT MESH LENGTH C MESHE. (INPUT) C MESHE = THE NOMINAL MESH LENGTH OF THE TERRAIN GRID. C IT IS MANDATORY THE GRID AVAILABLE IS OF THIS C MESH SIZE AND COVER THE SAME AREA SPECIFIED C BY NXL BY NYL, EVEN IF MESHE IS NOT EQUAL C TO MESHB. (INPUT) C EMESH = ACTUAL MESH LENGTH CORRESPONDING TO MESHE. C (INPUT) C IS0(J) = MOS-2000 GRIB SECTION 0 ID'S (J=1,4). C (INTERNAL) C IS1(J) = MOS-2000 GRIB SECTION 1 ID'S (J=1,21+). C (INTERNAL) C IS2(J) = MOS-2000 GRIB SECTION 2 ID'S (J=1,12). C (INTERNAL) C IS4(J) = MOS-2000 GRIB SECTION 4 ID'S (J=1,4). C (INTERNAL) C ND7 = DIMENSION OF IS0( ), IS1( ), IS2( ), AND C IS4( ). (INPUT) C MD(J) = THE 4-WORD ID OF THE VECTOR DATA BEING C ANALYZED (ITABLE(1,2,IVRBL) IN CALLING C PROGRAM). (INPUT) C IPLAIN(L,J) = 32 CHARACTERS (L=1,L3264W) (J=1,4) OF PLAIN C LANGUAGE DESCRIPTION OF THE VARIABLE. C NOTE THAT THIS REQUIRES TWO 32-BIT WORDS TO HOLD C THE DESCRIPTION BUT ONLY ONE 64-BIT WORD. C EQUIVALENCED TO PLAIN( ) IN DRU150. C PLAIN = THE PLAIN LANGUAGE DESCRIPTION OF THE VARIABLE C IN ID( ). EQUIVALENCED TO IPLAIN( , ) IN C DRU150. (CHARACTER*32) C PLAINT = THE PLAIN LANGUAGE DESCRIPTION TO FURNISH TO C GTHRES. THIS IS FOR DISTANCE GRID IN SPOTRM. C EQUIVALENCED TO IPLANT. C PLANT(L,J) = 32 CHARACTERS (L=1,L3264W) (J=1,4) OF PLAIN C LANGUAGE DESCRIPTION OF VARIABLES TO FURNISH TO C GTHRES. THIS IS FOR TERRAIN OR SEA/LAND MASK. C EQUIVALENCED TO PLAINT. C NAREA = THE AREA OVER WHICH THE ANALYSIS IS MADE: C 1 = CONUS, C 2 = ALASKA, C 3 = HAWAII, C 4 = PUERTO. C ALATL = NORTH LATITUDE OF LOWER LEFT CORNER POINT C OF A GRID OF THE SIZE NXL, NYL. TRUNCATED C TO TEN THOUSANDTHS OF DEGREES. NOTE THAT THE C MOS-2000 ARCHIVE IS ONLY TO THOUSANDTHS OF C DEGREES. (INPUT) C ALONL = WEST LONGITUDE OF LOWER LEFT CORNER POINT C OF A GRID OF THE SIZE NXL, NYL. TRUNCATED C TO TEN THOUSANDTHS OF DEGREES. NOTE THAT THE C MOS-2000 ARCHIVE IS ONLY TO THOUSANDTHS OF C DEGREES. (INPUT) C NPROJ = NUMBER OF MAP PROJECTION TO WHICH THIS GRID C APPLIES. C 3 = LAMBERT. C 5 = POLAR STEREOGRAPHIC. C 7 = MERCATOR. C (INPUT) C ORIENT = ORIENTATION OF GRID IN WEST LONGITUDE. (INPUT) C MESH = THE NOMINAL MESH LENGTH OF THE CURRENT GRID. C INITIALLY SET IN FSTGS5 FROM U405A.CN FILE C MSHPAS( , ). (INPUT/OUTPUT) C MESHB = THE NOMINAL MESH LENGTH OF THE ANALYSIS GRID. C 1/4 BEDIENT AT 60 N IS 95.25 KM WHICH IS ABOUT C 80 KM OVER THE U.S. MESH = 80 CORRESPONDS TO C 95.25 STORED WITH THE GRIDS. NXL, NYL, ETC. C ARE IN RELATION TO THIS. C MESHL = NOMINAL MESH LENGTH OF QUALITY CONTROL C (SUBSETTED) GRID FOR CONTINUOUS VARIABLES. C (INPUT) C XLAT = NORTH LATITUDE AT WHICH GRIDLENGTH IS SPECIFIED C IN DEGREES. (INPUT) C MSHPAS(J) = THE NOMINAL MESH LENGTH FOR EACH PASS C (J=1,NPASS) FOR THE GUESS OPTION BEING USED. C (INPUT) C ER1(J) = ERROR CRITERIA FOR PASS (J=1,NPASS). C IF OBSERVATION IS DIFFERENT FROM CURRENT C ANALYSIS BY MORE THAN ER1( ), IT IS C PROBABLY NOT USED ON THIS PASS. HOWEVER, C BEFORE A DATUM IS DISCARDED, A BUDDY CHECK C IS MADE. ALSO IF ER1(J) = 0, IT MEANS CHECK C IS NOT PERFORMED ON THIS PASS. (INPUT) C NTYPE(J) = TYPE OF CORRECTION FOR PASS J (J=1,NPASS). C 0 MEANS SKIP THIS PASS C 1 MEANS W = 1 C 2 MEANS W = (R**2 - D**2)/(R**2 + D**2) C 3 MEANS SAME AS 2 EXCEPT SUM OF WEIGHTS IN C DENOMINATOR. (INPUT) C B(J) = SMOOTHING PARAMETER FOR PASS J (J=1,NPASS). C B( ) = 0 MEANS NO SMOOTHING. (INPUT) C CSTSM = THE SMOOTHING PARAMETER IF ANY POINT HAS WATER C BUT NOT ALL ARE WATER. USE INSTEAD OF BQ. C (INPUT) C R(J) = RADIUS OF INFLUENCE FOR PASS J IN GRID UNITS C (J=1,NPASS). NOTE THAT THE ACTUAL DISTANCE C DEPENDS ON MESH. (INPUT) C RSTAR(J) = MULTIPLICATIVE FACTOR TO USE WITH R(J) IN C DETERMINING HOW FAR OUTSIDE GRID TO USE DATA. C FOR PASS J, PROGRAM WILL USE DATA R(J)*RSTAR(J) C GRID UNITS OUTSIDE GRID. (INPUT) C LNDWAT(J) = FLAG FOR EACH PASS (J=1,NPASS) TO DETERMINE C HOW THE SEA/LAND CORRECTIONS WILL BE MADE. C 0 = DON'T USE THE DIFFERENCES FEATURE; ALL DATA C WILL BE USED FOR ALL POINTS. C 1 = USE THE DIFFERENCE FEATURE. SEE LNDSEA( ). C 2 = OCEAN POINTS WILL NOT BE CHANGED. C 3 = NEITHER OCEAN NOR INLAND WATER POINTS WILL C BE CHANGED. C (INPUT) C ITRPLQ(J) = TYPE OF INTERPOLATION TO GO FROM ONE MESH C LENGTH TO ONE OF HALF THAT FOR EACH PASS J C (J=1,NPASS). C 1 = BILINEAR C 2 = BIQUADRATIC C (INPUT) C IALGOR(J) = TYPE OF CORRECTION ALGORITHM TO APPLY FOR EACH C PASS (J=1,NPASS). C 1 = NORMAL TERRAIN C 2 = DISTANCE WEIGHTED TERRAIN C (INPUT) C ELCORR(J) = FRACTION OF THE ELEVATION CORRECTION TO C APPLY FOR EACH PASS (J=1,NPASS). (INPUT) C IBKPN = FLAG TO INDICATE WHETHER TO APPLY BK( , ) TO C POSITIVE OR NEGATIVE LAPSE RATES: C 0 = DON'T OPERATE BK( , ) (ALL LAPSES USED), C +1 = APPLY TO POSITIVE LAPSES (POSITIVE IS ODD C FOR TEMPERATURE), C +2 = SAME AS 1, BUT DON'T APPLY DOWNWARD, C -1 = APPLY TO NEGATIVE LAPSES (NEGATIVE IS ODD C FOR SNOW), C -2 = SAME AS -1, BUT DON'T APPLY DOWNWARD, AND C 99 = DON'T COMPUTE OR USE LAPSE RATES. C (LAPSE RATES WILL ALSO NOT BE USED WHEN KFILLP C IS NOT PROVIDED AND WHEN ELCORR( ) FOR ALL C PASSES = 0. KFILLP IS THE FILE FOR READING C PAIRS TO COMPUTE LAPSE.) C (INPUT) C BK(J) = THE MAXIMUM RADII IN GRIDPOINTS FOR WHICH C THE LAPSE RATES INDICATED BY IBKPN ARE USED C FOR EACH PASS J (J=1,NPASS). (INTERNAL) C ELCORU(J) = FRACTION OF THE ELEVATION CORRECTION TO C APPLY FOR EACH PASS (J=1,NPASS) FOR THE C "UNUSUAL" LAPSE RATE (THE ONE WITH THE SIGN C SPECIFIED IN IBKPN. (INPUT) C IFCOR(J) = CORRECTION FLAG FOR EACH PASS J (J=1,NPASS)). C 0 = IFULL( , ) IS NOT USED IN CORRECTIONS, C 1 = IFULL( , ) USED FOR + OR - CORRECTIONS, C 2 = IFULL( , ) USED TO EMPHASIZE HIGH WINDS. C THIS IS FOR WHEN MESONET OR OTHER DATA WITH C LESS RELIABILITY THAN METAR ARE TO NOT CARRY C AS MUCH WEIGHT. READ AS PART OF NTYPE( , ) C (INPUT) C RWATO(J) = FACTOR BY WHICH TO INCREASE THE RADIUS FOR C OCEAN WATER POINTS (J=1,NPASS). (INPUT) C RWATI(J) = FACTOR BY WHICH TO INCREASE THE RADIUS FOR C INLAND WATER POINTS (J=1,NPASS). (INPUT) C IVRAD = CONTROLS HOW VRAD( ) AND THE RADII R( , ) C ARE USED. C 0 = USE R( , ) NORMALLY. C 1 = USE VRAD( , ) OVERRIDE. C THIS IS READ IN U405A .CN FILE, BUT CAN BE C MODIFIED IN BCD5 WHEN NPASSF IS IN THE RANGE C 1 THROUGH NPASS. (INPUT/OUTPUT) C TLOD(J) = LOW THRESHOLD FOR DISPOSABLE GRIDS (J=1,3). C WHEN A LAST PASS GRIDPOINT IS C LT TLOD, IT IS SET TO SETLOD. (INPUT) C SETLOD(J) = SEE TLOD (J=1,3). (INPUT) C THID(J) = HIGH THRESHOLD FOR DISPOSABLE GRIDS (J=1,3). C WHEN A LAST PASS GRIDPOINT IS C GT THID, IT IS SET TO SETHID. (INPUT) C SETHID(J) = SEE THID (J=1,3). (INPUT) C CONSTD(J) = ADDITIVE CONSTANT TO FURNISH TO THRESHOLDING C AND SCALING SUBROUTINE FOR DISPOSABLE GRIDS C (J=1,3). (INPUT) C NSCALD(J) = SCALING CONSTANT TO FURNISH TO THRESHOLDING C AND SCALING SUBROUTINE FOR DISPOSABLE GRIDS C (J=1,3). (INPUT) C EX1D(J) = EXTRA PARAMETER FOR DISPOSABLE GRIDS NOT YET C USED FOR THRESHOLDING (J=1,3). (INPUT) C EX2D(J) = EXTRA PARAMETER FOR DISPOSABLE GRIDS NOT YET C USED FOR THRESHOLDING (J=1,3). (INPUT) C IALOC(J) = LOCATIONS IN CCALL( , ) OF THE PAIRED STATIONS C (J=1,ND13), NOALOC(K) VALUES FOR EACH STATION K C (K=1,LSTA). (INPUT) C ADIST(J) = DISTANCES OF BASE STATION OF THE PAIRED STATIONS C (J=1,ND13), NOALOC(K) VALUES FOR EACH STATION K. C (INPUT) C AELEV(J) = ELEVATION DIFFERENCES OF BASE STATION OF THE C PAIRED STATIONS (J=1,ND13), NOALOC(K) VALUES C FOR EACH STATION K. (INPUT) C ND13 = MAXIMUM TOTAL PAIRS OF STATIONS. DIMENSION OF C IALOC( ), ADIST( ), AND AELEV( ). (INPUT) C N4P = 4 INDICATES THE SURROUNDING 4 POINTS WILL BE C CHECKED WHEN TRYING TO FIND A GRIDPOINT OF C THE SAME TYPE AS THE DATUM AND INTERPOLATION C CAN'T BE DONE. CURRENTLY, THIS IS ALWAYS C DONE (DOES NOT REQUIRE N4P=4). C 12 SAME AS ABOVE, EXCEPT 12 ADDITIONAL POINTS C WILL BE CHECKED WHEN NONE OF THE 4 POINTS C ARE OF THE CORRECT TYPE. C N4P IS OPERATIVE ONLY WHEN THE SURROUNDING C 4 POINTS ARE OF MIXED TYPE. (INPUT) C NSHLN(J) = DETERMINES SMOOTHING AT HIGH AND LOW ELEVATIONS. C A 1 INDICATES: C J=1--HIGH ELEVATION, HIGH VALUE SMOOTHED. C J=2--HIGH ELEVATION, LOW VALUE SMOOTHED. C J=3--HIGH ELEVATION, NOT HIGH OR LOW VALUE C SMOOTHED. C J=4--LOW ELEVATION, HIGH VALUE SMOOTHED. C J=5--LOW ELEVATION, LOW VALUE SMOOTHED. C J=6--LOW ELEVATION, NOT HIGH OR LOW VALUE C SMOOTHED. C A 0 INDICATES NO SMOOTHING FOR THE VALUES OF J. C (INPUT) C ICUB = = 0, USE WT=(R**2-DIST**2)/(R**2+DIST**2) C = 1, USE WT=[(R**3-DIST**3)/(R**3-DIST**3)]**2 C (INTERNAL) C NSMTYP = TYPE OF SMOOTHING: C 0 = NONE C 1 = NORMAL, 5-PT C 2 = SAME EXCEPT NO CHANGE IS MADE UNLESS ONE C OF THE POINTS TO CONTRIBUTE TO THE NEW C VALUE HAS BEEN CHANGED. C 3 = 9-POINT SMOOTHING USED ON LAST PASS ONLY, C ANY OTHER PASS DEFAULTS TO NSMTYP = 2. C 4 = USES SUBROUTINE SMOTHC FOR PASSES GE 4 C FOR SLP ONLY. FOR PASSES LT 4 OR NOT SLP, C DEFAULTS TO NSMTYP = 2. C 5 = SPECIAL TERRAIN-FOLLOWING SMOOTHING. C 6 = TWO PASSES OF 5 ABOVE. C 7 = THREE PASSES OF 5 ABOVE. C 8 = HOLE FILLER RAY WITH SPOTRM C (INPUT) C U(K) = THE FACTOR TO USE IN CONVERTING U-WINDS C TO CHANGE IN MB PER MESH LENGTH (K=1,NSTA) C BUT ONLY WHEN ANALYZING SLP. U(K) HAS C BEEN SET TO 9999 FOR OBS TOSSED BY U405B AS C WELL AS WIND SPEEDS LT WNDTHR. U( ) IS C DIMENSIONED ND2X3 IN THE DRIVER DRU155, AND C ND2X3 IS GUARANTEED TO BE GE ND1. (INPUT) C V(K) = SAME AS U(K) EXCEPT FOR V-WINDS. (INPUT) C WNDWT(J) = WEIGHT TO APPLY TO WIND OBS CORRECTIONS C RELATIVE TO PRESSURE CORRECTIONS (J=1,6). C THIS WILL BE ZERO FOR ALL EXCEPT PRESSURE C ANALYSIS. (INPUT) C WNDGRD = PARAMETER FOR CONVERTING WIND SPEED TO SLP C GRADIENTS. (INPUT) C WNDTHR = THRESHOLD TO USE FOR WIND SPEED FOR WIND TO BE C USED IN ANALYSIS. FOR PRINTING ONLY. (INPUT) C WNDTRN = DEGREES TO TURN SURFACE WIND BEFORE APPLYING C GEOSTROPHIC CORRECTION. FOR PRINTING ONLY. C (INPUT) C NPRT(J) = 1 FOR PRINTING OF ANALYSIS AFTER PASS J C (J=1,6). C 0 FOR NO PRINTING. (INPUT) C JPRT(J) = SAME AS NPRT(J) EXCEPT FOR SMOOTHED ANALYSIS. C (INPUT) C NTDL(J) = 1 FOR TDLPACKING AND WRITING SUBSETTED C UNSMOOTHED ANALYSIS AFTER PASS J (J=1,NPASS). C ZERO FOR NO WRITING. (INPUT) C JTDL(J) = SAME AS ABOVE EXCEPT FOR SMOOTHED ANALYSIS. C (INPUT) C NPASS = NUMBER OF PASSES TO PERFORM FOR VARIABLE. C (INPUT) C NREPNO = NUMBER OF TIMES TO REPEAT ANALYSIS WHEN SOME C DATA HAVE BEEN TOSSED ON THE LAST PASS. C (INPUT) C NREP = PASS NUMBER TO START REPEAT (SEE NPRENO C ABOVE). (INPUT) C MGUESS = THE TYPE OF FIRST GUESS ACTUALLY USED. C 1 = CONSTANT. C 2 = PRIMARY GRID (E.G., A MOS FORECAST). C 3 = ALTERNATE GRID. C 4 = AVERAGE OF OBSERVATIONS. C (INPUT) C ERRADJ = THROWOUT ADJUSTMENT. NORMALLY = 1. FOR AUGMTX, C CAN BE USED TO ADJUST THROWOUT BASED ON TYPE OF C DATA (OCEAN, LAKE, LAKE/LAND, OR LAND). IN ESP5. C HAS BEEN IMPLEMENTED FOR AUGMT2. (INPUT) C NPASSP = THE NUMBER OF THE PASS TO START SPOTRM. (INPUT) C NPASSF = THE NUMBER OF THE PASS TO TAKE C A SPECIFIC ACTION, LIKE INTERPOLATING INTO C THE CURRENT ANALYSIS TO GET STABLIZING C VALUES FOR THE SUBSEQUENT PASSES. A VALUE OF C ZERO WILL BE TREATED AS A NOP. (INPUT) C NSMN = SERVES TRIPLE PURPOSE. CONSIDER IT COMPOSED OF C XYZZ, WHERE: C X = 1 IF THE OCEAN PONTS ARE NOT TO BE SMOOTHED, C Y = 1 IF THE LAKE POINTS ARE NOT TO BE SMOOTHED, C ZZ =THE NUMBER OF CALLS TO SMOTHG AFTER SPOTRM. C TAKEN FROM SPOTRM CONTROL PARAMETERS. THIS WAS C THE ORIGINAL PURPOSE OF NSMNUM. (INPUT) C NPASRR = THE NUMBER OF THE PASS TO USE THE INTERNALLY C COMPUTED RADII BASED ON THE CLOSEST STATION. C (INPUT) C NPASSR = THE NUMBER OF THE PASS TO SWITCH FROM VARIABLE C RADII TO CONSTANT RADII, UNLESS NPASSR EQ 0. C (INPUT) C IORST = 1 WHEN ORSMTW IS TO BE CALLED, AND SMOTHG IS C TO BE CALLED BEFORE THE CORRECTIONS ON THE LAST C PASS. 0 OTHERWISE. THE PURPOSE IS TO SMOOTH C THE OCEAN WITH A 9-POINT SMOOTHER IN ORDER TO C FORCE A CORRECTION AT AND AROUND A MAX OR MIN C DATUM VALUE. (INPUT) C NCLIP = 1 TO CLIP OUTPUT TO NDFD MASK; =0 OTHERWISE. C (INPUT) C PREPRO(J) = NAME OF PREPROCESSING ROUTINES (J=1,NPRE). C (CHARACTER*6) (INTERNAL) C NOPRE = NUMBER OF ENTRIES IN PREPRO( ) AND ASSOCIATED C VARIABLES. (INTERNAL) C NOPTN = INDICATES OPTION FOR WHICH DATA TO SMOOTH OUT C IN SPOTRM. COMES FROM U405A.CN IN CALL TO C SPOTRM CONST( ). C 1 = SMOOTH OUT BOGUS ONLY C 2 = SMOOTH OUT BOGUS AND 2ND LEVE AUGMENTATION. C 3 = SMOOTH OUT BOGUS AND ALL AUGMENTATION C 4 = KEEP ALL. C INCOMING IS RIGHTMOST 2 DIGITS. ISETG*100 IS C ALSO PART OF INCOMING, AND IS SEPARATED OUT. C (INPUT) C DIFFA = THE MAXIMUM DIFFERENCE IN ELEVATION IN METERS C BETWEEN THE GRIDPOINT BEING SMOOTHED AND THE C GRIDPOINT USED IN SMOOTHING. USED IN SPOTRM. C NOCEAN = TAKES ONE OF 4 VALUES DEPENDING ON HOW THE C OCEAN TYPE OF STATION AFFECTS THE TYPE OF C GRIDPOINT. (INPUT) C LAKE = TAKES ONE OF 4 VALUES DEPENDING ON HOW THE C LAKE TYPE OF STATION AFFECTS THE TYPE OF C GRIDPOINT. (INPUT) C DISTX = VALUE TO MULTIPLY BY RMAX IN SPOTRM = R(1) C IN U405A.CN TO SEARCH FOR CLOSEST STATION C (INPUT) C DPOWER = THE POWER OF THE DISTANCE TO USE IN WEIGHTING. C (INPUT) C WTAUG = THE WEIGHT OF THE AUGMENTING DATA. THIS WAS C SET UP TO USE WITH AUGMT3, BUT COULD BE USED C WITH OTHER AUGMENTING ROUTINES. INITIALIZED C TO 1. SO UNLESS SET OTHERWISE, AUGMENTING C AND BOGUS DATA WILL BE USED FULL FORCE. C (INPUT) C RAY = THE MULTIPLIER OF THE DISTANCE TO THE CLOSEST C STATION TO USE AS THE RADIUS OF THE SMOOTHING C CIRCLE (OR MAJOR AXIS OF ELIPSE). (INPUT) C LH = SWITCH (=1) TO INDICATE TO SPORTM TO ASSURE C LOW VALUES ARE IN VALLEYS AND HIGH VALUES ARE C IN HIGH ELEVATIONS. (INPUT) C CINT(J) = THE CONTOUR INTERVAL WHEN GRIDPRINTING, APPLIES C TO THE UNITS IN UNITS(N) (J=1,NPASS). C (INTERNAL) C ORIGIN(J) = THE CONTOUR ORIGIN WHEN GRIDPRINTING, APPLIES C TO THE UNITS IN UNITS(N) (J=1,NPASS). C (INTERNAL) C SMULT(J) = THE MULTIPLICATIVE FACTOR WHEN CONTOURING OR C GRIDPRINTING THE DATA (J=1,NPASS). C NOTE SMULT( ), SADD( ), ORIGIN( ), CINT( ), C AND UNITS( ), ALTHOUGH NAMED THE SAME AND C PLAYING THE SAME ROLE IN GRIDPRINTING, ARE C NOT THE SAME VARIABLES AS IN THE CALLING C PROGRAM; THEY ARE FILLED HERE AND PERTAIN C TO EACH PASS. (INTERNAL) C SADD(J) = THE ADDITIVE FACTOR WHEN CONTOURING OR C GRIDPRINTING THE DATA (J=1,NPASS). (INTERNAL) C TITLE = 40-CHARACTER TITLE FOR VARIABLE. (CHARACTER*40) C (INPUT) C IOPT(J) = SUBSETTING VALUES USED IN GRIDPRINTING (J=1,8). C WHEN IOPT(1) = 0, SUBSETTING IS NOT DONE, C STATISTICS ARE NOT CALCULATED, AND IP20 IS NOT C USED. IOPT( ) IS IN RELATION TO THE SUBSETTED C AREA MESH LENGTH MESHL. C 1 - 0 OPTION TABLE NOT USED/1 USED. C 2 - SUB ARRAY MIN IX VALUE. C 3 - SUB ARRAY MAX IX VALUE. C 4 - SUB ARRAY MIN JY VALUE. C 5 - SUB ARRAY MAX JY VALUE. C 6 - 1 IF ALL INTERPOLATION IS TO BE BILINEAR. C OTHERWISE, INTERPOLATION IS TO BE C BIQUADRATIC WHERE POSSIBLE. C 7 - NOT USED. C 8 - PAGE WIDTH IN GRID POINTS. C (INPUT) C POSTDS(J) = HOLDS NAME OF DISPOSABLE POSTPROCESSING ROUTINE C (J=1,NOPROD). (CHARACTER*6) (INPUT) C NOPROD = THE NUMBER OF ENTRIES IN POSTDS( ). (INPUT) C JTOTBY = THE TOTAL NUMBER OF BYTES ON THE FILE ASSOCIATED C WITH UNIT NO. KFILOG. (INPUT/OUTPUT) C JTOTRC = THE TOTAL NUMBER OF RECORDS IN THE FILE ON UNIT C NUMBER KFILOG. (INPUT/OUTPUT) C MTOTBY = THE TOTAL NUMBER OF BYTES ON THE FILE ASSOCIATED C WITH UNIT NO. KFILOV. (INPUT/OUTPUT) C MTOTRC = THE TOTAL NUMBER OF RECORDS IN THE FILE ON UNIT C NUMBER KFILOV. (INPUT/OUTPUT) C ITOTBY = THE TOTAL NUMBER OF BYTES ON THE FILE ASSOCIATED C WITH UNIT NO. KFILQC. C ITOTRC = THE TOTAL NUMBER OF RECORDS IN THE FILE ON UNIT C NUMBER KFILQC. C NOTOSS(J) = RUNNING COUNT OF TOTAL STATIONS TOSSED ON C LAST PASS (J=1) AND OF BASE STATIONS (J=2). C (INPUT/OUTPUT) C L3264B = INTEGER WORD LENGTH IN BITS OF MACHINE BEING C USED (EITHER 32 OR 64). (INPUT). C L3264W = NUMBER OF WORDS IN 64 BITS (EITHER 1 OR 2). C (INPUT) C ISTOP(J) = ISTOP(1)--IS INCREMENTED BY 1 EACH TIME AN ERROR C OCCURS. C ISTOP(2)--IS INCREMENTED WHEN THERE ARE C FEW DATA (200) FOR AN ANALYSIS. C ISTOP(3)--IS INCREMENTED WHEN A DATA RECORD C COULD NOT BE FOUND. C ISTOP(4)--IS INCREMENTED WHEN A LAPSE RATE COULD C NOT BE COMPUTED OR HAS TOO FEW CASES C TO BE USED. C ISTOP(5)--IS INCREMENTED WHEN NO NON-MISSING C GRIDPOINT AROUND THE DATA POINT IS C OF THE SAME TYPE. C ISTOP(6)--IS INCREMENTED WHEN THERE IS A PROBLEM C WITH MAKING BOGUS STATIONS. C (INPUT/OUTPUT) C IER = ERROR RETURN. C 0 = GOOD RETURN. C 777 = FATAL ERROR. C (OUTPUT) C LP = PASS NUMBER. (INTERNAL) C BB = INTERPOLATED VALUE FROM SUBROUTINE INTR. C (INTERNAL) C ITAUH = PROJECTION OF FIELD IN HOURS. (INTERNAL) C ITAUM = PROJECTION OF FIELD IN MINUTES. (INTERNAL) C IOPTGR(J) = SUBSETTING VALUES USED IN DETERMINING WHETHER C A POINT SHOULD BE INCLUDED IN SUMMING THE C DIFFERENCES FOR THE SUBSETTED AREA (J=1,8). C THESE ARE CALCULATED IN REFERENCE TO THE C CURRENT GRID MESH BEING USED. (INTERNAL) C NXD = THE X EXTENT OF THE DISPOSABLE GRID. (INTERNAL) C NYD = THE Y EXTENT OF THE DISPOSABLE GRID. (INTERNAL) C ALATD = LL LATITUDE OF THE DISPOSABLE GRID. TRUNCATED C TO THOUSANDS TO AGREE WITH ARCHIVE WHEN THE C GRIDS ARE THE SAME. THIS IS NECESSARY FOR C U203 FOR GEMPAK. (INTERNAL) C ALOND = LL LONGITUDE OF THE DISPOSABLE GRID. SEE ALATD. C (INTERNAL) C FRACT(J) = FRACTION QUEST( ) CRITERIA ARE OF ER1(J) (J=1,6). C J = PASS. (INTERNAL) C ER1Q = ERROR CRITERIA FOR THE CURRENT PASS FOR QUEST( ). C ER1Q(LP)=ER1(LP)*FRACT(LP), WHERE LP IS THE C PASS NUMBER. (INTERNAL) C ISCALE = BINARY SCALING FACTOR, SET TO ZERO. (INTERNAL) C XMISSP = PRIMARY MISSING VALUE FOR PACKING, SET = 9999. C OR 0 DEPENDING ON USE. (INTERNAL) C XMISSS = SECONDARY MISSING VALUE FOR PACKING, SET = 0. C (INTERNAL) C DIFMAX(M) = RANKED LARGEST ABSOLUTE DIFFERENCES BETWEEN AN C ANALYSIS POINT AND THE INTERPOLATED VALUE OVER C THE SUBSET AREA (M=1,3). (INTERNAL) C STAMAX(M) = CALL LETTERS OF THE STATION ASSOCIATED WITH C DIFMAX(M) (M=1,3). INTERNAL) C NAMMAX(M) = NAME OF THE STATION ASSOCIATED WITH C DIFMAX(M) (M=1,3). INTERNAL) C IVRADS = HOLDS INCOMING IVRAD SO THAT IT CAN BE RESTORED C UPON EXIT. C NOPTNT = TEMPORARY VALUE OF NOPTN. (INTERNAL) C GF = MULTIPLICATIVE FACTOR TO INCREASE ER1( ) WHEN C THE ERROR IS POISITVE. ADDED FOR GUSTS SO C THAT GUSTS CAN BE KEPT WITHOUT KEEPING ALL C VERY SMALL VALUES. (INPUT) C LAMPNO = 20 WHEN THIS IS LAMP TOTAL WIND (GUST) ANALYSIS; C 0 OTHERWISE. THIS IS BASED ON A SPECIFIC C ID = 224390005. (INTERNAL) C KER = COUNTS ERRORS FOR RETURNING TO U405A. C (INTERNAL) C IZCHK = NORMALLY ZERO. SET TO 1 FOR OBS WIND SPEED AND C OBS TOTAL WIND, AND FURNISHED TO ESP5. C (INTERNAL) C NOTSAV(J) = SAVES NOTOSS(J) UPON ENTRY FOR PRINT (J=1,2). C (INTERNAL) C LTOSS(J) = SAME AS NOTOSS(J) FOR THIS ELEMENT (J=1,2). C ADDED TO IMPLEMENT THE REPEAT OPTION NREPNO. C (INTERNAL) C WFACT = THE FRACTION OF THE TOSS THRESHOLD TO USE FOR C TOSSING DATA THAT ARE LOWER THAN THE CURRENT C ANALYSIS; USED IN ESP5, FOR MOS WIND SPEED. C (INTERNAL) C JOCEAN = JOCEAN AND JLAKE PARSED FROM NSMN. C 1 WHEN OCEAN IS NOT SMOOTHED; C 0 OTHERWISE (DEFAULT) C (INPUT) C JLAKE = JOCEAN AND JLAKE PARSED FROM NSMN. C 1 WHEN LAKES ARE NOT SMOOTHED; C 0 OTHERWISE (DEFAULT) C (INPUT) C ISETG = INDICATES TO SETGPT HOW TO PREPARE GRID C NEAR( , ) TO KEEP SMOTHG FROM SMOOTHING C NEAR THE DATA POINTS. COMES IN AS PART OF C NOPTN. (INTERNAL) C NEAR(IX,JY) = EACH GRIDPOINT = 0 EXCEPT THE ONES TO NOT BE C SMOOTHED (IX=1,NX) (JY=1,NY). SET IN SETGPT C AND USED IN SMOTHG, FOLLOWING SPOTRM. C (INTERNAL) (AUTOMATIC) C NSTASV = NUMBER OF STATIONS SANS THE BOGUS VALUES C PLACED AT GRIDPOINTS. (INTERNAL) C ISQ = SWITCH TO INDICATE ANALYZING SQUARE ROOT OF C ELEMENT (=1), ZERO OTHERWISE. C XDATSV(K) = SAVES XDATA FOR RETURN (K=1,NSTA). C 1 2 3 4 5 6 7 X C C NONSYSTEM SUBROUTINES CALLED C TIMPR, ESP5, ITRP, PRTGR, SMOTH, SMOTHN, SMOTHC, SMTH9, C SZGRDM, NEWXY1, CORBC5, TRNSFR, CUTIT, ACTUAL, ITRPSX, C PSIJLL, LMIJLL, MCIJLL, PAWGTS, PRSID1, PACKV, SETPNT, C POST C CHARACTER*6 POSTDS(NOPROD),PREPRO(NOPRE) CHARACTER*8 CCALL(NSTA),STAMAX(3) CHARACTER*8 SMTH/'SMOOTHD '/ CHARACTER*8 BLANK/' '/ CHARACTER*20 NAME(NSTA),NAMMAX(3) CHARACTER*32 PLAIN,PLAINT CHARACTER*40 TITLE CHARACTER*60 RACESS(6) C DIMENSION XDATA(NSTA),XP(NSTA),YP(NSTA),XPL(NSTA),YPL(NSTA), 1 XPE(NSTA),YPE(NSTA),LTAG(NSTA),TOSS(NSTA),QUEST(NSTA), 2 U(NSTA),V(NSTA),LNDSEA(NSTA),ELEV(NSTA), 3 QUALST(NSTA),XLAPSE(NSTA),LTAGPT(NSTA),MTAGPT(NSTA), 4 ULAPSE(NSTA) DIMENSION XDATSV(NSTA) C XDATSV() ) IS AN AUTOMATIC ARRAY. DIMENSION VRAD(ND1,6),XYP(ND1,2),SDATA(ND1), 1 STALAT(ND1),STALON(ND1) DIMENSION P(ND2X3),CORR(ND2X3),COUNT(ND2X3),NCOUNT(ND2X3), 1 FD2(ND2X3),FD6(ND2X3) DIMENSION NEAR(ND2X3) C NEAR IS AN AUTOMATIC ARRAY. DIMENSION IPACK(ND5),IWORK(ND5),DATA(ND5) DIMENSION IPLAIN(L3264W,4),IPLANT(L3264W,4) DIMENSION IS0(ND7),IS1(ND7),IS2(ND7),IS4(ND7) DIMENSION IALOC(ND13),ADIST(ND13),AELEV(ND13) DIMENSION TELEV(NXE*NYE),SEALND(NXE*NYE),CPNDFD(NXE*NYE) DIMENSION SMULT(6),SADD(6),ORIGIN(6),CINT(6), 1 ER1(6),R(6),B(6),NTYPE(6),RSTAR(6),LNDWAT(6), 2 NPRT(6),JPRT(6),NTDL(6),JTDL(6),WNDWT(6), 3 MSHPAS(6),ITRPLQ(6),FRACT(6),IALGOR(6),ELCORR(6), 4 BK(6),ELCORU(6),RWATO(6),RWATI(6),IFCOR(6) DIMENSION ID(4),IDPARS(15),LD(4),LDPARS(15),MD(4),NSHLN(6), 1 IOPT(8),IOPTGR(8),JDATE(4),JP(3),ISTOP(6),DIFMAX(3), 2 KFILRA(6) DIMENSION TLOD(3),SETLOD(3),THID(3),SETHID(3),CONSTD(3),NSCALD(3), 1 EX1D(3),EX2D(3) DIMENSION NOTOSS(2),NOTSAV(2),LTOSS(2) C DATA FRACT/.6, .6, .6, .6, .6, .6/ DATA ISCALE/0/ C IER=0 KER=0 CALL TIMPR(KFILDO,KFILDO,'START BCD5 ') C C SEPARATE INCOMING NOPTN INTO NOPTNT AND ISETG. C ISETG=NOPTN/100 C ISETG IS USED IN SETGPT NOPTNT=NOPTN-ISETG*100 C NOPTNT IS WHAT NOPNT WAS ORIBINALLY AND IS USED IN SPOTRM. C C PARSE NSMN INTO ITS THREE PARTS. C JOCEAN=NSMN/1000 JLAKE=NSMN/100-JOCEAN*10 NSMNUM=NSMN-JOCEAN*1000-JLAKE*100 C NSMNUM NOW HAS ITS ORIGINAL MEANING BEFORE VALUE IN CALL C REPLACED NSMNUM BY NSMN. C CCCC WRITE(KFILDO,130)NPASS,NREP,NREPNO CCCC 130 FORMAT(/' AT 130 IN BCD5--NPASS,NREP,NREPNO',3I6) C D WRITE(IP14,131)(K,CCALL(K),XDATA(K),LTAG(K),LTAGPT(K),QUALST(K), D 1 VRAD(K,1),VRAD(K,6),K=1,NBASTA) D131 FORMAT(' IN BCD5 AT 131--(K,CCALL(K),XDATA(K),LTAG(K),LTAGPT(K),', D 1 'QUALST(K),VRAD(K,1),VRAD(K,6),K=1,NBASTA)', D 2 I6,1X,A8,F8.2,2I6,3F12.3) C ONLY THE BASE STATIONS, NBASTA, ARE WRITTEN. C C SAVE IVRAD SO THAT IT CAN BE RESTORED UPON EXIT. OTHERWISE, C IF IVRAD IS CHANGED TO INDICATE A SWITCH FROM VARIABLE RADII C TO CONSTANT RADII AND PROBABILITY LEVELS ARE BEING ANALYZED, C ALL LEVELS AFTER THE FIRST WILL USE CONSTANT RADII FOR ALL C PASSES. IVRADS=IVRAD C C SAVE THE RUNNING NUMBERS OF TOSSED VALUES, SO THAT THE C NUMBER TOSSED FOR THIS VARIABLE CAN BE PRINTED AT THE C END. C NOTSAV(1)=NOTOSS(1) NOTSAV(2)=NOTOSS(2) C C INITIALIZE THE PORTION OF IOPTGR( ) THAT DOES NOT CHANGE. C WHEN THERE IS NO SUBSET AREA, IOPT(1) = IOPTGR(1) = 0. C IOPTGR(1)=IOPT(1) IOPTGR(6)=IOPT(6) IOPTGR(7)=IOPT(7) IOPTGR(8)=IOPT(8) C C SET LAMPNO = 20 FOR LAMP TOTAL WIND (GUST) ANALYSIS; C 0 OTHERWISE. C IF(ID(1).EQ.224390005)THEN LAMPNO=20 ELSE LAMPNO=0 ENDIF C LREPNO=0 C LREPNO IS THE NUMBER OF REPEATS DONE. NSTASV=NSTA C NSTASV SAVES NSTA IN CASE IT IS INCREASED IN THE LOOP. C NSTA IS RESET AT THE END OF THE DO 300 LOOP. C C WHEN SQUARE FOOT OF ELEMENT IS BEING ANALYZED, COMPUTE C SQUARE ROOT OF DATA IN XDATA( ), BUT SAVE XDATA( ) IN C XDATSV( ) FOR RETURN. CONVERT FIRST GUESS IN P( ) TO C SQUARE ROOT. THIS IS TRIGGERED BY A PREPROCESSING C ROUTINE ELESQR. C ISQ=0 DO 140 NN=1,NOPRE C IF(PREPRO(NN).EQ.'ELESQR')THEN ISQ=1 C ISQ SIGNALS SQUARE ROOT OR NOT. WRITE(KFILDO,133) 133 FORMAT(/' ANALYSIS IS SQUARE ROOT OF VARIABLE.'/) C CALL TRNSFR(XDATA,XDATSV,NSTA) C DO 136 K=1,NSTA C IF(XDATA(K).LT.9998.5)THEN XDATA(K)=SQRT(ABS(XDATA(K))) C XDATA( ) SHOULD BE POSITIVE. THIS IS A SAFETY. ENDIF C 136 CONTINUE C DO 138 IXY=1,ND2X3 C IF(P(IXY).LT.9998.5)THEN P(IXY)=SQRT(ABS(P(IXY))) C P( ) SHOULD BE POSITIVE. THIS IS A SAFETY. ENDIF C 138 CONTINUE C ENDIF C 140 CONTINUE C C THIS IS THE LOOP FOR REPEATS. WHEN NREPNO = 0, LOOP C IS EXECUTED ONLY ONCE. C DO 300 LPP=1,MAX(1,NREPNO) C ALWAYS MAKE THE TRIP ONCE. C IF(LPP.EQ.1)THEN ISTART=1 ELSE ISTART=NREP ENDIF C C DO NPASS PASSES FOR THE ANALYSIS. IF THIS IS A REPEAT, C ISTART IS THE PASS TO START THE REPEAT. C DO 290 LP=ISTART,NPASS C ALWAYS MAKE THE FULL TRIP ONCE, PARTIAL TRIP THEREAFTER. C D WRITE(KFILDO,1400)LP,ALATL,ALONL,MESHL,MESH,NX,NY,NSTA D1400 FORMAT(/' AT 1400 IN BCD5--LP,ALATL,ALONL,MESHL,', D 1 'MESH,NX,NY,NSTA',I4,2F10.5,4I6,I10) C WRITE(KFILDO,150)LP,TITLE,ER1(LP) 150 FORMAT(/' STARTING PASS',I3,' FOR ',A16, 1 ' ERROR CRITERION =',F8.2,15X, 2 '&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&') C CCCCD DO 154 K=1,NBASTA CCCCC CCCCD IF(LTAG(K).NE.0.AND.XDATA(K).LT.9998.)THEN CCCCD WRITE(KFILDO,152)CCALL(K),XP(K),YP(K),XDATA(K),LTAG(K) CCCCD152 FORMAT(' AT 152 IN BCD5--CCALL(K),XP(K),YP(K),XDATA(K),', CCCCD 1 'LTAG(K) ',A8,2F8.2,F8.1,I6) CCCCD ENDIF CCCCC CCCCD154 CONTINUE C LTOSS(1)=0 LTOSS(2)=0 C IF(NREPNO.GT.0.AND.LREPNO.LT.NREPNO.AND.LP.EQ.NREP)THEN C THIS SAVES THE CURRENT ANALYSIS IN P( ) WHEN IT MAY C BE NEEDED TO START THE REPEAT ANALYSIS. C WRITE(KFILDO,155) 155 FORMAT(/' SAVING P( , ) IN FD6( , ).') C DO 156 J=1,NX*NY FD6(J)=P(J) 156 CONTINUE C ENDIF C IF(NPASSR.NE.0.AND.LP.GE.NPASSR)THEN C WHENEVER NPASSR GE LP, THE CONSTANT RADII ARE USED. C IVRAD MAY ALREADY BE 0, BUT THAT IS OK. IT MAY BE C THAT NPASSR HAS NOT BEEN SET IN U405A, SO IS THEN C INOPERATIVE. IVRAD=0 IF(NPASSR.EQ.LP)WRITE(KFILDO,165)NPASSR 165 FORMAT(/' SWITCHING TO CONSTANT RADII AT PASS NO.',I3,/) C IF(NPASRR.EQ.LP)THEN IVRAD=1 WRITE(KFILDO,166)NPASRR 166 FORMAT(/' SWITCHING BACK TO VARIABLE RADII AT PASS NO.',I3/) ENDIF C ENDIF C**********************************TEMPORARY TO RESTART VARIABLE RADII CCCCC IF(LP.EQ.NPASS.AND.LP.GE.NPASSR.AND.NPASSR.NE.0)THEN CCCCC IVRAD=1 CCCCCC THIS SWITCHES BACK TO VARIABLE RADII ON THE LAST PASS. CCCCC WRITE(KFILDO,165)NPASS CCCCC 166 FORMAT(/' SWITCHING TO VARIABLE RADII AT PASS NO.',I3) CCCCC ENDIF C**************************** ******TEMPORARY C IF(NTYPE(LP).EQ.0)THEN C EVEN THOUGH NPASS CAN BE AS HIGH AS 6, A PARTICULAR C PASS IS SKIPPED IF NTYPE(LP) = 0. WRITE(KFILDO,170)LP 170 FORMAT(/' ****THIS PASS =',I3,' BEING SKIPPED BECAUSE', 1 ' NTYPE(LP) = 0. MAY BE AN ERROR.') ISTOP(1)=ISTOP(1)+1 GO TO 290 C ELSEIF(MSHPAS(LP).EQ.0)THEN C A MESH LENGTH OF 0 CANNOT BE ACCOMMODATED, SO SKIP C THIS PASS. WRITE(KFILDO,172)LP 172 FORMAT(/' ****THIS PASS =',I3,' BEING SKIPPED BECAUSE', 1 ' MSHPAS(LP) = 0. PROBABLY AN ERROR.') ISTOP(1)=ISTOP(1)+1 GO TO 290 ENDIF C C AT THE BEGINNING OF EACH PASS, THERE IS A GRID IN P( ) C WITH DIMENSIONS NX, NY AND AT A MESH LENGTH OF MESH. C MSHPAS(LP) CONTAINS THE MESH LENGTH TO USE FOR PASS LP. C IF MESH NE MSHPAS(LP), THE GRID MUST BE "RESIZED" AND THE C X AND Y POSITIONS OF THE STATIONS IN RELATION TO IT MUST BE C CHANGED. NOTE, AGAIN, THAT NX, NY, MESH, C XP( ) AND YP( ) FOLLOW THE GRID. THAT IS, WHATEVER C IS IN P( ) WILL HAVE THOSE CHARACTERISTICS. ON PASS 1 C THE GRID SHOULD BE OF THE CORRECT SIZE. C IF(MESH.NE.MSHPAS(LP))THEN C XP( ) AND YP( ) ARE IN RELATION TO MESH; MODIFY C THEM IF MESH IS TO CHANGE. C C MSHPAS( ) IS READ FROM THE .CN CONTROL FILE. VERIFY C MSHPAS( ) IS A LEGITIMATE VALUE IN RANGE 1 TO 320. C IF(MESH.GT.320.OR.MESH.LT.1)THEN WRITE(KFILDO,173)MSHPAS(LP) 173 FORMAT(/' ****MSHPAS(L) =',I6,' NOT IN RANGE 1 TO 320.', 1 ' STOP IN BCD5 AT 173.') CALL W3TAGE('BCD5') STOP 173 ENDIF C CALL NEWXY1(KFILDO,MESH,XP,YP,MSHPAS(LP),XP,YP,NPROJ,NSTA) RATIO=FLOAT(MESH)/MSHPAS(LP) C D WRITE(KFILDO,1735)NX,NY D1735 FORMAT(/' CALLING SZGRDM AT 1735--NX,NY',2I6) C CALL SZGRDM(KFILDO,P,NX,NY, 1 MESH,MSHPAS(LP),ITRPLQ(LP),ND2X3) C NOTE THAT SZGRDM SETS MESH TO EQUAL MSHPAS(LP) AND C MODIFIES NX AND NY ACCORDINGLY. C C ADJUST U( ) AND V( ) FOR CURRENT MESH WHEN SLP C BEING ANALYZED (IVRBL = 1). C IF(IVRBL.EQ.1)THEN FAC=1./RATIO C DO 174 K=1,NSTA C IF(U(K).NE.9999.)THEN U(K)=U(K)*FAC V(K)=V(K)*FAC ENDIF C 174 CONTINUE C ENDIF C ENDIF C C MESH HAS BEEN SET FOR THIS PASS AND WILL REMAIN CONSTANT. C LIKEWISE, IOPTGR( ) CAN BE CALCULATED AND WILL REMAIN C UNCHANGED FOR THIS PASS. SOME ELEMENTS IF IOPTGR( ) C HAVE BEEN SET ABOVE WHICH DO NOT CHANGE AT ALL. C WHEN IOPT(1) = 0, THERE IS NO SUBSET AREA. C IF(IOPT(1).NE.0)THEN RATIO=FLOAT(MESHL)/MESH IOPTGR(2)=NINT((IOPT(2)-1)*RATIO)+1 IOPTGR(3)=NINT((IOPT(3)-1)*RATIO)+1 IOPTGR(4)=NINT((IOPT(4)-1)*RATIO)+1 IOPTGR(5)=NINT((IOPT(5)-1)*RATIO)+1 ENDIF C IF(ER1(LP).EQ.0)GO TO 190 ER1Q=ER1(LP)*FRACT(LP) C CCCC WRITE(KFILDO,1742)LP,IVRBL,ER1(LP),ER1Q CCCC 1742 FORMAT(/' IN BCD5 AT 1742--LP,IVRBL,ER1(LP),ER1Q',2I4,2F8.3) C IF(LP.NE.NPASS.AND.B(LP).GT.98.)THEN C THIS IS HEAVY SMOOTHING BEFORE ERROR CHECKING TO TRY C TO TOSS BAD DATA. NOTE B(LP) = 99. RMESH=FLOAT(MESH)/FLOAT(MESHE) C RMESH IS THE RATIO OF THE MESH LENGTH OF THE ANALYSIS GRID C TO THE TERRAIN GRID. NSM5=JOCEAN*1000+JLAKE*100+7 C SMOTHG HAS TO HAVE NSMTYP = 5-7. GIVE IT THREE SMOOTHINGS. C JOCEAN AND JLAKE ALLOWS FOR NO SMOOTHING OVER WATER. CSTSM5=0. C DON'T BOTHER SMOOTHING ALONG COASTS. IG=0 C DON'T USE NEAR( , ). iT HASN'T BEEN INITIALIZED YET. CALL SMOTHG(KFILDO,P,CORR,COUNT,IG,NEAR,NX,NY,B(LP),CSTSM5, 1 TELEV,SEALND,NXE,NYE, 2 RMESH,NSM5,NSHLN,IER) IF(IER.EQ.666)KER=KER+1 ENDIF C CCCC WRITE(KFILDO,1743)(K,CCALL(K),XDATA(K),LTAG(K),K=1,NBASTA) CCCC 1743 FORMAT(' AT 1743 IN BCD5--K,CCALL(K),XDATA(K),LTAG(K)', CCCC 1 I6,2X,A8,F8.1,I4) CCC ONLY STATIONS ARE WRITTEN NOT THOSE BY BOGUSG C C SET GF FOR OBS AND LAMP, WIND SPEED AND TOTAL WIND. THIS C INCREASES THE THROWOUT CRITERIA FOR POSITIVE DIFFERENCES. C INCLUDED WIND SPEED 11/18/15. IMPLEMENTS GF = 2 FOR C MOS GUST. C IF(ID(1).EQ.224335005.OR. 1 ID(1).EQ.724330085.OR. 2 ID(1).EQ.224390005.OR. 3 ID(1).EQ.724390085)THEN GF=MAX(1.5-MAX(IDPARS(12)-1,0)/24.,1.) C MODIFIED 8/14/14 C MAX IS 1.5, FADES TO 1.0 AT 13 HOURS. CCCCCC GF=2.-MAX(IDPARS(12)-1,0)/24. CCCCC THIS GIVES GF = 2 AT PROJECTIONS O AND 1 AND 1 AT CCCCC PROJECTION 25. WILL BEGIN TO CUT OUT THE LARGER CCCCC GUSTS WITH PROJECTION. ELSEIF(ID(1).EQ.224385008)THEN GF=2. ELSE GF=1. ENDIF C C SET IZCHK FOR OBS WIND SPEED OR OBS TOTAL WIND. THIS C TOSSES VALUES OF ZERO WHEN ER1 IS NOT MET (DOES NOT USE C NEIGHBORS). C IF(ID(1).EQ.724330085.OR.ID(1).EQ.724390085)THEN IZCHK=1 ELSE IZCHK=0 ENDIF C C SET WFACT FOR MOS WIND SPEED. MIGHT BE APPROPRIATE FOR C EKDMOS WIND SPEED. THE FACTOR .4 IS ARBITRARY. SET IT C HIGHER TO TOSS LESS, LOWER TO TOSS MORE. NOTE THIS IS C SPECIFIC TO MOS, NOT LAMP OR EKDMOS. C IF(ID(1).EQ.224360008)THEN WFACT=.4 ELSE WFACT=1. ENDIF C C CALL ESP5 IF ERROR CHECKING IS DESIRED. LTAG( ) IS SET. C INITIALIZE ER1Q, DEPENDING ON PASS. THIS IS HARDWIRED C FOR NOW. C C LTAGPT( ) IS NORMALLY FURNISHED TO ESP, BUT FOR LAMP TOTAL C WIND, LTAGPT( ) DOES NOT DIFFERENTIATE BETWEEN LAMP AND C OTHER STATIONS, SO MTAGPT( ), WHICH WAS SAVED FROM WIND C SPEED, IS FURNISHED. C IF(LAMPNO.EQ.20)THEN CALL ESP5(KFILDO,IP14,IP17,IP21,JDATE,IVRBL,CCALL,NAME,XDATA, 1 XP,YP,TOSS,QUEST,LTAG,QUALST,MTAGPT,U,V, 2 LNDSEA,XLAPSE,ELEV,NBASTA, 3 P,NX,NY,LP,NPASS,ER1(LP),ER1Q,ERRADJ,GF,MESH,MESHB, 4 TITLE,JFIRST,SEALND,TELEV,NXE,NYE,MESHE, 5 R(LP)*RSTAR(LP),LTOSS,N4P,IBKPN,IZCHK,WFACT, 6 ISTOP,I405ADG) C ONLY BASE STATIONS ARE CHECKED, NOT THOSE ADDED BY BOGUSG. ELSE CALL ESP5(KFILDO,IP14,IP17,IP21,JDATE,IVRBL,CCALL,NAME,XDATA, 1 XP,YP,TOSS,QUEST,LTAG,QUALST,LTAGPT,U,V, 2 LNDSEA,XLAPSE,ELEV,NBASTA, 3 P,NX,NY,LP,NPASS,ER1(LP),ER1Q,ERRADJ,GF,MESH,MESHB, 4 TITLE,JFIRST,SEALND,TELEV,NXE,NYE,MESHE, 5 R(LP)*RSTAR(LP),LTOSS,N4P,IBKPN,IZCHK,WFACT, 6 ISTOP,I405ADG) C ONLY BASE STATIONS ARE CHECKED, NOT THOSE ADDED BY BOGUSG. ENDIF C C PACK AND WRITE THE VECTOR DATA IN TOSS( ) CONTAINING THE C OBSERVATIONS WITH ALL THOSE EXCEPT TOSSED AS 9999. C THE ID'S WRITTEN ARE THE SAME AS THE DATA BEING ANALYZED C EXCEPT THE 3RD WORD HAS THE PASS NUMBER. C CCCCC WRITE(KFILDO,1744)(K,CCALL(K),XDATA(K),LTAG(K),TOSS(K), CCCCC 1 K=1,NBASTA) CCCCC 1744 FORMAT(' AT 1744 IN BCD5--K,CCALL(K),XDATA(K),LTAG(K),TOSS(K)', CCCCC 1 I6,2X,A8,F8.1,I4,F8.1) C STATIONS WRITTEN ARE SANS BOGUSG STATIONS. C XMISSP=9999.0 XMISSS=0. C IF(KFILOV.EQ.0)GO TO 180 C DON'T WRITE WHEN KFILOV = 0 LD(1)=(MD(1)/1000000)*1000000+IDPARS(2)*1000+IDPARS(3)*100 1 +IDPARS(4) C MD(1) IS FROM ITABLE( ,2, ) AND REPRESENTS THE VARIABLE C BEING ANALYZED. HOWEVER, THE UNITS MAY HAVE CHANGED C (E.G., SNOWFALL), SO RETAIN THE CCC, BUT USE FFFBDD FROM C IDPARS( ) REPRESENTING THE OUTPUT VARIABLE. LD(2)=LP*10000 C LD(2) HOLDS THE PASS NUMBER. LD(3)=MD(3)+IDPARS(12) LD(4)=MD(4) CALL PRSID1(KFILDO,LD,LDPARS) C PRSID1 FILLS LDPARS( ) ACCORDING TO LD( ). C IF(IP18.NE.0.AND.JP(3).NE.0)THEN WRITE(IP18,1745)LP 1745 FORMAT(/' TOSSED OBSERVATIONS WRITTEN TO FILE KFILOV', 1 ' FOR PASS NO.',I3, 2 '. ALL OTHERS ARE WRITTEN AS MISSING.') ENDIF C CALL PACKV(KFILDO,KFILOV,LD,LDPARS, 1 JP,ISCALD,ISCALE, 2 IPLAIN,PLAIN,NDATE,JDATE(1),JDATE(2),JDATE(3),JDATE(4), 3 CCALL,NCOUNT,TOSS,NSTA,NSTA,IPACK,ND5,MINPK, 4 IS0,IS1,IS2,IS4,ND7,XMISSP,XMISSS, 5 IP18,NWORDS,MTOTBY,MTOTRC, 6 L3264B,L3264W,ISTOP,IER) C NCOUNT( ) IS WORK ARRAY FOR PACKV. IP18 IS USED TO LIST VALUES. C ISCALD IS USED FOR GRIDPOINT DATA; IT IS ASSUMED IT IS OK C FOR THE VECTOR DATA. THE SPECIFIC IDENTIFYING WORD IS IN C ID(2) OF THE FORM X0000, WHERE X IS THE PASS NUMBER. C IF THERE WAS AN ERROR, IT IS COUNTED BY ISTOP, BUT IS NOT C CONSIDERED FATAL. THESE RECORDS ARE FOR CHECKOUT. C IF(IER.NE.0)THEN KER=KER+1 ELSE IF(IP16.NE.0)THEN WRITE(IP16,175)(LD(J),J=1,4), 1 ((IPLAIN(I,J),I=1,L3264W),J=1,4),NDATE 175 FORMAT(/' WRITING DATA TO UNIT KFILOV',3I10.9,I10.3,3X,8A4, 1 ' FOR DATE',I12) ENDIF C ENDIF C IF(LP.NE.NPASS)GO TO 176 C C PACK AND WRITE VALUES OF LTAG( ) TO KFILOV WITH C 2ND WORD ID(2) = 940000 FOR THE LAST PASS. THIS IS FOR C READING IN A SUBSEQUENT RUN OF U155/U405. THIS IS WRITTEN C FOR EACH ELEMENT; THE RECORD READ IS INDICATED IN AUGMT2 C WORD 5 IN THE TABLE. C DO 1753 K=1,NSTA SDATA(K)=LTAG(K) C FOR PACKING, VALUES MUST BE FLOATING POINT. 1753 CONTINUE C C************************************************************ C BELOW FOR DIAGNOSTICS ONLY. C D ICOUNT=0 C D DO 914 K=1,NBASTA C D IF(NINT(SDATA(K)).EQ.-1)THEN D ICOUNT=ICOUNT+1 D WRITE(KFILDO,913)CCALL(K),XDATA(K),ICOUNT D913 FORMAT(' AT 913 IN BCD5, STATION WITH LTAG( ) = -1 ', D 1 'XDATA(K),ICOUNT-- ',A8,F8.1,I7) D ENDIF C D914 CONTINUE C D DO 916 K=1,NBASTA C D IF(CCALL(K).EQ.'XXXXX ')THEN D WRITE(KFILDO,915)CCALL(K),XDATA(K),LTAG(K) D915 FORMAT(/' AT 915 IN BCD5, ', D 1 'XDATA(K),LTAG(K)-- ',A8,F8.1,I4/) D ENDIF C D916 CONTINUE C D ICOUNT=0 C D DO 918 K=1,NBASTA C D IF(NINT(SDATA(K)).EQ.4)THEN D ICOUNT=ICOUNT+1 D WRITE(KFILDO,917)CCALL(K),XDATA(K),ICOUNT D917 FORMAT(' AT 917 IN BCD5, STATION WITH LTAG( ) = +4 ', D 1 'XDATA(K),ICOUNT-- ',A8,F8.1,I7) D ENDIF C D918 CONTINUE C************************************************************ C LD(2)=940000 CALL PRSID1(KFILDO,LD,LDPARS) C PRSID1 FILLS LDPARS( ) ACCORDING TO LD( ). C IF(IP18.NE.0.AND.JP(3).NE.0)THEN WRITE(IP18,1755)LP 1755 FORMAT(/' LTAG( ) VALUES WRITTEN TO FILE KFILOV', 1 ' FOR FINAL PASS NO.',I3) ENDIF C******************** ISCL=0 C SDATA( ) HERE ARE WHOLE NUMBERS. C CCCC WRITE(KFILDO,9755)ISCL,(K,CCALL(K),SDATA(K),K=1,NBASTA) CCCC 9755 FORMAT(' AT 9755 IN BCD5--ISCALD,(K,CCALL(K),SDATA(K),K=1,NSTA)', CCCC 1 I4,/,(I8,2X,A8,F8.1)) C ONLY NON-BOGUSG STATIONS ARE WRITTEN. C CALL PACKV(KFILDO,KFILOV,LD,LDPARS, 1 JP,ISCL,ISCALE, 2 IPLAIN,PLAIN,NDATE,JDATE(1),JDATE(2),JDATE(3),JDATE(4), 3 CCALL,NCOUNT,SDATA,NSTA,NSTA,IPACK,ND5,MINPK, 4 IS0,IS1,IS2,IS4,ND7,XMISSP,XMISSS, 5 IP18,NWORDS,MTOTBY,MTOTRC, 6 L3264B,L3264W,ISTOP,IER) C NCOUNT( ) IS WORK ARRAY FOR PACKV. IP18 IS USED TO LIST VALUES. C SCALING = ISCL = 0 BECAUSE VALUES ARE WHOLE NUMBERS. THE C SPECIFIC IDENTIFYING WORD IS IN ID(2) OF THE FORM 940000. C IF THERE WAS AN ERROR, IT IS COUNTED BY ISTOP, BUT IS NOT C CONSIDERED FATAL. C IF(IER.NE.0)THEN KER=KER+1 ELSE IF(IP16.NE.0)THEN WRITE(IP16,1756)(LD(J),J=1,4), 1 ((IPLAIN(I,J),I=1,L3264W),J=1,4),NDATE 1756 FORMAT(/' WRITING DATA TO UNIT KFILOV',3I10.9,I10.3,3X,8A4, 1 ' FOR DATE',I12) ENDIF C ENDIF C WRITE(KFILDO,1756)(LD(J),J=1,4), 1 ((IPLAIN(I,J),I=1,L3264W),J=1,4),NDATE C IF(IP18.NE.0.AND.JP(3).NE.0)THEN WRITE(IP18,1757)LP 1757 FORMAT(/' LTAG( ) VALUES TO FILE KFILOV', 1 ' FOR PASS NO.',I3) ENDIF C CCCC WRITE(KFILDO,1758)(CCALL(K),TOSS(K),SDATA(K),XDATA(K),LTAG(K), CCCC 1 K=1,NBASTA) CCCC 1758 FORMAT(/' AT 1758 IN BCD5--', CCCC 1 'CCALL(K),TOSS(K),SDATA(K),XDATA(K),LTAG(K)--',/ CCCC 2 (' ',A8,3F8.1,I4)) C C PACK AND WRITE THE VECTOR DATA IN QUEST( ) CONTAINING THE C OBSERVATIONS WITH ALL THOSE EXCEPT QUESTIONABLE AS 9999. C THE ID'S WRITTEN ARE THE SAME AS THE DATA BEING ANALYZED C EXCEPT THE 3RD WORD HAS THE PASS NUMBER PRECEDED BY "1". C 176 LD(1)=(MD(1)/1000000)*1000000+IDPARS(2)*1000+IDPARS(3)*100 1 +IDPARS(4) C MD(1) IS FROM ITABLE( ,2, ) AND REPRESENTS THE VARIABLE C BEING ANALYZED. HOWEVER, THE UNITS MAY HAVE CHANGED C (E.G., SNOWFALL), SO RETAIN THE CCC, BUT USE FFFBDD FROM C IDPARS( ) REPRESENTING THE OUTPUT VARIABLE. LD(2)=LP*10000+100000 C LD(2) HOLDS THE PASS NUMBER, PRECEDED BY A ONE. LD(3)=MD(3)+IDPARS(12) LD(4)=MD(4) CALL PRSID1(KFILDO,LD,LDPARS) C PRSID1 FILLS LDPARS( ) ACCORDING TO LD( ). C IF(IP18.NE.0.AND.JP(3).NE.0)THEN WRITE(IP18,177)LP 177 FORMAT(/' QUESTIONABLE OBSERVATIONS WRITTEN TO FILE KFILOV', 1 ' FOR PASS NO.',I3, 2 '. ALL OTHERS ARE WRITTEN AS MISSING.') ENDIF C CALL PACKV(KFILDO,KFILOV,LD,LDPARS, 1 JP,ISCALD,ISCALE, 2 IPLAIN,PLAIN,NDATE,JDATE(1),JDATE(2),JDATE(3),JDATE(4), 3 CCALL,NCOUNT,QUEST,NSTA,NSTA,IPACK,ND5,MINPK, 4 IS0,IS1,IS2,IS4,ND7,XMISSP,XMISSS, 5 IP18,NWORDS,MTOTBY,MTOTRC, 6 L3264B,L3264W,ISTOP,IER) C NCOUNT( ) IS WORK ARRAY FOR PACKV. IP18 IS USED TO LIST VALUES. C ISCALD IS USED FOR GRIDPOINT DATA; IT IS ASSUMED IT IS OK C FOR THE VECTOR DATA. THE SPECIFIC IDENTIFYING WORD IS IN C ID(2) OF THE FORM 1X0000, WHERE X IS THE PASS NUMBER. C IF THERE WAS AN ERROR, IT IS COUNTED BY ISTOP(1), BUT IS NOT C CONSIDERED FATAL. C IF(IER.NE.0)THEN KER=KER+1 ELSE C IF(IP16.NE.0)THEN WRITE(IP16,175)(LD(J),J=1,4), 1 ((IPLAIN(I,J),I=1,L3264W),J=1,4),NDATE ENDIF C ENDIF C 180 IF(LP.LT.NPASS)GO TO 190 C WRITE ONLY ON THE LAST PASS. IF(KFILQC.EQ.0)GO TO 190 C DON'T WRITE WHEN KFILQC = 0 C C IF ERROR CHECKING WAS DONE, COMBINE XDATA( ) AND TOSS( ) TO C PRODUCE A QUALITY CONTROLLED ARRAY IN TOSS. THIS ARRAY C WILL BE THE SAME AS XDATA( ) EXCEPT THE TOSSED OBS IN C TOSS( ) WILL BE SET TO MISSING. THIS ARRAY IS THEN WRITTEN C TO THE QC FILE. IF ERROR CHECKING IS NOT DONE, WHICH WOULD C BE VERY UNUSUAL IN U405A, DATA ARE NOT WRITTEN, BECAUSE C THEY WOULD NOT BE QUALITY CONTROLLED SO THAT THE ID WOULD C APPLY. NOTE THAT THE QC DATA WILL BE WRITTEN ONLY WHEN C ERROR CHECKING WAS DONE ON THE LAST PASS. C DO 185 K=1,NSTA C IF(XDATA(K).NE.9999.)THEN C IF(TOSS(K).EQ.9999.)THEN TOSS(K)=XDATA(K) ELSE TOSS(K)=9999. ENDIF C ENDIF C 185 CONTINUE C LD(1)=(MD(1)/1000000)*1000000+IDPARS(2)*1000+IDPARS(3)*100 1 +IDPARS(4) C MD(1) IS FROM ITABLE( ,2, ) AND REPRESENTS THE VARIABLE C BEING ANALYZED. HOWEVER, THE UNITS MAY HAVE CHANGED C (E.G., SNOWFALL), SO RETAIN THE CCC, BUT USE FFFBDD FROM C IDPARS( ) REPRESENTING THE OUTPUT VARIABLE. C NOTE THAT FOR THE MERGED LAMP/MOS OBS WITH CCCFFF = 202900, C THE QC DATA WILL BE WRITTEN CCCFFF = 202020 BECAUSE 020 IS C THE FFF OF THE VARIABLE BEING ANALYZED. THAT MAKES THE C ID THE SAME AS THE MOS DATA. BUT THE DD WILL REPRESENT C LAMP. LD(2)=MD(2) LD(3)=MD(3)+IDPARS(12) LD(4)=MD(4) CALL PRSID1(KFILDO,LD,LDPARS) C PRSID1 FILLS LDPARS( ) ACCORDING TO LD( ). C IF(I405ADG.NE.0)THEN WRITE(KFILDO,186)(LD(J),J=1,4),PLAIN,NDATE 186 FORMAT(/' WRITING QC DATA RECORD FOR ',3(1X,I9.9), 1 1X,I10.3,' ',A32,' FOR DATE',I12) ENDIF C IF(IP18.NE.0.AND.JP(3).NE.0)THEN WRITE(IP18,1865)LP 1865 FORMAT(/' QUALITY CONTROLLED OBSERVATIONS WRITTEN TO FILE', 1 ' KFILQC FOR FINAL PASS NO.',I3, 2 '. TOSSED VALUES ARE WRITTEN AS MISSING.') ENDIF C CALL PACKV(KFILDO,KFILQC,LD,LDPARS, 1 JP,ISCALD,ISCALE, 2 IPLAIN,PLAIN,NDATE,JDATE(1),JDATE(2),JDATE(3),JDATE(4), 3 CCALL,NCOUNT,TOSS,NSTA,NSTA,IPACK,ND5,MINPK, 4 IS0,IS1,IS2,IS4,ND7,XMISSP,XMISSS, 5 IP18,NWORDS,ITOTBY,ITOTRC, 6 L3264B,L3264W,ISTOP,IER) C NCOUNT( ) IS WORK ARRAY FOR PACKV. IP18 IS USED TO LIST C VALUES. ISCALD IS USED FOR GRIDPOINT DATA; IT IS ASSUMED IT IS C OK FOR THE VECTOR DATA. IF THERE IS AN ERROR, IT IS COUNTED C BY ISTOP(1), BUT IS NOT CONSIDERED FATAL. C IF(IER.NE.0)THEN KER=KER+1 ELSE C IF(IP16.NE.0)THEN WRITE(IP16,188)(LD(J),J=1,4), 1 ((IPLAIN(I,J),I=1,L3264W),J=1,4),NDATE 188 FORMAT(/' WRITING DATA TO UNIT KFILQC',3I10.9,I10.3,3X,8A4, 2 ' FOR DATE',I12) ENDIF C ENDIF C C SPECIAL CIRCUMSTANCE ADDED 7/19/11. THIS IS PRIMARILY C TO SMOOTH THE OCEAN TO SMOOTH OUT THE MAXIMUM ASSOCIATED C WITH A DATUM. WHEN NOT SMOOTHED, THE DATUM HAS ALREADY C BEEN FIT AND THERE IS NO EFFORT TO BRING SURROUNDING POINTS C UP TO BETTER REFLECT A MAXIMUM AROUND A BUOY. THE C SMOOTHING OF A MAX WILL LET THE DATUM MAKE A POSITIVE CHANGE C TO SURROUNDING GRIDPOINTS AND THE GRIDPOINT CLOSEST TO THE C DATUM WILL BE BROUGHT BACK UP TO ITS APPROPRIATE VALUE. C THE QUESTION IS WHEN TO INVOKE THIS SMOOTHING. IT IS C ASSUMED IT WILL BE USED ON THE LAST PASS, AND THAT SOME C TYPE OF SMOOTHING WILL BE DONE ON THE OCEAN. C CCCC WRITE(KFILDO,1883)ID,IORST,LP,B(LP) CCCC 1883 FORMAT(/' AT 1883--ID,IORST,LP,B(LP)',4I12,2I4,F6.0) C IF(IORST.EQ.1.AND.LP.EQ.NPASS.AND.B(LP).NE.0)THEN C THIS IS TRIGGERED WHEN ORSMTW IS USED ON THE LAST PASS. C CCCC WRITE(KFILDO,1885)LP,B(LP),NSMTYP CCCC 1885 FORMAT(//////' AT 1885 IN BCD5--LP,B(LP),NSMTYP',I4,F6.2,2I4) C RMESH=FLOAT(MESH)/FLOAT(MESHE) C RMESH IS THE RATIO OF THE MESH LENGTH OF THE ANALYSIS GRID C TO THE TERRAIN GRID. NSM5=JOCEAN*1000+JLAKE*100+7 C SMOTHG HAS TO HAVE NSMTYP = 5-7. GIVE IT THREE SMOOTHINGS. C JOCEAN AND JLAKE ALLOWS FOR NO SMOOTHING OVER WATER. CSTSM5=0. C DON'T BOTHER SMOOTHING ALONG COASTS. IG=0 C DON'T USE NEAR( , ). iT HASN'T BEEN INITIALIZED YET. CALL SMOTHG(KFILDO,P,CORR,COUNT,IG,NEAR,NX,NY,B(LP),CSTSM5, 1 TELEV,SEALND,NXE,NYE, 2 RMESH,NSM5,NSHLN,IER) IF(IER.EQ.666)KER=KER+1 ENDIF STOP 22222 C C MAKE THE CORRECTIONS IN A SUBROUTINE SO THAT DOUBLY C DIMENSIONED VARIABLES CAN BE USED. NX AND NY ARE C CHANGED IN BCD5, AND ARE FURNISHED TO CORBC5. C D CALL TIMPR(KFILDO,KFILDO,'START CORBC5 ') 190 CALL CORBC5(KFILDO,IP14,IP20,CCALL,XDATA,XP,YP,XPL,YPL,LTAG, 1 QUALST,VRAD(1,LP),LNDSEA,ELEV,LAPFG, 2 XLAPSE,ULAPSE,NSTA,NBASTA,LAPUDB, 3 TELL,TELH,ATEL,BTEL, 4 ILS,LNDWAT(LP),WTWTL,WTLTW,WTAUG,LTAGPT,IALGOR(LP), 5 ELCORR(LP),IBKPN,BK(LP),ELCORU(LP),IFCOR(LP),ICUB, 6 RWATO(LP),RWATI(LP),IVRAD,IALOC,ADIST,AELEV,ND13, 7 P,CORR,COUNT,NCOUNT,FD2,NX,NY,MESH,MESHL, 8 U,V,WNDWT(LP),WNDGRD, 9 TELEV,SEALND,NXE,NYE,XPE,YPE,MESHE,ORIENT, A HGTTHA,HGTTHB,NAREA, B LP,NPASS,NTYPE(LP),R(LP),IOPT,JDATE,TITLE,N4P,MGUESS, C ISTOP,IER) D CALL TIMPR(KFILDO,KFILDO,'END CORBC5 ') C IF(IER.NE.0)THEN WRITE(KFILDO,200)IER 200 FORMAT(/' MAJOR ERROR IN BCD5 FROM CORBC5,', 1 ' IER =',I4) C THIS DIAGNOSTIC WILL FOLLOW ONE IN CORBC5. ISTOP( ) C HAS BEEN INCREMENTED. KER=KER+1 ENDIF C THE FOLLOWING DIAGNOSTIC PRINT PRODUCED ON IP18 INDICATES C FOR EACH DATUM THE DEGREE OF FIT OF THE UNSMOOTHED ANALYSIS C TO THE DATA OF THE PASS LP FOR THE WHOLE ANALYSIS AREA. C DIFFERENCES BETWEEN DATA VALUES AND INTERPOLATED VALUES C ARE NOT USED FOR THIS PURPOSE FOR POINTS OUTSIDE THE C NX BY NY GRID. AUGMENTED DATA, IF ANY, ARE NOT USED IN C THE COMPUTATIONS. C IF(IP18.NE.0.OR.IP21.NE.0.OR.IOPT(1).NE.0)THEN C ANY TIME THERE IS A SUBSET AREA, THE DEGREE OF FIT IS C COMPUTED. C IF(IP18.NE.0)THEN WRITE(IP18,258)(JDATE(J),J=1,4),LP,TITLE(1:16),MESH 258 FORMAT(/' FOR DATE',I6,3I3.2,' VALUES AT END OF BCD5 PASS', 1 ' NO.',I3,' (UNSMOOTHED) FOR ',A16, 2 ' FOR MESH LENGTH =',I4/ 3 ' ONLY BASE STATIONS WITH LTAG = 0 OR -1 ARE PRINTED;', 4 ' THOSE PERMANENTLY DISCARDED ARE NOT PRINTED.', 5 ' BB IS THE ANALYSIS VALUE.'/ 6 ' STATIONS WITH NO DIFFERENCES ARE OUTSIDE THE GRID'/ 7 ' NO. STATION XPOS YPOS DATA', 8 ' BB DIF LTAG QUALST LNDSEA') ENDIF C SUM=0. NSUM=0 C SUM AND NSUM ARE FOR SUMMING THE DIFFERENCES BETWEEN THE C INTERPOLATED VALUES AND THE OBSERVATIONS FOR ALL C OBSERVATIONS WITHIN THE GRID. SUMGR=0. NSUMGR=0 C SUMGR AND NSUMGR ARE FOR SUMMING THE DIFFERENCES C BETWEEN THE INTERPOLATED VALUES AND THE OBSERVATIONS C FOR ALL OBSERVATIONS WITHIN THE SUBSETTED AREA ONLY. C DO 2582 M=1,3 DIFMAX(M)=0. STAMAX(M)=' ' NAMMAX(M)=' ' C DIFMAX( ) IS FOR COLLECTING THE THREE LARGEST C DIFFERENCES; STAMAX( ) AND NAMMAX ARE FOR THE ASSOCIATED C STATIONS CALL LETTERS AND NAMES, RESPECTIVELY. 2582 CONTINUE C XNX=NX YNY=NY C DO 263 K=1,NSTA C CCCC WRITE(KFILDO,2583)K,CCALL(K),LTAG(K),LTAGPT(K) CCCC 2583 FORMAT(' AT 2583--K,CCALL(K),LTAG(K),LTAGPT(K)',I4,2X,A8,2I6) C IF(LTAG(K).GE.1)GO TO 263 C ONLY STATIONS NOT TOSSED ON THE LAST PASS ARE USED. C IF(ILS.NE.0.AND.LNDSEA(K).LE.3)GO TO 263 C THIS TEST PUT IN TO VERIFY ONLY LAND STATIONS WHEN THE C LAND AND WATER ARE SEPARATED IN THE ANALYSIS. C C THE BELOW TEST PUT IN TO VERIFY ONLY BASE STATIONS, NOT C ANY BOGUS OR AUGMENTED ONES. NORMALLY, BASE STATIONS ARE C INDICATED BY 0 IN LTAGPT( ), BUT THIS IS NOT THE CASE C FOR TOTAL WIND, SO MTAGPT( ) FROM WIND SPEED IS USED. C IF(LAMPNO.EQ.20)THEN IF(MTAGPT(K).GT.0)GO TO 263 ELSE IF(LTAGPT(K).GT.0)GO TO 263 ENDIF C IF(QUALST(K).LE..99)GO TO 263 C ABOVE ADDED 1/4/16. OMITS MESONET STATIONS WHEN USED C WITH REDUCED WEIGHT. C C FIND INTERPOLATED VALUE OR NEAREST NEIGHBOR VALUE IN C ITRPSX ACCORDING TO THE LAND/WATER TYPE LNDSEA(K). C CALL ITRPSX(KFILDO,IP14,P,NX,NY, 1 CCALL(K),XDATA(K),XLAPSE(K),ELEV(K),XP(K),YP(K), 2 LNDSEA(K),SEALND,TELEV,NXE,NYE, 3 IBKPN,ELCORR(LP),ELCORU(LP), 4 MESH,MESHE,N4P,BB,ISTOP,IER) C VALUE INTERPOLATED FROM CURRENT ANALYSIS OR FIRST C GUESS TO LOCATION OF STATION IS NOW IN BB. THIS CAN BE C MISSING BECAUSE AN INTERPOLATED VALUE FOR A LAND (WATER) C STATION IS ONLY TAKEN FROM LAND (WATER) STATIONS, AND IT IS C POSSIBLE NONE EXISTS. ALSO, THE FIRST GUESS ANALYSIS AREA C MAY NOT FILL GRID. IN THIS CASE, IER NE 0. C IF(IER.NE.0)THEN IER=0 C IER NE 0 IS NOT COUNTED AS AN ERROR HERE. RESET OR IT C MAY TRIP AN ERROR COUNT LATER. GO TO 261 ENDIF C IF(XP(K).LT.1..OR.XP(K).GT.XNX)GO TO 261 IF(YP(K).LT.1..OR.YP(K).GT.YNY)GO TO 261 DIF=BB-XDATA(K) ADIF=ABS(DIF) IF(LTAG(K).EQ.-1)GO TO 259 SUM=SUM+ADIF NSUM=NSUM+1 C C************************************************* CCC IF(LP.EQ.NPASS)THEN CCC WRITE(KFILDO,2585)CCALL(K),BB,XDATA(K),DIF,NSUM,SUM CCC 2585 FORMAT(' AT 2585--CCALL(K),BB,XDATA(K),DIF,NSUM,SUM ', CCC 1 A8,3F8.2,I6,F8.2) CCC ENDIF C************************************************* C C WHEN IOPT(1) = 0, THERE IS NO SUBSET AREA, SO DO NO C CALCULATIONS FOR IT. C IF(IOPT(1).NE.0)THEN C IF(XP(K).LE.IOPTGR(3).AND. 1 XP(K).GE.IOPTGR(2).AND. 2 YP(K).LE.IOPTGR(5).AND. 3 YP(K).GE.IOPTGR(4))THEN NSUMGR=NSUMGR+1 SUMGR=SUMGR+ADIF C IF(ADIF.GT.DIFMAX(1))THEN DIFMAX(3)=DIFMAX(2) STAMAX(3)=STAMAX(2) NAMMAX(3)=NAMMAX(2) DIFMAX(2)=DIFMAX(1) STAMAX(2)=STAMAX(1) NAMMAX(2)=NAMMAX(1) DIFMAX(1)=ADIF STAMAX(1)=CCALL(K) NAMMAX(1)=NAME(K) ELSEIF(ADIF.GT.DIFMAX(2))THEN DIFMAX(3)=DIFMAX(2) STAMAX(3)=STAMAX(2) NAMMAX(3)=NAMMAX(2) DIFMAX(2)=ADIF STAMAX(2)=CCALL(K) NAMMAX(2)=NAME(K) ELSEIF(ADIF.GT.DIFMAX(3))THEN DIFMAX(3)=ADIF STAMAX(3)=CCALL(K) NAMMAX(3)=NAME(K) ENDIF C ENDIF C ENDIF C C*** IF(IP20.NE.0.AND.IOPT(1).NE.0)THEN C***D WRITE(KFILDO,2588)K,CCALL(K),XP(K),YP(K), C***D 1 IOPTGR(3),IOPTGR(2), C***D 2 IOPTGR(5),IOPTGR(4),NSUMGR,SUMGR C***D2588 FORMAT(' IN BCD5 AT 2588--K,CCALL(K),XP(K),YP(K),', C***D 1 'IOPTGR(3,2,5,4),', C***D 2 'NSUMGR,SUMGR',I5,1X,A6,2F7.2,4F6.0,I5,F8.2) C C*** ENDIF C 259 IF(IP18.NE.0)THEN WRITE(IP18,260)K,CCALL(K),XP(K),YP(K),XDATA(K),BB,DIF, 1 LTAG(K),QUALST(K),LNDSEA(K) 260 FORMAT(' ',I5,3X,A8,F8.2,F8.2,F10.3,F10.3,F8.3,I6,F8.3,I6) GO TO 263 ENDIF C 261 IF(IP18.NE.0)THEN WRITE(IP18,262)K,CCALL(K),XP(K),YP(K),XDATA(K),BB,LTAG(K), 1 QUALST(K),LNDSEA(K) 262 FORMAT(' ',I5,3X,A8,F8.2,F8.2,F10.3,F10.3,8X,I6,F8.3,I6) ENDIF C 263 CONTINUE C AVG=9999. IF(NSUM.NE.0)AVG=SUM/NSUM C IF(IP21.NE.0)THEN WRITE(IP21,264)(JDATE(J),J=1,4),NSUM,LP,TITLE(1:16),AVG 264 FORMAT(' FOR DATE',I6,3I3.2,' MEAN ABS DIFF OF',I6, 1 ' VALUES USED WITHIN THE GRID', 2 ' ON PASS NO.',I2,' FOR ',A16,' =',F7.3, 3 ' (UNSMOOTHED)') ENDIF C C COMPUTE AND PRINT THE AVERAGE DIFFERENCE BETWEEN THE DATA C AND THE CURRENT ANALYSIS OVER THE SUBSETTED AREA. C IF(IOPT(1).NE.0)THEN C THERE IS A SUBSET AREA. C IF(NSUMGR.EQ.0)THEN AVGGR=9999. ELSE AVGGR=SUMGR/NSUMGR ENDIF C IF(I405ADG.NE.0)THEN WRITE(KFILDO,2644) ENDIF C IF(IP20.NE.KFILDO.AND.IP20.NE.0)THEN WRITE(IP20,2644) 2644 FORMAT(' ') ENDIF C IF(IP20.NE.0)THEN WRITE(IP20,2645) 1 (JDATE(J),J=1,4),NSUMGR,LP,TITLE(1:16),AVGGR, 2 (STAMAX(M),NAMMAX(M),DIFMAX(M),M=3,1,-1) 2645 FORMAT(/' FOR DATE',I6,3I3.2,' MEAN ABS DIFF OF',I6, 1 ' VALUES USED IN SUBSET AREA ', 2 ' ON PASS NO.',I2,' FOR ',A16,' =',F7.3, 3 ' (UNSMOOTHED)',/, 4 4X,'BIG DIFFERENCES = ',A8,A20,F7.3,', ', 5 A8,A20,F7.3,', ', 6 A8,A20,F7.3) ENDIF C IF(I405ADG.NE.0)THEN C IF(IP20.NE.KFILDO)THEN WRITE(KFILDO,2645) 1 (JDATE(J),J=1,4),NSUMGR,LP,TITLE(1:16),AVGGR, 2 (STAMAX(M),NAMMAX(M),DIFMAX(M),M=3,1,-1) ENDIF C ENDIF C ELSE C THERE IS NOT A SUBSET AREA. AVGGR=AVG NSUMGR=NSUM C AVGGR AND NSUMGR ARE PRINTED AT THE BOTTOM OF THE C GRIDPRINTED MAP. IF THERE IS NO SUBSETTED AREA, THE C WHOLE AREA MAY BE PRINTED. THEREFORE, SET AVGGR TO C AVG AND NSUMGR TO NSUM. ENDIF C ENDIF C C PREPARE UNSMOOTHED MAPS FOR GRIDPRINTING AND OR C WRITING IN TDLPACK, IF DESIRED. C IF(NPRT(LP).NE.0.AND.IP22.NE.0.AND.JP(1).NE.0)GO TO 2646 IF(NTDL(LP).NE.0.AND.KFILOG.NE.0.AND.JP(2).NE.0)GO TO 2646 GO TO 271 C TO PROCEED BELOW, EITHER NPRT(LP) AND JP(1) C INDICATE GRIDPRINTING OR NTDL(LP) AND JP(2) INDICATE C PACKING AND THERE IS A NONZERO UNIT NUMBER TO WRITE TO. C 2646 NXG=NX NYG=NY MESHG=MESH C NXG, ETC. ARE NECESSARY BECAUSE SZGRDM CHANGE THEM, AND C NX, ETC. MUST BE RETAINED. CALL TRNSFR(P,FD2,NX*NY) D WRITE(KFILDO,2647)NX,NY D2647 FORMAT(/' CALLING SZGRDM AT 2647--NX,NY',2I6) CALL SZGRDM(KFILDO,FD2,NXG,NYG, 1 MESHG,MESHL,ITRPLQ(LP),ND2X3) C SZGIRD PUTS THE GRID IN FD2( ) AT SUBSET MESH LENGTH MESHL. C IOPT( ) IS IN RELATION TO THAT MESH LENGTH. C C GRIDPRINT UNSMOOTHED FIELD IF DESIRED. C IF(NPRT(LP).EQ.0.OR.IP22.EQ.0.OR.JP(1).EQ.0)GO TO 2654 TITLE(17:24)=BLANK(1:8) CALL PRTGR(IP22,FD2,NXG,NYG, 1 CINT(LP),ORIGIN(LP),SMULT(LP),SADD(LP),IOPT,TITLE,IER) IF(IER.NE.0)ISTOP(1)=ISTOP(1)+1 C AN ERROR IS COUNTED BY ISTOP(1), BUT IS NOT FATAL. C C AT THE BOTTOM OF THE MAP, BELOW THE TITLE, PRINT C THE PASS NUMBER LP, NTYPE( ), R( ), B( ), AND ER1( ). C IT IS EXPECTED THAT 4 PASSES WILL USUALLY BE USED C AND ALL THOSE VALUES ARE PRINTED. HOWEVER, IF NPASS C IS GT 4, IT IS ACCOMMODATED. THE NUMBER OF VALUES WITHIN C THE GRIDPRINTED AREA AND THE AVERAGE ABSOLUTE DIFFERENCE C ARE ALSO PRINTED. C IF(NPASS.LE.4)THEN WRITE(IP22,2648)LP,(NTYPE(J),J=1,4),(R(J),J=1,4), 1 (MSHPAS(J),J=1,4),NSMTYP,(B(J),J=1,4), 2 (ER1(J),J=1,4), 3 (ITRPLQ(J),J=1,4),NSUMGR,AVGGR 2648 FORMAT(' PASS NO.',I2,' NTYPE',4I4, 1 ' R',F7.1,3F5.1, 2 ' MSHPAS',4I5,5X,'NSMTYP',I5/ 3 19X,' B',F8.1,3F4.1,' ER1',4F5.1, 4 ' ITRPLQ',4I5, 5 ' VALUES',I5,' FIT',F6.2) C REMOVED THE "CTRL-L" AND "/" IN THE FORMAT 2648. C IF(IVRBL.EQ.1)THEN WRITE(IP22,2649)(WNDWT(J),J=1,4),WNDTHR,WNDTRN,WNDGRD 2649 FORMAT(21X,'WNDWT',4F4.1,' WNDTHR',F8.1, 1 14X,'WNDTRN',F8.2,17X,'WNDGRD',F6.2) ENDIF C ELSEIF(NPASS.EQ.5)THEN WRITE(IP22,265)LP,(NTYPE(J),J=1,5),(R(J),J=1,5), 1 (MSHPAS(J),J=1,5),NSMTYP,(B(J),J=1,5), 2 (ER1(J),J=1,5), 3 (ITRPLQ(J),J=1,5),NSUMGR 265 FORMAT(' PASS NO.',I2,' NTYPE',5I4, 1 ' R ',5F5.1, 2 ' MSHPAS',5I5,' NSMTYP',I5/ 3 19X,' B ',5F4.1,' ER1',5F5.1, 4 ' ITRPLQ',5I5,' VALUES',I5) C IF(IVRBL.EQ.1)THEN WRITE(IP22,2650)(WNDWT(J),J=1,5),WNDTHR,WNDTRN,WNDGRD,AVGGR 2650 FORMAT(21X,'WNDWT',5F4.1,' WNDTHR',F8.1, 1 19X,'WNDTRN',F8.2,' WNDGRD',F6.2,' FIT',F8.2) ENDIF C WRITE(IP22,2651)CINT(LP),ORIGIN(LP),SMULT(LP),SADD(LP) 2651 FORMAT(21X,'CINT',F8.2,16X,' ORIGIN',F8.2, 1 19X,'SMULT ',F8.2,17X,' SADD',F7.2) ELSE C WRITE(IP22,2652)LP,(NTYPE(J),J=1,6),(R(J),J=1,6), 1 (MSHPAS(J),J=1,6),(B(J),J=1,6),(ER1(J),J=1,6), 2 (ITRPLQ(J),J=1,6),NSUMGR,AVGGR 2652 FORMAT(' PASS NO.',I2,' NTYPE',6I4,' R',6F5.1, 1 ' MSHPAS',6I5/ 2 10X,' B',6F4.1,' ER1',6F5.1,' ITRPLQ',I5,5I2, 3 ' VALUES',I5,' FIT',F6.2) ENDIF C IF(NPASS.NE.5)THEN WRITE(IP22,2653)CINT(LP),ORIGIN(LP),SMULT(LP),SADD(LP) ENDIF C 2653 FORMAT(21X,'CINT',F8.2,16X,'ORIGIN',F8.2, 1 14X,'SMULT ',F8.2,17X,'SADD',F8.2) C C TDLPACK AND WRITE UNSMOOTHED FIELD IF DESIRED FOR THE C SUBSET AREA. WHEN IOPT(1) = 0, THERE IS NO SUBSET AREA. 2654 IF(NTDL(LP).EQ.0.OR.KFILOG.EQ.0.OR.JP(2).EQ.0. 1 OR.IOPT(1).EQ.0)GO TO 271 LD(1)=ID(1) LD(2)=LP*10000+IDPARS(7) C THE LLLL IN ID(2) IS USED FOR THE PASS NUMBER. C IDPARS(7) MAINTAINS THE LEVEL. LD(3)=ID(3) LD(4)=(ID(4)/1000)*1000 C THIS IS THE UNSMOOTHED ANALYSIS; S IN ID(4) = 0. ITAUH=IDPARS(12) ITAUM=0 NSEQ=0 NCHAR=32 C 32 CHARACTERS OF PLAIN LANGUAGE ARE PACKED. XMISSP=0. XMISSS=0. C THESE ARE ANALYSES AND NO MISSING VALUES ARE PROVIDED FOR. C IF THERE EVER ARE, JUST SET XMISSP=9999., OR WHATEVER THE C MISSING VALUE IS. C C THE GRID IN FD2( ) IS ALWAYS AT MESH LENGTH MESHL AS A C RESULT OF SZGRDM, WHICH IS WHAT IS WANTED FOR THE C DISPOSABLE GRID. NOW CUT THE GRID TO THE DISPOSABLE C AREA. IOPT( ) IS IN RELATION TO MESHL, WHICH IS THE C MESH LENGTH OF FD2( ). C NXD=IOPT(3)-IOPT(2)+1 NYD=IOPT(5)-IOPT(4)+1 NXOFF=IOPT(2)-1 NYOFF=IOPT(4)-1 C NXOFF AND NYOFF ARE THE DIFFERENCES IN THE (1,1) POINT C OF THE ANALYSIS AND SUBSETTED GRIDS AT THE CURRENT MESH C LENGTH MESH. THERE IS NO NEED TO CALL CUTIT IF THE INPUT C AND OUTPUT GRIDS ARE THE SAME. NXG AND NYG ARE THE C DIMENSIONS OF THE GRID IN FD2( ) AT MESH LENGTH MESHL. C IF(NXOFF.NE.0.OR.NYOFF.NE.0.OR.NXG.NE.NXD.OR.NYG.NE.NYD)THEN CALL CUTIT(KFILDO,FD2,NXG,NYG,NXOFF,NYOFF, 1 FD2,NXD,NYD,IER) ENDIF C IF(IER.NE.0)THEN ISTOP(1)=ISTOP(1)+1 KER=KER+1 WRITE(KFILDO,2655)(LD(J),J=1,4),PLAIN,NDATE 2655 FORMAT(' NOT WRITING UNSMOOTHED ANALYSIS ',3(1X,I9.9), 1 1X,I10.3,' ',A32,' FOR DATE',I12,/, 2 ' TO UNIT NO. KFILOG.') GO TO 271 ENDIF C C FIND THE ACTUAL MESH LENGTH XMESHL FROM THE NOMINAL C MESH LENGTH MESHL. C CALL ACTUAL(KFILDO,MESHL,XMESHL,TRASH,NPROJ,IER) C XMESHL IS THE ACTUAL MESH LENGTH IN KM. C IF(IER.NE.0)THEN WRITE(KFILDO,2656)IER 2656 FORMAT(/' FATAL ERROR IN ACTUAL FROM BCD5,', 1 ' IER =',I4) ISTOP(1)=ISTOP(1)+1 KER=KER+1 GO TO 400 ENDIF C C FIND THE LAT/LONG ALATD/ALOND OF THE LOWER LEFT CORNER C OF THE DISPOSABLE GRID. THIS IS GRIDPOINT IOPT(2), IOPT(4) C ON THE FD2 GRID AT MESH LENGTH MESHL. THE MESH LENGTH MUST C BE IN METERS FOR THE CALLED ROUTINES. C IF(NPROJ.EQ.3)THEN CALL LMIJLL(KFILDO,FLOAT(IOPT(2)),FLOAT(IOPT(4)), 1 XMESHL*1000.,ORIENT,XLAT, 2 ALATL,ALONL,ALATD,ALOND,IER) C IF(IER.NE.0)THEN WRITE(KFILDO,2657)IER 2657 FORMAT(/' FATAL ERROR IN LMIJLL FROM BCD5 AT 2657,', 1 ' IER =',I4) ISTOP(1)=ISTOP(1)+1 KER=KER+1 GO TO 400 ENDIF C ELSEIF(NPROJ.EQ.5)THEN CALL PSIJLL(KFILDO,FLOAT(IOPT(2)),FLOAT(IOPT(4)), 1 XMESHL*1000.,ORIENT,XLAT, 2 ALATL,ALONL,ALATD,ALOND) ELSEIF(NPROJ.EQ.7)THEN CALL MCIJLL(KFILDO,FLOAT(IOPT(2)),FLOAT(IOPT(4)), 1 XMESHL*1000.,XLAT, 2 ALATL,ALONL,ALATD,ALOND) ELSE WRITE(KFILDO,2658)NPROJ 2658 FORMAT(/' ****MAP PROJECTION NUMBER NPROJ =',I3, 1 ' NOT 3, 5, OR 7. FATAL ERROR IN BCD5 AT 2658.') ISTOP(1)=ISTOP(1)+1 KER=KER+1 GO TO 400 ENDIF C CCC WRITE(KFILDO,2659)IOPT(2),IOPT(3),IOPT(4),IOPT(5),NXOFF,NYOFF, CCC 1 NXG,NYG,NXD,NYD,MESH,MESHL, CCC 2 ALATL,ALONL,ALATD,ALOND CCC 2659 FORMAT(/,' AT 2659--IOPT(2),IOPT(3),IOPT(4),IOPT(5),NXOFF,NYOFF,', CCC 1 'NXG,NYG,NXD,NYD,MESH,MESHL,', CCC 2 'ALATL,ALONL,ALATD,ALOND',/,12I7,4F9.4) C C ALATD AND ALOND ARE THE LL LAT/LON GRID POSITION. C TRUNCATE TO THREE DECIMAL PLACES TO ASSURE C COMPATIBILITY WITH AVN ARCHIVE AND OTHER PROGRAMS. C ALATD=NINT(ALATD*1000)/1000. ALOND=NINT(ALOND*1000)/1000. C C PAWGTS PACKS AND WRITES THE UNSMOOTHED DATA TO A C GRIDPOINT FILE. BUT FIRST POSTPROCESS IF DESIRED. C THE OUTPUT GRIDS FROM BCD5 ARE AT THE CURRENT MESH LENGTH C MESH. WHEN A GRID HAS BEEN CLIPPED TO A LARGER MESH C LENGTH IN FSTGS5 THAN MESH, THE AREA COVERED WITH C NON-MISSING DATA MAY BE SLIGHTLY GRATER THAN THE DESIRED C AREA AT MESH LENGTH MESH. C CALL TRNSFR(FD2,COUNT,NXD*NYD) C DATA IN FD2( ) ARE TRANSFERRED TO COUNT( ) SO THIS C DISPOSABLE OUTPUT POSTPROCESSING DOES NOT MODIFY THE C DATA. C C POSTPROCESS IF NEEDED. THREE ROUTINES ARE AVAILABLE. C DO 2705 NN=1,NOPROD C IF(POSTDS(NN).NE.' ')THEN C IF(POSTDS(NN).EQ.'POST ')THEN CALL POST(KFILDO,COUNT,NXD*NYD, 1 TLOD(NN),SETLOD(NN),THID(NN),SETHID(NN), 2 CONSTD(NN),NSCALD(NN),EX1D(NN),EX2D(NN),IER) C IF A POSTPROCESSING ROUTINE OTHER THAN POST IS C NEEDED, PUT CHECK AND CALL HERE. C ELSEIF(POSTDS(NN).EQ.'CIGFT ')THEN CALL CIGFT(KFILDO,COUNT,NXD*NYD, 1 TLOD(NN),SETLOD(NN),THID(NN),SETHID(NN), 2 CONSTD(NN),NSCALD(NN),EX1D(NN),EX2D(NN),IER) C THIS IS TO CHANGE LAMP CEILING HEIGHT IN CATEGORIES C TO HUNDREDS OF FT. C CCCC ELSEIF(POSTDS(NN).EQ.'VISMI ')THEN CCCC CALL VISMI(KFILDO,COUNT,NXD*NYD, CCCC 1 TLOD(NN),SETLOD(NN),THID(NN),SETHID(NN), CCCC 2 CONSTD(NN),NSCALD(NN),EX1D(NN),EX2D(NN),IER) CCCCC THIS IS TO CHANGE LAMP VISIBILITY IN CATEGORIES CCCCC TO MILES. CCCC NOTE VIS WAS PREVIOUSLY ANALYZED IN CATEGORIES, NOW IN C MI, SO VISMI NOT NEEDED. ELSE WRITE(KFILDO,270)POSTDS(NN) 270 FORMAT(/' ****POSTPROCESSING ROUTINE SPECIFIED', 1 ' IN U405A.CN FILE = ',A6,' FOR DISPOSABLE', 2 ' GRIDS NOT AVAILABLE IN BCD5. PROCEEDING.') ISTOP(1)=ISTOP(1)+1 ENDIF C ENDIF C 2705 CONTINUE C IF(ISQ.EQ.1)THEN C DO 2706 IXY=1,ND2X3 C IF(COUNT(IXY).LT.9998.5)THEN COUNT(IXY)=COUNT(IXY)*COUNT(IXY) ENDIF C 2706 CONTINUE C ENDIF C CALL PAWGTS(KFILDO,KFILOG,'KFILOG',IP16,NDATE, 1 LD,ITAUH,ITAUM,MODNO,NSEQ,ISCALD, 2 NPROJ,ALATD,ALOND,ORIENT,MESHL,XLAT,NXD,NYD, 3 COUNT,NCOUNT,IWORK,IPACK,ND2X3,MINPK, 4 IS0,IS1,IS2,IS4,ND7, 5 IPLAIN,PLAIN,NCHAR, 6 XMISSP,XMISSS,LX,IOCTET, 7 JTOTBY,JTOTRC,L3264B,L3264W,IER) C IF(IER.NE.0)THEN ISTOP(1)=ISTOP(1)+1 KER=KER+1 C AN ERROR IN PAWGTS IS NOT CONSIDERED FATAL. ENDIF C C THIS IS THE END OF THE DISPOSABLE AND GRIDPRINT OUTPUT C FOR UNSMOOTHED GRIDS. C C SMOOTH FIELD IF DESIRED. C 271 CONTINUE IF(B(LP).EQ.0.)GO TO 290 C C SAFETY CHECK. IF NOPTNT NE 0, THEN NSMTYP SHOULD EQUAL C 8 TO INDICATE SPOTRM. C IF(NOPTNT.NE.0.AND.NSMTYP.NE.8)THEN WRITE(KFILDO,272)NSMTYP 272 FORMAT(/' ****PROBABLE ERROR. NSMTYP =',I3,' WHEN SPOTRM', 1 ' IS INDICATED IN U405A.CN FILE. NSMTYP USED', 2 ' RATHER THAN SPOTRM.'/) ISTOP(1)=ISTOP(1)+1 ENDIF C CCCC WRITE(KFILDO,2720)RAY,NPASSP,NOPTNT,LAMPNO,NSMTYP CCCC 2720 FORMAT(/' AT 2720 IN BCD5--RAY,NPASSP,NOPTNT,LAMPNO,NSMTYP', CCCC 1 F10.2,4I10) C IF(NSMTYP.EQ.1)THEN CALL SMOTH(P,CORR,NX,NY,B(LP)) C ELSEIF(NSMTYP.EQ.2)THEN CALL SMOTHN(P,CORR,NX,NY,B(LP),NCOUNT) C ELSEIF(NSMTYP.EQ.3)THEN C IF(LP.EQ.NPASS)THEN CALL SMTH9(KFILDO,P,CORR,NX,NY) ELSE CALL SMOTHN(P,CORR,NX,NY,B(LP),NCOUNT) ENDIF C ELSEIF(NSMTYP.EQ.4)THEN C IF(LP.GE.4.AND.IVRBL.EQ.1)THEN CALL SMOTHC(KFILDO,P,CORR,FD2,NX,NY,B(LP),NCOUNT,MESH) C C PAWGTS PACKS AND WRITES THE SMOOTHING ARRAY FD2 C TO A GRIDPOINT FILE. C D IF(KFILOG.NE.0.AND.NTDL(LP).NE.0.AND.JP(2).NE.0)THEN C NXD ETC. HAVE TO BE COMPUTED ABOVE FOR THIS TO WORK. D LD(1)=099000005 D LD(2)=LP*10000 C THE LLLL IN ID(2) IS USED FOR THE PASS NUMBER. D LD(3)=0 D LD(4)=0 D ITAUH=0 D ITAUM=0 D NSEQ=0 D NCHAR=32 C 32 CHARACTERS OF PLAIN LANGUAGE ARE PACKED. D XMISSP=9999. D XMISSS=0. D IZERO=0 C C ASSUME FOR THIS TESTING THAT THE LOOP ABOVE TO SET C ALATD, ETC. HAS BEEN EXECUTED. THIS GRID IS NOT C CUT AND SHOULD BE USED WHEN THE DISPOSABLE GRID IS C OF THE FULL SIZE. C D CALL PAWGTS(KFILDO,KFILOG,'KFILOG',IP16,NDATE, D 1 LD,ITAUH,ITAUM,MODNO,NSEQ,IZERO, D 2 NPROJ,ALATD,ALOND,ORIENT,MESHL,XLAT,NXD,NYD, D 3 FD2,NCOUNT,IWORK,IPACK,ND2X3,MINPK, D 4 IS0,IS1,IS2,IS4,ND7, D 5 IPLAIN,PLAIN,NCHAR, D 6 XMISSP,XMISSS,LX,IOCTET, D 7 JTOTBY,JTOTRC,L3264B,L3264W,IER) C D IF(IER.NE.0)THEN D ISTOP(1)=ISTOP(1)+1 D KER=KER+1 C AN ERROR IN PAWGTS IS NOT CONSIDERED FATAL. D ENDIF C D ENDIF C ELSE CALL SMOTHN(P,CORR,NX,NY,B(LP),NCOUNT) ENDIF C ELSEIF(NSMTYP.GE.5.AND.NSMTYP.LE.7)THEN RMESH=FLOAT(MESH)/FLOAT(MESHE) C RMESH IS THE RATIO OF THE MESH LENGTH OF THE ANALYSIS GRID C TO THE TERRAIN GRID. C C************************************************* CCCC IND=509*NX+77 CCCC WRITE(KFILDO,273)P(IND),NX,NY,B(LP),SEALND(IND), CCCC 1 NXE,NYE,RMESH,NSMTYP,NSHLN CCCC 273 FORMAT(/'IN BCD5 AT 273--P(509*NX+77),NX,NY,B(LP),', CCCC 1 'SEALND(509*NX+77),NXE,NYE,RMESH,NSMTYP,NSHLN( )',/, CCCC 2 F8.3,2I5,2F8.3,2I6,F8.2,7I6) C************************************************* C NSM5=JOCEAN*1000+JLAKE*100+NSMTYP C SMOTHG HAS TO HAVE NSMTYP = 5-7. GIVE IT THREE SMOOTHINGS. C JOCEAN AND JLAKE ALLOWS FOR NO SMOOTHING OVER WATER. IG=0 C DON'T USE NEAR( , ). iT HASN'T BEEN INITIALIZED YET. CALL SMOTHG(KFILDO,P,CORR,COUNT,IG,NEAR,NX,NY,B(LP),CSTSM, 1 TELEV,SEALND,NXE,NYE, 2 RMESH,NSM5,NSHLN,IER) C THIS IS A SPECIALIZED SMOOTHER FOR GRIDDED MOS. IF(IER.EQ.666)KER=KER+1 C ELSEIF(NSMTYP.EQ.8)THEN C IF(RAY.GT.0..AND.LP.GE.NPASSP)THEN WRITE(KFILDO,274)R(1),NPASSP,NSMN,NOPTNT,DIFFA,NOCEAN, 1 LAKE,DISTX,DPOWER,RAY 274 FORMAT(/' SPOT SMOOTHED POSSIBLY FOLLOWED BY TERRAIN', 1 ' FOLLOWING SMOOTHER INDICATED BY NSMNUM, RMAX =', 2 F5.1/ 3 ' NPASSP =',I2,' NSMN =',I4, 4 ' NOPTN =',I2,' DIFFA =',F5.0,' NOCEAN =',I2, 5 ' LAKE =',I2, 6 ' DISTX =',F5.2,' DPOWER =',F5.2, 7 ' RAY =',F5.2/) C PLAINT='NEAREST DISTANCE TO STATION-SRM ' C IF(NOPTNT.NE.0)THEN C NOPTNT IS USED WITH LTAGPT( ) TO SELECTIVELY SMOOTH C OUT BOGUS AND 1ST AND 2ND TIER AUGMENTATION. C FOR LAMP TOTAL WIND, MTAGPT( ) IS USED VICE LTAGPT( ). C IF(LAMPNO.EQ.20)THEN CALL SPOTRM(KFILDO,KFILOG,IP16,NAREA, 1 CCALL,XP,YP,LNDSEA,NOPTNT,LTAG,MTAGPT, 2 STALAT,STALON,NSTA, 3 ID,IDPARS,P,COUNT,MESH,NX,NY, 4 TELEV,SEALND,CPNDFD,NXE,NYE,MESHE, 5 IPACK,DATA,IWORK,ND5, 6 MODNO,NDATE,NCLIP, 7 ALATL,ALONL,NPROJ,ORIENT,XLAT,ISCALD, 8 DIFFA,NOCEAN,LAKE,DISTX,DPOWER,RAY,R(1), 9 LH, A IS0,IS1,IS2,IS4,ND7, B JTOTBY,JTOTRC,PLAINT,IPLANT, C L3264B,L3264W,MINPK,ISTOP(1),IER) ELSE CALL SPOTRM(KFILDO,KFILOG,IP16,NAREA, 1 CCALL,XP,YP,LNDSEA,NOPTNT,LTAG,LTAGPT, 2 STALAT,STALON,NSTA, 3 ID,IDPARS,P,COUNT,MESH,NX,NY, 4 TELEV,SEALND,CPNDFD,NXE,NYE,MESHE, 5 IPACK,DATA,IWORK,ND5, 6 MODNO,NDATE,NCLIP, 7 ALATL,ALONL,NPROJ,ORIENT,XLAT,ISCALD, 8 DIFFA,NOCEAN,LAKE,DISTX,DPOWER,RAY,R(1), 9 LH, A IS0,IS1,IS2,IS4,ND7, B JTOTBY,JTOTRC,PLAINT,IPLANT, C L3264B,L3264W,MINPK,ISTOP(1),IER) ENDIF C IF IER NE 0, A DIAGNOSTIC IS PRODUCED IN SPOTRM WITH C ISTOP(1) INCREMENTED. C IF(IER.EQ.777)THEN JER=JER+1 GO TO 290 C IER = 777 IS FATAL IN SPOTRM, SO SKIP CALCULATIONS ENDIF C DEPENDING ON GOOD RESULTS. ENDIF C C FOLLOW THE SPOTRM SMOOTHER WITH TWO TERRAIN FOLLOWING C PASSES TO SMOOTH OUT NOISE. NEITHER SPOTRM OR SMOTHG C WILL SMOOTH THE 4 GRIDPOINTS AROUND A STATION. C IF(LP.EQ.NPASS)THEN C SMOTHG SMOOTHING AND SETTING THE 4 GRIDPOINTS TO THE C STATION VALUE BY SETGPT IS DONE ONLY ON THE LAST C PASS; SPOTRM MAY BE USED ON EARLIER PASSES. C IF(NSMNUM.NE.0)THEN C NSMNUM MAY BE ZERO HERE INDICATING NO SMOOTHING. C SMOTHG IF ENTERED WITH NSMNUM = 0 WILL GIVE AN C UNWANTED DIAGNOSTIC. C C CALL SETGPT TO SET THE GRIDPOINTS TO NOT SMOOTH. C THIS IS DONE EACH GRID BECAUSE TOSSED DATA OR C BOGUS MAY BE DIFFERENT. C CALL SETGPT(KFILDO,CCALL,NAME,LTAG,LTAGPT,LNDSEA, 1 XP,YP,NSTA, 2 NAREA,NEAR,NX,NY,MESH,SEALND,NXE,NYE, 3 MESHE,ISETG,IER) RMESH=FLOAT(MESH)/FLOAT(MESHE) C RMESH IS THE RATIO OF THE MESH LENGTH OF THE C ANALYSIS GRID TO THE TERRAIN GRID. IG=1 C USE NEAR( , ). C CALL SMOTHG(KFILDO,P,CORR,COUNT,IG,NEAR,NX,NY,B(LP), 1 CSTSM,TELEV,SEALND,NXE,NYE, 2 RMESH,NSMN,NSHLN,IER) C NSMN HAS ITS ORIGINAL INCOMING TRIPLE VALUE. C THIS IS A SPECIALIZED SMOOTHER FOR GRIDDED MOS. IF(IER.EQ.666)KER=KER+1 C ELSE WRITE(KFILDO,275) 275 FORMAT(/' NO SMOTHG SMOOTHING BEING DONE.') ENDIF C ENDIF C ELSEIF(B(LP).GT.98.)THEN C THIS IS A NOOP. IT ALLOWS B(LP)=99 FOR SMOOTHING ABOVE C CALL TO ESP. C ELSE WRITE(KFILDO,2753)NSMTYP,RAY,LP,NPASSP,B(LP) 2753 FORMAT(/' ****NSMTYP =',I3,' RAY =',F6.3,' LP =',I3, 1 ' NPASSP =',I3,' FOR B(LP) =',F6.3, 2 ' IS ILLEGAL COMBINATION.',/, 3 ' SMOOTHING NOT DONE FOR THIS VARIABLE,', 4 ' FOR THIS PASS.') ISTOP(1)=ISTOP(1)+1 GO TO 290 ENDIF C ELSE C WRITE(KFILDO,2754)NSMTYP 2754 FORMAT(/' ****NSMTYP =',I4,' NOT A CORRECT VALUE OF', 1 ' 1, 2, 3, ,4, 5, 6, 7 OR 8.', 2 ' SMOOTHING NOT DONE FOR THIS VARIABLE.') ISTOP(1)=ISTOP(1)+1 GO TO 290 ENDIF C C THE FOLLOWING DIAGNOSTIC PRINT PRODUCED ON IP19 INDICATES C FOR EACH DATUM THE DEGREE OF FIT OF THE SMOOTHED ANALYSIS C TO THE DATA OF THE PASS LP. DIFFERENCES BETWEEN DATA VALUES C AND INTERPOLATED VALUES ARE NOT USED FOR THIS PURPOSE FOR C POINTS OUTSIDE THE NX BY NY GRID. AUGMENTED DATA, IF ANY, C ARE NOT USED. C IF(IP19.NE.0.OR.IP21.NE.0.OR.IOPT(1).NE.0)THEN C ANY TIME THERE IS A SUBSET AREA, THE DEGREE OF FIT IS C COMPUTED. C IF(IP19.NE.0)THEN WRITE(IP19,2755)(JDATE(J),J=1,4),LP,TITLE(1:16),MESH 2755 FORMAT(/' FOR DATE',I6,3I3.2,' VALUES AT END OF BCD5 PASS', 1 ' NO.',I3,' (SMOOTHED) FOR ',A16, 2 ' FOR MESH LENGTH =',I4/ 3 ' ONLY BASE STATIONS WITH LTAG = 0 OR -1 ARE PRINTED;', 4 ' THOSE PERMANENTLY DISCARDED ARE NOT PRINTED.', 5 ' BB IS THE ANALYSIS VALUE.'/ 6 ' STATIONS WITH NO DIFFERENCES ARE OUTSIDE THE GRID'/ 7 ' NO. STATION XPOS YPOS DATA', 8 ' BB DIF LTAG QUALST') ENDIF C SUM=0. NSUM=0 C SUM AND NSUM ARE FOR SUMMING THE DIFFERENCES BETWEEN THE C INTERPOLATED VALUES AND THE OBSERVATIONS FOR ALL C OBSERVATIONS WITHIN THE GRID. SUMGR=0. NSUMGR=0 C SUMGR AND NSUMGR ARE FOR SUMMING THE DIFFERENCES C BETWEEN THE INTERPOLATED VALUES AND THE OBSERVATIONS C FOR ALL OBSERVATIONS WITHIN THE SUBSETTED AREA ONLY. C DO 2757 M=1,3 DIFMAX(M)=0. STAMAX(M)=' ' NAMMAX(M)=' ' C DIFMAX( ) IS FOR COLLECTING THE THREE LARGEST C DIFFERENCES; STAMAX( ) AND NAMMAX ARE FOR THE ASSOCIATED C STATIONS CALL LETTERS AND NAMES, RESPECTIVELY. 2757 CONTINUE C XNX=NX YNY=NY C DO 278 K=1,NSTA C IF(LTAG(K).GE.1)GO TO 278 C ONLY STATIONS NOT TOSSED ON THE LAST PASS ARE USED. C IF(ILS.NE.0.AND.LNDSEA(K).LE.3)GO TO 278 C THIS TEST PUT IN TO VERIFY ONLY LAND STATIONS WHEN THE C LAND AND WATER ARE SEPARATED IN THE ANALYSIS. C C THE BELOW TEST PUT IN TO VERIFY ONLY BASE STATIONS, NOT C ANY BOGUS OR AUGMENTED ONES. NORMALLY, BASE STATIONS ARE C INDICATED BY 0 IN LTAGPT( ), BUT THIS IS NOT THE CASE C FOR TOTAL WIND, SO MTAGPT( ) FROM WIND SPEED IS USED. IF(LAMPNO.EQ.20)THEN IF(MTAGPT(K).GT.0)GO TO 278 ELSE IF(LTAGPT(K).GT.0)GO TO 278 ENDIF C IF(QUALST(K).LE..99)GO TO 278 C ABOVE ADDED 1/4/16. OMITS MESONET STATIONS WHEN USED C WITH REDUCED WEIGHT. C C FIND INTERPOLATED VALUE OR NEAREST NEIGHBOR VALUE IN C ITRPSL ACCORDING TO THE LAND/WATER TYPE LNDSEA(K). C CALL ITRPSX(KFILDO,IP14,P,NX,NY, 1 CCALL(K),XDATA(K),XLAPSE(K),ELEV(K),XP(K),YP(K), 2 LNDSEA(K),SEALND,TELEV,NXE,NYE, 3 IBKPN,ELCORR(LP),ELCORU(LP), 4 MESH,MESHE,N4P,BB,ISTOP,IER) C VALUE INTERPOLATED FROM CURRENT ANALYSIS OR FIRST C GUESS TO LOCATION OF STATION IS NOW IN BB. THIS CAN BE C MISSING BECAUSE AN INTERPOLATED VALUE FOR A LAND (WATER) C STATION IS ONLY TAKEN FROM LAND (WATER) STATIONS, AND IT IS C POSSIBLE NONE EXISTS. ALSO, THE FIRST GUESS ANALYSIS AREA C MAY NOT FILL GRID. IN THIS CASE, IER NE 0. C IF(IER.NE.0)THEN IF(IER.EQ.195)ISTOP(1)=ISTOP(1)+1 C A **** IER = 195 ERROR IN ITRPSL MEANS AN ERROR IN THE C STATION TABLE CONCERNING LAND/WATER POINT DESIGNATIONS. C A #### IER = 196 ERROR MEANS GRID POINTS OF NECESSARY C TYPE ARE NOT AVAILABLE, AND IS NOT COUNTED AS AN ERROR. IER=0 GO TO 277 ENDIF C IF(XP(K).LT.1..OR.XP(K).GT.XNX)GO TO 277 IF(YP(K).LT.1..OR.YP(K).GT.YNY)GO TO 277 DIF=BB-XDATA(K) ADIF=ABS(DIF) IF(LTAG(K).EQ.-1)GO TO 276 C CCCC IF(CCALL(K).EQ.'PAGM ')THEN CCCC WRITE(KFILDO,1234)CCALL(K),XDATA(K),BB,ADIF CCCC 1234 FORMAT(/' AT 1234 IN BCD5--CCALL(K),XDATA(K),BB,ADIF ', CCCC 1 A8,3F10.3) CCCC ENDIF C SUM=SUM+ADIF NSUM=NSUM+1 C C WHEN IOPT(1) = 0, THERE IS NO SUBSET AREA, SO DO NO C CALCULATIONS FOR IT. C IF(IOPT(1).NE.0)THEN C IF(XP(K).LE.IOPTGR(3).AND. 1 XP(K).GE.IOPTGR(2).AND. 2 YP(K).LE.IOPTGR(5).AND. 3 YP(K).GE.IOPTGR(4))THEN NSUMGR=NSUMGR+1 SUMGR=SUMGR+ADIF C IF(ADIF.GT.DIFMAX(1))THEN DIFMAX(3)=DIFMAX(2) STAMAX(3)=STAMAX(2) NAMMAX(3)=NAMMAX(2) DIFMAX(2)=DIFMAX(1) STAMAX(2)=STAMAX(1) NAMMAX(2)=NAMMAX(1) DIFMAX(1)=ADIF STAMAX(1)=CCALL(K) NAMMAX(1)=NAME(K) ELSEIF(ADIF.GT.DIFMAX(2))THEN DIFMAX(3)=DIFMAX(2) STAMAX(3)=STAMAX(2) NAMMAX(3)=NAMMAX(2) DIFMAX(2)=ADIF STAMAX(2)=CCALL(K) NAMMAX(2)=NAME(K) ELSEIF(ADIF.GT.DIFMAX(3))THEN DIFMAX(3)=ADIF STAMAX(3)=CCALL(K) NAMMAX(3)=NAME(K) ENDIF C ENDIF C ENDIF C C***D WRITE(KFILDO,2758)K,CCALL(K),XP(K),YP(K), C***D 1 IOPTGR(3),IOPTGR(2), C***D 2 IOPTGR(5),IOPTGR(4),NSUMGR,SUMGR C***D2758 FORMAT(' IN BCD5 AT 2758--K,CCALL(K),XP(K),YP(K),', C***D 1 'IOPTGR(3,2,5,4),', C***D 2 'NSUMGR,SUMGR',I5,1X,A6,2F7.2,4F6.0,I5,F8.2) C 276 IF(IP19.NE.0)THEN WRITE(IP19,260)K,CCALL(K),XP(K),YP(K),XDATA(K),BB,DIF, 1 LTAG(K),QUALST(K) GO TO 278 ENDIF C 277 IF(IP19.NE.0)THEN WRITE(IP19,262)K,CCALL(K),XP(K),YP(K),XDATA(K),BB,LTAG(K), 1 QUALST(K) ENDIF C 278 CONTINUE C AVG=9999. IF(NSUM.NE.0)AVG=SUM/NSUM C IF(IP21.NE.0)THEN WRITE(IP21,2785)(JDATE(J),J=1,4),NSUM,LP,TITLE(1:16),AVG 2785 FORMAT(' FOR DATE',I6,3I3.2,' MEAN ABS DIFF OF',I6, 1 ' VALUES USED WITHIN THE GRID', 2 ' ON PASS NO.',I2,' FOR ',A16,' =',F7.3, 3 ' (SMOOTHED)') ENDIF C C COMPUTE AND PRINT THE AVERAGE DIFFERENCE BETWEEN THE DATA C AND THE CURRENT SMOOTHED ANALYSIS OVER THE SUBSETTED AREA. C IF(IOPT(1).NE.0)THEN C IF(NSUMGR.EQ.0)THEN AVGGR=9999. ELSE AVGGR=SUMGR/NSUMGR ENDIF C IF(IP20.NE.0)THEN WRITE(IP20,2787) 1 (JDATE(J),J=1,4),NSUMGR,LP,TITLE(1:16),AVGGR, 2 (STAMAX(M),NAMMAX(M),DIFMAX(M),M=3,1,-1) 2787 FORMAT(/' FOR DATE',I6,3I3.2,' MEAN ABS DIFF OF',I6, 1 ' VALUES USED IN SUBSET AREA ', 2 ' ON PASS NO.',I2,' FOR ',A16,' =',F7.3, 3 ' (SMOOTHED)',/, 4 4X,'BIG DIFFERENCES = ',A8,A20,F7.3,', ', 5 A8,A20,F7.3,', ', 6 A8,A20,F7.3) ENDIF C IF(I405ADG.NE.0)THEN C IF(IP20.NE.KFILDO)THEN WRITE(KFILDO,2787) 1 (JDATE(J),J=1,4),NSUMGR,LP,TITLE(1:16),AVGGR, 2 (STAMAX(M),NAMMAX(M),DIFMAX(M),M=3,1,-1) ENDIF C ENDIF C ELSE C THERE IS NOT A SUBSET AREA. AVGGR=AVG NSUMGR=NSUM C AVGGR AND NSUMGR ARE PRINTED AT THE BOTTOM OF THE C GRIDPRINTED MAP. IF THERE IS NO SUBSETTED AREA, THE C WHOLE AREA MAY BE PRINTED. THEREFORE, SET AVGGR TO C AVG AND NSUMGR TO NSUM. ENDIF C ENDIF C C PREPARE SMOOTHED MAPS FOR GRIDPRINTING AND OR C WRITING IN TDLPACK, IF DESIRED. C IF(JPRT(LP).NE.0.AND.IP22.NE.0.AND.JP(1).NE.0)GO TO 2790 IF(JTDL(LP).NE.0.AND.KFILOG.NE.0.AND.JP(2).NE.0)GO TO 2790 GO TO 290 C C TO PROCEED BELOW, EITHER JPRT(LP) AND JP(1) C INDICATE GRIDPRINTING OR JTDL(LP) AND JP(2) INDICATE C PACKING AND THERE IS A NONZERO UNIT NUMBER TO WRITE TO. C 2790 NXG=NX NYG=NY MESHG=MESH C NXG, ETC. ARE NECESSARY BECAUSE SZGRDM CHANGE THEM, AND C NX, ETC. MUST BE RETAINED. CALL TRNSFR(P,FD2,NX*NY) C D WRITE(KFILDO,2791)NX,NY D2791 FORMAT(/' CALLING SZGRDM AT 2791--NX,NY',2I6) C CALL SZGRDM(KFILDO,FD2,NXG,NYG, 1 MESHG,MESHL,ITRPLQ(LP),ND2X3) C SZGIRD PUTS THE GRID IN FD2( ) AT SUBSET MESH LENGTH MESHL. C IOPT( ) IS IN RELATION TO THAT MESH LENGTH. C C GRIDPRINT SMOOTHED FIELD IF DESIRED. C IF(JPRT(LP).EQ.0.OR.IP22.EQ.0.OR.JP(1).EQ.0)GO TO 2793 TITLE(17:24)=SMTH(1:8) CALL PRTGR(IP22,FD2,NXG,NYG, 1 CINT(LP),ORIGIN(LP),SMULT(LP),SADD(LP),IOPT,TITLE,IER) IF(IER.NE.0)ISTOP(1)=ISTOP(1)+1 C A NON-ZERO IER IS NOT CONSIDERED FATAL. C C AT THE BOTTOM OF THE MAP, BELOW THE TITLE, PRINT C THE PASS NUMBER LP, NTYPE( ), R( ), B( ), AND ER1( ). C IT IS EXPECTED THAT 4 PASSES WILL USUALLY BE USED C AND ALL THOSE VALUES ARE PRINTED. HOWEVER, IF NPASS C IS GT 4, IT IS ACCOMMODATED. THE NUMBER OF VALUES WITHIN C THE GRIDPRINTED AREA AND THE AVERAGE ABSOLUTE DIFFERENCE C ARE ALSO PRINTED. C IF(NPASS.LE.4)THEN WRITE(IP22,2648)LP,(NTYPE(J),J=1,4),(R(J),J=1,4), 1 (MSHPAS(J),J=1,4),NSMTYP,(B(J),J=1,4), 2 (ER1(J),J=1,4), 3 (ITRPLQ(J),J=1,4),NSUMGR,AVGGR C IF(IVRBL.EQ.1)THEN WRITE(IP22,2649)(WNDWT(J),J=1,4),WNDTHR,WNDTRN,WNDGRD ENDIF C ELSEIF(NPASS.EQ.5)THEN WRITE(IP22,265)LP,(NTYPE(J),J=1,5),(R(J),J=1,5), 1 (MSHPAS(J),J=1,5),NSMTYP,(B(J),J=1,5), 2 (ER1(J),J=1,5), 3 (ITRPLQ(J),J=1,5),NSUMGR C IF(IVRBL.EQ.1)THEN WRITE(IP22,2650)(WNDWT(J),J=1,5),WNDTHR,WNDTRN,WNDGRD,AVGGR ENDIF C WRITE(IP22,2651)CINT(LP),ORIGIN(LP),SMULT(LP),SADD(LP) ELSE WRITE(IP22,2652)LP,(NTYPE(J),J=1,6),(R(J),J=1,6), 1 (MSHPAS(J),J=1,6),(B(J),J=1,6),(ER1(J),J=1,6), 2 (ITRPLQ(J),J=1,6),NSUMGR,AVGGR ENDIF C IF(NPASS.NE.5)THEN WRITE(IP22,2653)CINT(LP),ORIGIN(LP),SMULT(LP),SADD(LP) ENDIF C C TDLPACK AND WRITE SMOOTHED FIELD IF DESIRED FOR THE C SUBSET AREA. WHEN IOPT(1) = 0, THERE IS NO SUBSET AREA. C 2793 IF(JTDL(LP).EQ.0.OR.KFILOG.EQ.0.OR.JP(2).EQ.0. 1 OR.IOPT(1).EQ.0)GO TO 290 LD(1)=ID(1) LD(2)=LP*10000+IDPARS(7) C THE LLLL IN ID(2) IS USED FOR THE PASS NUMBER. C IDPARS(7) MAINTAINS THE LEVEL. LD(3)=ID(3) LD(4)=(ID(4)/1000)*1000+010 C THIS IS THE SMOOTHED ANALYSIS; S IN ID(4) = 010. ITAUH=IDPARS(12) ITAUM=0 NSEQ=0 NCHAR=32 C 32 CHARACTERS OF PLAIN LANGUAGE ARE PACKED. XMISSP=0 XMISSS=0 C THESE ARE ANALYSES AND NO MISSING VALUES ARE PROVIDED FOR. C IF THERE EVER ARE, JUST SET XMISSP=9999, OR WHATEVER THE C MISSING VALUE IS. C C THE GRID IN FD2( ) IS ALWAYS AT MESH LENGTH MESHL AS A C RESULT OF SZGRDM, WHICH IS WHAT IS WANTED FOR THE C DISPOSABLE GRID. NOW CUT THE GRID TO THE DISPOSABLE C AREA. IOPT( ) IS IN RELATION TO MESHL, WHICH IS THE C MESH LENGTH OF FD2( ). C NXD=IOPT(3)-IOPT(2)+1 NYD=IOPT(5)-IOPT(4)+1 NXOFF=IOPTGR(2)-1 NYOFF=IOPTGR(4)-1 C NXOFF AND NYOFF ARE THE DIFFERENCES IN THE (1,1) POINT C OF THE ANALYSIS AND SUBSETTED GRIDS AT THE CURRENT MESH C LENGTH MESH. THERE IS NO NEED TO CALL CUTIT IF THE INPUT C AND OUTPUT GRIDS ARE THE SAME. NXG AND NYG ARE THE C DIMENSIONS OF THE GRID IN FD2( ) AT MESH LENGTH MESHL. C IF(NXOFF.NE.0.OR.NYOFF.NE.0.OR.NXG.NE.NXD.OR.NYG.NE.NYD)THEN CALL CUTIT(KFILDO,FD2,NXG,NYG,NXOFF,NYOFF, 1 FD2,NXD,NYD,IER) ENDIF C IF(IER.NE.0)THEN ISTOP(1)=ISTOP(1)+1 JER=JER+1 WRITE(KFILDO,2795)(LD(J),J=1,4),PLAIN,NDATE 2795 FORMAT(' NOT WRITING SMOOTHED ANALYSIS ',3(1X,I9.9), 1 1X,I10.3,' ',A32,' FOR DATE',I12,/, 2 ' TO UNIT NO. KFILOG.') GO TO 290 ENDIF C CALL ACTUAL(KFILDO,MESHL,XMESHL,TRASH,NPROJ,IER) C XMESHL IS THE ACTUAL MESH LENGTH IN KM. C IF(IER.NE.0)THEN WRITE(KFILDO,2656)IER ISTOP(1)=ISTOP(1)+1 KER=KER+1 GO TO 400 ENDIF C IF(NPROJ.EQ.3)THEN CALL LMIJLL(KFILDO,FLOAT(IOPT(2)),FLOAT(IOPT(4)), 1 XMESHL*1000.,ORIENT,XLAT, 2 ALATL,ALONL,ALATD,ALOND,IER) C IF(IER.NE.0)THEN WRITE(KFILDO,2796)IER 2796 FORMAT(/' FATAL ERROR IN LMIJLL FROM BCD5 AT 2796,', 1 ' IER =',I4) ISTOP(1)=ISTOP(1)+1 KER=KER+1 GO TO 400 ENDIF C ELSEIF(NPROJ.EQ.5)THEN CALL PSIJLL(KFILDO,FLOAT(IOPT(2)),FLOAT(IOPT(4)), 1 XMESHL*1000.,ORIENT,XLAT, 2 ALATL,ALONL,ALATD,ALOND) ELSEIF(NPROJ.EQ.7)THEN CALL MCIJLL(KFILDO,FLOAT(IOPT(2)),FLOAT(IOPT(4)), 1 XMESHL*1000.,XLAT, 2 ALATL,ALONL,ALATD,ALOND) ELSE WRITE(KFILDO,2797)NPROJ 2797 FORMAT(/' ****MAP PROJECTION NUMBER NPROJ =',I3, 1 ' NOT 3, 5, OR 7. FATAL ERROR IN BCD5 AT 2797.') ISTOP(1)=ISTOP(1)+1 KER=KER+1 GO TO 400 ENDIF C C ALATD AND ALOND ARE THE LL LAT/LON GRID POSITION. C TRUNCATE TO THREE DECIMAL PLACES TO ASSURE C COMPATIBILITY WITH AVN ARCHIVE AND OTHER PROGRAMS. ALATD=NINT(ALATD*1000)/1000. ALOND=NINT(ALOND*1000)/1000. C C PAWGTS PACKS AND WRITES THE SMOOTHED DATA TO A C GRIDPOINT FILE. BUT FIRST POSTPROCESS IF DESIRED. C THE OUTPUT GRIDS FROM BCD5 ARE AT THE CURRENT MESH LENGTH C MESH. WHEN A GRID HAS BEEN CLIPPED TO A LARGER MESH C LENGTH IN FSTGS5 THAN MESH, THE AREA COVERED WITH C NON-MISSING DATA MAY BE SLIGHTLY GRATER THAN THE DESIRED C AREA AT MESH LENGTH MESH. C CALL TRNSFR(FD2,COUNT,NXD*NYD) C DATA IN FD2( ) ARE TRANSFERRED TO COUNT( ) SO THIS C ARCHIVE OUTPUT POSTPROCESSING DOES NOT MODIFY THE C DATA. C C POSTPROCESS IF NEEDED. THREE ROUTINES ARE AVAILABLE. C DO 2798 NN=1,NOPROD C IF(POSTDS(NN).NE.' ')THEN C IF(POSTDS(NN).EQ.'POST ')THEN CALL POST(KFILDO,COUNT,NXD*NYD, 1 TLOD(NN),SETLOD(NN),THID(NN),SETHID(NN), 2 CONSTD(NN),NSCALD(NN),EX1D(NN),EX2D(NN),IER) C THERE IS NO NONZERO IER RETURN. C IF A POSTPROCESSING ROUTINE OTHER THAN POST IS C NEEDED, PUT CHECK AND CALL HERE. C ELSEIF(POSTDS(NN).EQ.'CIGFT ')THEN CALL CIGFT(KFILDO,COUNT,NXD*NYD, 1 TLOD(NN),SETLOD(NN),THID(NN),SETHID(NN), 2 CONSTD(NN),NSCALD(NN),EX1D(NN),EX2D(NN),IER) C THERE IS NO NONZERO IER RETURN. C THIS IS TO CHANGE LAMP CEILING HEIGHT IN CATEGORIES C TO HUNDREDS OF FT. ELSE WRITE(KFILDO,270)POSTDS(NN) ISTOP(1)=ISTOP(1)+1 ENDIF C ENDIF C 2798 CONTINUE C IF(ISQ.EQ.1)THEN C DO 2799 IXY=1,ND2X3 C IF(COUNT(IXY).LT.9998.5)THEN COUNT(IXY)=COUNT(IXY)*COUNT(IXY) ENDIF C 2799 CONTINUE C ENDIF C CALL PAWGTS(KFILDO,KFILOG,'KFILOG',IP16,NDATE, 1 LD,ITAUH,ITAUM,MODNO,NSEQ,ISCALD, 2 NPROJ,ALATD,ALOND,ORIENT,MESHL,XLAT,NXD,NYD, 3 COUNT,NCOUNT,IWORK,IPACK,ND2X3,MINPK, 4 IS0,IS1,IS2,IS4,ND7, 5 IPLAIN,PLAIN,NCHAR, 6 XMISSP,XMISSS,LX,IOCTET, 7 JTOTBY,JTOTRC,L3264B,L3264W,IER) C IF(IER.NE.0)THEN ISTOP(1)=ISTOP(1)+1 KER=KER+1 ENDIF C C THIS IS THE END OF THE DISPOSABLE AND GRIDPRINT OUTPUT C FOR SMOOTHED GRIDS. C 290 CONTINUE C IF(NREPNO.GT.0)THEN C A REPEAT MAY BE NECESSARY. C IF(LTOSS(1).GT.0.OR.LTOSS(2).GT.0)THEN C ONE OR MORE STATIONS HAVE BEEN TOSSED ON THIS PASS. NOTOSS(1)=NOTOSS(1)+LTOSS(1) NOTOSS(2)=NOTOSS(2)+LTOSS(2) LTOSS(1)=0 LTOSS(2)=0 C IF(LPP.LT.NREPNO)THEN C IF ANOTHER PASS IS DONE, START WITH THE ANALYSIS C PREVIOUS TO THE REPEAT PASS. SET LTAG( ) FOR C THE TOSSED STATIONS TO +4 SO THEY WON'T BE USED. C IF THIS IS THE LAST REPEAT PASS, THE LTAG( ) C VALUES CAN BE LEFT -1 AS THEY WILL BE TAKEN C CARE OF LATER, JUST AS THEY WERE BEFORE THE C REPEAT OPTION WAS ADDED. C WRITE(KFILDO,294) 294 FORMAT(/' RESTORING P( , ) FROM FD6( , ).') C DO 295 J=1,NX*NY P(J)=FD6(J) 295 CONTINUE C DO 296 K=1,NSTA C IF(LTAG(K).EQ.-1)THEN C A STATION DISCARDED ON THIS PASS WILL NOT BE C USED ON THE NEXT PASS, NOR ON ANY DOWNSTREAM C ANALYSIS. THE VALUE 4 IS DEALT WITH IN C AUGMT2. LTAG(K)=4 XDATA(K)=9999. ENDIF C 296 CONTINUE C ENDIF C ELSE GO TO 350 ENDIF C ELSE NOTOSS(1)=NOTOSS(1)+LTOSS(1) NOTOSS(2)=NOTOSS(2)+LTOSS(2) ENDIF C LREPNO=LREPNO+1 NSTA=NSTASV C BOGUSG, IF CALLED, INCREASES NSTA; IT MUST BE RESET. C 300 CONTINUE C C WHEN ANALYZING THE SQUARE ROOT OF AN ELEMENT, BEFORE RETURN, C TRANXFER DATA BACK INTO XDTA( ) AND SQUARE THE ANALLYSIS. C IF(ISQ.EQ.1)THEN CALL TRNSFR(XDATSV,XDATA,NSTA) C DO 305 IXY=1,ND2X3 C IF(P(IXY).LT.9998.5)THEN P(IXY)=P(IXY)*P(IXY) ENDIF C 305 CONTINUE C ENDIF C C WHEN DESIRED, PUT EACH STATION VALUE AT THE NEAREST GRIDPOINT, C PROVIDED A CLOSER STATION TO THE GRIDPOINT DOES NOT EXIST. C THIS IS DONE HERE IF IT IS (1) THE LAST PASS, (2) SMOOTHING C IS DONE, AND (3) ISETP NE 0. ONLY THE ORIGINAL C (BASE) STATIONS ARE USED IN SETTING GRIDPOINT VALUES C IN SETPNT. NOTE THAT IF SCALING ON THE ORIGINAL VALUES C HAS BEEN DONE, THEN IT IS THESE SCALED VALUES THAT ARE C USED. THE SCALED VALUE WILL, WHEN TRUNCATED TO AN INTEGER, C HAVE THE ORIGINAL INTEGER VALUE. C C THE 4 POINTS AROUND A STATION MAY HAVE BEEN SET TO THE C STATION VALUE BY SETGPT, BUT SETPNT IS LEFT HERE FOR SAFETY. C IS VERY FAST AND ASSURES THE CLOSEST GRIDPOINT HAS THE C STATION VALUE. C 350 IF(ISETP.NE.0)THEN C C************************************************************** CCCC WRITE(KFILDO,351)LP,B(LP),ISETP, CCCC 1 (KKK,CCALL(KKK),LTAG(KKK),LTAGPT(KKK),KKK=1,NBASTA) CCCC 351 FORMAT(/' AT 9876--LP,B(LP),ISETP,', CCCC 1 '(KKK,CCALL(KKK),LTAG(KKK),LTAGPT(KKK),KKK=1,NBASTA)', CCCC 2 /,I6,F6.1,I6,/,(I6,2X,A8,2I4)) C************************************************************** C IF(LAMPNO.EQ.20)THEN C NORMALLY LTAGPT IS FURNISHED TO ONLY SET POINTS C FOR BASE STATIONS, BUT FOR LAMP TW THIS INCLUDES ALL C SPEED AUGMENTED STATIONS, SO MTAGPT IS FURNISHED C WHICH WAS SAVED FROM SPEED. CALL SETPNT(KFILDO,CCALL,NAME,XDATA,LTAG,MTAGPT,LNDSEA, 1 XP,YP,NBASTA, 2 P,FD2,NX,NY,MESH,SEALND,NXE,NYE,MESHE, 3 ISETP,IER) C ONLY NON-BOGUSG POINTS ARE CONSIDERED IN SETPNT. C IER NE 0 WHEN ISETP NOT IN CORRECT RANGE. THIS IS A C NON-FATAL ERROR. C IF(IER.NE.0)THEN ISTOP(1)=ISTOP(1)+1 KER=KER+1 IER=0 ENDIF ELSE CALL SETPNT(KFILDO,CCALL,NAME,XDATA,LTAG,LTAGPT,LNDSEA, 1 XP,YP,NBASTA, 2 P,FD2,NX,NY,MESH,SEALND,NXE,NYE,MESHE, 3 ISETP,IER) C ONLY NON-BOGUSG POINTS ARE CONSIDERED IN SETPNT. C IER NE 0 WHEN ISETP NOT IN CORRECT RANGE. THIS IS A C NON-FATAL ERROR. C IF(IER.NE.0)THEN ISTOP(1)=ISTOP(1)+1 KER=KER+1 IER=0 ENDIF C ENDIF C ENDIF C 400 IER=KER C IER RETURNS THE NUMBER OF ERRORS IN BCD5. IVRAD=IVRADS C C ANALYSIS DONE AND PRINTED. C BCD5 DOES NOT RETURN A NON-ZERO ERROR. C CCCC WRITE(IP14,431)(K,CCALL(K),XDATA(K),LTAG(K),LTAGPT(K),MTAGPT(K), CCCC 1 XLAPSE(K),QUALST(K),K=1,NBASTA) CCCC 431 FORMAT(' AT 431(K,CCALL(K),XDATA(K),LTAG(K),LTAGPT(K),MTAGPT(K),', CCCC 1 'XLAPSE(K),QUALST(K),K=1,NBASTA)', CCCC 2 I6,1X,A8,F8.2,3I5,F8.4,F7.1) C ONLY NON-BOGUSG STATIONS ARE PRINTED. WRITE(KFILDO,435)(ID(J),J=1,4),PLAIN, 1 NOTOSS(1)-NOTSAV(1),NOTOSS(2)-NOTSAV(2), 2 NOTOSS(1),NOTOSS(2) 435 FORMAT(/,' DATA VALUES TOSSED ON THE LAST PASS ON THIS ANALYSIS', 1 ' OF ',3I10.9,I10.3,3X,A32/ 2 ' THIS ANALYSIS TOTAL =',I5,' BASE =',I5, 3 ' (BASE STATIONS ARE THOSE NOT BOGUS OR AUGMENTED.)'/ 4 ' RUNNING TOTAL =',I5,' BASE =',I5/) C CCCC CALL PRNTXX(KFILDO,CCALL,XDATA,ELEV,NSTA,P,TELEV,NX,NY) C CALL TIMPR(KFILDO,KFILDO,'END BCD5 ') RETURN END