1
2      SUBROUTINE EVLOOP
3!***********************************************************************
4!                 EVLOOP Module of ISC2 Short Term EVENT Model - ISCEV2
5!
6!        PURPOSE: Controls Main Calculation Loop Through Events
7!
8!        PROGRAMMER: Jeff Wang, Roger Brode
9!
10!        DATE:    March 2, 1992
11!
12!        MODIFIED:   To remove mixed-mode math in calculation of
13!                    IENDHR - 4/19/93
14!
15!        INPUTS:  Source, Receptor and Setup Options
16!
17!        OUTPUTS: Update Hourly Results
18!
19!        CALLED FROM:   MAIN
20!***********************************************************************
21
22!     Variable Declarations
23      USE MAIN1
24      IMPLICIT NONE
25      CHARACTER MODNAM*12
26
27      SAVE
28      INTEGER :: IEVYR
29      LOGICAL FOPEN
30
31!     Variable Initializations
32      MODNAM = 'EVLOOP'                                                 !      0
33      EOF = .FALSE.
34      FOPEN = .FALSE.
35
36!     Flush HRVAL, AVEVAL, GRPAVE and GRPVAL    ---   CALL FLUSH
37      CALL EV_FLUSH
38
39      DO WHILE ( FULLDATE.LT.IEDATE .AND. .NOT.EOF )
40!        Retrieve Hourly Meteorology Data for Current Day   ---   CALL MEREAD
41         CALL MEREAD                                                    !      0
42
43!        Check for Hourly Emissions File
44         INQUIRE (UNIT=IHREMI,OPENED=FOPEN)
45!*          Retrieve Hourly Emissions from File for Current Day---   CALL HQREAD
46         IF ( FOPEN ) CALL HQREAD
47
48!        Write Out Update to the Screen for the PC Version
49         WRITE (*,909) JDAY , IYR
50 909     FORMAT ('+','Now Processing Events For Day No. ',I4,' of ',I4)
51
52         IF ( IPROC(JDAY).EQ.1 .AND. .NOT.RUNERR ) THEN
53!           Begin The Event Loop
54            DO IEVENT = 1 , NUMEVE                                      !      0
55
56!              Calculate year of event for multiple year data files
57               IEVYR = INT(EVDATE(IEVENT)/1000000)                      !      0
58               IF ( EVJDAY(IEVENT).EQ.JDAY .AND. IEVYR.EQ.IYEAR ) THEN
59
60                  IENDHR = EVDATE(IEVENT) - INT(EVDATE(IEVENT)/100)*100 !      0
61                  ISTAHR = IENDHR - EVAPER(IEVENT) + 1
62
63                  DO IHOUR = ISTAHR , IENDHR
64                     KHOUR = IHOUR                                      !      0
65!                    Retrieve Hourly Data for Current Event ---   CALL METEXT
66                     CALL EV_METEXT
67!*                   Process Hourly Emissions from File
68!*                   Begin Source Loop
69                     DO ISRC = 1 , NUMSRC
70!*                        Retrieve Source Parameters for This Hour     ---   CALL HRQEXT
71                        IF ( QFLAG(ISRC).EQ.'HOURLY' )                  &
72     &                       CALL EV_HRQEXT(ISRC)
73                     ENDDO
74!*                   End Source Loop
75!*----
76                     IF ( CLMHR .AND. CLMPRO ) THEN                     !      0
77!                       Check for Calm Hr & Processing and
78!                       Increment Counters
79                        EV_NUMHRS = EV_NUMHRS + 1                       !      0
80                        EV_NUMCLM = EV_NUMCLM + 1
81                     ELSEIF ( MSGHR .AND. MSGPRO ) THEN
82!                       Check for Missing Hour & Processing and
83!                       Increment Counters
84                        EV_NUMHRS = EV_NUMHRS + 1                       !      0
85                        EV_NUMMSG = EV_NUMMSG + 1
86                     ELSEIF ( ZI.LE.0 ) THEN
87!                       Write Out The Informational Message &
88!                       Increment Counters
89                        WRITE (DUMMY,'(I8.8)') KURDAT                   !      0
90                        CALL ERRHDL(PATH,MODNAM,'I','470',DUMMY)
91                        EV_NUMHRS = EV_NUMHRS + 1
92                     ELSE
93!                       Set CALCS Flag, Increment Counters
94!                       & Calculate HRVAL
95                        CALCS = .TRUE.                                  !      0
96                        EV_NUMHRS = EV_NUMHRS + 1
97!                       Calculate CONC or DEPOS Values      ---   CALL EVCALC
98                        CALL EVCALC
99                     ENDIF
100
101                  ENDDO
102
103!                 Calculate Applicable Averages             ---   CALL AVEREV
104                  CALL AVEREV                                           !      0
105
106!                 Print Out Model Results                   ---   CALL OUTPUT
107                  CALL EV_OUTPUT
108
109!                 Flush HRVAL, AVEVAL, GRPAVE and GRPVAL    ---   CALL FLUSH
110                  CALL EV_FLUSH
111
112!                 Reset CALCS Flag
113                  CALCS = .FALSE.
114
115!                 Reset the Counters
116                  EV_NUMHRS = 0
117                  EV_NUMCLM = 0
118                  EV_NUMMSG = 0
119
120               ENDIF
121
122            ENDDO
123!           End Event LOOP
124
125         ENDIF
126      ENDDO
127!     End Loop Through Meteorology Data
128
129      CONTINUE                                                          !      0
130      END


HyperKWIC - Version 1.00DD executed at 20:00 on 1 Mar 2018 | Personal or Academic or Evaluation User | Free for Non-Commercial, Non-Government Use