                             Model Change Bulletin
              
                                    MCB#3                          5/25/95

                            CAL3QHC  (Dated 93157)
                            CAL3QHCR (Dated 95130)

     Both CAL3QHC and CAL3QHCR are covered by this one Model Change Bulletin
(MCB) under the CAL3QHC model name.  Since CAL3QHCR is an enhanced but separate
version of CAL3QHC, it is possible for CAL3QHC and CAL3QHCR to have different
Julian creation dates as under this MCB.  Both models will retain their
respective identifying Julian dates but SHARE THE SAME MCB.  Whenever a change
is made to only one of these two models, only the changed model will be
identified with a new Julian date.  

     The user's guides to both models are available under the CAL3QHC model
name in the Documentation section, under Regulatory Models, in the File
Transfer area of the SCRAM BBS.

*** CAL3QHC CHANGES ***

     No changes have been made to CAL3QHC (Dated 93157) and therefore, there is
no change to its Julian date.  No changes have been made to the CAL3QHC user's
guide.

*** CAL3QHCR CHANGES ***

     One significant correction, several formatting changes, and two minor
corrections have been made to the CAL3QHCR source code.  The CAL3QHCR user's
guide has also been updated.  These changes and updates consist of the
following:

     1.  Correction to the queue link length calculations.  

          In a Tier II approach, as traffic volumes decreased, the hourly
          vehicle queue lengths.  There was no program coding to increase
          hourly queue lengths as traffic volumes increased.

          A new variable, QLT, is being used to reset each queue link length to
          its initial value.  The program uses the shorter of QLT or the hourly
          calculated vehicle queue length for calculating concentrations.

     2.  Formatting changes that will be self explanatory.

     3.  Correction to a PM-10 algorithm that calculates concentration averages
     for a one-day run.

     4.  Correction to the algorithm printing the *.LNK file.

     5.  Addition of a Tier II PM-10 test case to the CAL3QHCR user's guide and
     updating the text and output tables affected by the changes.     The following source code changes have been made to CAL3QHCR:

1.  The initial SCRAM header for CAL3QHCR under CAL3QHC MCB#2,

C  *                         CAL3QHCR (DATED 95116)                         *
C  *                                                                        *
C  *                *** SEE CAL3QHCR (DATED 95116) MCB#1 ***                *

did not reflect the model's status under the CAL3QHC model name.  The SCRAM
header should have read:

C  *                         CAL3QHCR (DATED 95116)                         *
C  *                                                                        *
C  *                       *** SEE CAL3QHC MCB#2 ***                        *

The SCRAM header was changed to reflect the new model version and status.  The
header was changed to:

C  *                         CAL3QHCR (DATED 95130)                         *
C  *                                                                        *
C  *                       *** SEE CAL3QHC MCB#3 ***                        *


2.  The variable IYR was used in two different ways and caused the wrong year
to be printed in a header on one page of a test case.  The following change
assigns a new variable name, IYRR, to the second definition.  The source code
was changed from:

C   IYR    - Year argument in Subroutine Julian
C   IYR    - Year program executed.

to:

C   IYR    - Year argument in Subroutine Julian
C   IYRR   - Year program executed.

3.  In a Tier II approach, the queue link length was being shrunk but not
expanded under varying traffic volumes.  A new variable, QLT, stores the
initial queue lengths and allows the vehicle queue lengths to expand up to QLT. 
The following definition was added:

C   QLT    - Initial length of link.

4.  The variable, IYR, was changed to IYRR in the INTEGER assignment area.  The
following line of code was changed from:

     +         IIHR, IMIN, ISEC, IX, IYR, IMON, IDAY,

to:

     +         IIHR, IMIN, ISEC, IX, IYRR, IMON, IDAY,
5.  In the DOUBLE PRECISION statement, the variable, QLT, was added and
dimensioned to 120.  The source code was changed from:

     +                 PD, QLL, SIDE, WLW,

to:

     +                 PD, QLL, QLT(120), SIDE, WLW,

6.  When the variable, IYRR, was added, the following date/time lines of code
were changed from:

        CALL GETDAT (IYR, IMON, IDAY)
        CALL GETTIM (IIHR, IMIN, ISEC, IX)
          IYR = MOD(IYR,100)

to:

        CALL GETDAT (IYRR, IMON, IDAY)
        CALL GETTIM (IIHR, IMIN, ISEC, IX)
          IYRR = MOD(IYRR,100)

7.  Initial queue and free flow link lengths were calculated and stored in the
variable, LL.  Since the initial link length values were lost in a Tier II
approach, the initial values are now stored in the variable QLT.  QLT is used
to reset the queue link lengths to their initial values before determining
whether new hourly calculated vehicle queue lengths exceed the initial values. 
The source code was changed from:

          LL(I) = SQRT((XL1(I)-XL2(I))**2+(YL1(I)-YL2(I))**2)

to:

          LL(I) = SQRT((XL1(I)-XL2(I))**2+(YL1(I)-YL2(I))**2)
          QLT(I) = LL(I)

8.  In the WRITE statements containing Format statement number 462, the
variable, IYR, was changed to IYRR as follows:

               WRITE (IPO, 462) IMON, IDAY, IYRR, IPAG

9.  A printout line counter, ILIN, was added to the following segment of code. 
The code was changed from:

          WRITE (IPO,  32) ISFCID, ISFCYR, IAIRID, IAIRYR
            IF (JTIER .EQ. 2 .AND. (ISFCYR .NE. ISYR))
     +        WRITE (IPO, 34) ISYR, ISFCYR

to:

          WRITE (IPO,  32) ISFCID, ISFCYR, IAIRID, IAIRYR

            IF (JTIER .EQ. 2 .AND. (ISFCYR .NE. ISYR)) THEN
              ILIN = ILIN + 1
              WRITE (IPO, 34) ISYR, ISFCYR
            END IF

10.  The variable, IYR, in the following lines of code, was changed from:

          DO 8902 IH = 1, 24
               READ(IT2,*) IYR, IDY, IHREND, AMB
            DO 8903 I = 1, NL

to:

          DO 8902 IH = 1, 24
               READ(IT2,*) IEYR, IDY, IHREND, AMB
            DO 8903 I = 1, NL

and from:

        READ(IT2,*) IYR, IDY, IHREND, AMB

to:

        READ(IT2,*) IEYR, IDY, IHREND, AMB

11.  In the WRITE statements containing Format statement number 465, the
variable, IYR, was changed to IEYR as follows:

               WRITE (IO,465) IEYR,  JSDOW,  IHREND

12.  In the queue truncation algorithm, the hourly calculated queue length,
QLL, should be compared to the initial queue link length, QLT, instead of the
queue length, LL.  The algorithm was corrected so if QLL is greater than QLT,
LL is truncated to QLT.  If QLL is less than or equal to QLT, LL is set to QLL. 
The lines of code were changed from:

 1111   IF (QLL.GT.LL(I)) THEN
           TRUNC(I)='YES'
        ELSE
           IF (QLL.LT.LL(I)) THEN
           LL(I)=QLL
           TRUNC(I)='NO '
to:

 1111   IF (QLL.GT.QLT(I)) THEN
           LL(I) = QLT(I)
           TRUNC(I)='YES'
        ELSE
           LL(I) = QLL
           TRUNC(I)='NO '

13.  The IF (ICLM .EQ. 0) THEN block ended just after the 1020 CONTINUE
statement and contained an algorithm that wrote variable link data to a *.LNK
file.  Under calm conditions, data that should have been written to that file
were not being written.  The IF...THEN block has been broken into two segments,
one on each side of the algorithm.  The first segment now ends at the end of
the 1053 CONTINUE statement and the second segment starts after the end of the
DO 720 loop.  The end of the second segment is now identified by a comment
statement.  The code was change from:

 1053  CONTINUE
C

to:

 1053  CONTINUE

C        END OF ICLM BLOCK
      END IF
C

and from:

  720     CONTINUE
C

to:

  720     CONTINUE

        IF (ICLM .EQ. 0) THEN
C

and from:

 1020     CONTINUE
       END IF

C

to:

 1020     CONTINUE

C       END OF ICLM BLOCK
        END IF
C

14.  Traffic signalization data is only needed for CO calculations and not for
PM-10.  The following lines of code were placed in an IF statement so the
traffic and signalization data are printed to an *.LNK file only when CO
concentrations are being calculated.  The comment statement was in error and
was changed.  The lines of code were modified from:

          IC15 = IC15 + 7
            WRITE (ILK, 200) CHAR(12)
            WRITE (ILK, 462) IMON, IDAY, IYR, IP15
            WRITE (ILK, 468) IIHR, IMIN, ISEC
            IC15=IC15+1
          ENDIF
 1154     CONTINUE

C       END OF ISKP, ICLM IF BLOCK
      END IF

to:

        IF (MODET .EQ. 0) THEN
          IC15 = IC15 + 7
            WRITE (ILK, 200) CHAR(12)
            WRITE (ILK, 462) IMON, IDAY, IYRR, IP15
            WRITE (ILK, 468) IIHR, IMIN, ISEC
            IC15=IC15+1
          END IF
 1154     CONTINUE
C        END OF MODET BLOCK
         END IF
C      END OF   IPFLG BLOCK
       END IF
15.  The printout line counter value was changed from 7 in the following lines
of code:

         IF (ILIN .GE. 55) THEN
           IPAG = IPAG + 1
           ILIN = 7
           WRITE (IPO, 200) CHAR(12)

to 6:

         IF (ILIN .GT. 55) THEN
           IPAG = IPAG + 1
           ILIN = 6
           WRITE (IPO, 200) CHAR(12)

and the incremental value of 8, in the following code segment:

         IF (ILIN .LT. 55) THEN
           ILIN = ILIN + 8
           IF (LLL .EQ. 2) WRITE (IPO, 794) NATM(LLL)

was changed to a value of 7:

         IF (ILIN .LT. 55) THEN
           ILIN = ILIN + 7
           IF (LLL .EQ. 2) WRITE (IPO, 794) NATM(LLL)

16.  An error occurred when 24-hour averaged and period of concern averaged PM-
10 concentrations were calculated for one day.  Two IF statements were added to
set the variable ITR = 1, when the difference between start and stop days is 0
for PM-10 calculations (MODET = 1).  One IF statement was added before the DO
653 loop as shown here: 

            IF (LLL .EQ. 4) ITR = 1
            IF ((IEJDAY - ISJDAY) .EQ. 0 .AND. MODET .EQ. 1) ITR = 1
        DO 653 IK = 1, ITR

and the other IF statement was placed after the following IF statement:

          IF (LLLL .EQ. 4) ITR = 1

as shown here:

          IF (LLLL .EQ. 4) ITR = 1
          IF ((IEJDAY - ISJDAY) .EQ. 0 .AND. MODET .EQ. 1) ITR = 1

17.  The Calm Duration Frequency Table is now printed at the top of a new page. 
An IF statement that could cause the table to be started on the same page as
the last table of concentration averages, was removed.  The affected lines of
code were changed from:

          IF (ILIN .GT. 30) THEN
              IPAG = IPAG + 1
             WRITE (IPO, 200) CHAR(12)
             WRITE (IPO, 462) LMON, LDAY, LYR, IPAG
             WRITE (IPO, 463) LHR, LMIN, LSEC
             WRITE (IPO, 210) JOB,RUN
          END IF

          WRITE (IPO, 900)

to:

           IPAG = IPAG + 1
          WRITE (IPO, 200) CHAR(12)
          WRITE (IPO, 462) LMON, LDAY, LYR, IPAG
          WRITE (IPO, 463) LHR, LMIN, LSEC
          WRITE (IPO, 210) JOB,RUN
          WRITE (IPO, 900)

18.  A pointer was added to the following statement to where the variable link
data are located:

   30  FORMAT(/7X,'Link Data Constants - (Variable data in *.LNK file)'
     +        /7X,'-------------------'/)

19.  The following warning was changed to a caution in Format statement 34. 
The code was changed from:

   34  FORMAT(/9X,'WARNING: The input years for the Run and ',
     +   'Meteorological data '/9X, '         differ.  The respecti',

to:

   34  FORMAT(/9X,'CAUTION: The input years for the Run and ',
     +   'Meteorological data '/9X, '         differ.  The respecti',


    The model conversion data was changed from 95116 to 95130 in the following
non consecutive lines of code:


  200   FORMAT (A1,58X,'CAL3QHCR (Dated: 95130)')
 300  FORMAT (A1,46X,'CAL3QHCR (Dated: 95130)')


20.  Line feeds were added to each of the following Format statements just
before the 9X.

 9048   FORMAT(/9X,'THE HIGHEST CONCENTRATION OF',F6.2,' PPM',
     +            ' OCCURRED AT RECEPTOR ', A5,'.'/)
 9049   FORMAT(/9X,'THE HIGHEST CONCENTRATION OF',F8.2,' UG/M**3',
     +            ' OCCURRED AT RECEPTOR ', A5,'.'/)


21.  The variable IYR, was changed to ISYR, to reflect the starting year date
in the following Common statement:

      COMMON /ALL/ BKG(5,NN,2), CUM(NN,2), CUMB(4), CUMT(4),
     1             HMAXA(5,NN,2), ISYR, LPYR, IHR(5,NN,2), IPAG,
     2             JDAY, L3, L4, LH, NDAY(25), NHR,


and in the following lines of code:

        LPYR = 0
          IF (MOD(ISYR, 4) .EQ. 0) LPYR = 1
          IF (LPYR .EQ. 1) NCNT(4) = 6588


Any problems or questions should be addressed to Peter Eckhoff via TTN E-mail.

