1      SUBROUTINE EV_SETUP
2!***********************************************************************
3!                 EV_SETUP Module of the AMS/EPA Regulatory Model - AERMOD
4!
5!        PURPOSE: Controls Processing of Run SETUP Information
6!
7!        PROGRAMMER: Roger Brode, Jeff Wang
8!        MODIFIED BY D. Strimaitis, SRC (for GRIDDED TERRAIN Processing)
9!
10!        MODIFIED:   Moved the code to insert a blank line in temporary event
11!                    file after each pathway from SUB EVEFIL.
12!                    R.W. Brode, PES, Inc. - November 15, 1995.
13!
14!        MODIFIED:  Default format for METFRM modified to eliminate the
15!                   variable ZDM on input.
16!                   BY:  J. Paumier, PES              DATE: 27 July 1994
17!
18!        DATE:    December 15, 1993
19!
20!        INPUTS:  Input Runstream File
21!
22!        OUTPUTS: Processing Option Switches
23!                 Arrays of Source Parameters
24!                 Arrays of Receptor Locations
25!                 Meteorological Data Specifications
26!                 Terrain Grid Data Specifications
27!                 Output Options
28!
29!        CALLED FROM:   MAIN
30!***********************************************************************
31!
32!     Variable Declarations
33      USE MAIN1
34      IMPLICIT NONE
35      CHARACTER MODNAM*12
36
37      SAVE
38      INTEGER :: I , IFSTAT
39      LOGICAL NOPATH , NOKEY
40      CHARACTER RDFRM*20 , ECFRM*20 , EVFRM*20
41      CHARACTER INPFLD*2 , PATHWY(7)*2
42      INTERFACE
43      SUBROUTINE EXPATH(INPFLD,PATHWY,IPN,NOPATH)
44      CHARACTER(LEN=2) , INTENT(IN) :: INPFLD
45      CHARACTER(LEN=2) , INTENT(IN) , DIMENSION(:) :: PATHWY
46      INTEGER , INTENT(IN) :: IPN
47      LOGICAL , INTENT(OUT) :: NOPATH
48      END
49      END INTERFACE
50
51
52!     Variable Initializations
53      MODNAM = 'EV_SETUP'                                               !      0
54      EOF = .FALSE.
55      ILINE = 0
56
57!     Setup READ format and ECHO format for runstream record,
58!     based on the ISTRG PARAMETER (set in MAIN1)
59      WRITE (RDFRM,9100) ISTRG , ISTRG
60 9100 FORMAT ('(A',I3.3,',T1,',I3.3,'A1)')
61      WRITE (ECFRM,9250) ISTRG
62 9250 FORMAT ('(1X,A',I3.3,')')
63      WRITE (EVFRM,9300) ISTRG
64 9300 FORMAT ('(A',I3.3,')')
65
66!     LOOP Through Input Runstream Records
67      DO WHILE ( .NOT.EOF )
68
69!        Increment the Line Counter
70         ILINE = ILINE + 1                                              !      0
71
72!        READ Record to Buffers, as A80 and 80A1 for ISTRG = 80.
73!        Length of ISTRG is Set in PARAMETER Statement in MAIN1
74         READ (INUNIT,RDFRM,END=999) RUNST1 , (RUNST(I),I=1,ISTRG)
75
76!        Convert Lower Case to Upper Case Letters           ---   CALL LWRUPR
77         CALL LWRUPR                                                    !      0
78
79!        Define Fields on Card                              ---   CALL DEFINE
80         CALL DEFINE
81
82!        Get the Contents of the Fields                     ---   CALL GETFLD
83         CALL GETFLD
84
85         IF ( ECHO .AND. (FIELD(1).EQ.'OU' .AND. FIELD(2).EQ.'FINISHED')&
86     &        ) THEN
87!           Echo Last Input Card to Output File (Use Character Substring to
88!           Avoid Echoing ^Z Which May Appear at "End of File" for Some
89!           Editors).  Also, Allow for Shift in the Input Runstream File of
90!           Up to 3 Columns.
91            IF ( LOCB(1).EQ.1 ) THEN                                    !      0
92               WRITE (IOUNIT,9200) RUNST1(1:11)                         !      0
93 9200          FORMAT (' ',A11)
94            ELSEIF ( LOCB(1).EQ.2 ) THEN
95               WRITE (IOUNIT,9210) RUNST1(1:12)                         !      0
96 9210          FORMAT (' ',A12)
97            ELSEIF ( LOCB(1).EQ.3 ) THEN
98               WRITE (IOUNIT,9220) RUNST1(1:13)                         !      0
99 9220          FORMAT (' ',A13)
100            ELSEIF ( LOCB(1).EQ.4 ) THEN
101               WRITE (IOUNIT,9230) RUNST1(1:14)                         !      0
102 9230          FORMAT (' ',A14)
103            ENDIF
104         ELSEIF ( ECHO ) THEN
105!           Echo Full Input Card to Output File
106            WRITE (IOUNIT,ECFRMRUNST1                                 !      0
107         ENDIF
108
109!        If Blank Line, Then CYCLE to Next Card
110         IF ( BLINE ) GOTO 11                                           !      0
111
112!        Check for 'NO ECHO' In First Two Fields
113         IF ( FIELD(1).EQ.'NO' .AND. FIELD(2).EQ.'ECHO' ) THEN          !      0
114            ECHO = .FALSE.                                              !      0
115            GOTO 11
116         ENDIF
117
118!        Extract Pathway ID From Field 1                    ---   CALL EXPATH
119         PATHWY(1) = 'CO'                                               !      0
120         PATHWY(2) = 'SO'
121         PATHWY(3) = 'ME'
122         PATHWY(4) = 'TG'
123         PATHWY(5) = 'EV'
124         PATHWY(6) = 'OU'
125         PATHWY(7) = '**'
126         CALL EXPATH(FIELD(1),PATHWY,7,NOPATH)
127
128!        For Invalid Pathway and Comment Lines Skip to Next Record
129         IF ( NOPATH ) THEN
130!           WRITE Error Message    ! Invalid Pathway ID
131            CALL ERRHDL(PPATH,MODNAM,'E','100',PATH)                    !      0
132            PATH = PPATH
133            GOTO 11
134         ELSEIF ( PATH.EQ.'**' ) THEN
135            GOTO 11                                                     !      0
136         ENDIF
137
138!        Extract Keyword From Field 2                       ---   CALL EXKEY
139         CALL EXKEY(FIELD(2),NOKEY)                                     !      0
140
141         IF ( NOKEY ) THEN
142!           WRITE Error Message    ! Invalid Keyword
143            CALL ERRHDL(PATH,MODNAM,'E','105',KEYWRD)                   !      0
144            PKEYWD = KEYWRD
145            GOTO 11
146         ENDIF
147
148!        Check for Proper Order of Setup Cards              ---   CALL SETORD
149         CALL EV_SETORD                                                 !      0
150
151!        Process Input Card Based on Pathway
152         IF ( PATH.EQ.'CO' ) THEN
153!           Process COntrol Pathway Cards                   ---   CALL COCARD
154            CALL COCARD                                                 !      0
155         ELSEIF ( PATH.EQ.'SO' ) THEN
156!           Process SOurce Pathway Cards                    ---   CALL SOCARD
157            CALL SOCARD                                                 !      0
158         ELSEIF ( PATH.EQ.'ME' ) THEN
159!           Process MEteorology Pathway Cards               ---   CALL MECARD
160            CALL MECARD                                                 !      0
161         ELSEIF ( PATH.EQ.'EV' ) THEN
162!           Process EVent Pathway Cards                     ---   CALL EVCARD
163            CALL EVCARD                                                 !      0
164         ELSEIF ( PATH.EQ.'TG' ) THEN
165!           Process Terrain Grid Pathway Cards              ---   CALL TGCARD
166            CALL TGCARD                                                 !      0
167         ELSEIF ( PATH.EQ.'OU' ) THEN
168!           Process OUtput Pathway Cards                    ---   CALL OUCARD
169            CALL EV_OUCARD                                              !      0
170         ENDIF
171
172!        Store the Current Keyword as the Previous Keyword
173         PKEYWD = KEYWRD                                                !      0
174
175!        Check for 'OU FINISHED' Card.  Exit DO WHILE Loop By Branching
176!        to Statement 999 in Order to Avoid Reading a ^Z "End of File"
177!        Marker That May Be Present For Some Editors.
178         IF ( PATH.EQ.'OU' .AND. KEYWRD.EQ.'FINISHED' ) GOTO 999
179
180         GOTO 11                                                        !      0
181 999     EOF = .TRUE.                                                   !      0
182 11      CONTINUE                                                       !      0
183      ENDDO
184
185!     Reinitialize Line Number Counter to Count Meteorology Data
186      ILINE = 0                                                         !      0
187
188!     Check That All Pathways Were Finished
189      IF ( ICSTAT(25).NE.1 .OR. ISSTAT(25).NE.1 .OR. IMSTAT(25)         &
190     &     .NE.1 .OR. IESTAT(25).NE.1 .OR. IOSTAT(25).NE.1 ) THEN
191!        Runstream File Incomplete, Save I?STAT to IFSTAT and Write Message
192         IFSTAT = ICSTAT(25)*10000 + ISSTAT(25)*1000 + IMSTAT(25)       &
193     &            *100 + IESTAT(25)*10 + IOSTAT(25)
194         WRITE (DUMMY,'(I5.5)') IFSTAT
195         CALL ERRHDL(PATH,MODNAM,'E','125',DUMMY)
196      ENDIF
197
198      CONTINUE                                                          !      0
199      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