SUBROUTINE LAPSE(KFILDO,KFILLP,IP14,CCALL,NAME,LNDSEA,ELEV, 1 NOPAR,LOCPAR,XDATA,XLAPSE,MPAIRS, 2 LTAGPT,NSTA,ND1, 3 NXL,NYL,XPL,YPL,R,XP,YP, 4 ELCORR,NPASS,WTRUNL,NORUNS,LEVELS, 5 IALOC,ADIST,AELEV,ND13,EXCLUD,NAREA, 6 SEALND,TELEV,NXE,NYE,MESHE,P,NX,NY,MESH, 7 ID,IBKPN,LPNO,LAPFG,MGUESS,N4P,ISTOP,IER) C C MAY 2005 GLAHN MDL MOS-2000 C MAY 2005 GLAHN ADDED IP14 FOR COMPUTED LAPSE RATES C ADDED ELEV( ) TO CALL C MAY 2005 GLAHN CHANGED COMPUTATION OF LAPSE C JUNE 2005 GLAHN MODS TO OUTPUT PRINT C JUNE 2005 GLAHN ADDED PRINT OF ACTUAL PAIRS USED C JUNE 2005 GLAHN MODIFIED TO WRITE LAPSE RATES ONLY C ONCE C JULY 2005 GLAHN MODIFIED DIAGNOSTIC PRINT C AUGUST 2005 GLAHN MODIFIED PRINT AT 210 C AUGUST 2005 GLAHN MODIFIED USE OF LNDSEA( ) C AUGUST 2005 GLAHN INSERTED IF(IALOC(J).EQ.999999) C TEST IN DO 195 LOOP C SEPTEMBER 2005 GLAHN REVISED DIAGNOSTICS C OCTOBER 2005 GLAHN ADDED KFILLP TO CALL AND WHEN = 0, C SET XLAPSE( ) = 0 C OCTOBER 2005 GLAHN ADDED NBOTH C OCTOBER 2005 GLAHN ADDED ELCORR( ) AND NPASS TO CALL C MARCH 2006 GLAHN ADDED MPAIRS( ) TO CALL C APRIL 2006 GLAHN ADDED NORUNS WTRUNL( ); INCREASED C XDATA(NSTA) TO XDATA(ND1,6) C APRIL 2006 GLAHN ADDED SUMLPS, SQLPS, NTOTAL, AVGLPS, C SDLPS C APRIL 2006 GLAHN MADE SUMLPS, SQLPS, AVGLPS, AND SDLPS C REAL*8 C APRIL 2006 GLAHN CHECKED IP14 NE 0 BEFORE WRITING C JUNE 2006 GLAHN ADDED IBKPN TO CALL C SEPTEMBER 2006 GLAHN ADDED LPNO TO CALL AND ITS CAPABILITY; C ADDED KZERO, KMINUS, KPLUS C NOVEMBER 2006 GLAHN CHANGED ELSEIF(NOPAR(K).EQ.9999) TO C ELSEIF(NOPAR(K).EQ.999999) ABOVE 123; C CHANGED IF(NOPAR((K)).EQ.9999)THEN C TO IF(NOPAR((K)).EQ.999999) AT DO 215; C ADDED XLAPSE(K)=0. BELOW 1985 C NOVEMBER 2006 GLAHN MODIFIED TO ACCOMMODATE LAPSE FROM C FIRST GUESS. C NOVEMBER 2006 GLAHN CHANGED ELSEIF(NOPAR(K).EQ.999999) TO C ELSEIF(NOPAR(K).EQ.9999) ABOVE 123; C CHANGED IF(NOPAR((K)).EQ.999999)THEN C TO IF(NOPAR((K)).EQ.9999) AT DO 215 C DECEMBER 2006 GLAHN ADDED HMINUS, HPLUS; MOVED PRINT C SECTION BELOW DO 195; SET XLAPSE( ) C = 0. BELOW 117; ADDED NINT TO CHECK ON C 9999 2 PLACES BELOW DO 194 C FEBRUARY 2007 GLAHN CHECK ON IBKPN AND KFILLP AT 103 C MAY 2007 GLAHN CORRECTED WRITE TO FORMAT 1985 C JUNE 2007 GLAHN MODIFIED FOR PROBABILITY LEVELS C JULY 2007 GLAHN CORRECTED HMIMUS TO HMINUS IN WRITE C SEPTEMBER 2007 GLAHN ADDED DIAGNOSTIC D1170 C NOVEMBER 2007 GLAHN REMOVED COMMENT ABOUT MGUESS NOT BEING C KNOWN ABOVE DO 110 LOOP; SPELLING C DECEMBER 2007 GLAHN ADDED ISTOP(6) CAPABILITY; SPELL CHECK C JANUARY 2008 COSGROVE CHANGED FORMAT 207 BECAUSE C IT WAS 73 CHARACTERS. FOR IBM COMPILE. C AUGUST 2008 GLAHN CHECKED FOR LAPFG = 0 OR 1; COMMENTS C SEPTEMBER 2008 GLAHN CHANGED ELSEIF(LAPFG.EQ.2)THEN TO C ELSEIF(LAPFG.EQ.1)THEN C NOVEMBER 2009 GLAHN ADDED LLMT TO CALL C APRIL 2010 GLAHN CHANGED PRINTING TO IP14 FROM FIRST TO C FIRST AND SECOND ENTRIES C MARCH 2011 GLAHN ELIMINATED LLMT AND ADDED ID( ) TO C CALL, COMMENTS, MINOR CHANGE TO 205 C MARCH 2011 GLAHN ADDED EXCLUD TO CALL C MARCH 2011 GLAHN MOVED SETTING LLMT UP BEFORE LLMTTS; C REINSTATED DATA STATEMENT FOR LPNO C AUGUST 2011 GLAHN /D ON STATEMENT 100 C MAY 2015 GLAHN CHANGED MAX LAPSE FOR CIG FROM 3.28 C TO .0328; ADDED ILAP C JUNE 2015 GLAHN ADDED LAPFG = 5 CAPABILITY C MAY 2018 GLAHN CHANGED 7280000 (OBS CIG) AND 7281000 C (OBS VIS) TO 708000 AND 7081000 IN C TESTS TO SET MAX/MIN LAPSE; ADDED C DIAGNOSTICS FOR HI/LO LAPSE; ADDED C DIAGNOSTICS FOR INCONSISTENT SETTINGS C AND RETURNED IER = 777 TO TRIGGER A C MAJOR ERROR. C MAY 2018 GLAHN SET ILAP = 1 FOR LAMP VCST VIS PROBS C DECEMBER 2018 GLAHN INSERTED TEST ON 22808000 AT 196 C ADDED LTAGPT( ) TO CALL C APRIL 2019 GLAHN ADDED (ID(1)/100).EQ.2280602 TO LIMIT C LAPSE FOR ALASKA CIG PROB BELOW 999 C C PURPOSE C TO COMPUTE A LAPSE RATE FOR EACH STATION OF THE VARIABLE C BEING ANALYZED. EACH STATION HAS A LIST OF STATIONS, EACH C OF WHICH IT USES AS A PAIR IN COMPUTING THE LAPSE RATE C IN UNITS OF THE VARIABLE BEING ANALYZED PER METER. C THE LISTS OF STATIONS HAVE BEEN COMPUTED BY U174. C THE LAPSE RATES ARE COMPUTED BY SUMMING THE VARIABLE C DIFFERENCES (BASE - PAIR) AND THE ELEVATION C DIFFERENCES (TOP - BOTTOM = ABSOLUTE VALUE OF DIFFERENCE), C AND DIVIDING. THE ELEVATION DIFFERENCES ARE IN AELEV( ). C NOTE THIS IS NOT COMPUTING EACH LAPSE RATE AND AVERAGING; C IF THAT WERE TO BE DONE, AN AVERAGE WEIGHTED BY THE C INDIVIDUAL DISTANCES WOULD BE APPROPRIATE. OF THE LIST C OF PAIRS, ONLY LPNO*NORUNS ARE USED. C C LAPSE COMPUTATION IS: SUM OF ELEMENT VALUE OF THE C STATION AT THE HIGHEST ELEVATION MINUS ITS LOWER PAIR C DIVIDED BY THE SUM OF THE HIGHER HEIGHT OF THE TWO C MINUS THE LOWER HEIGHT (THIS LATTER IS JUST THE C ABSOLUTE VALUE OF THE DIFFERENCE). C C ADIST( ) IS NOT USED. PROBABLY CAN'T AFFORD TO LET ONE C PAIR AFFECT THE LAPSE TOO MUCH. C C XDATA( ,L,J) CAN HOLD UP TO 5 SETS OF VALUES, EACH FROM C A DIFFERENT MODEL RUN (VERIFYING AT THE SAME TIME) C (L=2,6) AND UP TO J PROBABILITY LEVELS. C EACH VALUE IS USED IN COMPUTING THE LAPSE. C A VALUE COULD BE MISSING FOR ONE RUN AND NOT ANOTHER. C ALL CYCLES AND PROBABILITY LEVELS ARE USED IN COMPUTING C THE LAPSE TO PUT INTO XDATA( ,1,1) FOR ANALYSIS. C C WTRUNL( ) IS NOT CURRENTLY USED IN COMPUTING THE LAPSE C RATE. THIS IS FOR EFFICIENCY. IF ONLY ONE RUN IS USED, C OR THE WEIGHTS ARE ALL THE SAME, USING THE WTRUN( ) C WOULDN'T MATTER. IT WOULD BE EASY TO IMPLEMENT. C C THE SMALLEST LAPSE ALLOWED IS HMINUS, AND THE LARGEST C IS HPLUS. THESE WERE UNIVERSALLY SET TO -.1 AND +.1 C PRIOR TO MARCH 2011 AND PERTAINED PRIMARILY TO C TEMPERATURE. THEY CAN NOW BE SET BASED ON THE INPUT C ID( ) WHICH SEEMED NECESSARY FOR CEILING HEIGHT BECAUSE C THE DATA POINTS WITHIN A REGION OVER WHICH THE LAPSE C IS COMPUTED MAY VARY A LOT AND BE OUTSIDE THE .1 RANGE. C ALSO WITH THIS CHANGE, LLMT IS SET INTERNALLY RATHER C THAN BEING IN U405 FOR INPUT. C c IF A PARTICULAR VALUE CANNOT BE USED IN THE LAPSE C CALCULATIONS (E.G., 130 FOR UNLIMITED CEILING), THE C VALUE COMES IN AS EXCLUD. C C DATA SET USE C KFILDO - UNIT NUMBER OF OUTPUT (PRINT) FILE. (OUTPUT) C IP14 - UNIT NUMBER FOR WRITING COMPUTED LAPSE RATES. C (OUTPUT) C C VARIABLES C KFILDO = UNIT NUMBER OF OUTPUT (PRINT) FILE. (INPUT) C KFILLP = UNIT NUMBER FOR READING STATION PAIRS. C WHEN = 0, XLAPSE( ) SET = 0. (INPUT) C IP14 = UNIT NUMBER FOR WRITING COMPUTED LAPSE C RATES WHEN NON ZERO. (INPUT) C CCALL(K) = 8-CHARACTER STATION CALL LETTERS (K=1,NSTA). C (CHARACTER*8) (INPUT) C NAME(K) = 20-CHARACTER STATION NAME (K=1,NSTA). C (CHARACTER*20) (INPUT) 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 (K=1,NSTA). (INPUT) C NOPAR(K) = NUMBER OF PAIRS FOR STATION K (K=1,NSTA). C (INPUT) C LOCPAR(K) = WHERE IN IALOC( ), ADIST( ), AND AELEV( ) THE C DATA FOR STATION CCALL(K) STARTS (K=1,NSTA). C LOCPAR(K) POINTS TO THE LOCATION IN IALOC( ) C WHERE THE PAIRS FOR STATION K STARTS. EACH C OF THE CONTIGUOUS VALUES IN IALOC( ) POINTS C TO A PAIR LOCATION IN CCALL( ) AND C XDATA( , , ). (INPUT) C XDATA(K,J,L) = HOLDS THE DATA TO ANALYZE (K=1,NSTA) C (J=1,NORUNS) (L=1,LEVELS). C DATA ARE READ INTO COLUMNS J=2,NORUNS. (INPUT) C XLAPSE(K) = CALCULATED LAPSE RATE IN UNITS OF THE VARIABLE C BEING ANALYZED PER M. (K=1,KSTA). THIS IS C NEVER 9999, BUT RATHER 0 WHEN THERE IS NO C LAPSE RATE CALCULATED. (OUTPUT) C MPAIRS(K) = THE ACTUAL NUMBER OF PAIRS USED IN THE C CALCULATION (K=1,NSTA). IT CAN TAKE THE C FOLLOWING VALUES: C 1) 5555 FOR SOME PAIRS BUT LT 4, C 2) 7777 STATION IS OUTSIDE ANALYSIS BY R (NOTE C THIS MAY BE A LARGER AREA THAN ACTUALLY C USED, C 3) A LEGITIMATE NUMBER OF PAIRS USED IN THE C CALCULATION, OR C 4) 9999 FOR OTHER SITUATIONS (NO PAIR LIST, OB C MISSING, OR NO USABLE PAIRS). (OUTPUT) C LTAGPT(K) = FOR STATION K (K=1NSTA), C 1 = AUGMENTED DATA (FIRST PASS) C 2 = AUGMENTED DATA (2ND OR LATER PASS) C 3 = BOGUS DATA FROM BOGUS c 4 = BOGUS DATA FROM BOGUSG C 0 = EVERYTHING ELSE C (INPUT) C NSTA = NUMBER OF STATIONS OR LOCATIONS BEING DEALT C WITH. (INPUT) C ND1 = MAXIMUM NUMBER OF STATIONS THAT CAN BE DEALT C WITH. (INPUT) C NXL = THE SIZE OF THE PRIMARY GRID FOR THIS RUN C IN THE X DIRECTION IN MESHB UNITS. (INPUT) C NYL = THE SIZE OF THE PRIMARY GRID FOR THIS RUN C IN THE Y DIRECTION IN MESHB UNITS. (INPUT) C XPL(K) = THE X POSITION FOR STATION K (K=1,NSTA) ON C THE ANALYSIS GRID AREA AT THE MESH LENGTH C MESHB. (INPUT) C YPL(K) = THE Y POSITION FOR STATION K (K=1,NSTA) ON C THE ANALYSIS GRID AREA AT THE MESH LENGTH C MESHB. (INPUT) C R = THE RADIUS OF INFLUENCE FOR THE FIRST GUESS C OPTION USED FOR THE 1ST PASS MODIFIED BY C THE CORRESPONDING RSTAR. (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 ELCORR(J) = FRACTION OF THE ELEVATION CORRECTION TO C APPLY FOR EACH PASS (J=1,NPASS) FOR THE DESIRED C FIRST GUESS OPTION. (INPUT) C NPASS = THE NUMBER OF PASSES FOR THIS ANALYSIS. C UP TO 6 ARE ACCOMMODATED. (INPUT) C WTRUNL(J) = THE WEIGHTS TO USE FOR THE RUN TIMES IN C NHRRUM(J) FOR THE LAPSE RATES (J=1,NORUNS). C (NOT CURRENTLY IMPLEMENTED; THE LAPSE IS BASED C ON EQUALLY WEIGHTED DATA.) (INPUT) C NORUNS = NUMBER OF RUNS OR CYCLES TO INCLUDE IN AN C ANALYSIS, ALL VERIFYING AT THE SAME TIME, C MAXIMUM OF 5. (INPUT) C LEVELS = THE NUMBER OF PROBABILITY LEVELS TO ANALYZE. C (INPUT) C IALOC(J) = LOCATIONS IN CCALL( , ) OF THE PAIRED STATIONS C (J=1,NOPAR(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,NOPAR(K)) VALUES FOR EACH STATION K. C NOTE: NOT USED IN THE COMPUTATION, BUT COULD C BE USED WITH A WEIGHTING FACTOR TO GIVE CLOSE C PAIRS MORE WEIGHT. (INPUT) C AELEV(J) = ARITHMETIC DIFFERENCES ELEVATION OF BASE C STATION AND OF THE PAIRED STATIONS C (J=1NOPAR(K)) VALUES FOR EACH STATION K IN C METERS. (INPUT) C ND13 = MAXIMUM TOTAL PAIRS OF STATIONS. DIMENSION OF C ADIST( ), AND AELEV( ). (INPUT) C EXCLUD = VALUE OF XDATA( , , ) TO NOT USE IN C CALCULATIONS. PUT IN FOR CEILING HEIGHT OF C 130 = UNLIMITED. THIS IS 9999 WHEN NOT TO BE C USED. WHEN NOT 9999, IT IS READ IN WITH C SUBROUTINE SETCIG (AND MAYBE OTHERS). (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 TELEV(J) = THE TERRAIN ELEVATION FROM THE MOS-2000 EXTERNAL C RANDOM ACCESS FILE (J=1,NXE*NYE). (INPUT) C NXE = X-EXTENT OF TELEV( ) AND SEALND( ) AT MESH C LENGTH MESHE. (INPUT) C NYE = Y-EXTENT OF TELEV( ) AND SEALND( ) AT MESH C LENGTH 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 P(IX,JY) = FIELD HOLDING FIRST GUESS (IX=1,NX) (JY=1,NY). C (INPUT) C NX = NUMBER OF GRIDPOINTS IN THE XI (LEFT TO RIGHT) C DIRECTION. (INPUT) C NY = NUMBER OF GRIDPOINTS IN THE YJ (BOTTOM TO TOP) C DIRECTION. (INPUT) C MESH = THE NOMINAL MESH LENGTH OF THE CURRENT GRID. C (INPUT) C MESH = THE NOMINAL MESH LENGTH OF THE CURRENT GRID. C (INPUT) C ID(J) = THE ID OF THE ANALYSIS BEING DONE (J=1,4). C (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), AND C -1 = APPLY TO NEGATIVE LAPSES (NEGATIVE IS ODD C FOR SNOW). 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.) C (INPUT) C LPNO = THE MAXIMUM NUMBER OF DATA POINTS TO USE IN C COMPUTING THE LAPSE. NOTE THAT THERE CAN BE C LPNO*NORUNS ACTUAL VALUES TO SUM. THE ACTUAL C NUMBER CAN BE LPNO*NORUNS+NORUNS WHEN C NORUNS > 1. THIS IS READ IN U405A.CN FILE. C UNLIMITED NUMBER OF POINTS IS INDICATED WHEN C LPNO = 99, AND IS THEN SET TO A LARGE NUMBR. C (INPUT) C LAPFG = 0 COMPUTE LAPSE FROM DATA C 1 COMPUTE LAPSE FROM FIRST GUESS. C 2 COMPUTE LAPSE FROM UPPER AIR DATA (IN LAPSUA). C 3 COMPUTE LAPSE FROM UPPER AIR DATA AND C SURFACE DATA (IN LAPSUA). C 4 USE LAPFG FROM SOME PREVIOUS VARIABLE. C 5 A COMBINATION OF 0 AND 3 ABOVE. C (INPUT) C MGUESS = THE TYPE OF FIRST GUESS ACTUALLY USED (SEE C (IGUESS( )). SET IN FSTGS5. (INPUT) C (NOT ACTUALLY USED.) 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 DATUM AND C THE SURROUNDING 4 POINTS ARE OF MIXED TYPE. 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. IT IS INCREMENTED ONLY IF C THERE ARE NO DATA TO COMPUTE A LAPSE C RATE OR IF THE LAPSE RATE IS OUTSIDE C THE RANGE PLUS OR MINUS 0.1 AND IS C SET TO ZERO 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 = STATUS RETURN. C 777 = ROUTINE ENTERED WITH LAPFG NE 0, 1. OR 5. C 0 = GOOD RETURN. C NOPAIR = THE NUMBER OF STATIONS WITH NO PAIRS LIST THAT C ARE NOT WATER POINTS. (INTERNAL) C NUMPR = THE NUMBER OF STATIONS WITH A LIST. (INTERNAL) C NODATA = THE NUMBER OF STATIONS WITH A PAIRS LIST C BUT NO USABLE DATA. (INTERNAL) C NUMGOD = THE NUMBER OF LAPSE RATES ACTUALLY COMPUTED C AND CAN BE USED. (INTERNAL) C NUMLES = THE NUMBER OF STATIONS WITH A LIST THAT C HAVE LESS THAN 10 DATA POINTS. (INTERNAL) C NOCEAN = THE NUMBER OF OCEAN WATER POINTS. (INTERNAL) C NINWAT = THE NUMBER OF INLAND WATER POINTS. (INTERNAL) C NBOTH = THE NUMBER OF POINTS THAT ARE BOTH INLAND C WATER AND LAND. (INTERNAL) C NRESET = THE NUMBER OF COMPUTED LAPSE RATES DEEMED OUT C OF REASONABLE RANGE AND SET TO ZERO. C (INTERNAL) C NOUTS = THE NUMBER OF DATA POINTS OUTSIDE THE C ANALYSIS AREA. (INTERNAL) C XAXLAP = THE MAXIMUM COMPUTED LAPSE RATE. (INTERNAL) C XINLAP = THE MINIMUM COMPUTED LAPSE RATE. (INTERNAL) C SUMLPS = SUM OF ALL THE LAPSE RATES. (REAL*8) C (INTERNAL) C SQLPS = SQUARE OF ALL THE LAPSE RATES. (REAL*8) C (INTERNAL) C NTOTAL = SUM OF ALL THE DIFFERENCES USED IN COMPUTING C THE LAPSE RATES. (INTERNAL) C AVGLPS = AVERAGE OF THE COMPUTED LAPSE RATES. (REAL*8) C (INTERNAL) C SDLPS = STANDARD DEVIATION OF THE COMPUTED LAPSE C RATES. (REAL*8) (INTERNAL) C IPRINT = 0 INDICATES A SPACE IS TO BE PRINTED; C 1 OTHERWISE. (INTERNAL) C KMINUS = NUMBER OF MINUS LAPSE RATES. (INTERNAL) C KZERO = NUMBER OF ZERO LAPSE RATES. (INTERNAL) C KPLUS = NUMBER OF PLUS LAPSE RATES. (INTERNAL) C LLMT = THE MINIMUM NUMBER OF PAIRS TO USE IN COMPUTING C A LAPSE. A DIAGNOSTIC IS WRITTEN WHEN NUMBER C OF PAIRS USED IS LT LLMT*NORUNS, AND C XLAPSE( ) SET TO ZERO. (INTERNAL) C MLMT = DIAGNOSTIC IS WRITTEN WHEN NUMBER OF PAIRS C USED IS LT LLMT*NORUNS. SET TO 10 IN DATA C STATEMENT. C HMINUS = THE LARGEST MINUS LAPSE RATE TOLERATED. C IF EXCEEDED, XLAPSE( ) SET TO 0. (INTERNAL) C HPLUS = THE LARGEST PLUS LAPSE RATE TOLERATED. C IF EXCEEDED, XLAPSE( ) SET TO 0. (INTERNAL) C ILAP = 0 WHEN XLAPSE( ) IS SET TO ZERO WHEN LIMITS C ARE EXCEEDED, C 1 WHEN XLAPSE( ) IS SET TO THE LIMIT WHEN C LIMITS EXCEEDED. (INTERNAL) C 1 2 3 4 5 6 7 X C NONSYSTEM SUBROUTINES USED C NONE C CHARACTER*8 CCALL(ND1) CHARACTER*20 NAME(ND1) C REAL*8 SUMLPS,SQLPS,AVGLPS,SDLPS C DIMENSION ID(4) DIMENSION LNDSEA(NSTA),ELEV(NSTA),NOPAR(NSTA),LOCPAR(NSTA), 1 XLAPSE(NSTA),XP(NSTA),YP(NSTA),XPL(NSTA),YPL(NSTA), 2 MPAIRS(NSTA),LTAGPT(NSTA) DIMENSION XDATA(ND1,NORUNS+1,LEVELS) DIMENSION TELEV(NXE,NYE),SEALND(NXE,NYE) DIMENSION IALOC(ND13),ADIST(ND13),AELEV(ND13) DIMENSION ELCORR(6),ISTOP(6),WTRUNL(5) C DATA IFIRST/0/ DATA MLMT/10/ C CALL TIMPR(KFILDO,KFILDO,'START LAPSE ') IER=0 C C************************ CCCC DO 99 K=1,NSTA CCCC WRITE(KFILDO,98)CCALL(K),(XDATA(K,2,L),L=1,LEVELS) CCCC 98 FORMAT(' IN LAPSE AT 98--CCALL(K),(XDATA(K,2,L),L=1,LEVELS)', CCCC 1 2X,A8,2X,10F10.3) CCCC 99 CONTINUE CCCC WRITE(KFILDO,998)ID CCCC 998 FORMAT(/' IN FSTGS,ID(1) =',I12) C*********************** C C SET LLMT, HMINUS, AND HPLUS ACCORDING TO VARIABLE ID( ). C IF((ID(1)/100).EQ.7280000.OR.(ID(1)/100).EQ.2280800)THEN C THE ABOVE IS FOR CEILING HEIGHT, OBS OR LAMP FORECASTS. LLMT=4 C FOR A STRATUS DECK INTERSECTING A MOUNTAIN, THE CHANGE C IN HEIGHT WOULD BE 3.28 FT/M. THIS SHOULD BE .0328 HDS FT C PER M. CHANGED 5/4/15. HMINUS=-.0328 HPLUS=+.0328 WRITE(KFILDO,999)HMINUS,HPLUS 999 FORMAT(/' SETTING LIMITS FOR LAPSE ',2F10.5) ILAP=1 ELSEIF((ID(1)/100).EQ.2280702)THEN C THE ABOVE IS FOR LAMP CEILING PROBABILITY FORECASTS. C MODIFIED FROM DEFAULT BELOW 5/3/15. DEATH VALLEY WAS C GETTING FOG WITH NOTHING CLOSE TO INDICATE IT. LLMT=4 HMINUS=-.0001 HPLUS=+.0001 WRITE(KFILDO,999)HMINUS,HPLUS ILAP=1 ELSEIF((ID(1)/100).EQ.2280602)THEN C THE ABOVE IS FOR LAMP CEILING PROBABILITY FORECASTS. C FOR ALASKA. THIS GIVES A MAXIMUM OF 10 PERCENT CHANGE C PER 1000 FT. (4/9/19) LLMT=4 HMINUS=-.01 HPLUS=+.01 WRITE(KFILDO,999)HMINUS,HPLUS ILAP=1 ELSEIF((ID(1)/100).EQ.7081000.OR.(ID(1)/100).EQ.2281600)THEN C THE ABOVE IS FOR VISIBILITY, OBS OR LAMP FORECASTS. C MODIFIED FROM DEFAULT BELOW 5/2/15. DEATH VALLEY WAS C GETTING FOR WITH NOTHING CLOSE TO INDICATE IT. LLMT=4 HMINUS=-.001 HPLUS=+.001 WRITE(KFILDO,999)HMINUS,HPLUS ILAP=1 ELSEIF((ID(1)/100).EQ.2281302)THEN C THE ABOVE IS FOR LAMP VISIBILITY PROBABILITY FORECASTS. C MODIFIED FROM DEFAULT BELOW 5/3/15. DEATH VALLEY WAS C GETTING NON ZERO PROB WITH NOTHING CLOSE TO INDICATE IT. LLMT=4 HMINUS=-.00005 HPLUS=+.00007 WRITE(KFILDO,999)HMINUS,HPLUS ILAP=1 ELSE C THESE ARE DEFAULT, AND WERE USED PRIOR TO MARCH 2011 C CHANGE. FOR TEMPERATURE, THE ADIABATIC CHANGE IS C .0176 DEG F/M, MUCH LESS THAN ALLOWED. LLMT=4 HMINUS=-.1 HPLUS=+.1 WRITE(KFILDO,999)HMINUS,HPLUS ILAP=0 ENDIF C KZERO=0 KMINUS=0 KPLUS=0 LLMTTS=LLMT*NORUNS MLMTTS=MLMT*NORUNS LPNOTS=LPNO*NORUNS C LLMTTS, MLMTTS, AND LPNOTS INCORPORATE NORUNS FOR TESTING. C D WRITE(KFILDO,100)NORUNS,LLMT,HMINUS,HPLUS,EXCLUD D100 FORMAT(/' AT 100 IN LAPSE--NORUNS,LLMT,HMINUS,HPLUS,EXCLUD', D 1 2I4,3F12.5) C D DO 103 K=1,NSTA D WRITE(KFILDO,101)K,EXCLUD,LNDSEA(K),NOPAR(K), D 1 (XDATA(K,L,1),L=2,NORUNS+1) D101 FORMAT(/,' AT 101 IN LAPSE (K,EXCLUD,LNDSEA(K),NOPAR(K),', D 1 '(XDATA(K,L,1),L=2,NORUNS+1)',/, D 2 (I7,F6.1,I2,I8,6F8.0)) D103 CONTINUE C C CHECK CORRESPONDENCE OF IBKPN AND KIFLLP. IF IBKPN C NE 99, IT INDICATES XAPSE( ) IS TO BE CALCULATED. C THEREFORE, KFILLP SHOULD NOT BE ZERO. C IF(IBKPN.NE.99.AND.KFILLP.EQ.0)THEN WRITE(KFILDO,104)IBKPN 104 FORMAT(/' ****IBKPN =',I4,' NOT EQUAL 99, BUT NO KFILLP', 1 ' PAIRS FILE PROVIDED. LAPSE COULD NOT BE ', 2 ' CALCULATED. PROCEEDING.') C DO 1040 K=1,NSTA XLAPSE(K)=0. 1040 CONTINUE C ISTOP(1)=ISTOP(1)+1 IER=777 C THIS WILL COUNT AS A MAJOR ERROR. GO TO 250 ENDIF C C IF THE UNIT NUMBER ON WHICH TO READ THE PAIRS LIST IS C ZERO, SET THE XLAPSE( ) = 0. C IF(KFILLP.EQ.0.OR.IBKPN.EQ.99)THEN C ALTHOUGH THE TEST IS MADE, LAPSE WILL PROBABLY C NOT BE CALLED WHEN IBPKN - 99. C DO 105 K=1,NSTA XLAPSE(K)=0. 105 CONTINUE C WRITE(KFILDO,106) 106 FORMAT(/' ****INCONSISTENCY. LAPSE SET = 0. ', 1 'KFILLP = 0 OR IBPKN = 99, BUT LAPFG', 2 'INDICATES TO COMPUTE IT. COUNT AS ISTOP(1)', 3 'ERROR.') ISTOP(1)=ISTOP(1)+1 IER=777 C THIS WILL COUNT AS A MAJOR ERROR. GO TO 250 ENDIF C C IF ALL THE ELCORR( ) ARE ZERO, THEN THE ELEVATION C CORRECTION IS NOT TO BE USED, SO SET XLAPSE( ) = 0. C DO 110 J=1,NPASS C D WRITE(KFILDO,109)ELCORR(J) D109 FORMAT(' AT 109 IN LAPSE--ELCORR(J)',F10.2) C IF(ELCORR(J).GT.0.)GO TO 112 110 CONTINUE C C DROP THROUGH HERE MEANS THE LAPSE RATE IS NOT TO BE USED. C DO 111 K=1,NSTA XLAPSE(K)=0. 111 CONTINUE C WRITE(KFILDO,1110) 1110 FORMAT(/' ****INCONSISTENCY. LAPSE SET = 0. ', 1 'ALL ELCORR( ) = 0, BUT LAPFG INDICATES TO COMPUTE', 2 ' IT. COUNT AS ISTOP(1) ERROR.') ISTOP(1)=ISTOP(1)+1 IER=777 C THIS WILL COUNT AS A MAJOR ERROR. C GO TO 250 C 112 IPRINT=0 NOPAIR=0 C NOPAIR COUNTS THE NUMBER OF STATIONS WITH NO PAIRS LIST C THAT ARE NOT WATER POINTS. NUMPR=0 C NUMPR COUNTS THE NUMBER OF STATIONS WITH A LIST. NODATA=0 C NODATA COUNTS THE NUMBER OF STATIONS WITH A PAIRS LIST C BUT NO USABLE DATA. NUMGOD=0 C NUMGOD COUNTS THE NUMBER OF LAPSE RATES ACTUALLY COMPUTED. NUMLES=0 C NUMLES COUNTS THE NUMBER OF STATIONS WITH A LIST THAT C HAVE LESS THAN 10 DATA POINTS. NOCEAN=0 C NOCEAN COUNTS THE NUMBER OF OCEAN WATER POINTS. NINWAT=0 C NINWAT COUNTS THE NUMBER OF INLAND WATER (ONLY) POINTS. NBOTH=0 C NBOTH COUNTS THE NUMBER OF INLAND WATER POINTS AND C LAND COMBINED. NRESET=0 C NRESET COUNTS THE NUMBER OF COMPUTED LAPSE RATES C DEEMED OUT OF REASONABLE RANGE AND SET TO ZERO. NOUTS=0 C NOUTS COUNTS THE NUMBER OF DATA POINTS OUTSIDE THE C ANALYSIS AREA. XAXLAP=-9. C XAXLAP IS THE MAXIMUM COMPUTED LAPSE RATE. MORE DIGITS C WON'T PRINT AT 205. XINLAP=+9. C XINLAP IS THE MINIMUM COMPUTED LAPSE RATE. MORE DIGITS C WON'T PRINT AT 205. SUMLPS=0. C SUMLPS IS THE SUM OF ALL THE LAPSE RATES. AVGLPS=9. C AVGLPS IS THE AVERAGE OF THE LAPSE RATES. MORE DIGITS C WON'T PRINT AT 205. SDLPS=9. C SDLPS IS THE STANDARD DEVIATION OF THE LAPSE RATES. C MORE DIGITS WON'T PRINT AT 205. SQLPS=0. C SQLPS IS THE SQUARE OF ALL THE LAPSE RATES. NTOTAL=0 C NTOTAL IS THE TOTAL NUMBER OF DIFFERENCES USED IN C COMPUTING LAPSE RATES. C DO 200 K=1,NSTA C C*** WRITE(KFILDO,115)K,CCALL(K),NAME(K),XPL(K),YPL(K),R C*** 115 FORMAT(' AT 115--K,CCALL(K),NAME(K),XPL(K),YPL(K),R', C*** 1 I6,2X,A8,2X,A20,3F8.2) C C INITIALIZE MPAIRS( ). C MPAIRS(K)=0 C IF((XPL(K).LT.1.-R).OR. 1 (YPL(K).LT.1.-R).OR. 2 (XPL(K).GT.NXL+R).OR. 3 (YPL(K).GT.NYL+R))THEN C ANY STATION OUTSIDE POSSIBLE USE IN ANALYSIS IS NOT C CONSIDERED. D WRITE(KFILDO,117)CCALL(K),NAME(K) D117 FORMAT(' STATION ',A8,2X,A20,' OUTSIDE AREA OF USE IN', D 1 ' ANALYSIS.') D WRITE(KFILDO,1170)XPL(K),YPL(K),NXL,NYL,R D1170 FORMAT(' XPL(K),YPL(K),NXL,NYL,R--',2F10.2,2I6,F10.2) NOUTS=NOUTS+1 MPAIRS(K)=7777 XLAPSE(K)=0. GO TO 200 ENDIF C SUMV=0. SUME=0. NUM=0 C D WRITE(KFILDO,118)K,LNDSEA(K),NOPAR(K),XDATA(K,2,1),XDATA(K,3,1) D118 FORMAT(' AT 118 IN LAPSE--K,LNDSEA(K),NOPAR(K),', D 1 'XDATA(K,2,1),XDATA(K,3,1)',3I8,2F10.2) C IF(LNDSEA(K).EQ.0)THEN NOCEAN=NOCEAN+1 XLAPSE(K)=0. MPAIRS(K)=9999 GO TO 200 ELSEIF(LNDSEA(K).EQ.3)THEN NINWAT=NINWAT+1 XLAPSE(K)=0. MPAIRS(K)=9999 GO TO 200 ELSEIF(LNDSEA(K).EQ.6)THEN NBOTH=NBOTH+1 XLAPSE(K)=0. MPAIRS(K)=9999 GO TO 200 ELSEIF(NAREA.EQ.2.AND.LTAGPT(K).NE.0)THEN C THIS CUTS OUT THE BOGUS AND AUGMENTED FOR ALASKA C WHICH OCCURS OVER SIBERIA (LAND) AS WELL AS OCEAN. XLAPSE(K)=0. MPAIRS(K)=9999 GO TO 200 ELSEIF(NOPAR(K).EQ.9999)THEN C THE ABOVE TEST WAS CHANGED FROM 999999 TO 9999 12/2/06 C U174 WRITES 9999, NOT 999999. C THERE IS NO PAIR LIST. THERE IS ALWAYS A POINTER IN C LOCPAR(K) INTO IALOC( ) AND NOPAR( ), BUT THE VALUE C IN NOPAR( ) MAY INDICATE A MISSING LIST. NOPAIR=NOPAIR+1 XLAPSE(K)=0. MPAIRS(K)=9999 D WRITE(KFILDO,120)K,XLAPSE(K),XAXLAP,XINLAP, D 1 SUMLPS,SQLPS,NTOTAL D120 FORMAT(/' AT 120 IN LAPSE--K,XLAPSE(K),XAXLAP,XINLAP,', D 1 'SUMLPS,SQLPS,NTOTAL',I6,5F10.1,I6) GO TO 200 ELSE NUMPR=NUMPR+1 ENDIF C C CHECK FOR MISSING DATA. AT LEAST ONE RUN MUST HAVE DATA C FOR ONE PROBABILITY LEVEL. C DO 123 J=1,LEVELS C DO 122 L=2,NORUNS+1 C IF(XDATA(K,L,J).NE.9999.)THEN GO TO 125 ENDIF C 122 CONTINUE C 123 CONTINUE C FALL THROUGH MEANS ALL NORUNS FOR ALL LEVELS HAVE C MISSING DATA. C D WRITE(KFILDO,124)CCALL(K),NAME(K) D124 FORMAT(/,' STATION ',A8,2X,A20,' HAS A MISSING', D 1 ' OBSERVATION. A LAPSE RATE IS NOT NEEDED.') XLAPSE(K)=0. C XLAPSE(K) SET = 0 FOR SAFETY. MPAIRS(K)=9999 NODATA=NODATA+1 GO TO 200 C 125 CONTINUE C DO 1950 J=1,LEVELS C DO 195 JJ=LOCPAR(K),LOCPAR(K)+NOPAR(K)-1 C D WRITE(KFILDO,1255)K,JJ,LOCPAR(K),NOPAR(K) D1255 FORMAT(/' AT 1255 IN LAPSE--K,JJ,LOCPAR(K),NOPAR(K)',4I10) C DO 194 L=2,NORUNS+1 C D WRITE(KFILDO,126)K,CCALL(K) D126 FORMAT(/' IN LAPSE--K,CCALL(K)',I6,2X,A8) C C***************************************************************** C THE BELOW CAN BE ACTIVATED ALONG WITH FORMAT 135 TO C CHECK ON PARTICULAR STATIONS. C CCC IF(CCALL(K).EQ.'KDRA '.OR. CCC 1 CCALL(K).EQ.'KINS ')THEN CCC WRITE(KFILDO,127) CCC 127 FORMAT(/' K CALL(K) NAME(K)', CCC 1 ' XDATA(K,L,J) XPL(K) YPL(K),', CCC 2 ' ELEV(K) NOPAR(K)',/, CCC 3 ' JJ CCALL(IALOC(JJ)) NAME(IALOC(JJ))', CCC 4 ' XDATA(IALOC(JJ),L,J) XPL(IALOC(JJ)) YPL(IALOC(JJ))', CCC 5 ' ELEV(IALOC(JJ)), AELEV(JJ) ADIST(JJ)', CCC 6 ' NUM SUMV SUME') CCC ENDIF C***************************************************************** C D WRITE(KFILDO,128)K,JJ,L,CCALL(K),XDATA(K,L,J),IALOC(JJ) D128 FORMAT(' AT 128 IN LAPSE--K,JJ,J,L,CCALL(K),XDATA(K,L,J),', D 1 'IALOC(JJ)',3I7,2X,A8,F10.2,I7) C IF(NINT(XDATA(K,L,J)).EQ.9999)GO TO 194 C THIS HAS TO BE CHECKED HERE EVEN THOUGH CHECKED ABOVE C BECAUSE ANY ONE OF THE RUNS L WILL LET CONTROL PASS HERE. IF(NINT(XDATA(K,L,J)).EQ.NINT(EXCLUD))GO TO 194 C THIS WAS PUT IN FOR CEILING HEIGHT TO EXCLUDE UNLIMITED. C IF(IALOC(JJ).EQ.999999)GO TO 195 C IALOC( ) IS SET TO 999999 WHEN THE DATA CAN'T BE USED. C A VALUE OF 999999 IS PROBABLY OUTSIDE THE XDATA( , , ) ARRAY. C IF(LAPFG.EQ.0.OR.LAPFG.EQ.5)THEN C C THIS IS THE LOOP TO COMPUTE LAPSE RATES FROM C STATION DATA. WHEN LAPFG = 5, IT WILL BE COMBINED WITH C LAPSE COMPUTED AS A COMBINATION OF SURFACE AND UA DATA. IF(XDATA(IALOC(JJ),L,J).NE.9999..AND. 1 LNDSEA(IALOC(JJ)).NE.0.AND. 2 LNDSEA(IALOC(JJ)).NE.3.AND. 3 NINT(XDATA(IALOC(JJ),L,J)).NE.NINT(EXCLUD))THEN C WHILE THE LISTS SHOULD NOT INCLUDE WATER STATIONS, C DESIGNATIONS MAY BE CHANGED THAT RENDER THE LIST C OUT OF COORDINATION WITH U155. THE ABOVE KEEPS C A WATER STATION (OF TYPE 0 OR 3) FROM BEING USED IN C THE CALCULATION. THE EXCLUD WAS ADDED FOR UNLIMITED C CEILING HEIGHT. NUM=NUM+1 C NOTE THAT NUM COUNTS ONE FOR EACH RUN. C C THE SUMMATION OF THE ELEMENT VALUE IS THE ONE WITH C THE HIGHEST ELEVATION MINUS THE OTHER. C IF(ELEV(IALOC(JJ)).GE.ELEV(K))THEN SUMV=SUMV+(XDATA(IALOC(JJ),L,J)-XDATA(K,L,J)) ELSE SUMV=SUMV+(XDATA(K,L,J)-XDATA(IALOC(JJ),L,J)) ENDIF SUME=SUME+ABS(AELEV(JJ)) C AELEV( ) IS THE ARITHMETIC DIFFERENCE OF THE HEIGHT C OF THE PAIRED STATION MINUS THE BASE STATION IN C METERS. THE ABSOLUTE VALUE IS THE SAME AS THE C HEIGHT OF THE UPPER STATION MINUS THE HEIGHT OF C THE LOWER STATION. EVERY STATION IN THE DICTIONARY C HAS AN ELEVATION. C D WRITE(KFILDO,134)K,ELEV(K),ELEV(IALOC(JJ)),SUMV,SUME D134 FORMAT(/,' AT 134 IN LAPSE--K,ELEV(K),ELEV(IALOC(JJ)),', D 1 'SUMV,SUME',I6,4F10.2) ENDIF C C***************************************************************** C THE BELOW CAN BE ACTIVATED ALONG WITH FORMAT 127 TO C CHECK ON PARTICULAR STATIONS. C CCC IF(CCALL(K).EQ.'KDRA '.OR. CCC 1 CCALL(K).EQ.'KINS ')THEN CCC WRITE(KFILDO,135)K,CCALL(K),NAME(K), CCC 1 XDATA(K,L,J),XPL(K),YPL(K), CCC 2 ELEV(K),NOPAR(K), CCC 3 CCALL(IALOC(JJ)),NAME(IALOC(JJ)), CCC 4 XDATA(IALOC(JJ),L,J),XPL(IALOC(JJ)),YPL(IALOC(JJ)), CCC 5 ELEV(IALOC(JJ)),AELEV(JJ),ADIST(JJ), CCC 6 NUM,SUMV,SUME CCC 135 FORMAT(/,I5,1X,A8,1X,A20, CCC 1 F10.1,F14.1,F15.1, CCC 2 F15.1,I14,/, CCC 3 6X,A8,1X,A20,3X, CCC 4 F7.1,F14.1,F15.1, CCC 5 F15.1,F14.1,F10.1,I5,F7.0,F7.0) CCC ENDIF C***************************************************************** C ELSEIF(LAPFG.EQ.1)THEN C C THIS IS THE LOOP TO COMPUTE LAPSE RATES FROM C THE FIRST GUESS AND EITHER THE STATION ELEVATIONS C OR THE GRIDDED TERRAIN. C IF(XDATA(IALOC(JJ),L,J).NE.9999..AND. 1 LNDSEA(IALOC(JJ)).NE.0.AND. 2 LNDSEA(IALOC(JJ)).NE.3)THEN C WHILE THE LISTS SHOULD NOT INCLUDE WATER STATIONS, C DESIGNATIONS MAY BE CHANGED THAT RENDER THE LIST C OUT OF COORDINATION WITH U155. THE ABOVE KEEPS C A WATER STATION (OF TYPE 0 OR 3) FROM BEING USED IN C THE CALCULATION. C CALL ITRPSL(KFILDO,IP14,P,NX,NY,CCALL(K),XP(K),YP(K), 1 LNDSEA(K),SEALND,NXE,NYE, 2 MESH,MESHE,N4P,BB,ISTOP,IER) C VALUE INTERPOLATED FROM FIRST GUESS TO STATION LOCATION C IS NOW IN BB. THIS CAN BE MISSING BECAUSE AN C INTERPOLATED VALUE FOR A LAND (WATER) STATION IS ONLY C TAKEN FROM LAND (WATER) STATIONS, AND IT IS POSSIBLE NONE C EXIST. ALSO, THE FIRST GUESS ANALYSIS AREA MAY NOT FILL C GRID. IN THIS CASE, IER NE 0. C IF(IER.NE.0)GO TO 195 C IER NE 0 IS NOT COUNTED AS AN ERROR HERE. C CALL ITRPSL(KFILDO,IP14,P,NX,NY,CCALL(K),XP(K),YP(K), 1 LNDSEA(K),SEALND,NXE,NYE, 2 MESH,MESHE,N4P,BB1,ISTOP,IER) C VALUE INTERPOLATED FROM FIRST GUESS TO STATION PAIR C LOCATION IS NOW IN BB1. THIS CAN BE MISSING. C IF(IER.NE.0)GO TO 195 C IER NE 0 IS NOT COUNTED AS AN ERROR HERE. C IF(LAPFG.EQ.1)THEN C THE ELEVATION DIFFERENCE IS TO BE TAKEN FROM THE C STATION VALUES. AELEV( ) IS COMPUTED IN A C PREPROCESSOR. NUM=NUM+1 C NOTE THAT NUM COUNTS ONE FOR EACH RUN. C SUME=SUME+ABS(AELEV(JJ)) C AELEV( ) IS THE ARITHMETIC DIFFERENCE OF THE HEIGHT C OF THE PAIRED STATION MINUS THE BASE STATION IN C METERS. THE ABSOLUTE VALUE IS THE SAME AS THE C HEIGHT OF THE UPPER STATION MINUS THE HEIGHT OF C THE LOWER STATION. C ELSE CALL ITRPSL(KFILDO,IP14,TELEV,NXE,NYE,CCALL(K), 1 XP(K),YP(K),LNDSEA(K),SEALND,NXE,NYE, 2 MESH,MESHE,N4P,EE,ISTOP,IER) C VALUE INTERPOLATED FROM FIRST GUESS TO STATION LOCATION C IS NOW IN BB. THIS CAN BE MISSING BECAUSE AN C IF(IER.NE.0)GO TO 195 C IER NE 0 IS NOT COUNTED AS AN ERROR HERE. C CALL ITRPSL(KFILDO,IP14,TELEV,NXE,NYE,CCALL(K), 1 XP(K),YP(K),LNDSEA(K),SEALND,NXE,NYE, 2 MESH,MESHE,N4P,EE1,ISTOP,IER) C VALUE INTERPOLATED FROM FIRST GUESS TO STATION PAIR C LOCATION IS NOW IN BB1. THIS CAN BE MISSING. C IF(IER.NE.0)GO TO 195 C IER NE 0 IS NOT COUNTED AS AN ERROR HERE. NUM=NUM+1 C NOTE THAT NUM COUNTS ONE FOR EACH RUN. C SUME=SUME+ABS(EE1-EE) C EE1-EE IS THE ARITHMETIC DIFFERENCE OF THE HEIGHT C OF THE PAIRED STATION MINUS THE BASE STATION IN C METERS. C IF(BB1.GE.BB)THEN SUMV=SUMV+BB1-BB ELSE SUMV=SUMV+BB-BB1 ENDIF C ENDIF C C***************************************************************** C THE BELOW CAN BE ACTIVATED ALONG WITH FORMAT 127 TO C CHECK ON PARTICULAR STATIONS. C C IF(CCALL(K).EQ.'ZKMEI ')THEN C WRITE(KFILDO,145)K,CCALL(K),NAME(K), C 1 XDATA(K,L,J),XPL(K),YPL(K), C 2 ELEV(K),NOPAR(K), C 3 CCALL(IALOC(JJ)),NAME(IALOC(JJ)), C 4 XDATA(IALOC(JJ),L,J),XPL(IALOC(JJ)),YPL(IALOC(JJ)), C 5 ELEV(IALOC(JJ)),AELEV(JJ),ADIST(JJ), C 6 NUM,SUMV,SUME C145 FORMAT(/,I5,1X,A8,1X,A20, C 1 F10.1,F14.1,F15.1, C 2 F15.1,I14,/, C 3 6X,A8,1X,A20,3X, C 4 F7.1,F14.1,F15.1, C 5 F15.1,F14.1,F10.1,I5,F7.0,F7.0) C ENDIF C***************************************************************** C ENDIF C ELSE WRITE(KFILDO,192) 192 FORMAT(/,' LAPFG NOT EQUAL TO ZERO, 1, OR 5 IN LAPSE.', 1 ' LAPSE CANNOT BE COMPUTED. COUNT AS FATAL.') ISTOP(1)=ISTOP(1)+1 IER=777 C C SET XLAPSE( ) = 0. FOR SAFETY. C DO 193 KKK=1,NSTA XLAPSE(KKK)=0. 193 CONTINUE C GO TO 250 ENDIF C 194 CONTINUE C IF(NUM.GE.LPNOTS)THEN D WRITE(KFILDO,1945)LPNOTS,CCALL(K),NAME(K),NORUNS D1945 FORMAT(/' THE MAXIMUM NUMBER OF PAIRS OF VALUES =',I6, D 1 ' HAS BEEN REACHED FOR STATION ',A8,1X,A20, D 2 ' FOR',I3,' CYCLES.') GO TO 1955 C THE DESIRED NUMBER OF PAIRS HAS BEEN REACHED. ENDIF C 195 CONTINUE C 1950 CONTINUE C 1955 IF(NUM.EQ.0)THEN XLAPSE(K)=0. IF(MPAIRS(K).EQ.0)MPAIRS(K)=9999 C MPAIRS( ) COULD HAVE BEEN SET TO 7777. NODATA=NODATA+1 C IF(ID(1)/100.EQ.7080000.OR.ID(1)/100.EQ.2280800)THEN CCCC IF(IP14.NE.0)WRITE(IP14,196)CCALL(K),NAME(K) CCCC 196 FORMAT(/,' ****NO DATA FOR COMPUTING LAPSE FOR STATION ', CCCC 1 A8,2X,A20,'. ZERO IS USED.', CCCC 2 ' MAY BE DUE TO UNLIMITED CEILING.') C************ABOVE TOO MUCH PRINT********* IPRINT=0 ISTOP(4)=ISTOP(4)+1 ELSE C IF(IP14.NE.0)WRITE(IP14,1961)CCALL(K),NAME(K) 1961 FORMAT(/,' ****NO DATA FOR COMPUTING LAPSE FOR STATION ', 1 A8,2X,A20,'. ZERO IS USED.') IPRINT=0 ISTOP(4)=ISTOP(4)+1 GO TO 200 ENDIF C ELSEIF(NUM.LT.LLMTTS)THEN C IF(IPRINT.EQ.0)THEN IF(IP14.NE.0)WRITE(IP14,1965) 1965 FORMAT(' ') ENDIF C IF(IP14.NE.0)WRITE(IP14,197)CCALL(K),NAME(K),LLMTTS,NUM 197 FORMAT(' #### STATION ',A8,2X,A20,' HAS LESS THAN',I4,' =',I4, 1 ' DATA LOCATIONS ON WHICH TO COMPUTE A LAPSE.', 2 ' ZERO IS USED.') C NOTE THAT THERE CAN BE LLMT*NORUNS ACTUAL VALUES. IPRINT=1 XLAPSE(K)=0. MPAIRS(K)=5555 C ELSE XLAPSE(K)=SUMV/SUME C NOTE THAT SUME CANNOT BE ZERO BECAUSE IT IS THE SUM OF C ABSOLUTE VALUES, EACH OF WHICH MUST BE GREATER THAN C A SPECIFIED AMOUNT. NUMGOD=NUMGOD+1 MPAIRS(K)=NUM D WRITE(KFILDO,1975)NUMGOD,SUMV,SUME,XLAPSE(K) D1975 FORMAT(' AT 1975 IN LAPSE--NUMGOD,SUMV,SUME,XLAPSE(K)',I5, D 1 3F15.4) C IF(NUM.LT.MLMTTS)THEN NUMLES=NUMLES+1 C IF(IPRINT.EQ.0)THEN IF(IP14.NE.0)WRITE(IP14,198)CCALL(K),NAME(K),MLMTTS,NUM 198 FORMAT(/,' #### STATION ',A8,2X,A20,' HAS LESS THAN',I4, 1 ' =',I4, 2 ' DATA VALUES ON WHICH TO COMPUTE A LAPSE.', 3 ' CONTINUING.') C NOTE THAT THERE CAN BE MLMT*NORUNS ACTUAL VALUES. IPRINT=1 ELSE IF(IP14.NE.0)WRITE(IP14,1980)CCALL(K),NAME(K),MLMTTS,NUM 1980 FORMAT(' #### STATION ',A8,2X,A20,' HAS LESS THAN',I4, 1 ' =',I4, 2 ' DATA VALUES ON WHICH TO COMPUTE A LAPSE.', 3 ' CONTINUING.') C NOTE THAT THERE CAN BE MLMT*NORUNS ACTUAL VALUES. ENDIF C ENDIF C C CHECK RANGE OF LAPSE RATES IN XLAPSE( ) FOR ACCEPTABLE C VALUES. HMINUS AND HPLUS HAVE BEEN SET IN DATA STATEMENTS C ASSUMING THE NORMAL LAPSE RATE IS NEGATIVE. TO BE CORRECT, C THE VARIABLE IBKPN IN U405 MUST BE USED. C IF(XLAPSE(K).LT.0.)THEN C IF(XLAPSE(K).LT.HMINUS)THEN XSAVE=XLAPSE(K) C IF(ILAP.EQ.0)THEN XLAPSE(K)=0. ELSE XLAPSE(K)=HMINUS ENDIF C IF(IP14.NE.0)WRITE(IP14,1985)CCALL(K),NAME(K),XSAVE, 1 HMINUS,HPLUS,XLAPSE(K) 1985 FORMAT(/,' ****STATION ',A8,2X,A20,' XLAPSE = ',F7.4, 1 ' OUTSIDE RANGE',F8.5,' TO',F8.5,'. SET TO', 2 F7.4) IPRINT=0 ISTOP(4)=ISTOP(4)+1 NRESET=NRESET+1 ENDIF C ELSEIF(XLAPSE(K).GT.0.)THEN C IF(XLAPSE(K).GT.HPLUS)THEN XSAVE=XLAPSE(K) C IF(ILAP.EQ.0)THEN XLAPSE(K)=0. ELSE XLAPSE(K)=HPLUS ENDIF C IF(IP14.NE.0)WRITE(IP14,1985)CCALL(K),NAME(K),XSAVE, 1 HMINUS,HPLUS,XLAPSE(K) IPRINT=0 ISTOP(4)=ISTOP(4)+1 NRESET=NRESET+1 ENDIF C ENDIF C C COMPUTE NUMBER OF ZERO, MINUS, AND PLUS LAPSE RATES. C IF(XLAPSE(K).LT.0.)THEN KMINUS=KMINUS+1 ELSEIF(XLAPSE(K).GT.0.)THEN KPLUS=KPLUS+1 ELSE KZERO=KZERO+1 ENDIF C C COMPUTE RANGE OF LAPSE RATES. C IF(XLAPSE(K).GT.XAXLAP)XAXLAP=XLAPSE(K) IF(XLAPSE(K).LT.XINLAP)XINLAP=XLAPSE(K) C CHECK THIS WAY TO MAKE SURE BOTH ARE FOUND. C C COMPUTE THE TOTALS AND SQUARES. C SUMLPS=SUMLPS+XLAPSE(K) SQLPS=SQLPS+XLAPSE(K)*XLAPSE(K) NTOTAL=NTOTAL+MPAIRS(K) ENDIF C 200 CONTINUE C C COMPUTE THE AVERAGE LAPSE AND STANDARD DEVIATION C WHEN THERE ARE SOME GOOD POINTS. OTHERWISE, LEAVE C AT THE INITIALIZATION VALUE. C IF(NUMGOD.NE.0)THEN AVGLPS=SUMLPS/NUMGOD SDLPS=SQRT((SQLPS/NUMGOD)-AVGLPS*AVGLPS) ELSE KZERO=NSTA C IF THERE ARE NO GOOD POINTS, THEN ALL XLAPSE( ) = 0. ENDIF C WRITE(KFILDO,205)NOPAIR,NOCEAN,NINWAT,NBOTH,NUMPR,NODATA, 1 NUMGOD,NUMLES,NRESET,NOUTS,NTOTAL, 2 XAXLAP,XINLAP,AVGLPS,SDLPS, 3 KMINUS,KZERO,KPLUS 205 FORMAT(/,' ',I6,' = NUMBER OF POINTS WITHOUT A PAIRS', X ' LIST THAT ARE NOT OCEAN OR INLAND WATER', X ' POINTS.',/, 1 I7,' = NUMBER OF POINTS WITH A XLAPSE', X ' RATE = 0 THAT ARE OCEAN POINTS.',/, 2 I7,' = NUMBER OF POINTS WITH A XLAPSE', X ' RATE = 0 THAT ARE INLAND WATER POINTS.',/, 3 I7,' = NUMBER OF POINTS WITH A XLAPSE RATE = 0', X ' THAT ARE BOTH INLAND WATER AND LAND.',/, 4 I7,' = NUMBER OF POINTS WITH A PAIRS LIST.',/, 5 I7,' = NUMBER OF POINTS WITH 0 DATA POINTS', X ' OR HAVE MISSING OBS, LAPSE = 0 USED',/, 6 I7,' = NUMBER OF POINTS WITH GE 3 DATA POINTS', X ', LAPSE IS COMPUTED; OTHERWISE, LAPSE ', X ' SET TO ZERO'/, 7 I7,' = NUMBER OF POINTS WITH GE 3 AND LE 10', X ' DATA POINTS',/, 8 I7,' = NUMBER OF COMPUTED LAPSE RATES OUTSIDE', X ' RANGE HMINUS AND HPLUS SET IN LAPSE AND', X ' SET TO ZERO',/, 9 I7,' = NUMBER OF DATA POINTS OUTSIDE ANALYSIS', X ' AREA',/, A I7,' = NUMBER OF PAIRS USED IN COMPUTING', X ' LAPSE RATES',/, B F7.4,' = MAXIMUM LAPSE RATE COMPUTED',/, C F7.4,' = MINIMUM LAPSE RATE COMPUTED',/, D F7.4,' = AVERAGE LAPSE RATE COMPUTED',/, E F7.4,' = STANDARD DEVIATION OF LAPSE RATES', F ' COMPUTED',/, G I7,' = NUMBER OF MINUS LAPSE RATES',/, H I7,' = NUMBER OF ZERO LAPSE RATES (COMPUTED)',/, I I7,' = NUMBER OF PLUS LAPSE RATES',/,/, X ' NOTE: ALL COMPUTATIONS AND COUNTS PERTAIN', X ' ONLY TO STATIONS WITHIN THE RADIUS OF', X ' INFLUENCE MODIFIED BY RSTAR FOR PASS 1 ON', X ' OPTION 1.') C IF(IP14.NE.0.AND.IFIRST.LE.1)THEN IFIRST=IFIRST+1 C FOR TESTING, WRITE THESE ONLY TWICE. THIS WILL BE FOR C THE FIRST AND SECOND VARIABLES. WRITE(IP14,207) 207 FORMAT(/,' LISTING OF COMPUTED LAPSE RATE WHEN NON-ZERO.', 1 ' THERE IS A LINE FOR EACH MODEL RUN',/,/, 2 ' STATION NO. CALL LETTERS AND NAME NO. PAIRS', 3 ' NO. PAIRS USED DATA VALUE LAPSE', 4 ' (PER METER)',/, 5 54X,'9999=NO USABLE PAIRS',/, 6 54X,'7777=STATION OUTSIDE R',/, 7 54X,'5555=LT 4, SET = 0',/, 8 54X,'XX=ACTUAL PAIRS USED') C DO 215 K=1,NSTA C IF(NOPAR((K)).NE.9999)THEN C IF(LTAGPT(K).NE.4)THEN CCCCCC IF(NAREA.NE.2.AND.LTAGPT(K).NE.4)THEN REPLACED 4/11/19 C DO 213 J=1,LEVELS C DO 212 L=2,NORUNS+1 C IF(XDATA(K,L,J).NE.9999.)THEN IF(IP14.NE.0)WRITE(IP14,210)K,L,J,CCALL(K),NAME(K), 1 NOPAR(K),MPAIRS(K),XDATA(K,L,J),XLAPSE(K) 210 FORMAT(' ',I5,2I3,2X,A8,2X,A20,I8,I14,F21.3,F13.6) ENDIF C 212 CONTINUE C 213 CONTINUE C ENDIF C ENDIF C 215 CONTINUE C ENDIF C C******************************************************* C FOR TEST C C*** DO 220 K=1,NSTA C*** IF(XLAPSE(K).GT.0.)XLAPSE(K)=0. C*** 220 CONTINUE C C******************************************************* CALL TIMPR(KFILDO,KFILDO,'END LAPSE ') 250 RETURN END