SUBROUTINE INT_RADPREP(KFILDI,KFILDO,KFILDT,KFILDK, 1 KFILGO,KFILLT,KFILRA, 2 IP,IUSE,IDATE,NDATES,PLAIN, 3 ND1,ND4,ND8,L3264B,L3264W, 4 IDPARS,ID,IOUTG,IOUTL,DATLIT,RACESS, 5 IOUTK,MODNO,DATRAD,INCCYL,ISCALD, 6 NPROJ,NX,NY,XLATLL,YLONLL,XMESHL,ORIENT, 7 XLAT,LNGTH,NVRBL, 8 IPINIT,ISTOP,IER) C$$$ MAIN PROGRAM DOCUMENTATION BLOCK *** C C MAIN PROGRAM: INT_RADPREP C PRGMMR: WIEDENFELD ORG: OST21 DATE: 2005-08-15 C C ABSTRACT: INT_RADPREP READS THE THE OUTPUT GRID SPECS AND I/O FILE NAMES C AND UNIT NUMBERS FROM THE RADPREP.CN FILE. SOME INITIALIZATION C FOR RADPREP IS ALSO INCLUDED. C C PROGRAM HISTORY LOG: C MAY 2005 WEISS MDL NEW MOS-2000 CODE C AUGUST 2005 WEISS MDL FINALIZED CODE: COMBINATION OF C COSMETIC CHANGES AND SIMPLIFIED C THE DK RADAR DATA NAME READING C ARGUMENTS KFILIN, NAMIN, MODNUM, AND C NUMIN REPLACE BY KFILDK,IOUTK, C MODNO, AND DATRAD. C AUGUST 2005 WIEDENFELD MDL MODIFIED FOR USE IN OPERATIONS. C OCTOBER 2012 CHARBA MDL CHANGED NON-STANDARD SYNTAX FOR C DATA INTIALIZATION FOR RUNID TO C SATISFY INTEL COMPILER. C OCTOBER 2020 GHIRARDELLI MDL REMOVED PART OF CODE THAT C CHECKED THAT ON DATES BEING IN C SEQUENCE SINCE THIS ONLY PROCESSES C ONE DATE AT A TIME C C DATA SET USE C INPUT FILES: C FORT.KFILDI - UNIT NUMBER OF INPUT RADPREP CONTROL FILE. C (INPUT) C FORT.KFILDT - UNIT NUMBER FOR READING THE DATE LIST. C FORT.KFILDK - UNIT NUMBER FOR THE DK RADAR INPUT SEQUENTIAL C FILE (INPUT) C FORT.KFILRA - UNIT NUMBER OF INPUT RANDOM ACCESS MASK FILE C CONTAINING MOS-2000 CONSTANT DATA. (INPUT) C FORT.KFILLT - UNIT NUMBER FOR THE LIGHTNING INPUT SEQUENTIAL C FILE (INPUT) C FORT.KFILP - UNIT NUMBER FOR READING THE LIST OF JC/QC RADAR C VARIABLE IDS TO OUTPUT TO THE OUTPUT FILE C (INPUT) C FORT.KFILCP - UNIT NUMBER FOR PREDICTOR CONSTANT FILE. C (INPUT) C OUTPUT FILES: C FORT.KFILDO - UNIT NUMBER OF OUTPUT (PRINT) FILE. (OUTPUT) C FORT.KFILGO - UNIT NUMBER FOR THE GRIDPOINT OUTPUT JC/QC RADAR C SEQUENTIAL FILE. (OUTPUT) C C FORT.IP(J) - UNIT NUMBERS FOR OPTIONAL OUTPUT (J=1,25) C (SEE IP( ) UNDER "VARIABLES" BELOW.) (OUTPUT) C C VARIABLES C KFILDI = UNIT NUMBER TO READ INPUT FILE 'lmp_radprep.cn'. C (INPUT) C KFILDO = UNIT NUMBER OF OUTPUT (PRINT) FILE. INITIALLY, C THIS IS INPUT EQUAL TO 12. LATER, IN IPOPEN, C IF IP(1) NE 0, KFILDO IS SET = IP(1). THIS ALLOWS C CHANGING THE "DEFAULT" PRINT FILE ON THE FLY. C OTHERWISE, ON SOME SYSTEMS, THE OUTPUT FILE MIGHT C HAVE THE SAME NAME AND BE OVERWRITTEN. WHEN THE C OUTPUT FILE IS NOT THE ORIGINAL DEFAULT, THE NAME C IS GENERATED AND CAN BE DIFFERENT FOR EACH RUN. C THIS ALLOWS SAVING EACH OUTPUT AND NOT HAVING IT C OVERWRITTEN. (INPUT-OUTPUT) C KFILDT = UNIT NUMBER FOR READING THE DATE LIST. (INPUT) C KFILDK = UNIT NUMBER FOR THE DK RADAR INPUT SEQUENTIAL C FILE (INPUT) C KFILLT = UNIT NUMBER FOR THE LIGHTNING INPUT SEQUENTIAL C FILE (INPUT) C KFILRA = UNIT NUMBER OF THE EXTERNAL RANDOM ACCESS C MASK FILE. (OUTPUT) C KFILGO = UNIT NUMBER FOR THE GRIDPOINT OUTPUT JC/QC RADAR C SEQUENTIAL FILE. (OUTPUT) C IP(J) = EACH VALUE (J=1,25) INDICATES WHETHER (>1) C OR NOT (=0) CERTAIN INFORMATION WILL BE WRITTEN. C WHEN IP( ) > 0, THE VALUE INDICATES THE UNIT C NUMBER FOR OUTPUT. THESE VALUES SHOULD NOT BE THE C SAME AS ANY KFILX VALUES EXCEPT POSSIBLY C KFILDO, WHICH IS THE DEFAULT OUTPUT FILE. THIS IS C ASCII OUTPUT, GENERALLY FOR DIAGNOSTIC PURPOSES. C THE FILE NAMES WILL BE 4 CHARACTERS 'RADPREP', C THEN 4 CHARACTERS FROM IPINIT, THEN 2 CHARACTERS C FROM IP(J) (E.G., 'U140HRG140'). THE ARRAY IS C INITIALIZED TO ZERO IN CASE LESS THAN THE EXPECTED C NUMBER OF VALUES ARE READ IN. EACH OUTPUT ASCII C FILE WILL BE TIME STAMPED. NOTE THAT THE TIME C ON EACH FILE SHOULD BE VERY NEARLY THE SAME, BUT C COULD VARY BY A FRACTION OF A SECOND. IT IS C INTENDED THAT ALL ERRORS BE INDICATED ON THE C DEFAULT, SOMETIMES IN ADDITION TO BEING INDICATED C ON A FILE WITH A SPECIFIC IP( ) NUMBER, SO THAT C THE USER WILL NOT MISS AN ERROR. C (1) = ALL ERRORS AND OTHER INFORMATION NOT C SPECIFICALLY IDENTIFIED WITH OTHER IP( ) C NUMBERS. WHEN IP(1) IS READ AS NONZERO, C KFILDO, THE DEFAULT OUTPUT FILE UNIT NUMBER, C WILL BE SET TO IP(1). WHEN IP(1) IS READ C AS ZERO, KFILDO WILL BE USED UNCHANGED. C (2) = THE INPUT DATES IN IDATE( ). WHEN THERE C ARE ERRORS, PRINT WILL BE TO UNIT KFILDO AS C WELL AS TO UNIT IP(2). C (3) = THE OUTPUT DATES IN IDATE( ). WHEN THERE C ARE ERRORS, OUTPUT WILL BE TO UNIT KFILDO AS C WELL AS TO UNIT IP(3). C (4) = THE INPUT DK RADAR SEQUENTIAL FILE(S). IF C THERE ARE NO INPUT SEQUENTIAL FILES, A C MESSAGE WILL BE WRITTEN TO THE DEFAULT OUTPUT C FILE UNIT KFILDO AS WELL AS TO UNIT IP(4). C (5) = THE INPUT GRIDDED MASK RANDOM ACCESS FILE. C IF THERE ARE NO INPUT RANDOM ACCESS FILES, A C MESSAGE WILL BE WRITTEN TO THE DEFAULT OUTPUT C FILE UNIT KFILDO AS WELL AS TO UNIT IP(5). C (6) = THE OUTPUT JC QC RADAR RADSEQUENTIAL FILE C IF ANY OF THE OUTPUT FILES ARE MISSING, A C MESSAGE WILL BE WRITTEN TO THE DEFAULT OUTPUT C FILE UNIT KFILDO AS WELL AS TO UNIT IP(6). C (9) = THE OUTPUT VARIABLE IDS ARE WRITTEN TO C UNIT IP9 AS THE VARIABLES ARE READ IN. C THIS SHOULD BE USEFUL FOR CHECKOUT. C CHECKOUT. C (10) = THE VARIABLE LIST WILL BE WRITTEN TO UNIT C IP10 PARSED INTO ITS 15 INTEGER COMPONENTS. C 15 INTEGER COMPONENTS. IF THERE ARE INPUT C ERRORS, THE VARIABLE LIST WILL BE WRITTEN C TO THE DEFAULT OUTPUT FILE UNIT KFILDO AS WELL AS C TO UNIT IP10 IF THEY ARE DIFFERENT. C NOTE: FOR BOTH NON-ADJUSTED AND ADJUSTED C VARIABLES. C IUSE(J) = EACH VALUE J PERTAINS TO IP(J). WHEN AN IP(J) C VALUE IS USED BY THE PROGRAM, IPRINT(J) = 1; C OTHERWISE, IPRINT(J) = 0. USED BY IPRINT TO C PRINT IP( ) VALUES. C IDATE(J) = INITIAL DATE LIST (J=1,NDATES) WHICH MAY CONTAIN C NEGATIVE VALUES INDICATING A DATE SPAN. C THIS IS MODIFIED IN DATPRO TO CONTAIN THE COMPLETE C DATE LIST WITH THE DATES IN THE SPANS FILLED IN C (J=1,NDATES), WHERE NDATES HAS BEEN INCREASED C IF NECESSARY. DATES ARE INPUT AS YYMMDDHH AND C MODIFIED TO YYYYMMDDHH. ZEROS IN THE INPUT ARE C ELIMINATED. TERMINATOR IS 99999999. MAXIMUM C NUMBER OF DATES IS ND8. (OUTPUT) C NDATES = THE NUMBER OF DATES IN IDATE( ). (OUTPUT) C PLAIN(N) = THE PLAIN LANGUAGE DESCRIPTION OF THE VARIABLES C (N=1,ND4). (CHARACTER*32) (OUTPUT) C ND1 = MAXIMUM NUMBER OF STATIONS THAT CAN BE DEALT WITH. C (INPUT) C ND4 = MAXIMUM NUMBER OF VARIABLES THAT CAN BE DEALT WITH C IN ONE RUN. SECOND DIMENSION OF ID( , ), IDFORC( , ) C AND IDPARS( , ). C L3264B = INTEGER WORD LENGTH IN BITS OF MACHINE BEING USED C (EITHER 32 OR 64). (INPUT) C L3264W = NUMBER OF WORDS IN 64 BITS (EITHER 1 OR 2). C (INPUT) C IDPARS(J,N) = THE PARSED, INDIVIDUAL COMPONENTS OF THE VARIABLE C ID'S CORRESPONDING TO ID( ,N) GENERATED IN C RDVRBL. (J=1,15), (N=1,NVRBL). C (OUTPUT) C J=1--CCC (CLASS OF VARIABLE), C J=2--FFF (SUBCLASS OF VARIABLE), C J=3--B (BINARY INDICATOR), C 0 = NOT BINARY, C 1 = CUMULATIVE FROM ABOVE, VALUES GE LOWER THRESHOLD C TRESHL = 1, C 2 = CUMULATIVE FROM BELOW, VALUES LT UPPER THRESHOLD C TRESHU = 1. C 3 = DISCRETE BINARY. VALUES GE LOWER THRESHOLD AND C LT UPPER THRESHOLD = 1. C 5 = GRID BINARY. VALUES GE LOWER THRESHOLD C ONLY THE VALUE OF 0, 1, OR 5 SHOULD BE USED FOR C PREDICTORS; C 0, 1, 2, OR 3 CAN BE USED FOR PREDICTANDS. 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 LAYER), C J=7--LTLTLTLT (TOP OF LAYER), C J=8--T (TRANSFORMATION), C J=9--RR (RUN TIME OFFSET, ALWAYS + AND BACK 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). THIS HAS NO MEANING C EXCEPT IN U201, AND IS SET TO ZERO. THIS C IN CASE THE SAME VARIABLE LIST IS USED IN C U201 AND OTHER PROGRAMS, SUCH AS U600. C ID(J,N) = THE INTEGER OUTPUT VARIABLE IDS (J=1,4) C (N=1,ND4).(OUTPUT) C IOUTG = THE SEQUENTIAL JC/QC RADAR OUTPUT FILE UNIT C NUMBER (OUTPUT) C IOUTL = THE SEQUENTIAL LIGHTNING DATA INPUT FILE UNIT C NUMBER (OUTPUT) C DATLIT = THE DATA SET NAME FOR THE INPUT LIGHTNING DATA C (CHARACTER*60) INPUT. C RACESS = FILE NAME OF THE EXTERNAL RANDOM ACCESS MASK C FILE. ONLY ONE IS ALLOWED (CHARACTER*60). (OUTPUT) C IOUTK = THE SEQUENTIAL DK RADAR DATA INPUT FILE UNIT C NUMBER (OUTPUT) C MODNO = THE "MODEL" NUMBER CORRESPONDING TO KFILDK, C THE DK RADAR DATA. C DATRAD = THE DATA SET NAME FOR THE INPUT DK RADAR DATA C (CHARACTER*60) INPUT. C INCCYL = THE NUMBER OF HOURS BETWEEN DATES WHEN DATE SPANNING C IS USED. (INTERNAL/OUTPUT) C ISCALD(N) = THE DECIMAL SCALING CONSTANT TO USE WHEN PACKING THE C COLLATED DATA (N=1,ND4). NO BINARY SCALING IS C PROVIDED FOR. ISCALD COMES FROM THE VARIABLE C CONSTANT FILE, MODIFIED TO BE 2 FOR GRID BINARIES, C AND 0 FOR BINARIES. ZERO WHEN NOT FOUND IN THE C FILE. (OUTPUT) C NPROJ = MAP PROJECTION OF THE OUTPUT GRID. C NX = X-EXTENT OF THE OUTPUT GRID. C NY = Y-EXTENT OF THE OUTPUT GRID. C XLATLL = LATITUDE OF LOWER LEFT CORNER POINT OF THE C OUTPUT GRID. C YLONLL = WEST LONGITUDE OF LOWER LEFT CORNER POINT C OF THE OUTPUT GRID. DO NOT USE NEGATIVE. C XMESHL = MESH LENGTH OF OUTPUT GRID IN KM AT XLAT DEGREES C NORTH LATITUDE. C ORIENT = ORIENTATION OF OUTPUT GRID IN DEGREES WEST C LONGITUDE. DO NOT USE NEGATIVE. C XLAT = LATITUDE OF OUTPUT GRID IN DEGREES AT WHICH C XMESHL APPLIES. ALSO THE LATITUDE WHERE THE C PROJECTION CUTS THE EARTH. DO NOT USE NEGATIVE. C LNGTH = LINE LENGTH FOR PRINTING TO IP(16). (OUTPUT) C NVRBL = THE NUMBER OF VARIABLES. (OUTPUT) C IPINIT = 4 CHARACTERS USED TO HELP IDENTIFY OUTPUT ASSOCIATED C WITH THE IP( ) NUMBERS. (CHARACTER*4) (OUTPUT) C ISTOP = 0 MEANS THE PROGRAM IS RUNNING OK UP TO THIS C POINT. WHENEVER AN ERROR OCCURS THAT SHOULD C HALT THE PROGRAM AFTER INPUT DIAGNOSTICS ARE C PRINTED, ISTOP IS SET = ISTOP+1. (INPUT-OUTPUT) C IER = STATUS RETURN. C 0 = GOOD RETURN. C OTHER VALUES CAN COME FROM CALLED SUBROUTINES. C (OUTPUT) C C ADDITIONAL VARIABLES C CONNAM = HOLDS DATA SET NAME FOR THE UNIT NUMBER IN KFILCP. C (CHARACTER*60) (INTERNAL) C DATNAM = FILE NAME FOR READING DATE LIST. C (CHARACTER*60) (INTERNAL) C IOUTP = THE PREDICTOR VARIABLE LIST UNIT NUMBER (INTERNAL) C OUTGRD = FILE NAME FOR READING THE SEQUENTIAL JC/QC RADAR C OUTPUT FILE. (CHARACTER*60) (INTERNAL) C PRENAM = HOLDS DATA SET NAME FOR THE UNIT NUMBER C IN KFILP. (CHARACTER*60) (INTERNAL) C JD(J,N) = THE BASIC INTEGER VARIABLE IDS (J=1,4) (N=1,ND4). C THIS IS THE SAME AS ID(J,N), EXCEPT THAT THE FOLLOWING C PORTIONS ARE OMITTED: C B = IDPARS(3, ), C G = IDPARS(15, ), C JD( , ) IS USED IN SETPLN. THE "G" VARIABLE HAS C HAS NO MEANING IN U370. (OUTPUT) C KFILP = UNIT NUMBER OF SELECTED VARIABLE IDs TO PROCESS C TO THE JC/QC RADAR OUTPUT FILE. C KFILCP = UNIT NUMBER FOR PREDICTOR CONSTANT FILE. THIS C CONTAINS DEFAULT VALUES FOR CERTAIN CONSTANTS FOR C BASIC NMC PREDICTORS AND OTHER PREDICTORS SANS C THRESHOLDS, ETC. THESE INCLUDE PACKING CONSTANTS, C GRIDPOINT CONSTANTS, AND NAMES. (INTERNAL) C ITEMP(J) = SCRATCH ARRAY (J=1,7). (INTERNAL) C NWORK(J) = A WORK ARRAY (J=1,ND8). (INTERNAL) C IDUM = USED IN CALLING SEQUENCE TO RDSNAM. IT IS USED C WITH THE NEXT VARIABLE BEING 1, SO THE ARRAY C IN RDSNAM WILL BE DIMENSIONED 1. (INTERNAL) C NUMRA = THE NUMBER OF INPUT RANDOM ACCESS FILES C NAMES TO READ (WILL ALWAYS BE ONE). C (INTERNAL) C RUNID = INFORMATION INPUT TO IDENTIFY THE OUTPUT ON C KFILDO. (CHARACTER*72) (INTERNAL) C STATE = VARIABLE SET TO STATEMENT NUMBER TO INDICATE C PRINT IP( ) VALUES. (INTERNAL) C C SUBPROGRAMS CALLED: C IPOPEN, IPRINT, TIMPR, RDSNAM, GET_NCEPDATE, W3TAGE, RDVRBL, IERX C C UNIQUE - RDVRBL C MDLLIB - IPOPEN, IPRINT, TIMPR, RDSNAM, GET_NCEPDATE,IERX, C W3LIB - W3TAGE C C EXIT STATES: C COND = 0 - SUCCESSFUL RUN C 151 - CANNOT OPEN NCEPDATE FILE C 160 - NO INPUT RADAR FILE C 166 - TOO MANY INPUT RADAR FILES GIVEN C 200 - NO OUTPUT RADAR FILE SUPPLIED C 250 - NO RADAR ID LIST PROVIDED C 261 - NO MOS2000 ID LIST PROVIDED C 265 - PROBLEM READING ID LIST C 285 - INCONSISTENCY WITH UNIT NUMBERS C 390 - INCONSISTENCY WITH UNIT NUMBERS INCLUDING IP C 1251 - PROBLEM WITH CONTROL FILE C 1285 - NON SUPPORTED MAP PROJECTION C 9999 - PROBLEM READING CONTROL FILE INFORMATION C C INTEGER, PARAMETER :: NT=7 C INTEGER :: KFILDI, KFILDO, KFILDT, KFILLT, 1 KFILGO, KFILP, KFILRA, KFILDK, 2 IP, IUSE, ND1, ND4, ND8, L3264B, L3264W, 3 ID, JD, KFILCP, 4 IDATE, NDATES, 5 IOUTG,IOUTP,IOUTL,IOUTK,MODNO, 6 ITEMP, NWORK, IER C INTEGER :: IDPARS INTEGER :: ISTOP, IOS, IOSTAT, I, J, N, IDUM INTEGER :: NPROJ, NX, NY, LNGTH, NVRBL, INCCYL INTEGER :: ISCALD, NUMRA C REAL :: XLATLL,YLONLL,XMESHL,ORIENT,XLAT C CHARACTER*4 :: STATE, IPINIT CHARACTER*32 :: PLAIN CHARACTER*60 :: DATNAM,OUTGRD,DATLIT,DATRAD, 1 PRENAM,CONNAM,RACESS CintelCHARACTER*72 :: RUNID/' '/ ! (SEE 'DATA' INITIALIZATION BELOW) CHARACTER*72 RUNID C C DIMENSION IDPARS(15,ND4),IDATE(ND8),ITEMP(7),NWORK(ND8) C DIMENSION IP(25),IUSE(25),ID(4,ND4),JD(4,ND4), 1 ISCALD(ND4),PLAIN(ND4) C DATA KFILP/0/ Cintel Cintel CHANGED INTIALIZATION FOR RUNID (SEE LINE BELOW) Cintel DATA RUNID /' '/ C C INITIALIZE ARRAYS C DO 90 I = 1, ND4 PLAIN(I) = ' ' ISCALD(I) = 0 DO 81 J = 1, 15 IDPARS(J,I) = 0 81 CONTINUE 90 CONTINUE C NVRBL = 0 C C C START START START START C C STEP 1. READ IN ALL .CN INPUT/OUTPUT PARAMETERS C INCLUDING GRID SPECIFICATIONS. C C C THE KFILDO OUTPUT HAS BEEN TIME STAMPED IN THE DRIVER. C NOTE THAT THIS IS ON THE DEFAULT OUTPUT FILE KFILDO. C IF IP(1) NE 0, KFILDO IS SET TO IP(1) AND IS TIME STAMPED C BELOW. C STATE='105 ' C ****COMMENTED OUT FOR LAMP OPERATIONS**** C OPEN(UNIT=KFILDI,FILE='RADPREP.CN',STATUS='OLD',IOSTAT=IOS, C * ERR=900) C ****************************************** C STATE='108 ' READ(KFILDI,108,IOSTAT=IOS,ERR=900,END=109)IPINIT,(IP(J),J=1,25) 108 FORMAT(A4,25I3) C LESS THAN 25 IP( ) VALUES WILL NOT BE INDICATED AS AN ERROR. C SOME IP( ) VALUES ARE NOT USED; SEE IUSE( ). C CALL IPOPEN(KFILDO,'RADPREP',IPINIT,IP,IER) C WHEN IP(1) NE 0, KFILDO HAS BEEN SET TO IP(1). C A FILE WILL BE OPENED FOR EVERY DIFFERENT VALUE IN IP( ). C THE FILE NAMES WILL BE 4 CHARACTERS 'U365' THEN 4 CHARACTERS C FROM IPINIT, THEN 2 CHARACTERS FROM IP(J). IPINIT MIGHT BE C 'HRG1' INDICATING THE PERSONS INITIALS PLUS A SEQUENCE NUMBER. IF(IER.NE.0)ISTOP=ISTOP+1 109 WRITE(KFILDO,110)IPINIT 110 FORMAT(/' IPINIT = ',A4) CALL IPRINT(KFILDO,IP,IUSE) C C TIME STAMP ALL ASCII OUTPUT OTHER THAN KFILDO. C THIS IS NOT DONE IN IPOPEN BECAUSE SOME PROGRAMS C MIGHT NOT WANT SOME FILE TO BE TIME STAMPED. C DO 113 J=1,25 IF(IP(J).EQ.0.OR.IP(J).EQ.KFILDO)GO TO 113 IF(J.EQ.1)GO TO 112 C DO 111 I=1,J-1 IF(IP(J).EQ.IP(I))GO TO 113 111 CONTINUE C 112 CALL TIMPR(IP(J),IP(J),'START RADPREP ') 113 CONTINUE C STATE='115 ' READ(KFILDI,115,IOSTAT=IOS,ERR=900,END=116)RUNID C LESS THAN 72 CHARACTERS IS NOT CONSIDERED AN ERROR. 115 FORMAT(A72) 116 WRITE(KFILDO,117)RUNID 117 FORMAT(/' ',A72) C C PRINT TO MAKE SURE USER KNOWS WHAT MACHINE IS BEING USED. C WRITE(KFILDO,119)L3264B 119 FORMAT(/' RUNNING ON A',I3,'-BIT MACHINE.') C C C READ AND PRINT CONTROL INFORMATION. C AND GRID SPECIFICATIONS. C STATE='125 ' READ(KFILDI,125,IOSTAT=IOS,ERR=900,END=1250) 1 NPROJ,NX,NY,XLATLL,YLONLL,XMESHL,ORIENT,XLAT, 2 LNGTH,INCCYL 125 FORMAT(3(I10/),2(F10.4/),F10.4/,F10.5/,F10.5/,I10/,I10) GO TO 135 C INCOMPLETE CONTROL INFORMATION SHOULD BE CONSIDERED AN ERROR. C HOWEVER, A SHORT RECORD DOES NOT CAUSE AN "END" CONDITION. C 1250 WRITE(KFILDO,1251) 1251 FORMAT(/' **** ERROR: CONTROL INFORMATION NOT COMPLETE.'/ 1 ' STOP IN INT_RADPREP AT 1251.') CALL W3TAGE('INT_RADPREP') STOP 1251 C C IF(LNGTH.LT.25)THEN WRITE(KFILDO,1258)LNGTH 1258 FORMAT(/' ****LNGTH =',I3,' TOO SMALL, SET TO 25') LNGTH=25 ISTOP=ISTOP+1 ENDIF C 135 WRITE(KFILDO,140) NPROJ,NX,NY,XLATLL,YLONLL,XMESHL, 1 ORIENT,XLAT,L3264B,LNGTH,INCCYL 140 FORMAT(/,' NPROJ ',I10,' MAP PROJECTION NUMBER OF OUTPUT', X ' AND INPUT GRID'/ 2 ' NX ',I10,' NX = SIZE OF OUTPUT GRID IN X', X ' DIRECTION IN MESH UNITS'/ 3 ' NY ',I10,' NY = SIZE OF OUTPUT GRID IN Y', X ' DIRECTION IN MESH UNITS'/ 4 ' XLATLL ',F10.5,' NORTH LATITUDE OF LOWER LEFT', X ' CORNER OF OUTPUT GRID'/ 5 ' YLONLL ',F10.5,' WEST LONGITUDE OF LOWER LEFT', 6 ' CORNER OF OUTPUT GRID'/ 7 ' XMESHL ',F10.2,' ACTUAL GRIDLENGTH OF OUTPUT GRID', X ' IN METERS'/ 8 ' ORIENT ',F10.5,' GRID ORIENTATION OF OUTPUT GRID'/ 9 ' XLAT ',F10.5,' LATITUDE AT WHICH XMESHL APPLIES', X ' ON OUTPUT GRID'/ A ' L3264B ',I10,' INTEGER WORD SIZE OF MACHINE'/ A ' LNGTH ',I10,' LINE LENGTH IN CHARACTERS FOR', X ' PRINTING DATA TO UNIT IP(16)'/ 4 ' INCCYL ',I10,' INCREMENT IN HOURS BETWEEN', X ' DATE/TIMES') C C C CHECK THE MAP PROJECTION C IF((NPROJ.NE.3).AND.(NPROJ.NE.5).AND.(NPROJ.NE.7)) THEN WRITE(KFILDO,142) NPROJ 142 FORMAT(/,' **** ERROR: A MAP PROJECTION OF',I2,' IS NOT', 1 ' SUPPORTED IN RADPREP. USE VALUES OF 3,5 OR 7.',/, 2 ' STOP IN INT_RADPREP AT 142.') CALL W3TAGE('INT_RADPREP') STOP 1285 ENDIF C C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C STEP 2. READ IN ALL NAMES OF .CN INPUT FILES C C C 1. READ AND PROCESS UNIT NUMBER AND FILE NAME FOR READING C DATE LIST. FILE WILL BE OPENED AS 'OLD', UNLESS THE C FILE IS THE DEFAULT INPUT FILE. C CALL RDSNAM(KFILDI,KFILDO,KFILDT,DATNAM,IDUM,IDUM,1,N,'OLD', 1 'FORMATTED',IP,IER) IF(IER.NE.0)ISTOP=ISTOP+1 WRITE(KFILDO,150)KFILDT,DATNAM 150 FORMAT(/' DATE INPUT DATA SET, UNIT AND NAME.'/ 1 (' ',I4,2X,A60)) C C READ AND PRINT THE DATE TO BE PROCESSED CALL GET_NCEPDATE(KFILDT,IYR,IMO,IDA,IHR,MDATE,IER) C IF(KFILDT.NE.KFILDI)CLOSE(UNIT=KFILDT) C KFILDT IS CLOSED WHEN IT IS NOT THE SAME AS THE DEFAULT C INPUT FILE. C IF(IER.NE.0)THEN WRITE(KFILDO,151) 151 FORMAT(/' ****ERROR: CAN NOT READ NCEP DATE FILE - ', 1 'CATASTROPHIC ERROR IN INT_RADPREP. STOP AT 151.') CALL W3TAGE('INT_RADPREP') STOP 151 ENDIF C C SET NDATE TO 1 SINCE OPERATIONALLY THERE WILL NEVER BE C MORE THEN ONE DATE. C NDATES = 1 IDATE(1) = MDATE WRITE(KFILDO,152)NDATES,(IDATE(J),J=1,NDATES) 152 FORMAT(/,' ',I4,' INPUT DATE AS READ',/,(1X,10I12)) C C 2. READ AND PROCESS UNIT NUMBERS AND FILE NAME FOR THE C RADAR SEQUENTIAL TDLPACK INPUT. FILES WILL BE OPENED C AS 'OLD'. C CALL RDSNAM(KFILDI,KFILDO,KFILDK,DATRAD,MODNO,IDUM,1,IOUTK,'OLD', 1 'UNFORMATTED',IP,IER) IF(IER.NE.0)ISTOP=ISTOP+1 IF(IOUTK.EQ.0)THEN WRITE(KFILDO,160) 160 FORMAT(/' *****ERROR: NO INPUT RADAR FILE GIVEN',/, 2 ' WERE CHOSEN: STOP IN INT_RADPREP AT 160') CALL W3TAGE('INT_RADPREP') STOP 160 ELSE WRITE(KFILDO,164)IOUTK,DATRAD 164 FORMAT(/' ',I2,' RADAR INPUT DATA SET AND NAME,', 1 /A60) IF((IP(4).NE.0).AND.(IP(4).NE.1)) WRITE(IP(4),164)IOUTK,DATRAD ENDIF C IF(IOUTK.GT.1)THEN WRITE(KFILDO,166)IOUTK 166 FORMAT(/' ****ERROR: MORE THAN ONE INPUT RADAR FILE GIVEN',/, 1 /,' ',I2,' MOS-2000 SEQUENTIAL DATA SETS', 2 /,' ',' WERE CHOSEN AS INPUT DATA: STOP IN INT_RADPREP', 3 ' AT 166') CALL W3TAGE('INT_RADPREP') STOP 166 ENDIF C C 3. READ AND PROCESS THE UNIT NUMBER AND FILE NAME FOR THE C EXTERNAL RANDOM ACESS MASK FILE. ONLY ONE IS ALLOWED, C ALLOWED, THE FILE WILL NOT BE OPENED C CALL RDSNAM(KFILDI,KFILDO,KFILRA,RACESS,IDUM,IDUM,1,NUMRA,'NOT', 1 'NOTOPENED',IP,IER) IF(IER.NE.0) ISTOP=ISTOP+1 IF(NUMRA.EQ.0)THEN WRITE(KFILDO,170)NUMRA 170 FORMAT(/' ',I2,' GRIDDED MASK RANDOM ACCESS INPUT DATA.') IF((IP(5).NE.0).AND.(IP(5).NE.1))WRITE(IP(5),170)NUMRA ELSE WRITE(KFILDO,174)NUMRA,KFILRA,RACESS 174 FORMAT(/,' ',I2,' GRIDDED MASK RANDOM ACCESS DATA,', 1 ' UNIT, AND NAME.',/,(' ',I4,2X,A60)) IF((IP(5).NE.0).AND.(IP(5).NE.1))WRITE(IP(5),174)NUMRA,KFILRA, 1 RACESS ENDIF C C C 4. READ AND PROCESS UNIT NUMBERS AND FILE NAME FOR THE C LIGHTNING SEQUENTIAL TDLPACK INPUT. FILES WILL BE OPENED C AS 'OLD'. C CALL RDSNAM(KFILDI,KFILDO,KFILLT,DATLIT,IDUM,IDUM,1,IOUTL,'OLD', 1 'UNFORMATTED',IP,IER) IF(IER.NE.0)ISTOP=ISTOP+1 C IF(IOUTL.EQ.0)THEN WRITE(KFILDO,180) 180 FORMAT(/' ****WARNING: NO INPUT LIGHTNING FILES ARE',/, 2 ' AVAILABLE: PROCESSING WILL CONTINUE IN INT_RADPREP') ELSE WRITE(KFILDO,184)IOUTL,DATLIT 184 FORMAT(/' ',I2,' LIGHTINING INPUT DATA SET AND NAME,', 1 /A60) IF((IP(5).NE.0).AND.(IP(5).NE.1)) WRITE(IP(5),184)IOUTL,DATLIT ENDIF C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C STEP 3. READ IN ALL NAMES OF .CN OUTPUT FILES C C C 2. READ AND PROCESS UNIT NUMBER AND FILE NAME FOR C GRIDDED SEQUENTIAL OUTPUT (QC RADAR). FILE C WILL BE OPENED AS 'NEW'. C CALL RDSNAM(KFILDI,KFILDO,KFILGO,OUTGRD,IDUM,IDUM,1, 1 IOUTG,'NEW','UNFORMATTED',IP,IER) C IOUT IS THE NUMBER OF VALUES READ AND IS NOT USED. IF(IER.NE.0)ISTOP=ISTOP+1 IF(IOUTG.EQ.0)THEN WRITE(KFILDO,200) 200 FORMAT(/' **** ERROR: NO GRIDDED SEQUENTIAL QC RADAR', 1 ' OUTPUT DATA SET PROVIDED'/) IF((IP(6).NE.0).AND.(IP(6).NE.1))WRITE(IP(6),200) CALL W3TAGE('INT_RADPREP') STOP 200 ELSEIF(IOUTG.NE.0)THEN WRITE(KFILDO,205)IOUTG,KFILGO,OUTGRD 205 FORMAT(/' ',I2,' SEQUENTIAL GRIDDED QC RADAR OUTPUT FILE,', 1 ' UNIT, AND NAME.'/(' ',I4,2X,A60)) IF((IP(6).NE.0).AND.(IP(6).NE.1))WRITE(IP(6),205)IOUTG, 1 KFILGO,OUTGRD ENDIF C C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C STEP 4. READ IN AND PROCESS THE QC RADAR VARIABLE LIST C AND THE PREDICTOR CONSTANT FILE C C C C 1. READ AND PROCESS UNIT NUMBER AND FILE NAME FOR READING C THE PREDICTOR (OR VARIABLE) LIST. C CALL RDSNAM(KFILDI,KFILDO,KFILP,PRENAM,IDUM,IDUM,1,IOUTP,'OLD', 1 'FORMATTED',IP,IER) IF(IER.NE.0) ISTOP=ISTOP+1 IF(IOUTP.EQ.0)THEN WRITE(KFILDO,250) 250 FORMAT(/' **** ERROR: NO QC RADAR ID INPUT LIST INPUT IS', 1 ' PROVIDED',/,' STOP IN INT_RADPREP AT 250') STOP 250 ENDIF C C 3. READ AND PROCESS UNIT NUMBER FOR THE PREDICTOR CONSTANTS C (MOS2000ID.TBL) DIRECTORY. C CALL RDSNAM(KFILDI,KFILDO,KFILCP,CONNAM,IDUM,IDUM,1,N,'OLD', 1 'FORMATTED',IP,IER) IF(IER.NE.0) ISTOP=ISTOP+1 IF(N.EQ.0)THEN WRITE(KFILDO,261) 261 FORMAT(/' **** ERROR: NO MOS-2000 ID TABLE LIST INPUT'/ 1 ' DATA SET PROVIDED STOP IN INT_RADPREP AT 261') CALL W3TAGE('INT_RADPREP') STOP 261 ENDIF C CCCCCCCCCCCCCCCCCCCCCCCC CCC 1. READ VARIABLE LIST CCCCCCCCCCCCCCCCCCCCCCCC IF(IOUTP.NE.0)THEN WRITE(KFILDO,262)IOUTP,KFILP,PRENAM 262 FORMAT(/' ',I2,' INPUT PREDICTOR DATA SET,', 1 ' UNIT, AND NAME.'/(' ',I4,2X,A60)) ENDIF CALL RDVRBL(KFILDO,IP(9),IP(10),0,KFILP,KFILCP, 1 ID,IDPARS,JD,ND4,PLAIN,ISCALD, 3 NVRBL,ISTOP,IER) IF(IER.NE.0)THEN WRITE(KFILDO,264) 264 FORMAT(/' ****PROBLEM READING IDS:', 1 ' IT IS PRUDENT TO STOP HERE IN INT_RADPREP AT 254.') CALL W3TAGE('INT_RADPREP') STOP 264 ENDIF C DO 270 I=1,NVRBL WRITE(KFILDO,267)(ID(J,I),J=1,4),PLAIN(I),ISCALD(I) 267 FORMAT(/,'OUTPUT VARIABLES READ FROM RDVR140:',/, 1 4I10,2X,A32,I5) 270 CONTINUE C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C STEP 5. CHECK POSSIBLE INCONSISTENCY OF INPUT UNIT NUMBERS C WITH OTHERS USED BY THE PROGRAM. THIS SHOULD C PROTECT THE LARGE DATA SETS IN DATRAD FROM C BEING OVERWRITTEN. C C C IF(KFILDK.NE.KFILDT .AND. 1 KFILDK.NE.KFILGO .AND. 2 KFILDK.NE.KFILRA .AND. 3 KFILDK.NE.KFILP .AND. 4 KFILDK.NE.KFILDI .AND. 6 KFILDK.NE.KFILCP) GO TO 290 WRITE(KFILDO,285)KFILDK,KFILDT,KFILGO, * KFILP,KFILDI,KFILCP,KFILRA 285 FORMAT(/' **** ERROR: INCONSISTENCY IN INPUT UNIT NUMBERS', 1 ' IN KFILDK WITH EITHER KFILDT,KFILGO,', 2 ' KFILP,KFILDI.'/ 3 ' STOP IN INT_RADPREP AT 285',/ 4 ' KFILDK,KFILDT,KFILGO,', 5 ' KFILP,KFILDI,KFILCP,KFILRA',/,9I7) CALL W3TAGE('INT_RADPREP') STOP 285 290 CONTINUE C C DO 400 J=1,25 C IF(IP(J).NE.0.AND. 1 (IP(J).EQ.KFILDT .OR. 2 IP(J).EQ.KFILP .OR. 3 IP(J).EQ.KFILCP .OR. 4 IP(J).EQ.KFILRA .OR. 5 IP(J).EQ.KFILDI .OR. 6 IP(J).EQ.KFILGO))THEN WRITE(KFILDO,390) 390 FORMAT(/' **** ERROR: INCONSISTENCY IN INPUT UNIT NUMBERS', 1 ' IN IP( ) WITH EITHER KFILDT,KFILDI,', 2 ' KFILP,KFILDI,OR KFILGO.'/ 3 ' STOP IN INT_RADPREP AT 390') CALL W3TAGE('INT_RADPREP') STOP 390 ENDIF 400 CONTINUE C C C C 700 RETURN C C ERROR STOP BELOW IS FOR ERRORS OF CONTROL INFORMATION INPUT. 900 CALL IERX(KFILDO,KFILDO,IOS,'INT_RADPREP',STATE) CALL W3TAGE('INT_RADPREP') STOP 9999 END