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