SUBROUTINE U900(KFILDI,KFILDO,KFILEQ,EQNNAM, 1 ICALL,CCALL,ISDATA,SDATA,XDATA,NAME,ND1, 3 ISCALD,IPLAIN,PLAIN,L3264B,L3264W, 4 ICALLD,CCALLD,IPACK,DATA,IWORK,ND5, 5 KFILIN,MODNUM,NAMIN,JFOPEN, 6 INDEXC,ND6, 7 IS0,IS1,IS2,IS4,ND7, 8 IDATE,NWORK,ND8, 9 LSTORE,ND9, A ID,IDPARS,TRESHL,JD,ITAU,IUSED, B CONST,AVG,CORR,COEF,IDTAND,IDTPAR, C NGP,LGP,MTRMS,ICAT,LOCSTA,FCST, D ND2,ND3,ND11,ND13, E CORE,ND10,NBLOCK) C$$$ SUBPROGRAM DOCUMENTATION BLOCK *** C C SUBPROGRAM: U900 C PRGMMR: GLAHN ORG: W/OSD211 DATE: 99-02-01 C C ABSTRACT: PROGRAM U900 IS USED TO MAKE FORECASTS FROM REGRESSION C EQUATIONS, PROBABLY PRODUCED BY U600. THIS PROGRAM SHOULD C RUN ON EITHER THE HP UNIX PLATFORM WHICH USES 32-BIT C INTEGERS OR THE CRAY UNIX PLATFORM WHICH USES 64-BIT C INTEGERS. THE ONLY DIFFERENCE IS THAT THE DRIVER IS C COMPILED WITH THE PARAMETER STATEMENT: C PARAMETER (L3264B=32) FOR THE 32-BIT MACHINE AND C PARAMETER (L3264B=64) FOR THE 64-BIT MACHINE. SOME OF C THE ASSUMPTIONS REGARDING POSSIBLY NON-FORTRAN77 ARE: C 1) LOGICAL*1 DOES NOT PRODUCE BYTE-SIZE WORDS ON THE C CRAY, C 2) A VARIABLE OF TYPE CHARACTER MUST BE OF THE SAME C TYPE IN BOTH THE CALLING AND CALLED ROUTINES, AND C 3) CHARACTER AND INTEGER ARRAYS CAN BE EQUIVALENCED. C IT IS ASSUMED THAT ALL EQUATIONS AVAILABLE AND READ WILL C BE USED FOR THE STATIONS SPECIFIED (WHICH CAN BE BY C SEPARATE LIST). THAT IS, ALL PREDICTANDS WILL HAVE C FORECASTS MADE FOR THEM AND THE OUTPUT PRODUCED. C OUTPUT IS OPTIONAL SEQUENTIAL TDLPACK AND/OR MOS-2000 C RANDOM ACCESS TDLPACK. DATA NEEDED MUST BE C ON PACKED SEQUENTIAL FILES OR CAN BE OBTAINED THROUGH C OPTX, WHICH CAN ACCESS UP TO 5 MOS-2000 EXTERNAL RANDOM C ACCESS FILES. BINARIES CAN BE AVAILABLE ON INPUT OR C COMPUTED WITHIN U900. C C NORMALLY, U900 IS USED FOR ONE DATE/TIME IN OPERATIONS, C BUT CAN OPERATE ON MULTIPLE DATE/TIMES. C C C PROGRAM HISTORY LOG: C 00-03-18 GLAHN C 00-05-15 ERICKSON ADDED NCEP DOCBLOCK. C 00-05-16 MCE MODIFIED TO READ NCEP DATE FILE C (IN PROGRESS) C 00-05-16 DREWRY ADDED STATEMENTS TO PRINT AN ERROR MESSAGE AND C STOP IF THE NCEP DATE FILE CAN NOT BE READ. ADDED C STATEMENTS TO PRINT THE DATE THAT WAS READ. C 00-05-17 MCE ADDED CALLS TO W3TAGB AND W3TAGE FOR ALL STOPS C 00-05-17 JPD CORRECTED FORMAT STATEMENT FOR PXMISS OUTPUT C 00-05-19 JPD CORRECTED CALL TO RDSNAM WHEN READING THE C EQUATION FILES - CHANGED KGP TO JFOPENEQ. C 00-06-26 ALLEN CHANGED TO READ THE EQUATION FILE UNTIL AN END OF C FILE IS REACHED, RATHER THAN WHEN A '999999999' IS C ENCOUNTERED. THIS ALLOWS YOU TO ONLY LIST THE C EQUATION FILE ONCE IN THE .CN FILE, RATHER THAN C ONCE FOR EACH EQUATION SET. C 00-06-27 ALLEN DIMENSIONED IDUM TO ND11 BECAUSE IT WAS CAUSING C ARRAYS TO GET CLOBBERED ON THE IBM WHEN IT WAS C ONLY ONE-DIMENSIONAL. CHANGED CALL TO RDSNAM C WHEN OPENING EQUATION FILES - CHANGED KGP TO IDUM. C ALSO CHANGED THE CALL TO RDSNAM FOR STATION LIST C AND DIRECTORY FROM ITEMP(14) TO IDUM(ND11) TO BE C CONSISTENT IN AVOIDING THIS CLOBBERING PROBLEM. C 00-06-29 ALLEN CHANGED RDEQN SO IT CHECKS ALL SIX LINKS NOW, C RATHER THAN JUST TWO. C 01-11-05 MCE CHANGED TO CALL RDEQN9; COMMENTED OUT WRITE 164 C THIS WAS MAINLY A DIAGNOSTIC. C JAN 2016 SCHNAPP CHANGED MINPK FROM 14 TO 21 C 09-11-18 SHAFER ADDED CALL TO RDSTAL2 WHEN NALPH=2. THIS C BYPASSES STATION CHECKING WHEN MAKING C FORECASTS FOR LARGE NUMBER OF GRID POINTS. C SEPTEMBER 2020 GHIRARDELLI CHANGED UNDEFINED IP12 TO IP(12) IN CALL C TO FCST90 C C USAGE: CALL U900 (KFILDI,KFILDO,KFILEQ,EQNNAM,ICALL,CCALL,ISDATA, C SDATA,XDATA,NAME,ND1,ISCALD,IPLAIN,PLAIN,L3264B, C L3264W,ICALLD,CCALLD,IPACK,DATA,IWORK,ND5,KFILIN, C MODNUM,NAMIN,JFOPEN,INDEXC,ND6,IS0,IS1,IS2,IS4, C ND7,IDATE,NWORK,ND8,LSTORE,ND9,ID,IDPARS,TRESHL, C JD,ITAU,IUSED,CONST,AVG,CORR,COEF,IDTAND,IDTPAR, C NGP,LGP,MTRMS,ICAT,LOCSTA,FCST,ND2,ND3,ND11,ND13, C CORE,ND10,NBLOCK) C INPUT ARGUMENT LIST: C KFILDI - UNIT NUMBER TO READ INPUT FILE 'U900.CN'. C SET BY DATA STATEMENT TO 5. C KFILDO - UNIT NUMBER OF OUTPUT (PRINT) FILE. INITIALLY, C THIS IS SET BY DATA STATEMENT 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. C KFILEQ(J) - UNIT NUMBERS (J=1,ND11) OF FILES FROM WHICH TO C READ EQUATIONS. C EQNNAM(J) - FILE NAMES ASSOCIATED WITH KFILEQ(J) (J=1,ND11). C (CHARACTER*60) C ICALL(L,K,J) - 8-CHARACTER STATION CALL LETTERS AS CHARACTERS C IN AN INTEGER VARIABLE (L=1,L3264W). 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. (CHARACTER*8) C ISDATA(K) - WORK ARRAY (K=1,ND1). C SDATA(K) - WORK ARRAY (K=1,ND1). C XDATA(K) - WORK ARRAY (K=1,ND1). C NAME(K) - NAMES OF STATIONS (K=1,NSTA) (CHARACTER*20) C ND1 - MAXIMUM NUMBER OF STATIONS THAT CAN BE DEALT WITH. C ISCALD(NN) - THE DECIMAL SCALING CONSTANT TO USE WHEN C PACKING THE FORECASTS FOR PREDICTAND NN C (NN=1,MTANDS). ISCALD( ) COMES FROM THE C VARIABLE CONSTANT FILE, MODIFIED TO BE 0 FOR C BINARIES. ZERO WHEN NOT FOUND IN THE FILE. C IPLAIN(L,J,NN) - 32 CHARACTERS (L=1,L3264W) (J=1,4) OF PLAIN C LANGUAGE DESCRIPTION OF THE PREDICTAND C NN (NN=1,MTANDS). NOTE THAT THIS REQUIRES C TWO 32-BIT WORDS TO HOLD THE DESCRIPTION C BUT ONLY ONE 64-BIT WORD. EQUIVALENCED C TO PLAIN( ). C PLAIN(NN) - THE PLAIN LANGUAGE DESCRIPTION OF THE C PREDICTAND NN (NN=1,MTANDS). EQUIVALENCED TO C IPLAIN( , , ). (CHARACTER*32) C L3264B - INTEGER WORD LENGTH IN BITS OF MACHINE BEING C USED (EITHER 32 OR 64). SET BY PARAMETER. C L3264W - NUMBER OF WORDS IN 64 BITS (EITHER 1 OR 2). C CALCULATED BY PARAMETER, BASED ON L3464B. C ICALLD(L,K) - 8 STATION CALL LETTERS AS CHARACTERS IN AN INTEGER C VARIABLE (L=1,L3264W) (K=1,ND5). C NOTE THAT THIS REQUIRES TWO 32-BIT WORDS TO HOLD C THE DESCRIPTION BUT ONLY ONE 64-BIT WORD. C NEEDED IN CONST6 FOR ARGUMENT TO RDTDLM. C EQUIVALENCED TO CCALLD( , ). C CCALLD(K) - 8 STATION CALL LETTERS (K=1,ND5). EQUIVALENCED C TO ICALLD( , ). C IPACK(J) - PACKED DATA READ FROM THE INPUT FILE(S) C (J=1,ND5). ALSO WORK ARRAY IN RDSTAL AND C RDSTAD. C DATA(J) - WORK ARRAY (J=1,ND5). C IWORK(J) - WORK ARRAY (J=1,ND5). C ND5 - THE MAXIMUM NUMBER OF STATION CALL LETTERS ON C THE INPUT FILES. DIMENSION OF IWORK( ), C DATA( ), AND CCALLD( ), AND SECOND DIMENSION C OF IPACK( , ). MUST BE GE THE LARGEST RECORD C ON THE INPUT INTERPOLATED FILE(S). MUST ALSO C BE GE ND1. C KFILIN(J) - UNIT NUMBERS FOR INPUT VECTOR DATA, ALL IN C TDLPACK FORMAT (J=1,ND6). C MODNUM(J) - THE "MODEL" NUMBER CORRESPONDING TO KFILIN(J), C AND NAMIN(J) (J=1,ND6). NOT USED IN U900. C NAMIN(J) - HOLDS DATA SET NAMES FOR THE UNIT NUMBERS C IN KFILIN(J) (J=1,ND6). (CHARACTER*60) C JFOPEN(J) - FOR EACH FILE IN MODNUM(J), JFOPEN(J) IS SET C TO 1 FOR J=1, MEANING THE FILE IS OPEN AND IS C SET TO 2 FOR J GT 1 (IF ANY) MEANING THE FILE C IS AVAILABLE, BUT NOT OPEN (J=1,NUMIN). C JFOPENEQ(J) - FOR EACH EQUATION FILE, JFOPENEQ(J) IS SET; C THIS VARIABLE WAS ESTABLISHED TO ALLOW U900 C TO RUN PROPERLY AND IS LIKELY UNNECESSARY. C INDEXC(K,J) - LOCATIONS OF THE NSTA STATIONS (K=1,NSTA) C IN THE LIST CCALL(K, ) IN REFERENCE TO THE C STATION CALL LETTERS RECORD ON THE INPUT C DATA SET NUMBER J (J=1,NUMIN). C ND6 - MAXIMUM NUMBER OF INPUT DATA SETS (MODELS) THAT C CAN BE DEALT WITH. C IS0(J) - MOS-2000 GRIB SECTION 0 ID'S (J=1,4). C IS1(J) - MOS-2000 GRIB SECTION 1 ID'S (J=1,21+). C IS2(J) - MOS-2000 GRIB SECTION 2 ID'S (J=1,12). C IS4(J) - MOS-2000 GRIB SECTION 4 ID'S (J=1,4). C WORD) OF PLAIN TEXT = 54. SET BY PARAMETER. 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 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. C NWORK(J) - WORK ARRAY (J=1,ND8). C ND8 - MAXIMUM NUMBER OF DATES THAT CAN BE DEALT WITH. C LSTORE(L,J) - THE ARRAY HOLDING INFORMATION ABOUT THE DATA C STORED IN THE MOS-2000 STORAGE SYSTEM C (L=1,12) (J=1,LITEMS). 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 NOT. C L=8 --THE DATE/TIME OF THE DATA IN FORMAT C YYYYMMDDHH. C L=9 --NUMBER OF TIMES DATA HAVE BEEN RETRIEVED. C L=10 --NOT USED. C L=11 --THE NUMBER OF THE FIRST PREDICTOR IN THE SORTED C LIST IN ID( ,N) (N=1,VRBL) FOR WHICH THIS C VARIABLE IS NEEDED, WHEN IT DOES NOT NEED C TO BE STORED AFTER DAY 1. WHEN THE VARIABLE C MUST BE STORED (TO BE ACCESSED THROUGH OPTION) C FOR ALL DAYS, ID(11,N) IS 7777 + THE NUMBER C OF THE FIRST PREDICTOR IN THE SORTED LIST C FOR WHICH THIS VARIABLE IS NEEDED. C L=12 --MOT USED. C ND9 - MAXIMUM NUMBER OF FIELDS STORED IN LSTORE( , ). C SECOND DIMENSION OF LSTORE( , ). C ID(J,L,M) - THE 4-WORD ID (J=1,7) FOR EACH PREDICTOR C (M=1,MTRMS(L)) IN EACH EQUATION (L=1,KGP) OF THE C GROUP BEING PROCESSED. VALUES OF J=5-7 NOT USED; C DIMENSION IS 7 RATHER THAN 4 TO ACCOMMODATE C RDEQN, WHICH IS ALSO USED FOR U700. C IDPARS(J,L,M) = THE PARSED, INDIVIDUAL COMPONENTS OF THE C VARIABLE ID'S CORRESPONDING TO ID( ,L,M) (J=1,15) C (M=1,MTRMS(L)) (L=1,KGP). 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 C THRESHOLD TRESHL = 1, C 2 = CUMULATIVE FROM BELOW, VALUES LT UPPER C THRESHOLD TRESHU = 1. C 3 = DISCRETE BINARY. VALUES GE LOWER C THRESHOLD AND LT UPPER THRESHOLD = 1. C 5 = GRID BINARY. VALUES GE LOWER THRESHOLD C ONLY THE VALUE OF 0, 1, OR 5 SHOULD BE USED C FOR 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 C 1 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 TRESHL(L,M) = THE LOWER BINARY THRESHOLD CORRESPONDING TO C IDPARS( ,L,M) (M=1,MTRMS(L)) (L=1,KGP). C FOR U900, THE UPPER THRESHOLD IS ALWAYS LARGE. C THAT IS, THE PREDICTORS CARRY WITH THEM ONLY C ONE THRESHOLD, THE LOWER ONE. C JD(J,L,M) = THE BASIC INTEGER VARIABLE ID'S (J=1,4) C (M=1,MTRMS(L)) (L=1,KGP). THIS IS THE SAME AS C ID(J,L,M), EXCEPT THAT THE FOLLOWING PORTIONS C ARE OMITTED: C B = IDPARS(3, , ), C G = IDPARS(15, , ), AND C TRESHL( , ). C THE "G" VARIABLE HAS NO MEANING IN U900, C IT BEING ONLY FOR POSSIBLE USE IN U201. C ITAU(L,M) = THE NUMBER OF HOURS TO ADD TO IDATE( ) TO GET C THE VARIABLE ID( ,L,M) (M=1,MTRMS(L)), (L=1,KGP). C THIS IS THE "LOOKAHEAD" FEATURE. C IUSED(L,M) = WORK ARRAY ASSOCIATED WITH EACH PREDICTOR C (M=1,MTRMS(L)) IN EACH EQUATION (L=1,KGP). C INITIALLY SET TO ZERO; SET TO 1 WHEN THE C TERM HAS BEEN EVALUATED. C CONST(L,NN) = THE EQUATION CONSTANTS FOR GROUP L C (L=1,KGP), PREDICTAND NN (NN=1,MTANDS) FOR C THE GROUP BEING PROCESSED. C AVG(L,NN) = THE PREDICTAND MEANS FOR GROUP L (L=1,KGP), C PREDICTAND NN (NN=1,MTANDS) FOR THE GROUP C BEING PROCESSED. C CORR(L,NN) = THE MULTIPLE CORRELATIONS FOR GROUP L C (L=1,KGP), PREDICTAND NN (NN=1,MTANDS) FOR C THE GROUP BEING PROCESSED. C COEF(L,M,NN) = THE COEFFICIENTS FOR GROUP L (L=1,KGP), C TERM M (M=1,MTRMS(L)), PREDICTAND NN C (NN=1,MTANDS)) FOR THE GROUP BEING PROCESSED. C IDTAND(J,NN) = THE PREDICTAND ID'S (J=1,4), FOR PREDICTAND NN C (NN=1,MTANDS) FOR THE GROUP BEING PROCESSED. C IDTPAR(J,NN) = THE PARSED PREDICTAND ID'S (J=1,15), FOR C PREDICTAND NN (NN=1,MTANDS) FOR THE GROUP C BEING PROCESSED. C NGP(J) = THE NUMBER OF STATIONS IN EACH GROUP (J=1,KGP). C NGP(L) = FOR EACH EQUATION, THE NUMBER OF STATIONS C IN EACH OF THE KGP GROUPS (L=1,KGP). C LGP(L) = FOR EACH EQUATION (L=1,LGP), THE LOCATION C IN LOCSTA( ) OF WHERE THE FIRST STATION IN C THE SET IS. C MTRMS(L) = THE NUMBER OF TERMS IN EACH EQUATION FOR THE C GROUP BEING PROCESSED (L=1,KGP). C ICAT(NN) = THE POSTPROCESSING INDICATOR FOR THE EQUATION C GROUP BEING PROCESSED FOR PREDICTAND NN C (NN=1,MTANDS). FOR EXAMPLE, THE C VALUE 1 WOULD REFER TO SUBROUTINE CAT1, WHICH C IS USED FOR INFLATION. C LOCSTA(K) = THE LOCATION IN FCST( ,NN) (NN=1,MTANDS) OF C WHERE TO PUT THE FORECAST (K=1,NSTA). C FCST(K,NN) = THE FORECASTS FOR STATION K (K=1,KSTA), C PREDICTAND NN (NN=1,MTANDS) FOR THE GROUP C BEING PROCESSED. C ND2 = MAXIMUM NUMBER OF TERMS IN AN EQUATION. C ND3 = MAXIMUM NUMBER OF PREDICTANDS IN EQUATION. C ND11 = MAXIMUM NUMBER OF FILES FROM WHICH TO READ C EQUATIONS. C ND13 = MAXIMUM NUMBER OF DIFFERENT EQUATIONS PER SET. C THIS WOULD BE = ND1 FOR SINGLE STATION EQUATIONS. C CORE(J) = SPACE ALLOCATED FOR SAVING DATA IN INTERNAL C STORAGE SYSTEM (J=1,ND10). WHEN THIS SPACE C IS EXHAUSTED, SCRATCH DISK IS USED. 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 NBLOCK = BLOCK SIZE IN WORDS OF INTERNAL MOS-2000 DISK C STORAGE. SINCE MUCH, IF NOT ALL, INTERNAL C STORAGE WILL BE OF PACKED DATA, THE NUMBER OF C BYTES WILL BE THE SAME FOR EITHER A 32- OR C 64-BIT MACHINE. THEREFORE, THE BLOCK SIZE IS C SET BY PARAMETER TO VARY WITH L3264B. IN THE C PARAMETER STATEMENT, THE 6400 IS ARBITRARY, AND C CAN BE CHANGED. PERFORMANCE SHOULD NOT BE C HIGHLY DEPENDENT ON THIS. HOWEVER, IF TOO C LARGE, SPACE WILL BE WASTED, AND IF TOO SMALL C MANY RECORDS WILL BE NECESSARY TO HOLD EACH C RECORD. THE 6400 ACCOMMODATES 800 BYTES ON C EITHER A 32- OR 64-BIT MACHINE. SET BY C PARAMETER. C C OUTPUT ARGUMENT LIST: NONE. ALL INPUT TO OTHER SUBROUTINES. C C DATA SET USE C INPUT FILES: C FORT.KFILDI - UNIT NUMBER OF INPUT FILE. SET BY DATA C STATEMENT IN DRU900. (INPUT) C FORT.KFILEQ(J) - UNIT NUMBERS (J=1,ND11) OF FILES FROM WHICH TO C READ EQUATIONS. (INPUT) C FORT.KFIL10 - UNIT NUMBER OF TDL MOS-2000 FILE SYSTEM ACCESS. C SET BY DATA STATEMENT. (INPUT-OUTPUT) C FORT.KFILCP - UNIT NUMBER FOR PREDICTOR CONSTANT FILE. (INPUT) C FORT.KFILPF - UNIT NUMBER FOR PREDICTAND/FORECAST C CORRESPONDENCE TABLE. (INPUT) C FORT.KFILIN( ) - UNIT NUMBERS FOR DATA INPUT FILES. (INPUT) C FORT.KFILD(J) - UNIT NUMBERS FOR WHERE THE STATION LIST (J=1) C AND THE STATION DIRECTORY (J=2) RESIDE. C (INPUT) C FORT.KFILDT - UNIT NUMBER FOR READING THE DATE LIST. (INPUT) C FORT.KFILRA( ) - UNIT NUMBERS FOR EXTERNAL RANDOM ACCESS FILES C (J=1,5). (INPUT) C C OUTPUT FILES: C FORT.KFIL10 - UNIT NUMBER OF TDL MOS-2000 FILE SYSTEM ACCESS. C SET BY DATA STATEMENT. (INPUT-OUTPUT) C FORT.IP(J) - UNIT NUMBERS FOR OPTIONAL OUTPUT (J=1,25) C (SEE IP( ) UNDER "VARIABLES" BELOW. C FORT.KFILFC - UNIT NUMBER FOR WRITING THE FORECAST OUTPUT TO C SEQUENTIAL FILE. (OUTPUT) C FORT.KFILX - UNIT NUMBER FOR WRITING FORECAST OUTPUT TO C MOS-2000 EXTERNAL RANDOM ACCESS FILE. (OUTPUT) C C VARIABLES C KFIL10 - UNIT NUMBER OF TDL MOS-2000 FILE SYSTEM ACCESS. C SET BY DATA STATEMENT. C IPINIT - 4 CHARACTERS USED TO HELP IDENTIFY OUTPUT ASSOCIATED C WITH THE IP( ) NUMBERS. 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 'U900', C THEN 4 CHARACTERS FROM IPINIT, THEN 2 CHARACTERS C FROM IP(J) (E.G., 'U900HRG130'). 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 STATION LIST (CALL LETTERS ONLY). C IF THERE ARE INPUT ERRORS, THE STATION LIST C WILL BE WRITTEN TO THE DEFAULT OUTPUT FILE UNIT C KFILDO AS WELL AS TO UNIT IP(4). C (5) = THE STATIONS AND STATION DIRECTORY INFORMATION C IN THE ORDER TO BE DEALT WITH IN U900. THE C STATIONS CAN BE IN ALPHABETICAL ORDER WITHIN C EACH GROUP PROVIDED THE DIRECTORY IS. IF THERE C ARE INPUT ERRORS, THE STATION LIST WILL BE C WRITTEN TO THE DEFAULT OUTPUT FILE UNIT KFILDO C AS WELL AS TO UNIT IP(5). C (6) = NOT USED. C (7) = THE PREDICTAND LIST, INCLUDING THE PARSED C IDS, BUT NOT INCLUDING THE PLAIN LANGUAGE. C (8) = NOT USED. C (9) = THE PREDICTAND LIST, NOT INCLUDING THE C PARSED IDS, BUT INCLUDING THE PLAIN LANGUAGE C FROM THE CONSTANT FILE. C (10) = INDICATES WHETHER (>1) OR NOT (=0) THE LIST OF C FIELDS READ FOR EACH DAY WILL BE PRINTED TO THE FILE C WHOSE UNIT NUMBER IS IP(10). C (11) = NOT USED. C (12) = 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 IP(12). THIS IS C FOR BOTH SEQUENTIAL AND RANDOM ACCESS FILES. C (13) = INDICATES WHETHER (>0) OR NOT (=0) A DIAGNOSTIC C WILL BE PROVIDED FOR A STATION IN THE LIST C CCALL( , ) THAT DOES NOT HAVE AN EQUATION IN C THE SET BEING PROCESSED (IN REDQN). C (14) = INDICATES WHETHER (>0) OR NOT (=0) A DIAGNOSTIC C WILL BE WRITTEN WHEN AN EQUATION SET IS FOUND C THAT DOES NOT MATCH NDATE (IN RDEQN). C (15) = INDICATES WHETHER (>0) OR NOT (=0) A STATION C WITH THE EQUATIONS THAT IS NOT IN THE MASTER C STATION LIST CCALL( , ) WILL BE WRITTEN TO THE C FILE WHOSE UNIT NUMBER IS IP(15). THIS C WOULD HAPPEN ONLY WHEN READING THE EQUATIONS. C (16) = INDICATES WHETHER (>0) OR NOT (=0) INPUT DATA C WILL BE PRINTED. C (17) = INDICATES WHETHER (>0) OR NOT (=0) FORECASTS C WILL BE PRINTED. C (18) = INDICATES WHETHER (>0) OR NOT (=0) FORECASTS C WILL BE PRINTED TO THE ACCURACY PACKED. C (19) = INDICATES WHETHER (>0) OR NOT (=0) THE C PREDICTAND MULTIPLE CORRELATION WILL BE WRITTEN. C (20) = INDICATES WHETHER (>0) OR NOT (=0) THE C PREDICTAND MEANS WILL BE WRITTEN. C (21) = INDICATES WHETHER (>0) OR NOT (=0) THE C EQUATIONS WILL BE WRITTEN TO UNIT IP(21) FOR C VIEWING. C (23) = INDICATES WHETHER (>0) OR NOT (=0) STATEMENTS C ABOUT EOF AND FILE OPENINGS AND CLOSINGS WILL C BE OUTPUT FOR PRINTING ON UNIT IP(23). 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 RUNID - INFORMATION INPUT TO IDENTIFY THE OUTPUT. C (CHARACTER*72) C KSKIP - WHEN NONZERO, INDICATES THAT THE OUTPUT FILE C IS TO BE MOVED FORWARD UNTIL ALL DATA FOR C DATE KSKIP HAVE BEEN SKIPPED. KSKIP IS INPUT C AS YYMMDDHH OR YYYYMMDDHH AND THEN USED AS C YYYYMMDDHH. C KWRITE - 0 IF CALL LETTERS RECORD IS NOT TO BE WRITTEN. C NE 0 OTHERWISE. THIS HAS NO EFFECT UNLESS KSKIP C NE 0. IF DATA ARE SKIPPED, THE EXISTING C CALL LETTERS RECORD IS CHECKED WITH THE ONE C AVAILABLE FOR WRITING. IF THEY MATCH C THE NEW ONE IS NOT WRITTEN; HOWEVER,IF THEY C DON'T MATCH, THE NEW ONE IS WRITTEN WHEN C KWRITE = 1, BUT THE PROGRAM HALTS WITH A C DIAGNOSTIC WHEN KWRITE = 0. C NSKIP - THE NUMBER OF ERRORS THAT WILL BE TOLERATED ON DAY 1 C WITHOUT HALTING. C JSTOP - THE NUMBER OF ERRORS THAT WILL BE TOLERATED ON THE C TOTAL RUN BEFORE PROGRAM STOPS. C INCCYL - THE NUMBER OF HOURS BETWEEN DATES WHEN DATE SPANNING C IS USED. NORMALLY, U900 WOULD USE ONLY ONE C DATE/TIME AND INCCYL WOULD NOT BE NEEDED. C NEW - 1 WHEN NEW 4-LETTER CALL LETTERS ARE TO BE USED; C 0 WHEN OLD 3-LETTER CALL LETTERS ARE TO BE USED. C NALPH - 1 WHEN THE CALL STATIONS USED ARE TO BE C ALPHABETIZED (MORE EXACTLY, PUT IN THE ORDER C THEY EXIST IN THE STATION DIRECTORY. C 0 WHEN THE ORDER READ IN IS TO BE PRESERVED. C LOOKAH - NUMBER OF HOURS TO LOOKAHEAD WHEN READING C DATA IN RDSTR9. C PXMISS - THE VALUE OF A SECONDARY MISSING VALUE TO INSERT C WHEN THE SECONDARY MISSING VALUE IS 9997. C THIS ALLOWS MAINTAINING A 9997, TREATING IT AS C ZERO, AS 9999, OR AS SOME OTHER VALUE. C NREPLA - RECORD REPLACEMENT FLAG FOR WRITING RANDOM C ACCESS FILE. C 0 = NOT REPLACING RECORD. C 1 = REPLACING, ERROR IF RECORD NOT FOUND TO C REPLACE. C 2 = REPLACING, WRITE NEW RECORD IF RECORD NOT C FOUND TO REPLACE. C (INPUT) C NCHECK - IDENTIFICATION CHECKING FLAG FOR WRITING C RANDOM ACCESS FILE. C 0 = DON'T CHECK FOR DUPLICATES. C 1 = CHECK FOR DUPLICATES, ERROR IF FOUND. C (INPUT) C KFILDT - UNIT NUMBER FOR READING THE DATE LIST. C DATNAM - FILE NAME FOR READING DATE LIST. (CHARACTER*60) C NDATES - THE NUMBER OF DATES IN IDATE( ). C NUMIN - THE NUMBER OF VALUES IN KFILIN( ), AND NAMES IN C NAMIN( ). MAXIMUM OF ND6. C KFILRA(J) - UNIT NUMBERS FOR READING CONSTANT DATA (J=1,5). C RACESS(J) - FILE NAMES FOR CONSTANT DATA READ ON UNIT C NOS. KFILRA(J) (J=1,5). (CHARACTER*60) C NUMRA - NUMBER OF VALUES IN KFILRA( ) AND RACESS( ). C KFILD(J) - THE UNIT NUMBER FOR WHERE THE STATION LIST (J=1) C AND THE STATION DIRECTORY (J=2) RESIDES. C CORRESPONDS TO DIRNAM(J). WHEN KFILD(1) = KFILDI, C THE DEFAULT INPUT IS INDICATED, DIRNAM(1) IS NOT C USED, AND THE FILE IS NOT OPENED. KFILD(1) CAN C EQUAL KFILD(2), IN WHICH CASE THE STATION LIST IS C TAKEN FROM THE DIRECTORY (I.E., A SEPARATE STATION C LIST IS NOT PROVIDED). C DIRNAM(J) - HOLDS NAME OF DATA SET CONTAINING THE STATION C CALL LETTERS (J=1) AND STATION DIRECTORY (J=2). C IT IS EXPECTED THAT THE STATIONS IN C THE DIRECTORY BE ORDERED ALPHABETICALLY BY CALL C LETTERS. (CHARACTER*60) C NSTA - THE NUMBER OF STATIONS BEING DEALT WITH. THE C NUMBER OF VALUES IN CCALL( , ), ETC. C KGP - THE NUMBER OF STATIONS OR GROUPS TO BE PROCESSED. C FOR SINGLE STATION EQUATIONS, THIS IS THE NUMBER C OF STATIONS. MAXIMUM OF ND13. C KFILFC - UNIT NUMBER FOR WRITING THE FORECAST OUTPUT TO C SEQUENTIAL FILE. WHEN KFILFC = 0, PACKED C FORECASTS ARE NOT WRITTEN. C FORNAM - FILE NAME FOR SEQUENTIAL FILE FOR WRITING C FORECASTS. (CHARACTER*60) C KFILX - UNIT NUMBER FOR WRITING FORECAST OUTPUT TO C MOS-2000 EXTERNAL RANDOM ACCESS FILE. WHEN C KFILX = 0, PACKED FORECASTS ARE NOT WRITTEN. C CFILX - FILE NAME FOR MOS-2000 EXTERNAL RANDOM ACCESS C FILE FOR WRITING FORECASTS. (CHARACTER*60) C KFILPF - UNIT NUMBER FOR PREDICTAND/FORECAST C CORRESPONDENCE TABLE. (INPUT) C PFCORR - DATA SET NAME FOR THE UNIT NUMBER IN KFILPF. C (CHARACTER*60) C KFILCP - UNIT NUMBER FOR THE VARIABLE CONSTANT FILE. THIS C CONTAINS DEFAULT VALUES FOR CERTAIN CONSTANTS FOR C BASIC VARIABLES SANS THRESHOLDS, ETC. THESE C INCLUDE PACKING CONSTANTS AND NAMES. C CONNAM - DATA SET NAME FOR THE UNIT NUMBER IN KFILCP. C (CHARACTER*60) C KGP - THE NUMBER OF EQUATIONS BEING PROCESSED. C MTANDS - THE NUMBER OF PREDICTANDS FOR EACH EQUATION C FOR THE GROUP BEING PROCESSED. THIS IS C USED ONLY IN SUBROUTINES, AND MUST BE C DIMENSIONED FOR TANDID, SO IT IS DIMENSIONED C MTANDS(1) IN U900. C NSETS - THE NUMBER OF SETS OF EQUATIONS, C EACH HAVING A FILE NUMBER AND NAME IN C KFILIN( ) AND NAMIN( ), RESPECTIVELY. C EACH SET CAN HAVE A DIFFERENT NUMBER OF C PREDICTANDS. IF THERE ARE TWO SETS OF C EQUATIONS, THEY COULD BE ON DIFFERENT UNITS, C BUT SINCE THE UNITS ARE NOT REWOUND OR CLOSED, C THE UNITS (AND FILE NAMES) COULD BE THE SAME. C INITF - 0 WHEN EVERY STATION IN THE LIST IN CCALL( , ) C HAS AN EQUATION AND INITIALIZATION OF C FCST( , ) DOES NOT HAVE TO BE DONE IN C FCST90. C 1 OTHERWISE. C NTOTBY - THE NUMBER OF BYTES PROCESSED ON THE OUTPUT C FILE KFILFC. C NTOTBY - THE NUMBER OF RECORDS PROCESSED ON THE C OUTPUT FILE KFILFC. C IS0(J) - MOS-2000 GRIB SECTION 0 ID'S (J=1,4). C IS1(J) - MOS-2000 GRIB SECTION 1 ID'S (J=1,21+). C IS2(J) - MOS-2000 GRIB SECTION 2 ID'S (J=1,12). C IS4(J) - MOS-2000 GRIB SECTION 4 ID'S (J=1,4). C LITEMS - THE NUMBER OF ITEMS IN LSTORE( , ). C ISTOP(J) - FOR J=1, ISTOP(1) IS INCREMENTED BY 1 EACH TIME C AN ERROR OCCURS THAT MAY BE FATAL. C FOR J=2, ISTOP(2) IS INCREMENTED BY 1 WHENEVER AN C INPUT DATA RECORD IS NOT FOUND. C STATE - VARIABLE SET TO STATEMENT NUMBER TO INDICATE C WHERE AN ERROR OCCURRED. (CHARACTER*4) C NFETCH - COUNTS THE NUMBER OF TIMES GFETCH HAS BEEN C ENTERED. C NSTORE - COUNTS THE NUMBER OF TIMES GSTORE HAS BEEN C ENTERED. C LASTL - THE LAST LOCATION IN CORE( ) USED IN THE C MOS-2000 INTERNAL STORAGE SYSTEM. C LASTD - TOTAL NUMBER OF PHYSICAL RECORDS ON DISK IN THE C INTERNAL STORAGE SYSTEM. C MINPK - MINIMUM GROUP SIZE WHEN PACKING THE INTERPOLATED C VALUES. SET IN DATA STATEMENT TO 14, THE AGREED C ON VALUE FOR MOS-2000. C IALL - 1 INDICATES ALL STATIONS WITH THE EQUATIONS WILL C BE USED, BECAUSE NO LIST HAS BEEN FURNISHED IN C CCALL( , ). THIS CAN HAPPEN EITHER BECAUSE C NO FILE NUMBERS AND NAMES WERE PROVIDED FOR C KFILD( ) AND DIRNAM ( ) OR BECAUSE NO STATIONS C WERE IN THE LIST ON THE UNIT KFILD(1). C = 0 OTHERWISE. (INTERNAL) C IOS - STATUS VALUE FROM SYSTEM I/O ROUTINES. C (INTERNAL) C LSTOP - THE NUMBER OF ERRORS FOR DAY 1 PROCESSING. C ITIMES - A COUNT OF THE NUMBER OF TIMES RDEQN HAS C BEEN ENTERED FOR THAT EQUATION FILE. C IDUM(ND11) - PLACEHOLDER FOR CALLS TO RDSNAM THAT DO NOT C REQUIRE THE INFORMATION IN MODNUM( ) OR JFOPEN. C C C SUBPROGRAMS CALLED: C UNIQUE - FCST90, RDSTR9, SETJDT C LIBRARY: C MDLLIB90 - IPOPEN, IERX, RDI, RDSNAM, RDSTAD, RDSTAL, IPRINT, C TIMPR, SKIPWR, TANDID, RDEQN, TRAIL, DATPRO, C CLFILM C C EXIT STATES: C COND = 0 - SUCCESSFUL RUN C 20 - ERROR OR END OF FILE ON UNIT KFILEQ OR C DATES ON EQUATION FILE DO NOT MATCH NDATE C (FROM RDEQN). C 21 - LIST TOO LONG FOR DIMENSION ND ON UNIT KFIL. C (FROM RDI OR RDEQN). C 106 - NO PREDICTORS FOUND FOR DAY 1. C 131 - ERROR READING NCEP DATE FILE. C 166 - NUMBER OF PREDICTANDS = ZERO OR GT ND3. C (FROM RDEQN). C 167 - NUMBER OF TERMS IN EQUATION = 0 OR GT ND2. C (FROM RDEQN). C 169 - NUMBER OF EQUATIONS GT ND1 OR GT ND13. C (FROM RDEQN). C C REMARKS: NONE C C ATTRIBUTES: C LANGUAGE: FORTRAN 90 (XLF90 COMPILER) C MACHINE: IBM SP C C$$$ C CHARACTER*4 STATE,IPINIT CHARACTER*8 CCALL(ND1,6), 1 CCALLD(ND5) CHARACTER*20 NAME(ND1) CHARACTER*32 PLAIN(ND3) CHARACTER*60 NAMIN(ND6),EQNNAM(ND11) CHARACTER*60 DIRNAM(2),CONNAM,DATNAM,FORNAM,PFCORR,RACESS(5),CFILX CHARACTER*72 RUNID/' '/ C DIMENSION ICALL(L3264W,ND1,6),ISDATA(ND1),SDATA(ND1),XDATA(ND1) DIMENSION IPACK(ND5),ICALLD(L3264W,ND5), 1 IWORK(ND5),DATA(ND5) DIMENSION KFILIN(ND6),MODNUM(ND6),JFOPEN(ND6) DIMENSION INDEXC(ND1,ND6) DIMENSION IS0(ND7),IS1(ND7),IS2(ND7),IS4(ND7) DIMENSION IDATE(ND8),NWORK(ND8) DIMENSION LSTORE(12,ND9) DIMENSION CORE(ND10),IDUM(ND11) DIMENSION KFILEQ(ND11),JFOPENEQ(ND11) DIMENSION NGP(ND13),LGP(ND13),MTRMS(ND13) DIMENSION ID(7,ND13,ND2),IDPARS(15,ND13,ND2),TRESHL(ND13,ND2), 1 JD(4,ND13,ND2),ITAU(ND13,ND2),IUSED(ND13,ND2) DIMENSION CONST(ND13,ND3), 1 AVG(ND13,ND3), 2 CORR(ND13,ND3) DIMENSION COEF(ND13,ND2,ND3) DIMENSION ISCALD(ND3),ICAT(ND3) DIMENSION IDTAND(4,ND3),IDTPAR(15,ND3) DIMENSION IPLAIN(L3264W,4,ND3) DIMENSION LOCSTA(ND1) DIMENSION FCST(ND1,ND3) DIMENSION IP(25),IUSE(25),KFILD(2),ISTOP(2),MTANDS(1), 1 KFILRA(5) C DO NOT REMOVE MTANDS(1). C DATA ISTOP/0,0/ DATA KFIL10/99/ DATA IP/25*0/ DATA NSTORE/0/, 1 NFETCH/0/ DATA LASTL/0/, 1 LASTD/0/ DATA MINPK/21/ DATA LITEMS/0/ DATA IUSE/1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0/ C CALL W3TAGB('U900',2000,0100,0050,'OSD21') 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 OPEN(UNIT=KFILDI,FILE='U900.CN',STATUS='OLD',IOSTAT=IOS,ERR=900) C C READ AND PROCESS THE PRINT UNIT NUMBERS. FIRST, C INITIALIZE IP( ) IN CASE NOT ALL 25 VALUES ARE READ. C DO 105 J=1,25 IP(J)=0 105 CONTINUE 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( ). CALL IPOPEN(KFILDO,'U900',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 'U900' 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(1)=ISTOP(1)+1 C AN ERROR IN IPOPEN WILL STOP THE PROGRAM AFTER CONTROL INPUT IS C PROCESSED. 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 U900 ') 113 CONTINUE C C READ AND PRINT THE RUN IDENTIFICATION. C STATE='115 ' READ(KFILDI,115,IOSTAT=IOS,ERR=900,END=116)RUNID 115 FORMAT(A72) C LESS THAN 72 CHARACTERS WILL NOT BE CONSIDERED AN ERROR. 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 READ AND PRINT CONTROL INFORMATION. C STATE='125 ' READ(KFILDI,125,IOSTAT=IOS,ERR=900,END=1250) 1 KSKIP,KWRITE,NSKIP,JSTOP,INCCYL,NEW,NALPH,LOOKAH, 2 NREPLA,NCHECK,PXMISS 125 FORMAT(10(I10/),F10.0) GO TO 1255 C INCOMPLETE CONTROL INFORMATION SHOULD BE CONSIDERED AN ERROR. C HOWEVER, A SHORT RECORD DOES NOT CAUSE AN "END" CONDITION. 1250 WRITE(KFILDO,1251) 1251 FORMAT(/' ****CONTROL INFORMATION NOT COMPLETE.', 1 ' STOP IN U900 AT 1250') C CALL W3TAGE('U900') STOP 1250 C C ACCEPT KSKIP AS YY OR YYYY FOR YEAR. IF IT IS ZERO, NO C SKIPPING IS DONE. C 1255 IF(KSKIP.EQ.0)GO TO 126 IF(KSKIP/1000000.GT.1900)GO TO 126 IF(KSKIP/1000000.GT.60)KSKIP=KSKIP+1900000000 IF(KSKIP/1000000.LE.60)KSKIP=KSKIP+2000000000 C 126 WRITE(KFILDO,127)KSKIP,KWRITE,NSKIP,JSTOP, 1 INCCYL,NEW,NALPH,LOOKAH, 2 NREPLA,NCHECK,PXMISS,L3264B 127 FORMAT(/' KSKIP ',I10,' SKIP PAST DATA FOR THIS DATE ON OUTPUT', X ' FILE'/ 1 ' KWRITE',I10,' WILL DIRECTORY RECORD BE WRITTEN?', X ' 1 = YES, 0 = NO'/ 2 ' NSKIP ',I10,' NUMBER OF ERRORS THAT WILL BE', X ' TOLERATED ON DAY 1 BEFORE STOPPING'/ 3 ' JSTOP ',I10,' NUMBER OF ERRORS THAT WILL BE', X ' TOLERATED ON TOTAL RUN BEFORE STOPPING'/ 4 ' INCCYL',I10,' INCREMENT IN HOURS BETWEEN DATE/TIMES'/ 5 ' NEW ',I10,' NEW ICAO CALL LETTERS, 1 = YES,', X ' 0 = NO'/ 6 ' NALPH ',I10,' ALPHABETIZE CALL LETTERS ACCORDING', X ' TO DIRECTORY, 1 = YES, 0 = NO'/ 7 ' LOOKAH',I10,' NUMBER OF HOURS TO READ AHEAD TO', X ' GET OBSERVATIONS FOR PREDICTORS'/ 8 ' NREPLA',I10,' REPLACEMENT IN RANDOM ACCESS FILE,', X ' 0 = NO, 1 = YES, IF FOUND, 2 = YES'/ 9 ' NCHECK',I10,' CHECK FOR DUPLICATES RANDOM ACCESS', X ' FILE, 1 = YES, 0 = NO'/ A ' PXMISS',F10.0,' SECONDARY MISSING VALUE TO INSERT', X ' FOR 9997'/ B ' L3264B',I10,' INTEGER WORD SIZE OF MACHINE') C C READ AND PROCESS UNIT NUMBER AND FILE NAME FOR READING C DATE LIST. FILE WILL BE OPENED AS 'OLD', UNLESS THE FILE C IS THE DEFAULT INPUT FILE. C CALL RDSNAM(KFILDI,KFILDO,KFILDT,DATNAM,IDUM,IDUM,1,N, 1 'OLD','FORMATTED',IP,IER) IF(IER.NE.0)ISTOP(1)=ISTOP(1)+1 WRITE(KFILDO,130)KFILDT 130 FORMAT(/,' NCEP DATE FILE UNIT NUMBER..',/,' ',I4) C C READ AND PRINT THE DATE TO BE PROCESSED C CALL GET_NCEPDATE(KFILDT,IYR,IMO,IDA,IHR,NDATE,IER) C IF(IER.NE.0)THEN WRITE(KFILDO,131) 131 FORMAT(/' ****ERROR: CAN NOT READ NCEP DATE FILE - ', 1 'CATASTROPHIC ERROR IN U900. STOP AT 131.') C CALL W3TAGE('U900') STOP 131 ENDIF NDATES=1 IDATE(1)=NDATE WRITE(KFILDO,132)NDATES,(IDATE(J),J=1,NDATES) 132 FORMAT(/,' ',I4,' INPUT DATE AS READ',/,(1X,10I12)) C C READ AND PROCESS UNIT NUMBERS AND FILE NAMES FOR ALL TDLPACK C INPUT. FILES WILL BE OPENED AS 'OLD'. C CALL RDSNAM(KFILDI,KFILDO,KFILIN,NAMIN,MODNUM,JFOPEN,ND6,NUMIN, 1 'OLD','UNFORMATTED',IP,IER) C ONLY THE FIRST FILE IS OPENED. IF(IER.NE.0)ISTOP(1)=ISTOP(1)+1 C IF(NUMIN.EQ.0)THEN WRITE(KFILDO,141)NUMIN 141 FORMAT(/' ',I2,' MODEL INPUT DATA SETS.') ELSE WRITE(KFILDO,142)NUMIN,(KFILIN(M),NAMIN(M),M=1,NUMIN) 142 FORMAT(/' ',I2,' MODEL INPUT DATA SETS, UNITS AND NAMES.'/ 1 (' ',I4,2X,A60)) ENDIF C C READ AND PROCESS THE UNIT NUMBERS AND FILE NAMES FOR THE C MOS-2000 EXTERNAL RANDOM ACCESS FILES. FIVE ARE ALLOWED, C FILES WILL NOT BE OPENED. THIS IS FOR INPUT ONLY, BUT C THE OUTPUT COULD BE TO THE SAME FILE. C CALL RDSNAM(KFILDI,KFILDO,KFILRA,RACESS,IDUM,IDUM,5,NUMRA, 1 'NOT','NOTOPENED',IP,IER) IF(IER.NE.0)ISTOP(1)=ISTOP(1)+1 C IF(NUMRA.NE.0)THEN WRITE(KFILDO,143)NUMRA,(KFILRA(J),RACESS(J),J=1,NUMRA) 143 FORMAT(/' ',I2,' MOS-2000 EXTERNAL RANDOM ACCESS DATA SETS,', 1 ' UNITS, AND NAMES.'/(' ',I4,2X,A60)) ELSE WRITE(KFILDO,1430)NUMRA 1430 FORMAT(/' ',I2,' MOS-2000 EXTERNAL RANDOM ACCESS DATA SET.') C THE ABOVE PRINT IS FOR THE EMPTY SET. ENDIF C C CHECK FOR A MOS-2000 EXTERNAL RANDOM ACCESS FILE FOR C FORECASTS WITH UNIT NUMBER = 49. THIS WILL BE THE C OUTPUT FILE. SAVE THE FILE NAME IN CFILX. U900 C MUST HAVE AN OUTPUT EXTERNAL RANDOM ACCESS FILE; C WRITING IS U900'S ONLY PURPOSE. C DO 1432 J=1,NUMRA IF(KFILRA(J).EQ.49)GO TO 1434 1432 CONTINUE C WRITE(KFILDO,1433) 1433 FORMAT(/' ****NO UNIT NUMBER = 49 FOR RANDOM ACCESS FORECAST', 1 ' FILE. STOP IN INT910 AT 1433.') C CALL W3TAGE('U900') STOP 1433 C 1434 KFILX=49 CFILX=RACESS(J) C C READ AND PROCESS UNIT NUMBER AND SEQUENTIAL FILE NAME FOR WRITING C FORECAST OUTPUT. FILE WILL BE OPENED AS 'NEW'. C CALL RDSNAM(KFILDI,KFILDO,KFILFC,FORNAM,IDUM,IDUM,1,N, 1 'NEW','UNFORMATTED',IP,IER) IF(IER.NE.0)ISTOP(1)=ISTOP(1)+1 C IF(KFILFC.NE.0)THEN WRITE(KFILDO,144)KFILFC,FORNAM 144 FORMAT(/' SEQUENTIAL FORECASTS OUTPUT, UNIT AND NAME.'/ 1 (' ',I4,2X,A60)) ELSE WRITE(KFILDO,145) 145 FORMAT(/' NO SEQUENTIAL OUTPUT DATA SET PROVIDED;', 1 ' PACKED FORECASTS WILL NOT BE WRITTEN.') FORNAM=' ' ENDIF C C READ AND PROCESS UNIT NUMBERS AND FILE NAMES FOR STATION LIST C (CALL LETTERS) AND STATION DIRECTORY WHICH HOLDS CALL LETTERS, C LATITUDE, LONGITUDE, WBAN NUMBER, ELEVATION, AND NAME FOR EACH C POSSIBLE STATION. THIS CAN BE A MASTER DIRECTORY, OR BE A DIRECTORY C SUPPLIED BY A USER. C CALL RDSNAM(KFILDI,KFILDO,KFILD,DIRNAM,IDUM,IDUM,2,N, 1 'OLD','FORMATTED',IP,IER) IF(IER.NE.0)ISTOP(1)=ISTOP(1)+1 C IALL=0 IF(N.EQ.0)THEN IALL=1 GO TO 148 ENDIF C WRITE(KFILDO,147)(KFILD(J),DIRNAM(J),J=1,2) 147 FORMAT(/' STATION LIST AND DIRECTORY DATA SETS, UNITS AND NAMES.'/ 1 (' ',I4,2X,A60)) C C READ STATION LIST AND OTHER STATION INFORMATION. THE STATION C LIST CAN COME FROM THE DIRECTORY OR BE SEPARATE. IF SEPARATE, C IT CAN BE ON THE DEFAULT INPUT FILE KFILDI, OR BE ON A SEPARATE C FILE AS DETERMINED BY KFILD(1). FORECASTS WILL BE MADE FOR ONLY C THE STATIONS IN THIS LIST. THERE ARE STATION LIST(S) WITH THE C EQUATIONS. WHEN THIS SET IS EMPTY, FORECASTS WILL BE MADE FOR C ALL THE STATIONS ON THE EQUATION FILE. OTHERWISE, THE LISTS C WITH THE EQUATIONS WILL DETERMINE, AS USUAL, WHICH EQUATIONS C GO WITH WHICH STATIONS, BUT THE LIST HERE WILL DETERMINE WHAT C FORECASTS TO MAKE. THE STATION LIST CAN BE USED AS READ, C OR BE ORDERED ACCORDING TO THE STATION DIRECTORY, WHICH IS C ALPHABETICAL BY ICAO CALL LETTERS. C IF(NALPH.EQ.0)THEN CALL RDSTAL(KFILDO,IP(4),IP(5),KFILD,NEW,CCALL, 1 NAME,IPACK,IWORK,SDATA,XDATA,DATA,ISDATA, 2 ND1,NSTA,IER) ELSE IF(NALPH.EQ.2)THEN ! TO BYPASS STATION CHECKS CALL RDSTAL2(KFILDO,IP(4),IP(5),KFILD,NEW,CCALL, 1 NAME,IPACK,IWORK,SDATA,XDATA,DATA,ISDATA, 2 ND1,NSTA,IER) ELSE CALL RDSTAD(KFILDO,IP(4),IP(5),KFILD,NEW,CCALL,CCALLD, 1 NAME,IPACK,IWORK,SDATA,XDATA,DATA,ISDATA, 2 ND1,NSTA,IER) ENDIF C IF(IER.NE.0)ISTOP(1)=ISTOP(1)+1 IF(NSTA.EQ.0)IALL=1 C IALL = 1 INDICATES ALL STATIONS WITH THE EQUATIONS WILL C BE USED, BECAUSE NO LIST HAS BEEN FURNISHED IN CCALL( , ). C NOTE THAT THIS CAN HAPPEN EITHER BECAUSE NO FILE C NUMBERS AND NAMES WERE PROVIDED FOR KFILD( ) AND DIRNAM ( ) C ABOVE OR BECAUSE NO STATIONS WERE IN THE LIST ON THE UNIT C KFILD(1). 148 IF(KFILD(1).NE.KFILDI)CLOSE(UNIT=KFILD(1)) CLOSE(UNIT=KFILD(2)) C THE FILES ARE CLOSED WHEN THEY ARE NOT THE SAME AS C THE DEFAULT INPUT FILE. THE DIRECTORY IS NEVER THE DEFAULT. C IF(IALL.EQ.0)THEN D WRITE(KFILDO,1505)(J,CCALL(J,1),NAME(J),J=1,NSTA) D1505 FORMAT(/' FULL LIST OF STATIONS'//(1XI4,3XA8,1XA20)) C THE LIST COULD HAVE BEEN PRINTED IN RDSTAL OR RDSTAD C UNDER CONTROL OF IP(4) AND IP(5). ELSE WRITE(KFILDO,1506) 1506 FORMAT(' NO STATION LIST AVAILABLE.'/ 1 ' FORECASTS WILL BE MADE FOR ALL STATIONS', 2 ' WITH THE EQUATIONS.') ENDIF C C READ AND PROCESS UNIT NUMBERS AND FILE NAMES FOR READING C EQUATIONS. EACH EQUATION SET WILL HAVE A FILE NUMBER C AND NAME. FILES WILL BE OPENED AS 'OLD'. C CALL RDSNAM(KFILDI,KFILDO,KFILEQ,EQNNAM,IDUM,JFOPENEQ,ND11, 1 NSETS,'OLD','FORMATTED',IP,IER) IF(IER.NE.0)ISTOP(1)=ISTOP(1)+1 IF(NSETS.NE.0)THEN WRITE(KFILDO,152)(KFILEQ(J),EQNNAM(J),J=1,NSETS) 152 FORMAT(/' EQUATIONS TO READ, UNITS AND NAMES.'/ 1 (' ',I4,2X,A60)) ELSE WRITE(KFILDO,153) 153 FORMAT(/' NO EQUATION FILES INDICATED. FATAL ERROR') ISTOP(1)=ISTOP(1)+1 C NO SKIPPING HAS BEEN DONE AND NOTHING HAS C BEEN WRITTEN, SO DON'T WRITE TRAILER. GO TO 805 ENDIF C C READ AND PROCESS UNIT NUMBER AND FILE NAME FOR C PREDICTAND/FORECAST CORRESPONDENCE TABLE. C CALL RDSNAM(KFILDI,KFILDO,KFILPF,PFCORR,IDUM,IDUM,1,N, 1 'OLD','FORMATTED',IP,IER) IF(IER.NE.0)ISTOP(1)=ISTOP(1)+1 C IF(KFILPF.NE.0)THEN WRITE(KFILDO,155)KFILPF,PFCORR 155 FORMAT(/' PREDICTAND/FORECAST CORRESPONDENCE TABLE,', 1 ' UNIT AND NAME.'/(' ',I4,2X,A60)) ELSE WRITE(KFILDO,156) 156 FORMAT(/' NO PREDICTAND/FORECAST CORRESPONDENCE', 1 ' FILE PROVIDED. IDS WITH EQUATIONS WILL', 2 ' BE USED.') ENDIF C C READ AND PROCESS UNIT NUMBER FOR THE PREDICTOR C CONSTANTS DIRECTORY. C CALL RDSNAM(KFILDI,KFILDO,KFILCP,CONNAM,IDUM,IDUM,1,N, 1 'OLD','FORMATTED',IP,IER) IF(IER.NE.0)ISTOP(1)=ISTOP(1)+1 IF(KFILCP.NE.0)WRITE(KFILDO,157)KFILCP,CONNAM 157 FORMAT(/' VARIABLE CONSTANT DIRECTORY, UNIT AND NAME.'/ 1 (' ',I4,2X,A60)) C C CHECK OUTPUT FILE UNIT NUMBER KFILX WITH KFILFC C TO MAKE SURE RANDOM ACCESS IS NOT CONTAMINATED. C IF(KFILFC.NE.0.AND.KFILFC.EQ.KFILX)THEN WRITE(KFILDO,1573)KFILX,KFILFC 1573 FORMAT(/' ****KFILX = KFILFC. KFILFC IS SET = 0') KFILFC=0 ISTOP(1)=ISTOP(1)+1 ENDIF C C SKIP RECORDS ON THE OUTPUT FILE WHEN KSKIP NE 0. C THE STATION LIST IN CCALL( , ) IS CHECKED WITH THE STATION C LIST AS THE FIRST RECORD IN THE FILE. IF THEY DO NOT C MATCH, THE PROGRAM HALTS FOR SAFETY WHEN KWRITE = 0, C AND WRITE THE NEW STATION LIST WHEN KWRITE = 1. C WHEN RECORDS ARE NOT SKIPPED, THE CALL LETTERS C RECORD IS WRITTEN. WHEN KFILFC = 0, SKIPWR DOES NOTHING. C KCHECK=1 CALL SKIPWR(KFILDO,KFILFC,KSKIP,KWRITE,KCHECK, 1 CCALL,ND1,NSTA, 2 CCALLD,ND1,IPACK,ND5, 3 NTOTBY,NTOTRC,L3264B,L3264W,IER) C IF(IER.NE.0)THEN WRITE(KFILDO,1575) 1575 FORMAT(/' ****PROGRAM STOP AT 1575 BECAUSE OF ERROR IN', 1 ' ROUTINE SKIPWR. OTHERWISE, GOOD DATA MIGHT', 2 ' BE OVERWRITTEN.') C CALL W3TAGE('U900') STOP 1575 C STOP THE PROGRAM FOR SAFETY. OTHERWISE, GOOD DATA MIGHT C BE OVERWRITTEN. ENDIF C C READ ALL DATA FOR DAY 1 AND STORE IN MOS-2000 C INTERNAL STORAGE SYSTEM. PROJECTIONS ON OBSERVATIONS C AS PREDICTORS MUST BE ADDED TO IDATE( ) TO "LOOKAHEAD." C SINCE THE EQUATIONS ARE READ AND EVALUATED ONE C SET AT A TIME, IT CANNOT BE COMPUTED HOW FAR AHEAD C TO READ (AS IT CAN BE IN U700). THIS IS IN U900 C AS AN INPUT VARIABLE LOOKAD. C C NORMALLY THE LOOP BELOW WILL BE EXECUTED ONLY ONCE. C HOWEVER, THE INPUT IS SEQUENTIAL AND MORE THAN ONE C DATE COULD BE USED. ALL INPUT MUST BE FROM THE C SEQUENTIAL FILE(S). C DO 400 ND=1,NDATES C CALL RDSTR9(KFILDO,KFIL10,KFILIN,NAMIN,JFOPEN,NUMIN, 1 IDATE(ND),LOOKAH,CCALLD,IPACK,IWORK,DATA,ND5, 2 IS0,IS1,IS2,IS4,ND7, 3 LSTORE,LITEMS,ND9,NBLOCK,CORE,ND10, 4 LASTL,LASTD,NSTORE,IP(10), 5 CCALL,INDEXC,XDATA,ND1,NSTA,PXMISS, 6 IP(12),IP(23),L3264B,L3264W,ISTOP(1),IER) C IF(IER.NE.0.AND.IER.NE.146)THEN C IER = 146 WHEN AN END OF FILE REACHED WHEN C ATTEMPTING TO READ A DIRECTORY. THIS WOULD C OCCUR WHEN THE DAY BEING PROCESSED IS THE C LAST DAY ON THE DATA SET. WRITE(KFILDO,1577) 1577 FORMAT(' ****FATAL ERROR, STOP IN U900 AT 1577') C CALL W3TAGE('U900') STOP 1577 ENDIF C C READ THE EQUATIONS AND MAKE FORECASTS A SET AT A TIME. C THE NUMBER OF SETS IS THE NUMBER OF FILE NAMES READ C INTO EQNNAM( ). MORE THAN ONE SET CAN BE ON A FILE, C AS IT IS NOT REWOUND. THIS IMPOSES SOME RESTRICTIONS C ON THE ORDER OF EQUATIONS, ETC. FOR INSTANCE, IF C KFILEQ(3) = 30, THEN THE THIRD SET OF EQUATIONS C WILL BE READ FROM UNIT 30 (IF IT EXISTS, AND HAS NOT C ALL BEEN READ), STARTING FROM WHERE IT IS POSITIONED. C CONTROL AS TO THE EQUATIONS EVALUATED IS NOT BY C PREDICTAND NAME, BUT BY FILE NAME. C DO 300 NSET=1,NSETS C ITIMES=0 C C 6/2000 - CHANGED TO CONTINUE READING THE EQUATION FILE C TILL AN END OF FILE IS REACHED. ITIMES KEEPS TRACK OF C HOW MANY TIMES YOU HAVE ENTERED AN EQUATION FILE. IF C YOU REACH AN END OF FILE ON AN EQUATION FILE, AND ITIMES C IS NON-ZERO, THAT'S OKAY, YOU'VE JUST REACHED THE END OF C THAT FILE. IF YOU REACH THE END OF THE FILE AND ITIMES C IS 0, THIS IS A TRUE ERROR. INITIALIZE ITIMES TO ZERO C FOR EACH NEW EQUATION FILE. C C SKIP TO NEXT FILE IF THE PREVIOUS READ INDICATED C INCORRECT DATES. ONCE THE BEGINNING AND ENDING C DATES ON THE EQUATION FILE DO NOT MATCH, THE FILE C WILL NOT BE POSITIONED PROPERLY TO READ ANOTHER C SET. C IF(NSET.GT.1)THEN C IF(IER.EQ.20)THEN IF(KFILEQ(NSET).EQ.KFILEQ(NSET-1))GO TO 300 ENDIF C ENDIF C 1580 CALL RDEQN9(KFILDO,KFILEQ(NSET),EQNNAM(NSET),IDATE(ND), 1 IP(4),IP(13),IP(14),IP(15),IP(19),IP(20),IP(21), 2 CCALL,ISDATA,NSTA,IALL,INITF,CCALLD, 3 KGP,NGP,LGP, 4 MTRMS,MTANDS, 5 ID,IDTAND, 6 LOCSTA,CONST, 7 AVG,CORR, 8 COEF, 9 ND1,ND2,ND3,ND5,ND13,IER) IF(IER.NE.0)ISTOP(1)=ISTOP(1)+1 C IF(IER.NE.0.AND.IER.NE.171)THEN C IER = 171 JUST MEANS ONE OR MORE STATIONS HAS NO C EQUATION. C IF((IER.EQ.168).AND.(ITIMES.GT.0))THEN C THIS MEANS THAT YOU'VE BEEN READING THIS FILE C IN PREVIOUS CALLS TO RDEQN, BUT NOW YOU'VE REACHED THE C END OF THE FILE. MOVE ON TO THE NEXT EQUATION FILE. C RESET ISTOP, BECAUSE THIS ISN'T AN ERROR WE WANT TO COUNT. WRITE(KFILDO,1581)KFILEQ(NSET),EQNNAM(NSET) 1581 FORMAT(' IF THE IBM IOSTAT ERROR ABOVE IS -1, THIS MEANS ', 1 ' AN END OF THE FILE WAS',/,' REACHED ON UNIT NO:', 2 I3,1X,'FILE = ',A45,/' THIS IS PROBABLY NOT AN ERROR.') ISTOP(1)=ISTOP(1)-1 GO TO 300 ELSEIF(IER.EQ.168)THEN C THIS MEANS THAT THE EQUATION FILE WAS EMPTY. ALERT THE C USER TO CHECK THIS OUT, BUT DON'T STOP THE PROGRAM. WRITE(KFILDO,1582)KFILEQ(NSET),EQNNAM(NSET) 1582 FORMAT(' ****THE EQUATION FILE ON UNIT NO:',I3,' ',1X, & 'FILE = ',A45,' DID NOT EXIST OR WAS ', 1 'EMPTY. THE USER SHOULD INVESTIGATE, BUT U900 '/, 2 ' WILL NOT STOP.') GO TO 300 ELSEIF(IER.EQ.21)THEN WRITE(KFILDO,158) 158 FORMAT(/' STOP IN U900 AT 158;', 1 ' INCREASE ND1 AND/OR ND5.') C CALL W3TAGE('U900') STOP 158 ELSEIF(IER.EQ.169)THEN WRITE(KFILDO,159) 159 FORMAT(/' STOP IN U900 AT 159;', 1 ' INCREASE ND1 AND/OR ND13.') C CALL W3TAGE('U900') STOP 159 ELSEIF(IER.EQ.166)THEN WRITE(KFILDO,160) 160 FORMAT(/' STOP IN U900 AT 160; PROVIDE PREDICTANDS', 1 ' OR INCREASE ND3') C CALL W3TAGE('U900') STOP 160 ELSEIF(IER.EQ.167)THEN WRITE(KFILDO,161) 161 FORMAT(/' STOP IN U900 AT 161; PROVIDE EQUATIONS', 1 ' OR INCREASE ND2') C CALL W3TAGE('U900') STOP 161 ELSEIF(IER.EQ.20)THEN C THIS IS AN END OF FILE, ERROR, OR DATES OF C EQUATIONS DON'T MATCH IDATE( ). GO TO 300 ELSE WRITE(KFILDO,162)IER 162 FORMAT(/' STOP IN U900 AT 162, IER =',I5,'.') C CALL W3TAGE('U900') STOP 162 ENDIF C ENDIF C C ANY TIME YOU SUCCESSFULLY COME OUT OF RDEQN, INCREMENT C ITIMES AS TO SAY THAT YOU'VE ALREADY BEEN READING THIS FILE C ITIMES=ITIMES+1 C C PUT PLAIN LANGUAGE AND SCALING PARAMETER FOR PACKING C WITH THE PREDICTANDS. C C WRITE(KFILDO,164)ND3,ND11,NSETS,MTANDS(1) C164 FORMAT(/' IN U900 AT 164--ND3,ND11,NSETS,MTANDS(1)',4I6) CALL TANDID(KFILDO,KFILCP,KFILPF,PFCORR,IP(7),IP(9),IDTAND, 1 IDTPAR,ISCALD,PLAIN,ICAT,MTANDS,1,ND3,1, 2 ISTOP(1),IER) C NOTE THAT NSETS AND ND11 IN TANDID MUST BE PASSED AS 1 C FROM U900. C C SET JD( , , ), THRESH( , ), AND ITAU( , ) TO AGREE C WITH ID( , , ) FOR U900. C CALL SETJDT(KFILDO,ID,IDPARS,TRESHL,JD,ITAU,KGP,MTRMS, 1 ND2,ND13,IER) C C MAKE FORECASTS. C CALL FCST90(KFILDO,KFIL10,IP(12),KFILFC,KFILX,CFILX, 1 KFILRA,RACESS,NUMRA, 2 IDATE(ND),ICALL,CCALL,ISDATA,XDATA,ND1,NSTA, 3 ICALLD,CCALLD,IPACK,IWORK,DATA,ND5, 4 LSTORE,ND9,LITEMS,CORE,ND10, 5 NBLOCK,NSTORE,NFETCH, 6 IS0,IS1,IS2,IS4,ND7, 7 KGP,NGP,LGP,MTRMS,MTANDS,ICAT, 8 ID,IDPARS,TRESHL,JD,ITAU,IUSED, 9 CONST,AVG,CORR,COEF,ND2,ND3, A IDTAND,IDTPAR,LOCSTA,ND13, B FCST,INITF, C IPLAIN,PLAIN,ISCALD,MINPK,NREPLA,NCHECK, D IP(16),IP(17),IP(18),NTOTBY,NTOTRC, E L3264B,L3264W,ISTOP,IER) C IF(IER.EQ.106)THEN WRITE(KFILDO,170) 170 FORMAT(/' ****NO PREDICTORS FOUND FOR DAY 1.', 1 ' STOP IN U900 AT 2010.') C CALL W3TAGE('U900') STOP 170 ENDIF C C NOW RETURN TO RDEQN AND TRY TO CONTINUE READING THE C CURRENT EQUATION FILE. C GO TO 1580 300 CONTINUE C C EMPTY LSTORE( , ) AND PREPARE FOR NEXT DATE/TIME. C DO 310 L=1,LITEMS LSTORE(1,L)=0 310 CONTINUE C LITEMS=0 LASTL=0 LASTD=0 C C REWIND EQUATION FILES. C DO 320 NSET=1,NSETS REWIND KFILEQ(NSET) 320 CONTINUE C 400 CONTINUE C C WRITE TRAILER RECORD AND EOF UNLESS KFILFC = 0. IF THERE C IS AN ERROR, TRAIL WILL PRODUCE A DIAGNOSTIC. C IF(KFILFC.NE.0)THEN CALL TRAIL(KFILDO,KFILFC,L3264B,L3264W,NTOTBY,NTOTRC,IER) ENDFILE KFILFC ENDIF C C CLOSE RANDOM ACCESS FILE. C CALL CLFILM(KFILDO,KFILX,IER) C C CLOSE UP SHOP. C 805 WRITE(KFILDO,806)NSTORE 806 FORMAT(/' THE MOS-2000 INTERNAL FILE HAS BEEN ACCESSED BY', 1 ' GSTORE',I11,' TIMES.') WRITE(KFILDO,807)NFETCH 807 FORMAT(' THE MOS-2000 INTERNAL FILE HAS BEEN ACCESSED BY', 1 ' GFETCH',I11,' TIMES.') IF(KFILFC.EQ.0)GO TO 8079 WRITE(KFILDO,8075)NTOTBY,NTOTRC,FORNAM 8075 FORMAT(/' A TOTAL OF ',I11,' BYTES IN ',I7,' RECORDS NOW', 1 ' EXIST ON FILE ',A60) 8079 IF(ISTOP(1).NE.0)WRITE(KFILDO,808)ISTOP(1) 808 FORMAT(/' AT LEAST ISTOP(1) =',I6, 1 ' ERRORS HAVE OCCURRED ON THIS RUN.') IF(ISTOP(2).NE.0.AND.ISTOP(1).EQ.0)WRITE(KFILDO,809)ISTOP(2) 809 FORMAT(/' AT LEAST ISTOP(2) =',I6, 1 ' DATA RECORDS NOT FOUND ON THIS RUN.') IF(ISTOP(2).NE.0.AND.ISTOP(1).NE.0)WRITE(KFILDO,8090)ISTOP(2) 8090 FORMAT(' AT LEAST ISTOP(2) =',I6, 1 ' DATA RECORDS NOT FOUND ON THIS RUN.') IF(ISTOP(1).EQ.0.AND.ISTOP(2).EQ.0)WRITE(KFILDO,810) 810 FORMAT(/' NO ERRORS HAVE BEEN DETECTED ON THIS RUN.') WRITE(KFILDO,811) 811 FORMAT(' ') RETURN C C ERROR STOP BELOW IS FOR ERRORS OF CONTROL INFORMATION INPUT. 900 CALL IERX(KFILDO,KFILDO,IOS,'U900 ',STATE) C CALL W3TAGE('U900') STOP 9999 END