Model Change Bulletin MCB#4 8/19/95 CAL3QHC (Dated 95221) CAL3QHCR (Dated 95221) Both CAL3QHC and CAL3QHCR are covered by this Model Change Bulletin (MCB) under the CAL3QHC model name. Since CAL3QHCR is an enhanced but separate version of CAL3QHC, both models will retain their respective Julian creation dates. Under this MCB, both models, have the same creation date. The user's guides to both models have been modified and are available under the CAL3QHC model name in the File Transfer area of the SCRAM BBS, under Regulatory Models, in the Documentation Section. The CAL3QHC user's guide has been modified to reflect changes in the model from a fixed formated to a free formated input structure. The Particulate Matter - 10 micron size (PM-10) nomenclature has been replaced with Particulate Matter (PM) nomenclature throughout both user's guides and models. This is to allow for the possibility of modeling for other PM sizes than just PM-10. The CAL3QHCR user's guide has been modified to reflect the input of wind flow values instead of wind direction values into CAL3QHCR. Also, the input redirection symbol is no longer needed in the CAL3QHCR execution line. Details concerning the user guide modifications are available in the general README file associated with this model. The major change between CAL3QHC and CAL3QHCR is in the reading of the direction of the wind. CAL3QHC requires wind direction input and CAL3QHCR requires wind flow input. Wind direction is the angle the wind is coming from (i.e. a 90 degree is coming from the east). Wind flow is the angle the wind is blowing toward (i.e. a 90 degree wind flow is a wind blowing toward the east). *** CAL3QHC CHANGES *** Three significant changes have been made to CAL3QHC. These changes are: 1. the added capability to perform PM calculations, 2. the modification of the input format from a fixed to a free format, 3. the modification to allow use of a Microsoft compiler to compile the source code, and 4. the saving of Lahey Fortran compiler specific code by commenting out Lahey specific lines of code and by saving a Lahey specific subroutine as a separate Fortran file. *** CAL3QHCR CHANGES *** One significant correction and several formatting changes have been made to the CAL3QHCR source code. These changes and updates consist of the following: 1. Correction to read in wind flow values instead of wind direction values from preprocessed meteorological data. The EPA PCRAMMET and MPRM meteorological preprocessor programs output wind flow values as opposed to wind direction values. The model was changed to accept this as the primary source of meteorological data. 2. Creation of source code compilable with a Microsoft Fortran Compiler. Lahey specific source code has been retained but commented out with a 'CL' flag or saved in a separate file. Microsoft specific functions have been added to replace the Lahey specific functions. The revised code has been compiled and tested using Microsoft Fortran Compiler Version 5.0. No Lahey compilation testing has been done with this revised code. ************************* Source Code Modifications ************************* *** CAL3QHC Model **** 1. A CAL3QHC Model header was added to reflect a new model creation date of 95221 and MCB number. C ************************************************************************** C * * C * CAL3QHC (DATED 95221) * C * * C * *** SEE CAL3QHC (DATED 95221) MCB #4 *** * C * * C * ON THE SUPPORT CENTER FOR REGULATORY AIR MODELS BULLETIN BOARD * C * * C * (919) 541-5742 (8-N-1) * C * * C ************************************************************************** C 2. A summary statement of program modifications was added just below the header. C | | C | CAL3QHC was modified to accept free format input, and to be | C | compilable using a Microsoft Fortran compiler. The | C | program was recompiled using Microsoft Fortran. | C | Some minor alterations were made to the READ, WRITE, | C | and FORMAT statements and to the output file structure.| C | A Lahey Fortran File Input/Output file name processing | C | algorithm has been saved, in part, as a separate file | C | and by commenting out Lahey specific code with 'CL' | C | added to the first two columns of each respective line | C | of code. Lahey date and time library functions have | C | also been retained by commenting out these functions | C | in the same manner. A bubble sort subroutine was not | C | being used and was therefore deleted. | C | | C 3. The following section was added and details the new input format structure along with some cautionary notes. C INPUT FORMAT C C Note: Input is in free format. Single quotes need to be placed around C 'character string input'. All data that could be entered C optionally under the old fixed input format, needs to be entered. C C *********************************************************** C **** ALL OPTIONAL DATA NEEDS TO BE ENTERED. **** C **** (eg saturation rates, wind range increments.) **** C *********************************************************** C C 'Title (up to 40 Char.)' ATIM, ZO, VS, VD, NR, SCAL, IOPT, IDEBUG. C 'Receptor name', X- and Y-coordinate, elevation. C (The last line is repeated for each receptor) C 'Run name', number of links, lines of MET data, PRINT2 flag, 'mode'. C One entry for each link: C Link flow type (IQ, 1 - free flow, 2 - queue). C For IQ = 1: C 'Link name', 'type', beginning X, Y-coords, ending X, Y-Coords, C link volume, emission rate, source height, mixing zone width. C For IQ = 2: C 'Link name', 'type', beginning X, Y-coords, ending X, Y-Coords, C source height, mixing zone width, number of lanes. C Traffic light cycle time, average red, yellow factor, approach volume, C idle emiss. factor, saturation flow rate, signal type, arrival rate. C Wind speed, actual wind direction, stability class, mixing height, C ambient background concentration, 'wind direction variation flag', C direction variation increment, C lower boundary of the wind dir. range variation increment multiplier, C upper boundary of the wind dir. range variation increment multiplier. C C *************************************************************************** 4. The following variable definition statements were modified for compatibility with Microsoft Fortran. The statements were modified from: CHARACTER X1(60)*15,VAR*1,REC(60)*5,RUN(5)*8,JOB(5)*8,STB(6)*1,V2EC + TYP(120)*2,IDATE*8,ITIME*5,FILE5*40,FILE6*40 V2EC C REAL BRGV(361),MOWT,NE,LIM,KZ,LB,LBRG(120),RCP(5,60), V2EC + LNK(5,120),INC,MIXH,K1,IDLFAC(120),PSCALE V2ECF to: CHARACTER X1(60)*15,VAR*1,REC(60)*5,RUN*40,JOB*40,STB(6)*1, V2EC + LNK(120)*20, MODE*1, RCP(60)*20, TYP(120)*2 V2EC CL CHARACTER IDATE*8, ITIME*5, FILE5*40, FILE6*40 V2EC C REAL BRGV(361),MOWT,NE,LIM,KZ,LB,LBRG(120), V2EC + INC,MIXH,K1,IDLFAC(120),PSCALE V2ECF 5. Microsoft date and time calls were added and the Lahey date and time calls were commented out. In addition, the Lahey file name input statements were also commented out in the same manner. Unit numbers were assigned to variable names. The code was changed from: MAXL=120 V2EC C CALL TIME(ITIME) V2EC CALL DATE(IDATE) V2EC C CALL GETFIL(FILE5,FILE6) V2EC C OPEN (5,FILE=FILE5 ,STATUS='OLD') V2EC OPEN (6,FILE=FILE6 ,STATUS='UNKNOWN') V2EC to: MAXL=120 V2EC IN = 7 IOUT = 6 IPO = 8 C CALL GETDAT (IYR, IMON, IDAY) CALL GETTIM (IIHR, IMIN, ISEC, IX) IYR = MOD(IYR,100) CL CL CALL TIME(ITIME) V2EC CL CALL DATE(IDATE) V2EC CLC CL CALL GETFIL(FILE5,FILE6) V2EC CLC CL OPEN (IN,FILE=FILE5 ,STATUS='OLD') V2EC CL OPEN (IPO,FILE=FILE6 ,STATUS='UNKNOWN') CLC 6. The following statement was moved to a later section of code: (Read Comment #9 for details.) FPPM=0.0245/MOWT 7. The data input statements were modified from a fixed to a free format and the file unit numbers were changed to the unit number variables, IN, and IOUT. A section of code was also added to detect when the old input format is possibly being used and to respond with a cautionary warning. The code was modified from: 10 READ (5,120,END=9999) JOB,ATIM,Z0,VS,VD,NR,SCAL,IOPT,IDEBUG V2ECF IF(IDEBUG.EQ.1)WRITE(*,120)JOB,ATIM,Z0,VS,VD,NR,SCAL V2EC to: 10 READ (IN,*,ERR=5,END=9999) JOB,ATIM,Z0,VS,VD,NR,SCAL,IOPT,IDEBUG V2ECF IF (JOB(1:1) .NE. CHAR(39)) GOTO 4 5 WRITE(IOUT,6) 6 FORMAT(' NOTICE'/ +5x,'The format of CAL3QHC (Dated 95221) has been made user-', + 'friendlier',/5X, +'by using a free format. However, the program has detected the', + ' possible use ',/5X, +'of the old format. If this is so, please review the Input ', + 'Format section',/5X, +'of the CAL3QHC source code AND Readme file. The program will', + ' continue',/5X, +'until another error is detected.'/) PAUSE ' Please press any key to continue' 4 CONTINUE IF(IDEBUG.EQ.1)WRITE(IOUT,120)JOB,ATIM,Z0,VS,VD,NR,SCAL 8. The following READ and WRITE statements were modified for free format input and the unit numbers were changed to the variables, IN and IOUT. The statements are not contiguous as denoted by a double space. The code was modified from: WRITE(*,167)NR,MAXR V2EC READ (5,130) (RCP(J,I),J=1,5),XR(I),YR(I),ZR(I) V2EC IF(IDEBUG.EQ.1)WRITE(*,130) (RCP(J,I),J=1,5),XR(I),YR(I),ZR(I) V2EC to: WRITE(IOUT,167)NR,MAXR V2EC READ (IN,*) RCP(I), XR(I),YR(I),ZR(I) V2EC IF(IDEBUG.EQ.1) WRITE(IOUT,130) RCP(I), XR(I), YR(I), ZR(I) V2EC 9. The variable, MODE, used to enter a CO or PM concentrations processing indicator, was added to the end of the following READ statement. An algorithm was added to generate a CO or PM processing flag, MODET, based on the MODE input indicator. The FPPM statement was moved to this section and set to convert concentration output to PPM or micrograms per cubic meter based on the value of MODET. Again, the format and unit numbers were modified as in Comment #8. READ (5,150) RUN,NL,NM,PRINT2 V2EC IF(IDEBUG.EQ.1)WRITE(*,150) RUN,NL,NM,PRINT2 V2EC C V2EC C CHECK NUMBER OF LINKS INPUT DOES NOT EXCEED MAXIMUM ALLOWED. V2EC C V2EC IF(NL.GT.MAXL)THEN V2EC WRITE(*,168)NL,MAXL V2EC to: READ (IN,*) RUN,NL,NM,PRINT2,MODE IF(IDEBUG.EQ.1)WRITE(IOUT,150) RUN,NL,NM,PRINT2,MODE V2EC MODET = 2 IF (MODE .EQ. 'c') MODET = 0 IF (MODE .EQ. 'C') MODET = 0 IF (MODE .EQ. 'p') MODET = 1 IF (MODE .EQ. 'P') MODET = 1 IF (MODET .EQ. 2) THEN WRITE(IOUT,*) 'The MODE variable, ',MODE, + ' was incorrectly entered.' STOP END IF IF (MODET .EQ. 0) THEN FPPM=0.0245/MOWT ELSE FPPM = 1 END IF C C CHECK NUMBER OF LINKS INPUT DOES NOT EXCEED MAXIMUM ALLOWED. C IF(NL.GT.MAXL)THEN V2EC WRITE(IOUT,168)NL,MAXL V2EC 10. The READ and WRITE unit numbers were changed as per Comment #8. The code was changed from: READ(5,14) IQ(I) V2EC IF(IDEBUG.EQ.1)WRITE(*,14) IQ(I) V2EC READ(5,15) (LNK(J,I),J=1,5),TYP(I),XL1(I),YL1(I),XL2(I),YL2(I), V2EC + HL(I),WL(I),NLANES(I) V2EC IF(IDEBUG.EQ.1)WRITE(*,15) (LNK(J,I),J=1,5),TYP(I),XL1(I), V2EC + YL1(I),XL2(I),YL2(I),HL(I),WL(I),NLANES(I) V2EC READ(5,1) CAVG(I),RAVG(I),YFAC(I),IV(I),IDLFAC(I) V2 + ,SFR(I),ST(I),AT(I) V2 IF(IDEBUG.EQ.1)WRITE(*,1) CAVG(I),RAVG(I),YFAC(I),IV(I) V2EC + ,IDLFAC(I),SFR(I),ST(I),AT(I) V2EC 2 READ(5,160) (LNK(J,I),J=1,5),TYP(I),XL1(I),YL1(I),XL2(I),YL2(I), + VPHL(I),EFL(I),HL(I),WL(I) IF(IDEBUG.EQ.1)WRITE(*,160)(LNK(J,I),J=1,5),TYP(I),XL1(I), V2EC + YL1(I),XL2(I),YL2(I),VPHL(I),EFL(I),HL(I),WL(I) V2EC WRITE (6,170) WRITE (6,180) 9060 READ (5,190) U,BRG,CLAS,MIXH,AMB,VAR,DEGR,(VAI(I),I=1,2) V2EC IF(IDEBUG.EQ.1)WRITE(*,190)U,BRG,CLAS,MIXH,AMB,VAR,DEGR, V2EC + (VAI(I),I=1,2) V2EC to: READ(IN,*) IQ(I) V2EC IF(IDEBUG.EQ.1)WRITE(IOUT,14) IQ(I) V2EC READ(IN,*) LNK(I),TYP(I),XL1(I),YL1(I),XL2(I),YL2(I), V2EC + HL(I),WL(I),NLANES(I) V2EC IF(IDEBUG.EQ.1) WRITE(IOUT,15) LNK(I),TYP(I),XL1(I), V2EC + YL1(I),XL2(I),YL2(I),HL(I),WL(I),NLANES(I) V2EC READ(IN,*) CAVG(I),RAVG(I),YFAC(I),IV(I),IDLFAC(I) V2 + ,SFR(I),ST(I),AT(I) V2 IF(IDEBUG.EQ.1)WRITE(IOUT,1) CAVG(I),RAVG(I),YFAC(I),IV(I) V2EC + ,IDLFAC(I),SFR(I),ST(I),AT(I) V2EC 2 READ(IN,*) LNK(I),TYP(I),XL1(I),YL1(I),XL2(I),YL2(I), + VPHL(I),EFL(I),HL(I),WL(I) IF(IDEBUG.EQ.1) WRITE(IOUT,160) LNK(I), TYP(I), XL1(I), V2EC + YL1(I),XL2(I),YL2(I),VPHL(I),EFL(I),HL(I),WL(I) V2EC WRITE (IOUT,170) WRITE (IOUT,180) 9060 READ (IN,*) U, BRG, CLAS, MIXH, AMB, VAR, DEGR, (VAI(I),I=1,2) V2EC IF(IDEBUG.EQ.1)WRITE(IOUT,190) U,BRG,CLAS,MIXH,AMB,VAR,DEGR, V2EC + (VAI(I),I=1,2) V2EC 11. The definition of the variable BRG was expanded from: C BRG = WIND DIRECTION (DEGREES) to: C BRG = WIND DIRECTION (DIRECTION WIND IS BLOWING FROM - IN DEGREES) 12. PM concentration units were added to the following definition. The definition was modified from: C AMB = AMBIENT CONCENTRATION (PPM) to: C AMB = AMBIENT CONCENTRATION (PPM or ug/m^3) 13. A check of the variable BRG was added to determine if it were greater than 360 degrees. If so, 360 degrees was subtracted from BRG. Also note the unit number was changed to a unit variable name. The code was changed from: BRG=BRG2+(DEGR*VA(K4)) C WRITE(*,112) RUN,BRG 112 FORMAT(1X,5A8,' - ANGLE: ',F4.0,'(degrees)') to: BRG=BRG2+(DEGR*VA(K4)) IF (BRG .GT. 360) BRG = BRG - 360. C WRITE(IOUT,112) RUN,BRG 112 FORMAT(1X,A40,' - ANGLE: ',F4.0,'(degrees)') 14. The following groups of WRITE statements were modified by substituting in a unit variable name for a fixed number. Code was added to state the output in terms of PPM or ug/m^3 depending upon the MODET flag setting. Several pages of non contiguous code segments will appear below in groups separated by double spacing. Lahey Fortran compatible code was commented out with a 'CL' flag. The groups of code were changed from: WRITE(6,209) WRITE(6,202) PGCT WRITE(6,210) JOB,RUN WRITE(6,221) IF(VAR.EQ.'Y') GOTO 1005 WRITE(6,240) U,CLAS,STB(CLAS),ATIM,MIXH,AMB,BRG1 GOTO 1249 1005 WRITE(6,231) U,CLAS,STB(CLAS),ATIM,MIXH,AMB GOTO 1249 WRITE (6,200)PGCT WRITE (6,210)JOB,RUN WRITE (6,'(6X,A6,A8,2X,A7,A5/)') V2EC + 'DATE: ',IDATE,' TIME: ',ITIME V2EC WRITE(6,220) WRITE(6,230)VS1,VD1,Z0 IF(VAR.EQ.'Y') GOTO 1205 1211 WRITE(6,240) U,CLAS,STB(CLAS),ATIM,MIXH,AMB,BRG1 GOTO 1206 1205 WRITE(6,231) U,CLAS,STB(CLAS),ATIM,MIXH,AMB IF(KQ.EQ.1) THEN WRITE(6,250) IF(IOPT.EQ.1)THEN V2EF WRITE(6,265) V2EF WRITE(6,275) V2EF ELSE V2EF WRITE(6,260) WRITE(6,270) V2EF ENDIF V2EF WRITE(6,280) ICOUNT=ICOUNT+4 PGCT=PGCT+1 WRITE(6,209) WRITE(6,202) PGCT WRITE (6,210)JOB,RUN WRITE (6,'(6X,A6,A8,2X,A7,A5/)') V2EC + 'DATE: ',IDATE,' TIME: ',ITIME V2EC WRITE(6,250) IF(IOPT.EQ.1)THEN V2EF WRITE(6,265) V2EF WRITE(6,275) V2EF ELSE V2EF WRITE(6,260) WRITE(6,270) V2EF ENDIF V2EF WRITE(6,280) ICOUNT=9 IF(IQ(I).EQ.2) THEN WRITE(6,290) COD(I),(LNK(J,I),J=1,5),XL1(I),YL1(I),XL2(I), + YL2(I),LL(I),LBRG(I),TYP(I),VPHL(I), ELSE WRITE(6,290) COD(I),(LNK(J,I),J=1,5),XL1(I),YL1(I),XL2(I), + YL2(I),LL(I),LBRG(I),TYP(I),VPHL(I), IF(IQ(I).EQ.2)THEN V2EF WRITE(6,290) COD(I),(LNK(J,I),J=1,5),XW1,YW1,XW2, V2EF + YW2,LLW,LBRG(I),TYP(I),VPHL(I), V2EF C V2EF WRITE(6,290) COD(I),(LNK(J,I),J=1,5),XW1,YW1,XW2, V2EF + YW2,LLW,LBRG(I),TYP(I),VPHL(I), V2EF PGCT=PGCT+1 V2EF WRITE(6,209) V2EF WRITE(6,202) PGCT V2EF WRITE (6,210)JOB,RUN V2EF WRITE (6,'(6X,A6,A8,2X,A7,A5/)') V2EF + 'DATE: ',IDATE,' TIME: ',ITIME V2EF WRITE(6,401) V2EF WRITE(6,402) V2EF WRITE(6,403) V2EF WRITE(6,404) V2EF WRITE(6,405) V2EF ICOUNT=10 V2EF ENDIF V2EF IF(IQ(I).EQ.2)THEN V2EF WRITE(6,406)COD(I),(LNK(J,I),J=1,5),CAVG(I),RAVG(I),YFAC(I),V2EF + IV(I),SFR(I),IDLFAC(I),ST(I),AT(I) V2EF IF(KQ.EQ.1)THEN V2EF WRITE(6,300) V2EF IF(IOPT.EQ.1)THEN V2EF WRITE(6,310) V2EF ELSE V2EF WRITE(6,309) V2EF ENDIF V2EF WRITE(6,321) V2EF WRITE(6,331) V2EF ICOUNT=ICOUNT+4 V2EF PGCT=PGCT+1 WRITE(6,209) WRITE(6,202) PGCT WRITE (6,210)JOB,RUN WRITE (6,'(6X,A6,A8,2X,A7,A5/)') V2EC + 'DATE: ',IDATE,' TIME: ',ITIME V2EC WRITE(6,300) IF(IOPT.EQ.1)THEN V2EF WRITE(6,310) ELSE V2EF WRITE(6,309) ENDIF V2EF WRITE(6,321) WRITE(6,331) ICOUNT=10 V2EC ENDIF V2EC C WRITE (6,441) I,(RCP(J,I),J=1,5),XWR,YWR,ZWR V2EF ELSE V2EF WRITE (6,441) I,(RCP(J,I),J=1,5),XR(I),YR(I),ZR(I) ENDIF V2EF PGCT=PGCT+1 WRITE(6,209) WRITE(6,202) PGCT WRITE(6,210) JOB,RUN WRITE(6,8500) WRITE(6,8510) WRITE(6,8511) (REC(J),J=1,NR) WRITE(6,8512) (X1(J),J=1,NR) ICOUNT=8 PGCT=PGCT+1 WRITE(6,209) WRITE(6,202) PGCT WRITE(6,210) JOB,RUN ICOUNT=3 C WRITE(6,8399) WRITE(6,8400) ICOUNT=ICOUNT+9 WRITE(6,8499) TRANGE,BRANGE C 1190 WRITE(6,8500) WRITE(6,8510) IF(NR.LE.20)THEN V2EC WRITE(6,8511) (REC(J),J=1,NR) WRITE(6,8512) (X1(J),J=1,NR) ELSE V2EC WRITE(6,8511) (REC(J),J=1,20) WRITE(6,8512) (X1(J),J=1,20) ENDIF V2EC C 8998 IF(NR.LE.20)THEN V2EC WRITE(6,8530) BRG1,(CON(J),J=1,NR) ELSE V2EC WRITE(6,8530) BRG1,(CON(J),J=1,20) V2EC WRITE(16,165) BRG1,(CON(J),J=21,NR) V2EC ENDIF V2EC WRITE(6,8512) (X1(J),J=IRP,NRP) V2EC WRITE(6,9040) (CRMAX(I) ,I=IRP,NRP) V2EC WRITE(6,9042) (ANGMAX(I),I=IRP,NRP) V2EC WRITE(6,'(1X)') ENDIF V2EC WRITE(6,209) V2EC WRITE(6,202)PGCT V2EC WRITE(6,210)JOB,RUN V2EC ICOUNT=3 V2EC IF(K4.EQ.1) THEN V2EC WRITE(6,8399) V2EC WRITE(6,8400) V2EC ICOUNT=ICOUNT+9 V2EC WRITE(6,8499) TRANGE,BRANGE V2EC 1191 WRITE(6,8500) V2EC WRITE(6,8510) V2EC WRITE(6,8511) (REC(J),J=IRP,NRP) V2EC WRITE(6,8512) (X1(J),J=IRP,NRP) V2EC ICOUNT=ICOUNT+4 V2EC WRITE(6,8530)BRG1,(CON(J),J=IRP,NRP) V2EC ICOUNT=ICOUNT+1 V2EC C 9021 CONTINUE V2EC PGCT=PGCT+1 WRITE(6,209) WRITE(6,202) PGCT WRITE(6,210) JOB,RUN WRITE (6,'(6X,A6,A8,2X,A7,A5/)') V2EC + 'DATE: ',IDATE,' TIME: ',ITIME V2EC WRITE(6,9032) 9032 FORMAT (/,6X,'RECEPTOR - LINK MATRIX FOR THE ANGLE PRODUCING', WRITE(6,9031) (REC(LLL),LLL=IRP,NRP) 9031 FORMAT(/,10X,'*',4X,'CO/LINK (PPM) ',/, WRITE(6,9034) (ANGMAX(LLL),LLL=IRP,NRP) 9034 FORMAT (3X,'LINK # ','*',20(3X,I3)) WRITE(6,9033) (X1(L1),L1=IRP,NRP) 9033 FORMAT(3X,'-------*',20A6) PGCT=PGCT+1 WRITE(6,209) WRITE(6,202) PGCT WRITE(6,210) JOB,RUN WRITE(6,9031) (REC(LLL),LLL=IRP,NRP) WRITE(6,9034) (ANGMAX(LLL),LLL=IRP,NRP) WRITE(6,9033) (X1(L1),L1=IRP,NRP) ICOUNT=7 WRITE(6,9041) I,(COMAX(I,J),J=IRP,NRP) 9041 FORMAT (5X,I3,' *',20(1X,F5.1)) to: WRITE(IPO,202) CHAR(12), PGCT WRITE(IPO,210) JOB,RUN WRITE(IPO,221) IF (VAR.EQ.'Y') GOTO 1005 IF ( FPPM .NE. 1) THEN WRITE(IPO,240) U,CLAS,STB(CLAS),ATIM,MIXH,AMB,BRG1 ELSE WRITE(IPO,241) U,CLAS,STB(CLAS),ATIM,MIXH,AMB,BRG1 ENDIF GOTO 1249 1005 IF ( FPPM .NE. 1) THEN WRITE(IPO,231) U,CLAS,STB(CLAS),ATIM,MIXH,AMB ELSE WRITE(IPO,232) U,CLAS,STB(CLAS),ATIM,MIXH,AMB END IF GOTO 1249 WRITE (IPO,200) CHAR(12), PGCT WRITE (IPO,210)JOB,RUN WRITE (IPO, 462) IMON, IDAY, IYR WRITE (IPO, 463) IIHR, IMIN, ISEC CL WRITE (IPO,'(6X,A6,A8,2X,A7,A5/)') V2EC CL + 'DATE: ',IDATE,' TIME: ',ITIME V2EC IF (MODET .EQ. 0) THEN WRITE(IPO,23) MODE(1:1) ENDIF IF (MODET .EQ. 1) THEN WRITE(IPO,24) MODE(1:1) ENDIF WRITE(IPO,220) WRITE(IPO,230)VS1,VD1,Z0 IF(VAR.EQ.'Y') GOTO 1205 1211 IF ( FPPM .NE. 1) THEN WRITE(IPO,240) U,CLAS,STB(CLAS),ATIM,MIXH,AMB,BRG1 ELSE WRITE(IPO,241) U,CLAS,STB(CLAS),ATIM,MIXH,AMB,BRG1 ENDIF GOTO 1206 1205 IF ( FPPM .NE. 1) THEN WRITE(IPO,231) U,CLAS,STB(CLAS),ATIM,MIXH,AMB ELSE WRITE(IPO,232) U,CLAS,STB(CLAS),ATIM,MIXH,AMB END IF IF(KQ.EQ.1) THEN WRITE(IPO,250) IF(IOPT.EQ.1)THEN V2EF WRITE(IPO,265) V2EF WRITE(IPO,275) V2EF ELSE V2EF WRITE(IPO,260) WRITE(IPO,270) V2EF ENDIF V2EF WRITE(IPO,280) ICOUNT=ICOUNT+4 PGCT=PGCT+1 WRITE(IPO,202) CHAR(12), PGCT WRITE (IPO,210)JOB,RUN WRITE (IPO, 462) IMON, IDAY, IYR WRITE (IPO, 463) IIHR, IMIN, ISEC CL WRITE (IPO,'(6X,A6,A8,2X,A7,A5/)') V2EF CL + 'DATE: ',IDATE,' TIME: ',ITIME V2EF WRITE(IPO,250) IF(IOPT.EQ.1)THEN V2EF WRITE(IPO,265) V2EF WRITE(IPO,275) V2EF ELSE V2EF WRITE(IPO,260) WRITE(IPO,270) V2EF ENDIF V2EF WRITE(IPO,280) ICOUNT=9 IF(IQ(I).EQ.2) THEN WRITE(IPO,290) COD(I),LNK(I),XL1(I),YL1(I),XL2(I), + YL2(I),LL(I),LBRG(I),TYP(I),VPHL(I), ELSE WRITE(IPO,290) COD(I),LNK(I),XL1(I),YL1(I),XL2(I), + YL2(I),LL(I),LBRG(I),TYP(I),VPHL(I), IF(IQ(I).EQ.2)THEN V2EF WRITE(IPO,290) COD(I),LNK(I),XW1,YW1,XW2, V2EF + YW2,LLW,LBRG(I),TYP(I),VPHL(I), V2EF C V2EF WRITE(IPO,290) COD(I),LNK(I),XW1,YW1,XW2, V2EF + YW2,LLW,LBRG(I),TYP(I),VPHL(I), V2EF PGCT=PGCT+1 V2EF WRITE(IPO,202) CHAR(12), PGCT V2EF WRITE (IPO,210)JOB,RUN V2EF WRITE (IPO, 462) IMON, IDAY, IYR V2EF WRITE (IPO, 463) IIHR, IMIN, ISEC V2EF CL WRITE (IPO,'(6X,A6,A8,2X,A7,A5/)') V2EF CL + 'DATE: ',IDATE,' TIME: ',ITIME V2EF ICOUNT = 4 V2EF IF (MODET .EQ. 0) THEN V2EF WRITE(IPO,401) V2EF WRITE(IPO,402) V2EF WRITE(IPO,403) V2EF WRITE(IPO,404) V2EF WRITE(IPO,405) V2EF ICOUNT = ICOUNT + 6 V2EF END IF V2EF ENDIF V2EF IF(IQ(I).EQ.2)THEN V2EF WRITE(IPO,406)COD(I),LNK(I),CAVG(I),RAVG(I),YFAC(I), V2EF + IV(I),SFR(I),IDLFAC(I),ST(I),AT(I) V2EF IF(KQ.EQ.1)THEN V2EF WRITE(IPO,300) V2EF IF(IOPT.EQ.1)THEN V2EF WRITE(IPO,310) V2EF ELSE V2EF WRITE(IPO,309) V2EF ENDIF V2EF WRITE(IPO,321) V2EF WRITE(IPO,331) V2EF ICOUNT=ICOUNT+4 V2EF PGCT=PGCT+1 WRITE(IPO,202) CHAR(12), PGCT WRITE (IPO,210)JOB,RUN WRITE (IPO, 462) IMON, IDAY, IYR WRITE (IPO, 463) IIHR, IMIN, ISEC CL WRITE (IPO,'(6X,A6,A8,2X,A7,A5/)') V2EF CL + 'DATE: ',IDATE,' TIME: ',ITIME V2EF WRITE(IPO,300) IF(IOPT.EQ.1)THEN V2EF WRITE(IPO,310) ELSE V2EF WRITE(IPO,309) ENDIF V2EF WRITE(IPO,321) WRITE(IPO,331) ICOUNT=10 V2EF ENDIF V2EF C WRITE (IPO,441) I,RCP(I),XWR,YWR,ZWR V2EF ELSE V2EF WRITE (IPO,441) I,RCP(I),XR(I),YR(I),ZR(I) ENDIF V2EF PGCT=PGCT+1 WRITE(IPO,202) CHAR(12), PGCT WRITE(IPO,210) JOB,RUN WRITE(IPO,8500) IF (FPPM .NE. 1) THEN WRITE(IPO,8510) ELSE WRITE(IPO,8520) END IF WRITE(IPO,8511) (REC(J),J=1,NR) WRITE(IPO,8512) (X1(J),J=1,NR) ICOUNT=8 PGCT=PGCT+1 WRITE(IPO,202) CHAR(12), PGCT WRITE(IPO,210) JOB,RUN ICOUNT=3 C WRITE(IPO,8399) WRITE(IPO,8400) ICOUNT=ICOUNT+9 WRITE(IPO,8499) TRANGE,BRANGE C 1190 WRITE(IPO,8500) IF (FPPM .NE. 1) THEN WRITE(IPO,8510) ELSE WRITE(IPO,8520) END IF IF(NR.LE.20)THEN V2EC WRITE(IPO,8511) (REC(J),J=1,NR) WRITE(IPO,8512) (X1(J),J=1,NR) ELSE V2EC WRITE(IPO,8511) (REC(J),J=1,20) WRITE(IPO,8512) (X1(J),J=1,20) ENDIF V2EC C 8998 IF (NR.LE.20)THEN V2EC IF (FPPM .NE. 1) THEN WRITE(IPO,8530) BRG1,(CON(J),J=1,NR) ELSE WRITE(IPO,8531) BRG1,(CON(J),J=1,NR) END IF ELSE V2EF IF (FPPM .NE. 1) THEN WRITE(IPO,8530) BRG1,(CON(J),J=1,20) V2EF ELSE WRITE(IPO,8531) BRG1,(CON(J),J=1,20) END IF WRITE(16,165) BRG1,(CON(J),J=21,NR) V2EF ENDIF V2EC WRITE(IPO,8512) (X1(J),J=IRP,NRP) V2EC IF (FPPM .NE. 1) THEN WRITE(IPO,9040) (CRMAX(I) ,I=IRP,NRP) V2EC ELSE WRITE(IPO,9050) (CRMAX(I) ,I=IRP,NRP) V2EC END IF WRITE(IPO,9042) (ANGMAX(I),I=IRP,NRP) V2EC WRITE(IPO,'(1X)') ENDIF V2EC WRITE(IPO,202) CHAR(12), PGCT V2EC WRITE(IPO,210)JOB,RUN V2EC ICOUNT=3 V2EC IF(K4.EQ.1) THEN V2EC WRITE(IPO,8399) V2EC WRITE(IPO,8400) V2EC ICOUNT=ICOUNT+9 V2EC WRITE(IPO,8499) TRANGE,BRANGE V2EC 1191 WRITE(IPO,8500) V2EC IF (FPPM .NE. 1) THEN WRITE(IPO,8510) V2EC ELSE WRITE(IPO,8520) V2EC END IF WRITE(IPO,8511) (REC(J),J=IRP,NRP) V2EC WRITE(IPO,8512) (X1(J),J=IRP,NRP) V2EC ICOUNT=ICOUNT+4 V2EC IF (FPPM .NE. 1) THEN V2EC WRITE(IPO,8530) BRG1,(CON(J),J=IRP,NRP) V2EC ELSE WRITE(IPO,8531) BRG1,(CON(J),J=IRP,NRP) END IF ICOUNT=ICOUNT+1 V2EC C V2EC 9021 CONTINUE V2EC PGCT=PGCT+1 WRITE(IPO,202) CHAR(12), PGCT WRITE(IPO,210) JOB,RUN WRITE (IPO, 462) IMON, IDAY, IYR WRITE (IPO, 463) IIHR, IMIN, ISEC CL WRITE (IPO,'(6X,A6,A8,2X,A7,A5/)') V2EC CL + 'DATE: ',IDATE,' TIME: ',ITIME V2EC WRITE(IPO,9032) 9032 FORMAT (/,6X,'RECEPTOR - LINK MATRIX FOR THE ANGLE PRODUCING', IF (FPPM .NE. 1) THEN WRITE(IPO,9031) (REC(LLL),LLL=IRP,NRP) ELSE WRITE(IPO,9035) (REC(LLL),LLL=IRP,NRP) END IF 9031 FORMAT(/,10X,'*',4X,'CO/LINK (PPM) ',/, 9035 FORMAT(/,10X,'*',4X,'PM/LNK(ug/m**3)',/, + 10X,'*',4X,'ANGLE (DEGREES)',/, + 10X,'* ',20(1X,A5)) WRITE(IPO,9034) (ANGMAX(LLL),LLL=IRP,NRP) 9034 FORMAT (3X,'LINK # ','*',20(3X,I3)) WRITE(IPO,9033) (X1(L1),L1=IRP,NRP) 9033 FORMAT(3X,'-------*',20A6) PGCT=PGCT+1 WRITE(IPO,202) CHAR(12), PGCT WRITE(IPO,210) JOB,RUN IF (FPPM .NE. 1) THEN WRITE(IPO,9031) (REC(LLL),LLL=IRP,NRP) ELSE WRITE(IPO,9035) (REC(LLL),LLL=IRP,NRP) END IF WRITE(IPO,9034) (ANGMAX(LLL),LLL=IRP,NRP) WRITE(IPO,9033) (X1(L1),L1=IRP,NRP) ICOUNT=7 WRITE(IPO,9041) I,(COMAX(I,J),J=IRP,NRP) 9041 FORMAT (5X,I3,' *',20(1X,F5.1)) 15. Two code segments were added to determine the maximum concentration and the wind direction index at which it occurs. The code was changed from: ANGMAX(I)=BRGV(K4) ELSE ENDIF ENDIF C to: ANGMAX(I)=BRGV(K4) IF (CSUM .GT. CMAX) THEN CMAX = CSUM IRMAX = I END IF ELSE ENDIF IF (CSUM .GT. CMAX) THEN CMAX = CSUM IRMAX = I END IF END IF C 16. The following sections of non contiguous code were changed from a unstructured format: IF(NR.LE.MAXRPT)THEN V2EC NRP=NR V2EC ELSE V2EC NRP=MAXRPT V2EC ENDIF V2EC IRP=IRP+20 V2EC IF(NR.LE.MAXRPT)THEN V2EC NRP=NR V2EC ELSE V2EC NRP=MAXRPT V2EC ENDIF V2EC REWIND 16 V2EC MAXRPT=20 V2EC 9025 IF(NR.LE.MAXRPT)THEN V2EC NRP=NR V2EC ELSE V2EC NRP=MAXRPT V2EC ENDIF V2EC to a structured format: IF (NR.LE.MAXRPT) THEN V2EC NRP=NR V2EC ELSE V2EC NRP=MAXRPT V2EC ENDIF V2EC IRP=IRP+20 V2EC IF(NR.LE.MAXRPT)THEN V2EC NRP=NR V2EC ELSE V2EC NRP=MAXRPT V2EC ENDIF V2EC REWIND 16 V2EC MAXRPT=20 V2EC 9025 IF (NR.LE.MAXRPT) THEN V2EC NRP=NR V2EC ELSE V2EC NRP=MAXRPT V2EC ENDIF V2EC 17. The Subroutine BUBSRT and some previously commented out code were not being used. The unused code was deleted which changed the following code segment from: 9026 CONTINUE V2EC C V2EC CALL BUBSRT(CRMAX,IORDER,NR) V2EC C V2EC DO 9027 I=1,3 V2EC IF(I.EQ.1)THEN V2EF WRITE(6,9043)CRMAX(I),ANGMAX(IORDER(I)),REC(IORDER(I)) V2EC * ELSE IF(I.EQ.2)THEN V2EF * WRITE(6,9044)CRMAX(I),ANGMAX(IORDER(I)),REC(IORDER(I)) V2EC * ELSE V2EF * WRITE(6,9045)CRMAX(I),ANGMAX(IORDER(I)),REC(IORDER(I)) V2EC END IF V2EF 9027 CONTINUE V2EC C V2EC IF(PRINT2.NE.1) GOTO 9000 to: 9026 CONTINUE V2EC IF (VAR .EQ. 'N') WRITE(IPO,8512) (X1(J),J=IRP,NRP) IF (FPPM .NE. 1) THEN WRITE(IPO,9043) CMAX,REC(IRMAX) V2EC ELSE WRITE(IPO,9046) CMAX,REC(IRMAX) END IF CMAX = 0.0 C IF(PRINT2.NE.1) GOTO 9000 18. The following FORMAT statement was moved to a later part of the code and modified: 202 FORMAT(113X,'PAGE ',I2) 19. The FORMATs in the following lines were changed to reflect changes in the variable definitions and structure of the associated WRITE statements. Additional FORMATs were added for PM related processing. The code was changed from: 15 FORMAT(5A4,A2,4F7.0,F8.0,F4.0,I4) 16 FORMAT(4F4.0,F8.0,3F4.0) 190 FORMAT(F3.0,F4.0,I1,F6.0,F4.0,A1,I3,2I3) 120 FORMAT(5A8,2F4.0,2F5.0,I2,F10.0,4X,I1,4X,I1) V2ECF 130 FORMAT (5A4,3F10.0) 150 FORMAT (5A8,2I3,2X,I2) 160 FORMAT (5A4,A2,4F7.0,F8.0,3F4.0) 165 FORMAT (F6.1,40F6.2) V2EC C 180 FORMAT (1X,//,22HPROGRAM RUN TERMINATED,///, + 46H * * SOURCE MUST BE WITHIN 10 METERS OF DATUM.) C C ------------------------ 200 FORMAT (1H1,25X, + 'CAL3QHC: LINE SOURCE DISPERSION MODEL', + ' - VERSION 2.0, JANUARY 1992',18X,'PAGE ',I2,/) C 209 FORMAT (1H1) 210 FORMAT (6X,5HJOB: ,5A8,13X,5HRUN: ,5A8) C 230 FORMAT (7X,5HVS = ,F5.1,5H CM/S,7X,5HVD = ,F5.1,5H CM/S, + 7X,5HZ0 = ,F4.0,3H CM) 231 FORMAT (8X, 4HU = ,F4.1,4H M/S,9X,9HCLAS = ,I1,3H (,A1,1H), to: 15 FORMAT(1X,A20,A2,4F7.0,F8.0,F4.0,I4) 16 FORMAT(4F4.0,F8.0,3F4.0) 23 FORMAT(9X,'The MODE flag has been set to ',A1,' for calculating', * ' CO averages.') 24 FORMAT(9X,'The MODE flag has been set to ',A1,' for calculating', * ' PM averages.') 120 FORMAT (1X,A40,2F4.0,2F5.0,I2,F10.0,4X,I1,4X,I1) V2ECF 130 FORMAT (1X,A20,3F10.0) 150 FORMAT (1X,A40,2I3,2X,I2,2X,A1) 160 FORMAT (1X,A20,A2,4F7.0,F8.0,3F4.0) 165 FORMAT (F6.1,40F6.2) V2EC 180 FORMAT (1X,//,22HPROGRAM RUN TERMINATED,///, + 46H * * SOURCE MUST BE WITHIN 10 METERS OF DATUM.) 190 FORMAT(1X,F3.0,F4.0,I3,F6.0,F4.0,1X,A1,I3,2I3) C C ------------------------ 200 FORMAT (A1,26X,'CAL3QHC: LINE SOURCE DISPERSION MODEL', + ' - VERSION Dated 95221',24X,'PAGE ',I2,/) 202 FORMAT (A1,112X,'PAGE ',I2) C 210 FORMAT (6X,5HJOB: ,A40,13X,5HRUN: ,A40) C 230 FORMAT (7X,5HVS = ,F5.1,5H CM/S,7X,5HVD = ,F5.1,5H CM/S, + 7X,5HZ0 = ,F4.0,3H CM) 231 FORMAT (8X, 4HU = ,F4.1,4H M/S,9X,9HCLAS = ,I1,3H (,A1,1H), ***** 20. Several FORMAT statements were either added or modified to accommodate the addition of PM data processing. The following are such statements and were modified from: + 3X,6HAMB = ,F4.1,4H PPM/) C + 3X,6HAMB = ,F4.1,4H PPM,2X,6HBRG = ,F4.0,8H DEGREES/) C 241 FORMAT (33X,5HZ0 = ,F4.0,3H CM,9X, + 5HVD = ,F5.1,5H CM/S,8X,6HAMB = ,F4.1,4H PPM) C 250 FORMAT (7X,'LINK VARIABLES',/, C 290 FORMAT (5X,I3,2H. ,5A4,1H*,4(1X,F8.1,1X),1H*,4X,F5.0, + 3X,F4.0,1X,A2,1X,F7.0,1X,F5.1,1X,F5.1,1X,F4.1,1X,F4.2,1X,F5.1) C 401 FORMAT (7X,'ADDITIONAL QUEUE LINK PARAMETERS',/, V2EF C V2EF 406 FORMAT (5X,I3,2H. ,5A4,1H*,2(3X,I5,1X),4X,F5.1, V2EF + 5X,I5,7X,I4,4X,F7.2,6X,I1,8X,I1) V2EF C V2EF 300 FORMAT (/,7X,'RECEPTOR LOCATIONS',/, + 7X,'------------------') 309 FORMAT (30X,39H* COORDINATES (M) *) 310 FORMAT (30X,39H* COORDINATES (FT) *) 321 FORMAT (9X,8HRECEPTOR,13X, + 39H* X Y Z *) 331 FORMAT (5X,25(1H-),1H*,37(1H-),1H*) 441 FORMAT (5X,I2,2H. ,5A4,1X,1H*,4X,F8.1,3X,F8.1,3X,F8.1, + 3X,1H*) to: + 3X,6HAMB = ,F4.1,4H PPM/) 232 FORMAT (8X, 4HU = ,F4.1,4H M/S,9X,9HCLAS = ,I1,3H (,A1,1H), + 5X,7HATIM = ,F4.0,8H MINUTES,5X,7HMIXH = ,F6.0,2H M, + 3X,6HAMB = ,F4.1,' ug/m**3'/) C + 3X,6HAMB = ,F4.1,4H PPM,2X,6HBRG = ,F4.0,8H DEGREES/) 241 FORMAT (8X, 4HU = ,F4.1,4H M/S,9X,9HCLAS = ,I1,3H (,A1,1H), + 5X,7HATIM = ,F4.0,8H MINUTES,5X,7HMIXH = ,F6.0,2H M, + 3X,6HAMB = ,F4.1,' ug/m**3',2X,6HBRG = ,F4.0,8H DEGREES/) 250 FORMAT (7X,'LINK VARIABLES',/, C 290 FORMAT (5X,I3,2H. ,A20,1H*,4(1X,F8.1,1X),1H*,4X,F5.0, + 3X,F4.0,1X,A2,1X,F7.0,1X,F5.1,1X,F5.1,1X,F4.1,1X,F4.2,1X,F5.1) C 300 FORMAT (/,7X,'RECEPTOR LOCATIONS',/, + 7X,'------------------') 309 FORMAT (30X,39H* COORDINATES (M) *) 310 FORMAT (30X,39H* COORDINATES (FT) *) 321 FORMAT (9X,8HRECEPTOR,13X, + 39H* X Y Z *) 331 FORMAT (5X,25(1H-),1H*,37(1H-),1H*) C 401 FORMAT (7X,'ADDITIONAL QUEUE LINK PARAMETERS',/, V2EF C V2EF 406 FORMAT (5X,I3,2H. ,A20,1H*,2(3X,I5,1X),4X,F5.1, V2EF + 5X,I5,7X,I4,4X,F7.2,6X,I1,8X,I1) V2EF C V2EF 441 FORMAT (5X,I2,2H. ,A20,1X,1H*,4X,F8.1,3X,F8.1,3X,F8.1, + 3X,1H*) 21. The following date and time FORMAT statements were added: 462 FORMAT(/6X,'DATE : ',I2,'/',I2,'/',I2) 463 FORMAT(6X,'TIME : ',I2,':',I2,':',I2/) 22. The following group of FORMAT statements were restructured and additional statements were added for PM related WRITE statements. The code was changed from: 8510 FORMAT( 1X,'ANGLE ',1H*,6X,'(PPM)') 8511 FORMAT(1X, '(DEGR)',1H*,20(1X,A5)) 8512 FORMAT(1X,'------',1H*,20A6) 8530 FORMAT(1X,F4.0,2X,1H*,20(1X,F5.1)) 9040 FORMAT(' MAX ',1H*,20(1X,F5.1)) 9042 FORMAT(' DEGR. ',1H*,20(1X,I4,1X)) 9043 FORMAT(' THE HIGHEST CONCENTRATION IS ',F6.2,' PPM AT',I5, V2EC + ' DEGREES FROM ',A5,'.') V2EC * 9044 FORMAT(' THE 2ND HIGHEST CONCENTRATION IS ',F6.2,' PPM AT',I5, V2EF * + ' DEGREES FROM ',A5,'.') V2EF * 9045 FORMAT(' THE 3RD HIGHEST CONCENTRATION IS ',F6.2,' PPM AT',I5, V2EF * + ' DEGREES FROM ',A5,'.') V2EF to: 8510 FORMAT( 1X,'ANGLE ',1H*,6X,'(PPM)') 8511 FORMAT( 1X,'(DEGR)',1H*,20(1X,A5)) 8512 FORMAT( 1X,'------',1H*,20A6) 8520 FORMAT( 1X,'ANGLE ',1H*,6X,'(ug/m**3)') 8530 FORMAT( 1X,F4.0,2X,1H*,20(1X,F5.1)) 8531 FORMAT( 1X,F4.0,2X,1H*,20(1X,F5.0)) 9040 FORMAT( ' MAX ',1H*,20(1X,F5.1)) 9050 FORMAT( ' MAX ',1H*,20(1X,F5.0)) 9042 FORMAT( ' DEGR. ',1H*,20(1X,I4,1X)) 9043 FORMAT(' THE HIGHEST CONCENTRATION OF ',F6.2,' PPM', V2EC + ' OCCURRED AT RECEPTOR ',A5,'.') V2EC 9046 FORMAT(' THE HIGHEST CONCENTRATION OF ',F6.0,' ug/m**3', + ' OCCURRED AT RECEPTOR ',A5,'.') *** CAL3QHCR Model Modifications *** 1. The SCRAM header was changed to reflect a new creation date and MCB number. The code was changed from: C * * C * CAL3QHCR (DATED 95130) * C * * C * *** SEE CAL3QHC MCB#3 *** * C * * to: C * * C * CAL3QHCR (DATED 95221) * C * * C * *** SEE CAL3QHC MCB#4 *** * C * * 2. The following model modification statement was added: C C July 11, 1995 - The input wind angle is no longer C being read as a wind direction (WD). C The input wind angle is now read as C a wind flow value, (WD + 180 degrees), C for compatibility with EPA preprocessed C meteorological data. C 3. The following definitions were changed to reflect the change in input from wind direction to wind flow values and a change the input unit number from 5 to 7 under the file input unit name, IN: C BRG - Wind direction or wind flow direction in degrees. C BRG1 - Wind direction just before BRG converted to wind flow direction. C 5 - IN - Input Control File to: C BRG - Wind flow direction (direction wind is blowing toward) in degrees. C BRG1 - Wind direction converted from wind flow direction, BRG. C 7 - IN - Input Control File 4. The following READ statements and a line from a DATA statement were changed from the input unit number 5 to the input file variable name, IN, and to change the file input unit number from 5 to 7. The following statements are not contiguous and were changed from: READ(5,*,END=9999) JOB, ATIM, Z0, VS, VD, NR, SCAL, IOPT READ(5,*) ISMN, ISDY, ISYR, IEMN, IEDY, IEYR READ(5,*) ISFCID, ISFCYR, IAIRID, IAIRYR READ(5, *) FLINK, FAMB, RU READ(5,*) RCP(I),XR(I),YR(I),ZR(I) READ(5, *) JTIER, MODE + IN/5/, IO /6/, IPO/8/, IMET/10/, IT1 /11/, IT2/12/, ILK/15/ to: READ(IN,*,END=9999) JOB, ATIM, Z0, VS, VD, NR, SCAL, IOPT READ(IN,*) ISMN, ISDY, ISYR, IEMN, IEDY, IEYR READ(IN,*) IMFCID, IMFCYR, IMIRID, IMIRYR READ(IN,*) ISFCID, ISFCYR, IAIRID, IAIRYR READ(IN, *) FLINK, FAMB, RU READ(IN,*) RCP(I),XR(I),YR(I),ZR(I) READ(IN, *) JTIER, MODE + IN/7/, IO /6/, IPO/8/, IMET/10/, IT1 /11/, IT2/12/, ILK/15/ 5. Lahey specific variable definition code was added for Lahey date and time functions. This code was then commented out with a 'CL' flag because of its inability to be compiled with a Microsoft Fortran Compiler. CL CHARACTER IDATE*8, ITIME*5, FILE5*40, FILE6*40 6. The following section of code was added for those who wish to recompile this program using a Lahey Fortran compiler. CL flags were added to the beginning of each line with Lahey specific code. The lines are: CL CL CALL TIME(ITIME) CL CALL DATE(IDATE) CLC CL CALL GETFIL(FILE5,FILE6) CLC CL OPEN (5,FILE=FILE5 ,STATUS='OLD') CL OPEN (6,FILE=FILE6 ,STATUS='UNKNOWN') CLC CL WRITE (6,'(6X,A6,A8,2X,A7,A5/)') CL + 'DATE: ',IDATE,' TIME: ',ITIME 7. After each WRITE statement containing a 463 format number such as: WRITE (IPO, 463) IIHR, IMIN, ISEC the following Lahey date and time WRITE statements were added: CL WRITE (IPO,'(6X,A6,A8,2X,A7,A5/)') CL + 'DATE: ',IDATE,' TIME: ',ITIME 8. The definition of BRG was changed from: C BRG = WIND DIRECTION (DEGREES) to: C BRG = WIND FLOW (Direction + 180 Degrees) 9. After each WRITE statement containing a 468 format number such as: WRITE (ILK, 468) IIHR, IMIN, ISEC the following Lahey date and time WRITE statements were added: CL WRITE (ILK,'(6X,A6,A8,2X,A7,A5/)') CL + 'DATE: ',IDATE,' TIME: ',ITIME 10. The variable BRG1 stores a wind direction value. Since BRG was redefined from a wind direction to a wind flow variable, the following lines of code were changed to preserve BRG1 as a wind direction storage variable and BRG as a wind flow variable: BRG1=BRG BRG=BRG+180. IF (BRG.GE.360.) BRG=BRG-360. to: BRG1=BRG + 180. BRG = BRG IF (BRG1.GE.360.) BRG1=BRG1-360. 11. The model creation date in the following FORMAT statements were changed from: 200 FORMAT (A1,58X,'CAL3QHCR (Dated: 95130)') 300 FORMAT (A1,46X,'CAL3QHCR (Dated: 95130)') to: 200 FORMAT (A1,58X,'CAL3QHCR (Dated: 95221)') 300 FORMAT (A1,46X,'CAL3QHCR (Dated: 95221)') 12. The PM-10 nomenclature has been replaced with PM nomenclature throughout the model. This is to allow for the possibility of modeling for other than PM-10 only. The source code was changed in various places from: C Tier approach (1 or 2), Pollutant type ( 'c' for CO or 'p' for PM-10) C LE - Ending index value for calculating CO or PM-10 concentrations. C LS - Starting index value for calculating CO or PM-10 concs. C MODE - Character flag indicating PM10 (P) or CO (C) emissions processing. C MODET - Integer flag value. CO is 0; PM10 is 1. based on MODE C SELECT TYPE OF AVERAGE NEEDED CO OR PM10 C ***** CALCULATIONS FOR PM-10 AVERAGES *** C SET UP FOR LOOP ON PM-10 OR CO 24 FORMAT(9X,'The MODE flag has been set to ',A1,' for calculating', * ' PM10 averages.'/) 405 FORMAT (7X,'NOTES PERTAINING TO THE REPORT'// +9X,'1. THE HIGHEST AVERAGE IN EACH OF THE FIRST TWO COLUMNS OF ' + ,'EACH TABLE BELOW ARE SUFFIXED BY AN ASTERISK (*).'/ +9X,' FOR PM-10 OUTPUT, THERE IS ONLY ONE COLUMN AND ASTERISK ' + ,'FOR THE ANNUAL AVERAGE/PERIOD OF CONCERN TABLE.'/) to: C Tier approach (1 or 2), Pollutant type ( 'c' for CO or 'p' for PM) C LE - Ending index value for calculating CO or PM concentrations. C LS - Starting index value for calculating CO or PM concs. C MODE - Character flag indicating PM (P) or CO (C) emissions processing. C MODET - Integer flag value. CO is 0; PM is 1. based on MODE C SELECT TYPE OF AVERAGE NEEDED CO OR PM C ***** CALCULATIONS FOR PM AVERAGES *** C SET UP FOR LOOP ON PM OR CO 24 FORMAT(9X,'The MODE flag has been set to ',A1,' for calculating', * ' PM averages.'/) 405 FORMAT (7X,'NOTES PERTAINING TO THE REPORT'// +9X,'1. THE HIGHEST AVERAGE IN EACH OF THE FIRST TWO COLUMNS OF ' + ,'EACH TABLE BELOW ARE SUFFIXED BY AN ASTERISK (*).'/ +9X,' FOR PM OUTPUT, THERE IS ONLY ONE COLUMN AND ASTERISK ' + ,'FOR THE ANNUAL AVERAGE/PERIOD OF CONCERN TABLE.'/) Any problems or questions should be addressed to Peter Eckhoff via TTN E-mail.