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