SUBROUTINE RATLGRDAK(KFILDO,KFIL10,IP12,ID,IDPARS,JD,NDATE,
     2                   IPACK,IWORK,DATA,ND5,KFILRA,RACESS,
     3                   FD1,ND2X3,ND11,
     4                   NSLAB,LSTORE,ND9,LITEMS,CORE,ND10,
     5                   NBLOCK,NFETCH,
     6                   IS0,IS1,IS2,IS4,ND7,
     7                   ISTAV,L3264B,L3264W,IER)
C
C        APRIL     2015  CHARBA   MDL   MOS-2000 
C          MAY     2015  CHARBA   REMOVED COUPLE 'CONTROL' BUGS IN
C                                 ORIGINAL CODE.
C          MAY     2015  KOCHENASH ADDED CALL TO SMTH9VW, TO SMOOTH OVER
C                                 WINDOW OF VARIABLE SIZE (3X3, 5X5,
C                                 7X7, ETC.
C          MAY     2015  KOCHENASH ADDED VARIABLE WT, WHICH IS THE 
C                                 SMOOTHING INDEX FOR EACH OUTPUT
C                                 VARIABLE.
C         JUNE     2015  CHARBA   MODIFIED SUCH THAT THE MINUTES IN
C                                 SECOND WORD OF THE OUTPUT VARIABLE IS
C                                 CONSISTENTLY 00, 14, 30, AND 44 EVEN
C                                 THOUGH THE MINUTES FOR THE CORRE-
C                                 SPONDING INPUT VARIABLE IS 00, 15,
C                                 30, AND 45 FOR DATES THROUGH
C                                 31 JULY 2013 (PRIOR TO A MAJOR NSSL
C                                 UPGRADE WHEREBY THE TIME RESOULTION
C                                 CHANGED FROM 5 MIN TO 2 MIN).  NOTE
C                                 THAT THE MINUTES SET IN U201.CN IS
C                                 THE TRUE VALUE FOR THE DATE INVOLVED.
C         JUNE     2015  KOCHENASH ADDED PARAMETER NUMPASS (=3) WHICH IS
C                                 THE NUMBER OF PASSES TO SMTH9VW.  BUT
C                                 SMTH9VW NOT CALLED WHERE SMOOTHING WT
C                                 IS SET TO 0.0.
C         JUNE     2015  KOCHENASH CHANGED WT TO A 2D ARRAY (3,6) FOR
C                                 3 WEIGHTING INDICES AND 6 GRIDDED 
C                                 VARIABLES.
C         JUNE     2015  KOCHENASH CHANGED THE OUTPUT GRID SPECS TO THE
C                                 CORRECTED 10KM LCC GRID (599X447).
C         JUNE     2015  CHARBA   ALSO REPLACED COMPUTATION OF THE INPUT
C                                 GRID SPECS WITH VALUES IN A PARAMETER
C                                 STATEMENT, AS THE COMPUTED VALUES WERE
C                                 INCORRECT.
C         JUNE     2015  CHARBA   MODIFIED THE RESIDENT ROUTINE CNVTGRD
C                                 SUCH THAT A PREDICTOR VARIABLE WILL
C                                 NOT BE MISSING FOR POINTS WHERE UP TO
C                                 THREE OF THE SUMMED 2X2 WINDOW POINTS
C                                 ARE MISSING.
C         JUNE     2015  CHARBA   IMPROVED DOC AND CORRECTED COORDS OF
C                                 2X2 WINDOW (5KM GRID) FOR CORRECTED
C                                 10KM GRID.  ALSO MODIFIED CNVTGRD TO
C                                 PROPERLY ACCOUNT FOR OUTSIDE-5KM-GRID
C                                 AND MISSING 5KM GRID VALUES.
C         JUNE     2015  CHARBA   REVIEWED AND CORRECTED ERROR IN CK FOR
C                                 MISSING INVOLVING COMPUTATION OF
C                                 30-MIN TL TIME CHANGE.
C         JULY     2015  SAMPLATS (CHARBA ADDED DOC 08/17/2015) FRED
C                                 ASSIGNED FINAL 3-PASS SMOOTHING WTS
C                                 ON 07/11/2015 WHICH CHARBA ASSIGNED ON
C                                 06/10/2015.  SMOOTHING IS PERFORMED ON
C                                 10KM GRID AFTER VARIABLE IS SPECIFIED
C                                 ON THAT GRID (HEREIN).
C    SEPTEMBER     2015  CHARBA   ADDED VIL AT TIME HH+1:00 TO LIST OF
C                                 DERIVED VARIABLES.
C      OCTOBER     2015  CHARBA   CHANGED NAME FROM RALTPDR TO RATLGRD
C     NOVEMBER     2015  CHARBA   REVERTED FROM 10KM 599X447 OUTPUT GRID
C                                 BACK TO 10KM 601X449 OUTPUT GRID.
C                                 THIS WAS DONE FOR CONSISTENCY AMONG
C                                 ALL (LTG, MRMS, AND HRRR) GRIDDING
C                                 CODES.
C     NOVEMBER     2015  CHARBA   REMOVED SUBROUTINE CNVTGRD AND PLACED
C                                 IT IN THE NEW FILE cnvtgrd.f.
C     DECEMBER     2015  CHARBA   ADDED DOC FOR TWO CODE CHANGES FRED
C                                 MADE ON 11/26/2015:
C                                 (1) REPLACED ALLOCATED ARRAY
C                                 WRKIN( , ) WITH AUTOMATIC ARRAY
C                                 WRKIN( , ) ...HE VAGUELY RECALLED
C                                 GETTING CORE DUMP IN FORMER CASE;
C                                 (2) ADDED SPECS FOR OUTPUT GRID WHEN
C                                 AN ERROR OCCURRED (IN WHICH CASE ALL
C                                 MISSING VALUES ARE SUPPLIED TO OUTPUT
C                                 GRID).  WHILE I QUESTION THE NEED FOR
C                                 THESE CHANGES I TOOK HIS WORD THIS
C                                 REMOVED THE CORE DUMP HE BELIEVES HE
C                                 GOT OTHERWISE AND MOVED ON. 
C        MARCH     2016  CHARBA   ADJUSTING THE DATA CUTOFF TIME FOR ALL
C                                 MRMS AND TL VARIABLES FROM HH:00 TO
C                                 HH:15 ...THE MOST RECENT OBS DATA FOR
C                                 HH LAMP CYCLE.
C                                 USE NEW APPROACH TO COMPUTE 30-MIN TL
C                                 TIME CHANGE (SEE CODE).  FINALLY, ADD-
C                                 ING INGEST OF THE MOST RECENT 30-MIN
C                                 IC AND CG GRIDS, WHICH ARE USED FOR
C                                 SPECIFYING TWO CORRESPONDING (NEW)
C                                 OUTPUT PREDICTORS.
C        MARCH     2016  CHARBA   ADAPTED THIS CODE VERSION TO MAKE IT
C                                 APPLICABLE TO ANY 15MIN TIME.           
C        APRIL     2016  CHARBA   CORRECTED CHECKING OF OUTPUT ID
C                                 AGAINST IDS STORED IN DATA STATEMENT.
C        APRIL     2016  CHARBA   INCREASED SMOOTHING FOR DELTA CREF;
C                                 DECREASED SMOOTHING FOR VIL.
C        APRIL     2016  SAMPLATSKY   ADDED LOGIC TO TRUNCATE EACH
C                                 VARIABLE TO A SPECIFIED UPPER AND
C                                 LOWER BOUND.
C        MAY       2016  CHARBA   MADE COSMETIC EDITS.
C        MAY       2016  SAMPLATSKY   RESTRUCTURED CODE, TO BE MORE IN
C                                 ALIGNMENT WITH NCO STANDARDS.  ADDED
C                                 LOGIC TO FILL IN MISSING CREF AND VIL
C                                 WITH HRRR DATA.   HRRR FILL OF CREF
C                                 AND VIL WAS RENDERED (FROM NATIVE 3KM
C                                 GRID) WITH EXACTLY THE SAME PROCEDURE
C                                 AS FOR MRMS RENDERING FROM 5KM GRID.
C        JUNE      2016   CHARBA  ADDED 0.0 - 67.0 TRUNCATION BOUNDS FOR
C                                 MRMS CREF.
C        APRIL     2017   SAMPLATSKY   UPDATED ITABLE FOR FINAL IDS.
C        MAY       2017   SAMPLATSKY   ADDED LOGIC, PRIOR TO PERFORMING
C                                 THE HRRR REPLACEMENT, TO FIND HOW
C                                 MUCH MRMS DATA IS MISSING WITHIN THE
C                                 LAMP FORECAST DOMAIN.  IF TOO MUCH
C                                 DATA IS MISSING, AN ERROR WILL BE
C                                 PRINTED AND THE ROUTINE WILL STOP,
C                                 LEADING TO FAILURE OF THE 1H CNV/LTG
C                                 SYSTEM.  THIS IS TO AVOID THE CASE
C                                 WHERE PERFORMING THE HRRR REPLACEMENT
C                                 OVER MOST OR ALL OF THE DOMAIN LEADS
C                                 TO UNDESIRABLE FORECASTS.
C        SEPTEMBER 2018   SAMPLATSKY   REMOVED LOGIC FOR IC/CG LTG, AND
C                                 ADDED LOGIC FOR 1H PRECIP AC AND NN.
C        SEPTEMBER 2020   SAMPLATSKY   UPDATED PROCESSING IDS
C
C        PURPOSE 
C	    COMPUTE AND RETURN CONVECTION AND LIGHTNING PREDICTORS ON A
C           10KM LCC GRID.  THE INPUT GRIDS CONSIST OF 5 KM MAX CREF AND
C           5 KM TL COUNTS.  THUS, TO OBTAIN AN OUTPUT GRID AN INPUT
C           GRID MUST BE PROCESSED OVER 2X2 SUB-GRIDS.  ALSO, SINCE THE
C           OUTPUT GRID IS NEW (THIS GRID IS NOT INHERENT TO THE U201
C           INGEST) THE GRID MUST BE DEFINED AND STORED IN THE U201
C           INFRASTRUCTURE.
C
C           FOR CREF PREDICTORS, THE INGEST CONSISTS MAX CREF FOR HH:30
C           AND HH+1:00 (TWO GRIDS).  THE OUTPUT CONSISTS OF THREE
C           10 KM GRIDS:  (1) MAX CREF AT HH:30, (2) MAX CREF AT
C           HH+1:00, AND (3) ITEM 2 - ITEM 1 (MAX CREF TIME CHANGE).
C           FOR TL PREDICTORS THE INPUT CONSISTS OF THE TL COUNT FOR
C           THREE TIME PERIODS:  (A) FOR HH:00 - HH:59, (B) HH:00 -
C           HH:29, AND (C) HH:30 - HH:59 (THREE GRIDS).  THE OUTPUT
C           CONSISTS OF THREE 10 KM GRIDS: (1) HH:00 - HH:59 TL COUNT,
C           (2) HH:30 - HH:59 TL COUNT, AND (3) (HH:30 - HH:59) TL COUNT
C           - (HH:00 -HH:29) TL COUNT (TL COUNT TIME CHANGE).  EACH OF
C           CREF AND TL GRIDS ARE RETURNED TO CALLING ROUTINES, WHICH
C           ALLOWS FOR POST-PROCESSING AND THE OPTION OF SPECIFYING ADD-
C           ITIONAL PREDICTOR FORMS.
C            
C           NOTE THAT GRIDBOXES FOR THE INGESTED 5KM CREF AND TL GRIDS
C           ARE POSITIONED WRT TO THE LOWER-LEFT CORNER.  THIS IS REQ-
C           UIRED FOR THE ENSUING 10KM PREDICTAND BOXES TO BE POSITIONED
C           WRT TO THEIR CENTERS.
C
C           THE ROUTINE IS STRUCTURED SUCH THAT FOR A NEW YYMMDDHH
C           ALL SIX POSSIBLE OUTPUT VARIABLES (GRIDS) ARE COMPUTED AND
C           STORED IN AN ALLOCATED ARRAY AND ONLY THE DESIRED VARIABLE
C           IS RETURNED.  THEN ON SUBSEQUENT ENTRIES FOR THE SAME
C           YYMMDDHH, PREVIOUSLY PERFORMED COMPUTATIONS ARE BYPASSED
C           AND THE DESIRED VARIABLE IS RETRIEVED AND RETURNED.
C
C
C           IDPARS(1) - IDPARS(2) FOR INPUT GRIDS ARE:
C              707 - 801  QCD MAX CREF ON 5KM GRID (LL CORNER OF BOX)
C              707 - 807  QCD MAX VIL ON 5KM GRID (LL CORNER OF BOX)
C              707 - 545  60MIN TL COUNT ON 5KM GRID (LL CORNER OF BOX)
C              707 - 550  30MIN TL COUNT ON 5KM GRID (LL CORNER OF BOX)
C              707 - 552  30MIN IC COUNT ON 5KM GRID (LL CORNER OF BOX)
C              707 - 553  30MIN CG COUNT ON 5KM GRID (LL CORNER OF BOX)
C
C                         IMP NOTES:  FOR MRMS GRIDS THE "MINUTES" FOR
C                         THE QTR HOUR TIMES CHGS FROM 2013073123
C                         (:15 OR :45) TO 2013080100 (:14 OR :44) ...
C                         THIS IS HOW THE RAW MRMS DATA ARE ARCHIVED.
C                         FOR LTG COUNT GRIDS THE "MINUTES"
C                         APPLY TO THE BEGINNING OF THE 60- OR 30-MIN
C                         PERIOD AND ARE SET IN ID(2) (IN U523).  SO,
C                         FOR BOTH INGEST GRID DATA TYPES  ID(2) IS
C                         CONTROLLED UPSTREAM OF THIS ROUTINE.
C
C           IDPARS(1) - IDPARS(2) FOR OUTPUT GRIDS ARE:
C              007 - 801  MAX CREF ON 10KM GRID (CENTER OF 10KM BOX) AT
C                         TIME HH:15(14) ...MIN SET IN ID(2) ...HH IS
C                         LAMP CYCLE (HOUR).
C              007 - 801  MAX CREF ON 10KM GRID (CENTER OF 10KM BOX) AT
C                         TIME HH-1:45 ... MIN SET IN ID(2)
C                         2 ...MIN SET IN ID(2)
C              007 - 805  30MIN MAX CREF TIME CHANGE ON 10KM GRID (CEN-
C                         TER OF 10KM BOX) AT TIME HH:15(14) ...MIN SET
C                         IN ID(2).
C              007 - 807  MAX VIL ON 10KM GRID (CENTER OF 10KM BOX) AT
C                         TIME HH:15(14)
C              007 - 545  60MIN TL COUNT ON 10KM GRID ENDING HH:15
C                         (CENTER OF 10KM BOX)
C              007 - 550  30MIN TL COUNT ON 10KM GRID ENDING HH:15
C                         (CENTER OF 10KM BOX)
C              007 - 551  30MIN TL COUNT TIME CHANGE ENDING HH:15
C                         (CENTER OF 10KM BOX) ...MIN APPLY TO HH:15.
C              007 - 552  30MIN IC COUNT ON 10KM GRID ENDING HH:15
C                         (CENTER OF 10KM BOX)
C              007 - 553  30MIN CG COUNT ON 10KM GRID ENDING HH:15
C                         (CENTER OF 10KM BOX)
C
C                         IMP NOTE:  THE "MINUTES" CONVENTION FOR ALL
C                         OUTPUT GRIDS IS THE SAME AS THE DATA CUT-OFF
C                         HH:MM.  FOR THE MRMS GRIDS THE DATA CUT-OFF
C                         "MINUTES" FOR THE QTR HOUR TIMES IS DATE
C                         DEPENDENT BUT THE MINUTES IN ID(2) IS ALWAYS
C                         SET AT EITHER 15 OR 45, SO CODE LOGIC IN THIS
C                         ROUTINE IS NEEDED TO ACCOUNT FOR THIS.
C                         SINCE THE "MINUTES" FOR ALL INGESTED
C                         LTG GRIDS APPLIES TO THE BEGINNING OF THE
C                         VALID PERIOD, CODE LOGIC IN THIS ROUTINE IS
C                         REQUIRED TO ACCOUNT FOR THE ID(2) CONVENTION
C                         SHIFT BETWEEN THE INPUT AND OUTPUT GRIDS. 
C              
C        DATA SET USE 
C            KFILDO - DEFAULT UNIT NUMBER FOR OUTPUT (PRINT) FILE 
C                       (OUTPUT). 
C            KFIL10 - UNIT NUMBER OF TDL MOS-2000 FILE SYSTEM ACCESS
C                       (INPUT-OUTPUT). 
C            IP12   - INDICATES WHETHER (>1) OR NOT (=0) THE LIST OF
C                     STATIONS ON THE INPUT FILES WILL BE PRINTED TO
C                     THE FILE WHOSE UNIT NUMBER IS IP12.
C 
C        VARIABLES 
C              KFILDO = DEFAULT UNIT NUMBER FOR OUTPUT (PRINT) FILE.
C                       (OUTPUT) 
C              KFIL10 = UNIT NUMBER OF TDL MOS-2000 FILE SYSTEM ACCESS.
C                       (INPUT-OUTPUT) 
C              IP12   = INDICATES WHETHER (>1) OR NOT (=0) THE LIST OF
C                       STATIONS ON THE INPUT FILES WILL BE PRINTED TO
C                       THE FILE WHOSE UNIT NUMBER IS IP12.
C		ID(J) = IDENTIFIERS FOR THE VARIABLE BEING COMPUTED.
C           IDPARS(J) = THE PARSED, INDIVIDUAL COMPONENTS OF THE 
C                       OUTPUT ID CORRESPONDING TO ID( ) (J=1,15).
C                       (INPUT)
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 1 
C                            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               JD(J) = THE BASIC INTEGER OUTPUT ID (J=1,4).
C                       THIS IS THE SAME AS ID(J), EXCEPT THAT THE 
C                       PORTIONS PERTAINING TO PROCESSING ARE OMITTED:
C                       B = IDPARS(3),
C                       T = IDPARS(8),
C                       I = IDPARS(13),
C                       S = IDPARS(14),
C                       G = IDPARS(15), AND THRESH.
C                       JD( ) IS USED TO IDENTIFY THE BASIC MODEL 
C                       FIELDS AS READ FROM THE ARCHIVE.  (INPUT)
C               NDATE = THE DATE/TIME FOR OUTPUT VARIABLE.  (INPUT)
C           KFILRA(J) = THE UNIT NUMBERS FOR WHICH RANDOM ACCESS FILES
C                       ARE AVAILABLE (J=1,NUMRA).  (INPUT)
C           RACESS(J) = THE FILE NAMES ASSOCIATED WITH KFILRA(J)
C                       (J=1,NUMRA)(CHARACTER*60).  (INPUT)
C               NUMRA = THE NUMBER OF VALUES IN KFILRA( ) AND RACESS( ).
C                       (INPUT)
C          CCALL(K,J) = 8-CHARACTER STATION CALL LETTERS (OR GRIDPOINT
C                       LOCATIONS FOR GRID DEVELOPMENT) TO PROVIDE
C                       OUTPUT FOR (J=1) AND 5 POSSIBLE OTHER STATION
C                       CALL LETTERS (J=2,6) THAT CAN BE USED INSTEAD
C                       IF THE PRIMARY (J=1) STATION CANNOT BE FOUND
C                       IN AN INPUT DIRECTORY (K=1,NSTA).  ALL STATION
C                       DATA ARE KEYED TO THIS LIST, EXCEPT POSSIBLY
C                       CCALLD( ).  EQUIVALENCED TO ICALL( , )
C                       (CHARACTER*8).  (INPUT/OUTPUT)
C         ICALLD(L,K) = 8 STATION CALL LETTERS AS CHARACTERS IN AN INTE-
C	                GER VARIABLE (L=1,L3264W) (K=1,ND5).
C                       EQUIVALENCED TO CCALLD( ).  (INTERNAL)
C           CCALLD(K) = 8 STATION CALL LETTERS (K=1,ND5).  THIS LIST IS 
C			USED IN L1D1 TO READ THE REGION LISTS  
C			(CHARACTER*8).  (INTERNAL)
C           ISDATA(K) = WORK ARRAY (K=1,ND1).  (INTERNAL)
C	     SDATA(N) = CONTAINS VECTOR DATA RETURNED FROM CALL TO 
C                       CONST (N=1,NSTA).  (INTERNAL)
C          DIR(K,J,M) = THE IX (J=1) AND JY (J=2) POSITIONS ON THE GRID
C                       FOR THE COMBINATION OF GRID CHARACTERISTICS M
C                       (M=1,NGRID) AND STATION K (K=1,NSTA) IN 
C		        NGRIDC( ,M).  (INPUT/OUTPUT)
C                 ND1 = MAXIMUM NUMBER OF STATIONS THAT CAN BE DEALT 
C			WITH.  DIMENSION OF SEVERAL ARRAYS.  (INPUT)
C		 NSTA = NUMBER OF OUTPUT STATIONS.  (INPUT)
C            IPACK(J) = WORK ARRAY (J=1,ND5).  (INTERNAL)  
C            IWORK(J) = WORK ARRAY (J=1,ND5).  (INTERNAL)  
C             DATA(K) = DATA (GRIDDED) RETURNED (K=1,NX10*NY10).  NOTE:
C		        DATA( ) IS DIMENSIONED ND5.  (OUTPUT)
C                 ND5 = DIMENSION OF IPACK( ), IWORK( ), AND 
C                       DATA( ).  (INPUT)
C              FD1(J) = WORK ARRAY (J=1,ND2X3).  (INTERNAL)
C            FD2(I,J) = WORK ARRAY TO HOLD OUTPUT VARIABLE IN GRID ARRAY
C			FORM (I=1,NX10,J=1,NY10).  NOTE:  DIMENSION OF 
C                       FD3( ) IN DRU201 IS ND2X3, SO A CHECK IS MADE
C                       TO SEE IF NX10*NY10 LE ND2X3.  (INTERNAL)
C            FD3(I,J) = WORK ARRAY TO HOLD OUTPUT VARIABLE IN GRID ARRAY
C			FORM (I=1,NX10,J=1,NY10).  NOTE:  DIMENSION OF 
C                       FD3( ) IN DRU201 IS ND2X3, SO A CHECK IS MADE
C                       TO SEE IF NX10*NY10 LE ND2X3.  (INTERNAL)
C               ND2X3 = DIMENSION OF FD1( ),FD2( ), AND FD3( ).
C                       (INTERNAL)
C         NGRIDC(L,M) = HOLDS THE GRID CHARACTERISTICS (L=1,6) FOR EACH
C		        GRID COMBINATION.  (M=1,NGRID)
C                       L=1--MAP PROJECTION NUMBER (3=LAMBERT, 5=POLAR
C                            STEREOGRAPHIC).
C                       L=2--GRID LENGTH IN MILLIMETERS,
C                       L=3--LATITUDE AT WHICH GRID LENGTH IS CORRECT
C			     *10000,
C                       L=4--GRID ORIENTATION IN DEGREES *10000,
C                       L=5--LATITUDE OF LL CORNER IN DEGREES *10000,
C                       L=6--LONGITUDE OF LL CORNER IN DEGREES *10000.
C               NGRID = THE NUMBER OF GRID COMBINATIONS IN NGRIDC( , ),
C		        MAXIMUM OF ND11.  NOTE:  NGRID IS INCREMENTED BY
C		        ONE IN THIS ROUTINE IF THE OUTPUT GRID IS ADDED.
C		        (INPUT/OUTPUT)
C		 ND11 = SECOND DIMENSION OF NGRIDC( , ).  (INPUT)
C	        NSLAB = SLAB OF THE GRID IN USE...SET EQUAL TO NCHECK
C			(THE OUTPUT GRID) BEFORE RETURNING TO OPTION.
C			(OUTPUT)
C         LSTORE(L,J) = THE ARRAY HOLDING INFORMATION ABOUT THE DATA 
C                       STORED (L=1,12) (J=1,LITEMS).  (INPUT-OUTPUT)
C                       L=1,4--THE 4 ID'S FOR THE DATA.
C                       L=5  --LOCATION OF STORED DATA.  WHEN IN CORE,
C                              THIS IS THE LOCATION IN CORE( ) WHERE
C                              THE DATA START.  WHEN ON DISK, 
C                              THIS IS MINUS THE RECORD NUMBER WHERE 
C                              THE DATA START.
C                       L=6  --THE NUMBER OF 4-BYTE WORDS STORED.
C                       L=7  --2 FOR DATA PACKED IN TDL GRIB, 1 FOR 
C                              NOT.
C                       L=8  --THE DATE/TIME OF THE DATA IN FORMAT
C                              YYYYMMDDHH.
C                       L=9  --NUMBER OF TIMES DATA HAVE BEEN 
C                              RETRIEVED.
C                       L=10 --NUMBER OF THE SLAB IN DIR( , ,L) AND
C                              IN NGRIDC( ,L) DEFINING THE 
C                              CHARACTERISTICS OF THIS GRID.
C                       L=11 --THE NUMBER OF THE PREDICTAND IN THE 
C                              SORTED LIST IN ID( ,N) (N=1,NPRED)
C                              FOR WHICH THIS VARIABLE IS NEEDED, WHEN 
C                              IT IS NEEDED ONLY ONCE FROM 
C                              LSTORE( , ).  WHEN IT IS NEEDED MORE
C                              THAN ONCE, THE VALUE IS SET = 7777.
C                       L=12 --USED INITIALLY IN ESTABLISHING 
C                              MOSTORE( , ). LATER USED AS A WAY OF 
C                              DETERMINING WHETHER TO KEEP THIS 
C                              VARIABLE.
C                 ND9 = THE SECOND DIMENSION OF LSTORE( , ).  (INPUT) 
C              LITEMS = THE NUMBER OF ITEMS (COLUMNS) IN LSTORE( , )
C                       THAT HAVE BEEN USED IN THIS RUN.  (INPUT)  
C             CORE(J) = THE ARRAY TO STORE OR RETRIEVE THE DATA 
C                       IDENTIFIED IN LSTORE( , ) (J=1,ND10). WHEN
C                       CORE( ) IS FULL DATA ARE STORED ON DISK.
C                       (OUTPUT)
C                ND10 = DIMENSION OF CORE( ).  (INPUT)
C              NBLOCK = THE BLOCK SIZE IN WORDS OF THE MOS-2000 RANDOM
C                       DISK FILE.  (INPUT)  
C              NFETCH = INCREMENTED EACH TIME GFETCH IS ENTERED.
C                       IT IS A RUNNING COUNT FROM THE BEGINNING OF 
C                       THE PROGRAM.  THIS COUNT IS MAINTAINED IN 
C                       CASE THE USER NEEDS IT (DIAGNOSTICS, ETC.). 
C                       NEEDS IT (DIAGNOSTICS, ETC.).  (INTERNAL)  
C               LASTL = THE LAST LOCATION IN CORE( ) USED FOR MOS-2000
C                       INTERNAL STORAGE.  INITIALIZED TO 0 ON FIRST
C                       ENTRY TO GSTORE.  ALSO INITIALIZED IN U201 IN
C                       CASE GSTORE IS NOT ENTERED.  (INPUT-OUTPUT)
C               LASTD = TOTAL NUMBER OF PHYSICAL RECORDS ON DISK FOR
C                       MOS-2000 INTERNAL STORAGE.  MUST BE CARRIED
C                       WHENEVER GSTORE IS TO BE CALLED.  (INPUT)
C              NSTORE = THE NUMBER OF TIMES GSTORE HAS BEEN ENTERED.
C                       GSTORE  KEEPS TRACK OF THIS AND RETURNS THE
C                       VALUE.  (OUTPUT)
C              IS0(J) = MOS-2000 GRIB SECTION 0 ID'S (J=1,3).
C                       (INTERNAL)
C              IS1(J) = MOS-2000 GRIB SECTION 1 ID'S (J=1,22+). 
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 IS4. NOT ALL
C                       LOCATIONS ARE USED.  (INPUT)
C               ISTAV = SET TO 0 TO INDICATE A GRID FIELD IS BEING RE-
C		        TURNED.  (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                 IER = STATUS RETURN.  (OUTPUT)
C                         0 = GOOD RETURN.
C			 33 = ERROR READING STATION IDS.
C                        53 = OUTPUT GRID IS LARGER THAN WORK ARRAYS OR
C			      ND11 MUST BE INCREASED.
C			103 = REQUESTED PREDICTOR ID IS NOT SUPPORTED.
C			IOS = NOT ABLE TO ALLOCATE MEMORY FOR STORING
C                             CONSTANT DATA.
C                       SEE GFETCH AND CONST FOR OTHER VALUES.  WHEN AN
C                       ERROR IS ENCOUNTERED, MISSING VALUES ARE ENTERED
C                       FOR THE DESIRED VARIABLE.  (OUTPUT)
C
C     OTHER VARIABLES
C	        THMIN = MINIMUM NUMBER OF NON-MISSING INPUT GRIDPOINT
C			VALUES, BELOW WHICH MISSING IS RETURNED FOR 
C			THE MAX, SUM AND AVERAGE VALUES.  (PARAMETER) 
C	       NCHECK = A PARAMETER THAT SPECIFIES THE ARRAY INDEX OF
C		        THE OUTPUT GRID.  (INTERNAL)
C                 NX10 = NUMBER OF GRIDPOINTS IN THE X-DIRECTION OF THE 
C			COMPUTATIONAL (OUTPUT) GRID.  (PARAMETER)
C                 NY10 = NUMBER OF GRIDPOINTS IN THE Y-DIRECTION OF THE 
C			COMPUTATIONAL (OUTPUT) GRID.  (PARAMETER)
C	      XMESHL2 = GRID MESHLENGTH (M) OF THE COMPUTATIONAL/OUTPUT 
C			GRID.  (PARAMETER)
C	      ORIENT2 = STANDARD LONGITUDE (DEG) OF THE COMPUTATIONAL/-
C			OUTPUT GRID.  (PARAMETER)
C		XLAT2 = STANDARD LATITUDE (DEG) OF THE COMPUTATIONAL/-
C			OUTPUT GRID.  (PARAMETER)	
C	      XLATLL2 = LATITUDE (DEG) OF THE LOWER-LEFT CORNER OF
C			THE COMPUTATIONAL/OUTPUT GRID.  (PARAMETER)
C	      XLONLL2 = LONGITUDE (DEG) OF THE LOWER-LEFT CORNER OF
C                       THE COMPUTATIONAL/OUTPUT GRID.  (PARAMETER)
C	       NPROJ2 = MAP PROJECTION TYPE OF THE COMPUTATIONAL/OUTPUT
C		        GRID;
C			=3 FOR LAMBERT;
C		        =5 FOR POLAR STEREOGRAPHIC.  (PARAMETER)
C            ID1IN(I) = ID1(1) FOR LIST OF INPUT GRIDS (I=1,3).  (DATA)
C                  NX = NUMBER OF POINTS IN X-DIRECTION OF INPUT 5-KM
C                       GRID.  (INTERNAL)
C                  NY = NUMBER OF POINTS IN Y-DIRECTION OF INPUT 5-KM
C                       GRID.  (INTERNAL)
C          WRKIN(I,J) = WORK ARRAY TO HOLD INPUT 5-KM GRID ...SPECIFI-
C                       ED AS ALLOCATABLE BECAUSE DIMENSION IS KNOWN
C                       ONLY DYNAMICALLY (I=1,NX,J=1,NY).  (ALLOCATED)
C	       NUMOUT = NUMBER OF VARIABLES THAT CAN BE PROCESSED AND
C                       OUTPUT FOR A GIVEN DATE.  (PARAMETER)	
C	    ID1OUT(I) = ID1(1) FOR LIST OF OUTPUT GRIDS (I=1,NUMOUT).
C			(DATA)
C       WT(NUMPASS,I) = WEIGHTING INDEX FOR SMOOTHING OF OUTPUT GRIDS
C                       (I=1,NUMOUT).
C         GRDOUT(I,J) = HOLDS ALL COMPUTED OUTPUT GRIDS (I=1,NX10,
C                       J=1,NY10).  (ALLOCATED)
C              NTIMES = THE NUMBER OF TIMES, INCLUDING THIS ONE, THAT 
C                       THE RECORD HAS BEEN FETCHED. THIS IS STORED 
C                       IN LSTORE(9, ).  (INTERNAL)
C               LD(J) = HOLDS THE 4 ID WORDS OF THE DATA RETRIEVED INTO
C                       FD1( ) (J=1,4).  (INTERNAL)
C               MISSP = PRIMARY MISSING VALUE INDICATOR. RETURNED AS
C		        ZERO WHEN DATA ARE NOT PACKED.  (INTERNAL) 
C               MISSS = SECONDARY MISSING VALUE INDICATOR. RETURNED AS 
C		        ZERO WHEN DATA ARE NOT PACKED.  (INTERNAL) 
C               NPACK = 2 FOR TDL GRIB PACKED DATA: 1 FOR NOT PACKED.
C                       THIS IS STORED IN LSTORE(7, ).  (INTERNAL) 
C              NWORDS = NUMBER OF WORDS RETURNED IN DATA( ).  (INTERNAL)
C
C        NONSYSTEM SUBROUTINES CALLED 
C           GFETCH, CNVTGRD, SMTH9VW, W3TAGE
C
C***********************************************************************
C
C        SPECIFY THE PARAMETERS OF THE COMPUTATIONAL/OUTPUT GRID.
C
      PARAMETER (NX=1089,NY=641,MNRAP=03)
      PARAMETER (NUMPASS=3)  ! NUMPASS IS NUMBER OF PASSES TO SMTH9VW
      PARAMETER (NUMOUT=4)   ! NUMOUT IS NUMBER OF OUTPUT VARIABLES
C
      CHARACTER*60 RACESS
C
      INTEGER,ALLOCATABLE :: RMASKC(:,:) ! COOL SEASON AK MRMS MASK
      INTEGER,ALLOCATABLE :: RMASKW(:,:) ! WARM SEASON AK MRMS MASK
C
      INTEGER KFILDO,KFIL10,IDPARS(15),ID(4),JD(4),KD(4),LD(4),
     1        NDATE,NSLAB,ND7,NSTA,
     2        ND2X3,LSTORE(12,ND9),LITEMS,ND10,NBLOCK,NFETCH,
     3        IS0(ND7),IS1(ND7),IS2(ND7),IS4(ND7),IPACK(ND5),
     4        IWORK(ND5),ISTAV,L3264B,IER
C
      INTEGER IDATADJ_CURRAD(4),IDATADJ_PRVRAD(4),IDATADJ_LTG60(4),
     1        IDATADJ_LTG30(4),IMIN_CURRADLTG(4),IMIN_PRVRAD(4),
     2        IMIN_LTG60(4),IMIN_LTG30(4),ITABLE(3,NUMOUT)
C
      REAL,ALLOCATABLE :: GRDOUT(:,:,:)
      REAL GRD2(NX,NY)
      REAL WT(NUMPASS,NUMOUT)
C
      REAL DATA(ND5),CORE(ND10),FD1(ND2X3),
     1     WRKIN(NX,NY),TRUNC(3,NUMOUT),
     2     WRKINH(NX,NY),RMASK(NX,NY)
C
      DATA NDATEO/0/     ! NDATEO = DATE ALL OUTPUT ALREADY PROCESSED
C
C             ITABLE( , ) HANDLES IDS FOR PROCESSING.
C             ITABLE(1, ) IS THE OUTPUT ID
C             ITABLE(2, ) IS THE INPUT ID
C             ITABLE(3, ) IS THE HRRR INPUT ID
C             VALUES OF 999 ARE JUST A PLACEHOLDER.
C
      DATA ((ITABLE(I,J),I=1,3),J=1,NUMOUT)
     1     /007801,707800,007800,     ! MAX CREF, CURRENT TIME
     2      007545,707380,   999,     ! SUM 60-MIN TL
     3      007550,707431,   999,     ! SUM 30-MIN TL
     4      007551,   999,   999/     ! SUM 30-MIN TL TIME CHANGE
C
C              FOR MRMS OUTPUT GRIDS 2ND ID WORD SPECIFIES THE "MINUTES"
C              PAST THE TOP OF THE HOUR (SAME AS FOR INPUT GRIDS).  FOR
C              LTG OUTPUT GRIDS 2ND ID WORD DENOTES THE "MINUTES" AT THE
C              END OF THE (60- OR 30-MIN) VALID PERIOD.
C
C        'MINUTES' = :00  :15  :30  :45
C
      DATA (IDATADJ_CURRAD(K),K=1,4)  ! INGEST DATE ADJ FOR CURR RADAR
     1              /  0,   0,   0,   0/
      DATA (IDATADJ_PRVRAD(K),K=1,4)  ! INGEST DATE ADJ FOR PREV RADAR
     1              / -1,  -1,   0,   0/
      DATA  (IDATADJ_LTG60(K),K=1,4)  ! INGEST DATE ADJ FOR 60MIN LTG 
     1              / -1,  -1,  -1,  -1/
      DATA  (IDATADJ_LTG30(K),K=1,4)  ! INGEST DATE ADJ FOR 30MIN LTG
     1              / -1,  -1,   0,   0/
      DATA (IMIN_CURRADLTG(K),K=1,4)  ! 'MINUTES' FOR CURR RAD/LTG DATA
     1              / 00,  15,  30,  45/
      DATA    (IMIN_PRVRAD(K),K=1,4)  ! 'MINUTES' FOR 30M PREV RAD DATA
     1              / 30,  45,  00,  15/
      DATA     (IMIN_LTG60(K),K=1,4)  ! 'MINUTES' FOR 60M PREV LTG DATA
     1              / 00,  15,  30,  45/
      DATA     (IMIN_LTG30(K),K=1,4)  ! 'MINUTES' FOR 30M PREV LTG DATA
     1              / 30,  45,  00,  15/
C
      DATA ((WT(I,J),I=1,3),J=1,NUMOUT) ! 3 SM PASS...NOT CALLED WHEN W=0.0
     1  /1.00,0.50,0.00, ! MAX CREF AT HH:15 ...CENTERED ON 10KM BOX
     2   1.00,0.00,0.00, ! 60MIN TL COUNT ENDING HH:15 ...10KM BOX
     3   1.00,0.00,0.00, ! 30MIN TL COUNT ENDING HH:15 ...10KM BOX
     4   1.00,0.00,0.00/ ! 30MIN TL COUNT TIME CHG AT HH:15, 10KM BOX
C
      DATA TRUNC/1.0,    0.00,   67.00,     ! CREF CURRENT
     2           1.0,    0.00, 1200.00,     ! 60 MIN TL
     3           1.0,    0.00,  600.00,     ! 30 MIN TL
     4           0.0,    0.00,    0.00/     ! 30 MIN TL TIME CHANGE
C
      DATA IFIRST/0/    ! IFIRST IS FLAG FOR ONE ALLOCATE OF GRDOUT(,,,)
      DATA NDX/0/       ! INDEX CORRESPONDING TO MINUTES
C
      SAVE NDATEO,GRDOUT,IFIRST,NDX,RMASKC,RMASKW
C
C     CALL TIMPR(KFILDO,KFILDO,'START RATLGRD        ')
C
      IER=0
C
C        ON FIRST ENTRY, DETERMINE INDEX CORRESPONDING TO 'IMINUTES'
C        FOR CURRENT CREF.  IF THE INDEX CANNOT BE DETERMINED, 
C        SET IER=103 AND RETURN MISSING VALUES IN DATA( ).
C
      IF(IFIRST.EQ.0) THEN
C
        DO KK=1,4
          IF(ID(2).EQ.IMIN_CURRADLTG(KK)) NDX=KK
        END DO
C
        IF (NDX.EQ.0) THEN
          WRITE(KFILDO,20) ID(2)
 20       FORMAT(/,' **** ID(2) = ',I10.9,' CONTAINS A MINUTES VALUE',
     1             ' THAT IS NOT ACCOMMODATED.  SET IER=103 AND ',
     2             ' RETURN MISSING VALUES.')
          IER=103
          DO NN=1,ND5
            DATA(N)=9999.0
          END DO
          RETURN     ! EXIT SUBROUTINE
        END IF
C
      END IF
C
C        CHECK TO SEE IF VARIABLE IS ACCOMMODATED IN THIS ROUTINE.  IF
C        NOT, RETURN ERROR CODE 103 AND MISSING VALUES IN DATA( ).  
C
      JVAR=0
      DO NN=1,NUMOUT
        IF (IDPARS(1).EQ.ITABLE(1,NN)/1000.AND.
     1      IDPARS(2).EQ.MOD(ITABLE(1,NN),1000)) THEN
C
          JVAR=NN
C
        END IF
      END DO
C
C        JVAR REMAINING 0 MEANS THE VARIABLE IS NOT PART OF THE ITABLE.
C
      IF (JVAR.EQ.0) THEN
        WRITE(KFILDO,40) (ID(J),J=1,4)
 40     FORMAT(/,' **** VARIABLE ',4I11.9,' NOT ACCOMODATED IN',
     1           ' RATLGRD ...SET IER=103 AND SUPPLY MISSING',
     2           ' VALUES.')
        IER=103
        DO NN=1,ND5
          DATA(N)=9999.0
        END DO
        RETURN       ! EXIT SUBROUTINE
      ENDIF
C
C        FIRST ENTRY PROCESSING:  ALLOCATE GRDOUT( , , ), ALSO
C        ALLOCATE AND POPULATE IXHROUT( , ) AND JYHROUT( , ).
C
 100  IF(IFIRST.EQ.0) THEN
C
        IF(NX*NY.GT.ND2X3) THEN
C
C           OUTPUT GRID IS LARGER THAN WORK ARRAYS; MUST ABORT COMPUTA-
C           TION OF OUTPUT VARIABLE.
C
          WRITE(KFILDO,110) NX10,NY10
 110      FORMAT(/,' ****IN RATLGRD THE',I4,'X',I4,' OUTPUT GRID CON',
     1             'TAINS MORE THAN ND2X3 POINTS ...SUPPLY MISSING VAL',
     2             'UES AND SET IER = 53')
          IER=53
          DO NN=1,ND5
            DATA(N)=9999.0
          END DO
          RETURN     ! EXIT SUBROUTINE
        END IF
C
C          ALLOCATE ARRAYS
C
        ALLOCATE (GRDOUT(NX,NY,NUMOUT))
        ALLOCATE (RMASKC(NX,NY))
        ALLOCATE (RMASKW(NX,NY))
C
C          READ IN WARM SEASON MASK, STORE IN RMASKW( , )
C
        LD(1)=447531000
        LD(2)=010170005
        LD(3)=0
        LD(4)=0
C
        CALL CONSTG(KFILDO,KFILRA,RACESS,LD,
     1              IPACK,IWORK,FD1,ND5,
     2              IS0,IS1,IS2,IS4,ND7,
     3              ISTAV,L3264B,IER)
C
        NN=1
        DO JY=1,NY
          DO IX=1,NX
            RMASKW(IX,JY)=FD1(NN)
            NN=NN+1
          END DO
        END DO
C
C          READ IN COOL SEASON MASK, STORE IN RMASKC( , )
C
        LD(1)=447531000
        LD(2)=010180005
        LD(3)=0
        LD(4)=0
C
        CALL CONSTG(KFILDO,KFILRA,RACESS,LD,
     1              IPACK,IWORK,FD1,ND5,
     2              IS0,IS1,IS2,IS4,ND7,
     3              ISTAV,L3264B,IER)
C
        NN=1
        DO JY=1,NY
          DO IX=1,NX
            RMASKC(IX,JY)=FD1(NN)
            NN=NN+1
          END DO
        END DO
C
        IFIRST=1
C
      END IF       ! IF IFIRST=0
C
C        ON THE FIRST ENTRY FOR A GIVEN DATE, COMPUTE ALL PREDICTORS,
C        STORING FINAL DATA IN THE GRDOUT( , , ) ARRAY.  PROCESSING
C        SUBSEQUENT ENTRIES FOR A GIVEN DATE CONTINUES AT LABEL 600.
C
 200  IF (NDATE.NE.NDATEO) THEN
C
C           FIRST, DETERMINE PROPER MASK TO USE ON MRMS DATA, BASED
C           ON DATE.
C
        MMDD=MOD((NDATE/100),10000)
        IF (MMDD.GE.0516.AND.MMDD.LE.0915) THEN
          DO J=1,NY
            DO I=1,NX
              RMASK(I,J)=RMASKW(I,J)
            END DO
          END DO
        ELSE
          DO J=1,NY
            DO I=1,NX
              RMASK(I,J)=RMASKC(I,J)
            END DO
          END DO
        END IF
C
C          LOOP OVER EACH VARIABLE TO DO APPROPRIATE PROCESSING.
C
        DO 490 NN=1,NUMOUT
C
C            SET UP LD( ) FOR CALLING GFETCH TO FETCH DATA.
C
          SELECT CASE (NN)
C
C              MRMS CREF CURRENT TIME.
C
            CASE (1)
              CALL UPDAT(NDATE,IDATADJ_CURRAD(NDX),LDATE)
              LD(1)=ITABLE(2,NN)*1000+(IDPARS(4)-1)
              LD(2)=IMIN_CURRADLTG(NDX)
              IF(LDATE.GE.2013080100.AND.(LD(2).EQ.15.OR.LD(2).EQ.45)) 
     1        THEN
                LD(2)=LD(2)-1
              ENDIF
              LD(3)=0
              LD(4)=JD(4)
C
C                60 MIN TL.
C
            CASE (2)
              CALL UPDAT(NDATE,IDATADJ_LTG60(NDX),LDATE)
              LD(1)=ITABLE(2,NN)*1000+(IDPARS(4)-1)
              LD(2)=IMIN_LTG60(NDX)
              LD(3)=0
              LD(4)=JD(4)
C
C                30 MIN TL.
C
            CASE (3) 
              CALL UPDAT(NDATE,IDATADJ_LTG30(NDX),LDATE)
              LD(1)=ITABLE(2,NN)*1000+(IDPARS(4)-1)
              LD(2)=IMIN_LTG30(NDX)
              LD(3)=0
              LD(4)=JD(4)
C
C                NO DATA NEEDS TO BE FETCHED, SET BOGUS LD(1) VALUE. 
C
            CASE (4)
              LD(1)=999999999
C
          END SELECT
C
C            CALL GFETCH TO FETCH DATA, WHILE WILL BE RETURNED
C            IN FD1( ).
C
          IF (LD(1).NE.999999999) THEN
            CALL GFETCH(KFILDO,KFIL10,LD,7777,LSTORE,ND9,LITEMS,
     1                  IS0,IS1,IS2,IS4,ND7,IPACK,IWORK,FD1,ND2X3,
     2                  NWORDS,NPACK,LDATE,NTIMES,CORE,ND10,NBLOCK,
     3                  NFETCH,NSLAB,MISSP,MISSS,L3264B,1,IER)
C
            IF (IER.NE.0) THEN
              WRITE (KFILDO,250) (LD(J),J=1,4),LDATE
 250          FORMAT(/,' **** IN RATLGRD THE NEEDED VARIABLE ',4I11.9,
     1                 ' FOR DATE ',I10,' COULD NOT BE FETCHED. ',
     2                 ' SUPPLY MISSING VALUES TO PREDICTOR VARIABLE.')
              DO N=1,ND2X3
                FD1(N)=9999.0
              END DO
            END IF
C
C              TRANSFER FD1( ) INTO THE GRID ARRAY WRKIN(NX,NY).
C
            KK=0
            DO JY=1,NY
              DO IX=1,NX
                KK=KK+1
                WRKIN(IX,JY)=FD1(KK)
              END DO
            END DO
C
          END IF          ! IF (LD(1).NE.999999999)
C
C            FOR MRMS CREF, INGEST RAP CREF FOR THE PURPOSE OF
C            SUBSTITUTING RAP DATA WHERE THE MRMS DATA ARE MISSING.
C
 300      IF (NN.EQ.1) THEN
C
C              CALL GFETCH TO FETCH RAP GRID.  NOTE THAT FOR THE RAP, 
C              THE MODEL DATE WILL ALWAYS BE 3 HR EARLIER THAN THE MRMS
C              OBS DATE.  THE 3 HR PROJECTION WILL BE USED FOR FETCHING
C              A TIME MATCHED RAP GRID.
C
            CALL UPDAT(NDATE,-3,LDATE)
            LD(1)=(ITABLE(3,NN)*1000)+MNRAP
            LD(2)=0
            LD(3)=3     ! 3H PROJ
            LD(4)=0
C
            CALL GFETCH(KFILDO,KFIL10,LD,7777,LSTORE,ND9,LITEMS,
     1                  IS0,IS1,IS2,IS4,ND7,IPACK,IWORK,FD1,ND2X3,
     2                  NWORDS,NPACK,LDATE,NTIMES,CORE,ND10,NBLOCK,
     3                  NFETCH,NSLAB,MISSP,MISSS,L3264B,1,IER)
C
C              IF THERE IS AN ERROR IN FETCHING THE RAP, JUST SET
C              THE FD1( ) ARRAY TO MISSING, AND ALLOW PROCESSING TO
C              CONTINUE.
C
            IF (IER.NE.0) THEN
              WRITE(KFILDO,310) (LD(J),J=1,4),LDATE
 310          FORMAT(/,' UNABLE TO FETCH HRRR DATA ',4I10.9,
     1                 ' FOR DATE ',I10,' ... SET HRRR DATA TO',
     2                 ' MISSING.')
              DO KK=1,ND2X3
                FD1(KK)=9999.0
              END DO
            END IF
C
C              TRANSFER DATA FROM FD1( ) TO WRKINH( , ).
C              CHANGE (PRESUMABLY) UNDEFINED NEGATIVE CREF
C              VALUES TO 0.
C
            KK=0
            DO JY=1,NY
              DO IX=1,NX
                KK=KK+1
                WRKINH(IX,JY)=FD1(KK)
                IF (WRKINH(IX,JY).LT.0.0) WRKINH(IX,JY)=0.0
              ENDDO
            ENDDO
C
C               WRKINH( , ) WILL CONTAINS THE RAP CREF.
C               WRKIN( , ) WILL CONTAIN THE MRMS CREF.
C               APPLY MASK TO THE MRMS, AND MERGE THE MRMS+RAP.
C
            DO JY=1,NY
              DO IX=1,NX
C
                IF ((RMASK(IX,JY).LT.0.5).OR.(RMASK(IX,JY).GT.1.5)) THEN
                  WRKIN(IX,JY)=9999.0
                END IF
C
                IF (WRKIN(IX,JY).GT.9998.5) THEN
                  WRKIN(IX,JY)=WRKINH(IX,JY)
                END IF
              END DO
            END DO
C
          END IF        ! IF (NN=1)
C
C            TRANSFER DATA FROM WRKIN( , ) TO GRDOUT( , , ).
C 
          IF (NN.LE.3) THEN
            DO JY=1,NY
              DO IX=1,NX
                GRDOUT(IX,JY,NN)=WRKIN(IX,JY)
              END DO
            END DO
C
C            SPECIAL PROCESSING - NN=4
C            COMPUTE AND STORE IN GRDOUT( , ,4) THE 30-MIN TL COUNT TIME
C            CHANGE ENDING HH:IMIN_CURRADLTG(NDX).
C
          ELSE IF (NN.EQ.4) THEN
            DO JY=1,NY
              DO IX=1,NX
                IF (GRDOUT(IX,JY,2).LT.9998.5.AND.
     1              GRDOUT(IX,JY,3).LT.9998.5) THEN
                  GRDOUT(IX,JY,4)=2.0*GRDOUT(IX,JY,3)-GRDOUT(IX,JY,2)
                ELSE
                  GRDOUT(IX,JY,4)=9999.0
                END IF
              END DO
            END DO
          END IF
C
 490    CONTINUE          ! DO NN=1,NUMOUT
C
C          ALL OUTPUT GRIDS ARE NOW COMPUTED AND STORED.  SET NDATEO TO
C          NDATE.
C
 500    NDATEO=NDATE
C
      END IF               ! IF (NDATE.NE.NDATEO)
C
C        TRUNCATE VARIABLE AS DEFINED IN TRUNC( , ) ARRAY.
C        TRUNC(1, ) = 1 MEANS PERFORM TRUNCATION.
C        TRUNC(2, ) IS THE LOWER TRUNCATION BOUND.
C        TRUNC(3, ) IS THE UPPER TRUNCATION BOUND.
C
 600  IF (NINT(TRUNC(1,JVAR)).EQ.1) THEN
C
C          INITIALIZE COUNTERS FOR TRUNCATION RESULTS.
C
        NTRUNCLO=0
        NTRUNCHI=0
C
C          PERFORM TRUNCATION.  NOTE THAT FOR THE VIL, CODED
C          INDETERMINE VALUES WILL GET SET TO 0 IF TRUNCATION
C          IS ACTIVATED, AND MIN SET TO 0.0.  THIS WILL SHOW
C          A HIGH COUNT OF TRUNCATED VALUES IN THE FORT.
C
        DO JY=1,NY
          DO IX=1,NX
C
            IF (GRDOUT(IX,JY,JVAR).LT.9998.5) THEN
              IF (GRDOUT(IX,JY,JVAR).LT.TRUNC(2,JVAR)) THEN
                GRDOUT(IX,JY,JVAR)=TRUNC(2,JVAR)
                NTRUNCLO=NTRUNCLO+1
              END IF
              IF (GRDOUT(IX,JY,JVAR).GT.TRUNC(3,JVAR)) THEN
                GRDOUT(IX,JY,JVAR)=TRUNC(3,JVAR)
                NTRUNCHI=NTRUNCHI+1
              END IF
            END IF
C
          END DO
        END DO
C
C          DIAGNOSTIC PRINT FOR TRUNCATION, IF IT OCCURRED.
C
        IF ((NTRUNCLO.GT.0).OR.(NTRUNCHI.GT.0)) THEN
          WRITE(KFILDO,620) NDATE,(ID(K),K=1,4),NTRUNCLO,TRUNC(2,JVAR),
     1                      NTRUNCHI,TRUNC(3,JVAR)
 620      FORMAT(' ON DATE ',I10,' FOR VARIABLE ',4I11.9,' THERE WERE',
     1           I7,' VALUES BELOW ',F8.2,' AND ',I7,' VALUES ABOVE',
     2           F8.2,' TRUNCATED.')
        END IF
C
      END IF        ! END OF TRUNCATION
C
C        PRIOR TO SMOOTHING, FOR THE MRMS VARIABLES, NON-MISSING 
C        DATA AT THIS POINT DOES NOT FILL THE ENTIRE 10KM GRID, DUE
C        TO THE 3KM HRRR GRID JUST BEING A SUBSET.  IF ONLY A SUBSET
C        OF THE GRID IS MISSING THEN SET MISSING VALUES TO 0.  THIS
C        IS DONE FOR THE FOLLOW-UP U150 RUN, SO THERE ARE NO MISSING
C        VALUES ON THE GRID.
C
      IF (JVAR.LE.4) THEN
C
C          FIRST LOOP COUNTS UP MISSING VALUES
C
        NMISS=0
        DO JY=1,NY
          DO IX=1,NX
            IF (GRDOUT(IX,JY,JVAR).GT.9998.5) NMISS=NMISS+1
          END DO
        END DO
C
C          SECOND LOOP WILL SET MISSING VALUES TO 0, PROVIDED
C          ONLY A SUBSET OF THE DOMAIN IS MISSING.
C
        IF (NMISS.LT.NX*NY) THEN
          DO JY=1,NY
            DO IX=1,NX
              IF (GRDOUT(IX,JY,JVAR).GT.9998.5) GRDOUT(IX,JY,JVAR)=0.0
            END DO
          END DO
        END IF
C
      END IF         ! IF JVAR.LE.4
C
C        PERFORM SMOOTHING ON 10KM OUTPUT GRID TO BE RETURNED
C
      DO 640 II=1,NUMPASS
        IF (WT(II,JVAR).NE.0.0) THEN
          CALL SMTH9VW(GRDOUT(1,1,JVAR),NX,NY,WT(II,JVAR),GRD2,
     1                 9999.,1)
        ENDIF
 640  CONTINUE
C
C        MOVE GRIDDED VARIABLE TO THE ONE-DIMENSIONAL OUTPUT ARRAY.
C
      KK=0
      DO JY=1,NY
        DO IX=1,NX
           KK=KK+1
           DATA(KK)=GRDOUT(IX,JY,JVAR)
        END DO
      END DO
C
C        SET NSLAB AND ISTAV TO SPECIFY GRID OUTPUT.
C
      NSLAB=1
      ISTAV=0
C
c     WRITE(KFILDO,670) NGRID,NSLAB,ID
c670  FORMAT(/,' AT THE END OF RATLGRD, NGRID=',I4,2X,'NSLAB=',I4,
c    1         '  ID( ) = ',4I11.9)
C     
C     CALL TIMPR(KFILDO,KFILDO,'END RATLGRD          ')
C
 999  RETURN
      END