PROGRAM RAMERGE
C$$$  MAIN PROGRAM DOCUMENTATION BLOCK  ***                         
C                                                                  
C MAIN PROGRAM: RAMERGE
C   PRGMMR: DALLAVALLE      ORG: W/OST22     DATE: 2005-02-23     
C                                                                
C ABSTRACT: DRIVER FOR PROGRAM RAMERGE.  THIS PROGRAM MERGES MDL  
C   RANDOM ACCESS FILES WITH DIFFERENT DIRECTORY RECORDS.  THIS
C   CODE IS A DERIVATIVE OF U660 AND THE MOS-2000 ARCHIVE(RA2MDLP)
C   CODES.  MUCH OF THE INTERNAL DOCUMENTATION AND ARRAYS USED
C   REFLECT ITS HERITAGE.
C                          
C PROGRAM HISTORY LOG:
C   96-10-01  GLAHN
C   01-02-28  MALONEY    ADDED NCEP DOCBLOCK, ADDED CALLS TO W3TAG,
C                        REMOVED 660 FROM NORMAL STOP
C   03-10-22  COSGROVE	 INCREASED NUMBER OF STATIONS TO 6600 TO
C                        HANDLE THE COOP SITES
C   03-12-17  COSGROVE	 DID NOT MAKE # OF STATIONS BIG ENOUGH FOR
C                        COOPS.  INCREASED NUMBER OF STATIONS TO 7000.
C   05-01-26  COSGROVE   INCREASED NUMBER OF STATIONS TO 110000 FOR
C                        GRIDDED MOS WESTERN TILE
C   05-02-23  DALLAVALLE SET PARAMETER VALUES TO HANDLE THE 
C                        MERGING OF TWO RANDOM ACCESS FILES
C                        THAT WILL RESULT IN NO MORE THAN
C                        50000 STATIONS.  THIS SHOULD BE
C                        ADEQUATE FOR A PERIOD OF TIME.
C
C USAGE: 
C                                                                    
C        DATA SET USE
C        INPUT FILES:
C             FORT.XX - UNDER ORDINARY CIRCUMSTANCES, THE
C                       TWO INPUT RANDOM ACCESS FILES TO
C                       BE MERGED ARE GIVEN UNIT NUMBERS OF
C                       46 AND 48.  THIS IS A CONSTRAINT
C                       OF THE SOFTWARE USED TO READ THE
C                       RANDOM ACCESS FILES.
C             KFILDI  - UNIT NUMBER OF DEFAULT INPUT FILE.
C                       THIS IS PROBABLY SPECIFIED FOR THE SYSTEM
C                       BEING USED.  SET IN DATA STATEMENT AS 
C                       UNIT 05.
C
C        OUTPUT FILES:  (INCLUDING WORK FILES)
C             FORT.XX - UNIT NUMBER OF THE OUTPUT RANDOM 
C                       ACCESS FILE IS SPECIFIED IN THE
C                       INPUT CONTROL FILE - MUST BE UNIT 49.
C             FORT.06 - STANDARD OUT
C
C        VARIABLES
C        LET ND1  = THE MAXIMUM NUMBER OF STATIONS THAT CAN BE DEALT WITH
C                   IN THE MERGING.  THIS DOES NOT HAVE
C                   TO BE LARGE ENOUGH TO HOLD ALL THE STATIONS ON
C                   THE INPUT FILES.
C            ND4  = MAXIMUM NUMBER OF VARIABLES THAT CAN BE DEALT WITH 
C                   IN ONE RUN.  SECOND DIMENSION OF ID( , ), IDFORC( , )
C                   AND IDPARS( , ) AND DIMENSION OF TRESHL( ), TRESHU( ),
C                   ITAU( ), AND LIMIT( ).
C            ND5  = THE MAXIMUM NUMBER OF STATION CALL LETTERS ON
C                   THE INPUT FILES.  DIMENSION OF IWORK( ),
C                   DATA( ), IPACK( ), AND CCALLD( ).
C                   MUST BE GE THE LARGEST RECORD ON THE INPUT 
C                   INTERPOLATED FILE(S).  IT IS POSSIBLE THAT IT MUST
C                   BE AS LARGE AS THE PHYSICAL RECORD SIZE OF RECORDS
C                   ON THE INTERNAL STORAGE SYSTEM (NBLOCK) OR THE
C                   EXTERNAL FILE SYSTEM.  MUST ALSO BE GE ND1.
C            ND6  = MAXIMUM NUMBER OF INPUT DATA SETS  THAT 
C                   CAN BE DEALT WITH.  
C            ND7  = DIMENSION OF IS0( ), IS1( ), IS2( ), AND IS4( ).
C                   NOT ALL LOCATIONS ARE USED.  MAXIMUM SIZE IS FOR
C                   IS1( ) = 22 PLUS 32 CHARACTERS (ONE CHARACTER PER
C                   WORD) OF PLAIN TEXT = 54.  SET BY PARAMETER.
C            ND8  = MAXIMUM NUMBER OF DATES THAT CAN BE DEALT WITH.
C                   SET TO 1 FOR OPERATIONAL PURPOSES.
C            ND9  = MAXIMUM NUMBER OF FIELDS STORED IN LSTORE( , )
C                   AND MSTORE( , ).  SECOND DIMENSION OF LSTORE( , ) 
C                   AND MSTORE( , ).  NOT USED IN THIS CODE.
C            ND10 = THE MEMORY IN WORDS ALLOCATED TO THE SAVING OF 
C                   PACKED DATA IN CORE( ).  WHEN THIS
C                   SPACE IS EXHAUSTED, SCRATCH DISK WILL BE USED.
C                   NOT USED IN THIS CODE.
C        THEN IT IS SUFFICIENT THAT THE DIMENSIONS OF VARIABLES BE
C        AS INDICATED BELOW IN THIS EXAMPLE DRIVER.  NOTE THAT THE
C        VARIABLE L3264B IS SET TO 32 FOR A 32-BIT MACHINE AND TO
C        64 FOR A 64-BIT MACHINE.  L3264W AND NBLOCK WILL
C        AUTOMATICALLY ADJUST ACCORDINGLY.  ND5 SHOULD BE GE ND1.
C
C        SUBPROGRAMS CALLED: 
C             UNIQUE: - U660 (MODIFIED)
C          LIBRARY:
C           MDLLIB90: - TIMPR
C              W3LIB: - W3TAGB, W3TAGE
C
C        EXIT STATES:
C          COND =    0 - SUCCESSFUL RUN
C
C REMARKS: THE CHANGES MADE TO THE ORIGINAL U660 CODE ARE QUITE
C          SIGNIFICANT.  ANY RESEMBLANCE BETWEEN THE ORIGINAL 
C          CODE AND RAMERGE IS SUPERFICIAL.
C
C ATTRIBUTES:
C   LANGUAGE: FORTRAN 90 (xlf compiler)
C   MACHINE:  IBM SP
C
C$$$
C
      PARAMETER (L3264B=32)
      PARAMETER (L3264W=64/L3264B)
      PARAMETER (NBLOCK=6400/L3264B)
      PARAMETER (ND1=MAX(NBLOCK,50000))
C        WHEN DATA ARE IN MOS-2000 STORAGE AND ON DISK, A
C        DIAGNOSTIC WILL BE PRODUCED WHEN ND1.LT.NBLOCK.
C      PARAMETER (ND4=4000)
      PARAMETER (ND4=6000)
      PARAMETER (ND4X1=ND4*ND1)
      PARAMETER (ND5=MAX(ND1,150000))
C        ND5 MUST BE GE ND1.
      PARAMETER (ND6=30)
      PARAMETER (ND7=54)
      PARAMETER (ND8=1)
      PARAMETER (ND9=3000)
      PARAMETER (ND10=2000)
C
      CHARACTER*1 CFMT(ND4),PREC(ND4)
      CHARACTER*1 HEAD(30,ND4)
      CHARACTER*2 WDTH(ND4)
      CHARACTER*8 CCALL(ND1,6)
      CHARACTER*8 CCALLD(ND5),CCALLRA(ND5)
      CHARACTER*20 NAME(ND1)
      CHARACTER*32 PLAIN(ND4)
      CHARACTER*60 NAMIN(ND6)
C
      DIMENSION ISDATA(ND1),SDATA(ND1),NGP(ND1),XDATA(ND1),
     2          MWORK(ND1)
      DIMENSION ID(4,ND4),IDPARS(15,ND4),TRESHL(ND4),TRESHU(ND4),
     1          JD(4,ND4),INDEX(ND4),JP(3,ND4),ITAU(ND4),
     2          IWDTH(ND4),IPREC(ND4),NWHERE(ND4),ISCALD(ND4),
     3          PRINT(ND4)
      DIMENSION IPLAIN(L3264W,4,ND4)
      DIMENSION AA(ND4X1)
      DIMENSION IPACK(ND5),ICALLD(L3264W,ND5),ICALLRA(L3264W,ND5),
     1          IWORK(ND5),DATA(ND5)
      DIMENSION KFILIN(ND6),MODNUM(ND6),MSDATE(ND6),
     1          JFOPEN(ND6),MDATE(ND6),MAXTAU(ND6)
      DIMENSION INDEXC(ND1,ND6)
      DIMENSION IS0(ND7),IS1(ND7),IS2(ND7),IS4(ND7)
      DIMENSION IDATE(ND8),NWORK(ND8)
      DIMENSION LSTORE(12,ND9),MSTORE(8,ND9)
      DIMENSION CORE(ND10)
C
      EQUIVALENCE (PLAIN,IPLAIN)
      EQUIVALENCE (ICALLD,CCALLD),(ICALLRA,CCALLRA)
C
      DATA KFILDI/5/,
     1     KFILDO/06/
      DATA NGP/ND1*0/
      DATA PLAIN/ND4*' '/ 
      DATA NWHERE/ND4*0/
C
      CALL W3TAGB('MDL_RAMERGE',2005,1,2,'OST22')
      CALL TIMPR(KFILDO,KFILDO,'START RAMERGE       ')
C
      CALL U660(KFILDI,KFILDO,
     1          CCALL,ISDATA,SDATA,NGP,XDATA,MWORK,NAME,ND1,
     2          ID,IDPARS,TRESHL,TRESHU,JD,INDEX,JP,
     3          ITAU,IWDTH,WDTH,IPREC,PREC,CFMT,NWHERE,
     4          ISCALD,PRINT,HEAD,IPLAIN,PLAIN,L3264B,L3264W,ND4,
     5          AA,ND4X1,
     6          ICALLRA,CCALLRA,
     7          ICALLD,CCALLD,IPACK,DATA,IWORK,ND5,
     8          KFILIN,MODNUM,NAMIN,JFOPEN,MDATE,MAXTAU,
     9          MSDATE,INDEXC,ND6,
     A          IS0,IS1,IS2,IS4,ND7,
     B          IDATE,NWORK,ND8,
     C          LSTORE,MSTORE,ND9,
     D          CORE,ND10,NBLOCK)
C
      CALL TIMPR(KFILDO,KFILDO,'END RAMERGE         ')
      CALL W3TAGE('MDL_RAMERGE')
      STOP
      END