1
2      SUBROUTINE MODOPT
3!***********************************************************************
4!                 MODOPT Module of the AMS/EPA Regulatory Model - AERMOD
5!
6!        PURPOSE: Process Modeling Options From Runstream Input Image
7!
8!        PROGRAMMER: Roger Brode, Jeff Wang
9!
10!        DATE:    March 2, 1992
11!
12!        MODIFIED:   To incorporate undocumented options to turn off
13!                    depletion, which is now the default.
14!                    R. W. Brode, MACTEC/PES - 10/26/2004
15!
16!        MODIFIED:   To allow for calculating CONC/DEPOS/DDEP/WDEP in
17!                    a single model run.
18!                    R. W. Brode, PES - 4/17/95
19!
20!        MODIFIED:   To add DDEP and WDEP parameters to CONC/DEPOS options
21!                    to allow just the wet or just the dry deposition flux
22!                    to be reported.  DEPOS now reports the sum of wet and
23!                    dry fluxes.  Also, a new option parameter is provided
24!                    to force the Intermeiate Terrain procedure to ignore
25!                    either the simple terrain model or the complex terrain
26!                    model (NOSMPL/NOCMPL).
27!                    D. Strimaitis, SRC - 11/8/93
28!
29!        MODIFIED:   To add DEPLETE parameter for plume depletion option
30!                    D. Strimaitis, SRC - 2/15/93
31!
32!        MODIFIED:   To Output Warning Message '206' For Overriding
33!                    Non-DEFAULT Option - 9/29/92
34!
35!        INPUTS:  Input Runstream Image Parameters
36!
37!        OUTPUTS: Modeling Option Logical Switch Settings
38!
39!        ERROR HANDLING:   Checks for Too Few or Too Many Option Keywords;
40!                          Checks for Invalid Option Keywords;
41!                          Checks for Conflicting or Missing Option Keywords
42!
43!        CALLED FROM:   COCARD
44!***********************************************************************
45
46!     Variable Declarations
47      USE MAIN1
48      IMPLICIT NONE
49      CHARACTER MODNAM*12
50
51      SAVE
52      INTEGER :: I
53      CHARACTER KOPT*8
54
55!     Variable Initializations - Initialize All Logical Switches to FALSE
56      MODNAM = 'MODOPT'                                                 !      3
57
58!     Check for Too Few or Too Many Parameters
59      IF ( IFC.LT.3 ) THEN
60!        WRITE Error Message     ! No Parameters
61         CALL ERRHDL(PATH,MODNAM,'E','200',KEYWRD)                      !      0
62      ELSEIF ( IFC.GT.14 ) THEN
63!        WRITE Warning Message   ! Too Many Parameters
64         CALL ERRHDL(PATH,MODNAM,'W','202',KEYWRD)                      !      0
65      ENDIF
66
67!     First Check for Presence of DFAULT Switch
68      DO I = 3 , IFC                                                    !      3
69         KOPT = FIELD(I)                                                !      6
70         IF ( KOPT.EQ.'DFAULT' .OR. KOPT.EQ.'DEFAULT' ) THEN
71            DFAULT = .TRUE.                                             !      0
72            ELEV = .TRUE.
73            FLAT = .FALSE.
74            MSGPRO = .TRUE.
75            NOSTD = .FALSE.
76            NOCHKD = .FALSE.
77            SCREEN = .FALSE.
78            TOXICS = .FALSE.
79            PVMRM = .FALSE.
80            OLM = .FALSE.
81         ENDIF
82      ENDDO
83
84!     Next Check for Presence of TOXICS Switch
85      DO I = 3 , IFC                                                    !      3
86         KOPT = FIELD(I)                                                !      6
87         IF ( (KOPT.EQ.'TOXICS' .OR. KOPT.EQ.'TOXIC') .AND.             &
88     &        .NOT.DFAULT ) TOXICS = .TRUE.
89      ENDDO
90
91      NUMTYP = 0                                                        !      3
92!     Loop Through Fields Again Setting All Swithes
93      DO I = 3 , IFC
94         KOPT = FIELD(I)                                                !      6
95         IF ( KOPT.EQ.'DFAULT' ) THEN
96            DFAULT = .TRUE.                                             !      0
97         ELSEIF ( KOPT.EQ.'CONC' ) THEN
98            IF ( .NOT.CONC ) THEN                                       !      3
99               CONC = .TRUE.                                            !      3
100               NUMTYP = NUMTYP + 1
101            ENDIF
102         ELSEIF ( KOPT.EQ.'DEPOS' ) THEN
103            IF ( .NOT.DEPOS ) THEN                                      !      0
104               DEPOS = .TRUE.                                           !      0
105               NUMTYP = NUMTYP + 1
106            ENDIF
107         ELSEIF ( KOPT.EQ.'DDEP' ) THEN
108            IF ( .NOT.DDEP ) THEN                                       !      0
109               DDEP = .TRUE.                                            !      0
110               NUMTYP = NUMTYP + 1
111            ENDIF
112         ELSEIF ( KOPT.EQ.'WDEP' ) THEN
113            IF ( .NOT.WDEP ) THEN                                       !      0
114               WDEP = .TRUE.                                            !      0
115               NUMTYP = NUMTYP + 1
116            ENDIF
117         ELSEIF ( KOPT.EQ.'DRYDPLT' ) THEN
118            DDPLETE = .TRUE.                                            !      0
119         ELSEIF ( KOPT.EQ.'NODRYDP' ) THEN
120!           Dry depletion is now standard - include "option" to override it
121            DDPLETE = .FALSE.                                           !      0
122         ELSEIF ( KOPT.EQ.'ROMBERG' ) THEN
123            ROMBERG = .TRUE.                                            !      0
124            DDPLETE = .TRUE.
125         ELSEIF ( KOPT.EQ.'AREADPLT' ) THEN
126            IF ( TOXICS ) THEN                                          !      0
127               ARDPLETE = .TRUE.                                        !      0
128               DDPLETE = .TRUE.
129            ELSE
130!              WRITE Warning Message     ! Non-DEFAULT Option Overridden
131               CALL ERRHDL(PATH,MODNAM,'E','198',KOPT)                  !      0
132            ENDIF
133         ELSEIF ( KOPT.EQ.'WETDPLT' ) THEN
134            WDPLETE = .TRUE.                                            !      0
135         ELSEIF ( KOPT.EQ.'NOWETDP' ) THEN
136!           Wet depletion is now standard - include "option" to override it
137            WDPLETE = .FALSE.                                           !      0
138         ELSEIF ( KOPT.EQ.'NOSTD' ) THEN
139            IF ( .NOT.DFAULT ) THEN                                     !      0
140               NOSTD = .TRUE.                                           !      0
141            ELSE
142!              WRITE Warning Message     ! Non-DEFAULT Option Overridden
143               CALL ERRHDL(PATH,MODNAM,'W','206',KOPT)                  !      0
144            ENDIF
145         ELSEIF ( KOPT.EQ.'NOWARN' ) THEN
146            NOWARN = .TRUE.                                             !      0
147         ELSEIF ( KOPT.EQ.'NOCHKD' ) THEN
148            IF ( .NOT.DFAULT ) THEN                                     !      0
149               NOCHKD = .TRUE.                                          !      0
150            ELSE
151!              WRITE Warning Message     ! Non-DEFAULT Option Overridden
152               CALL ERRHDL(PATH,MODNAM,'W','206',KOPT)                  !      0
153            ENDIF
154         ELSEIF ( KOPT.EQ.'SCREEN' ) THEN
155            IF ( .NOT.DFAULT ) THEN                                     !      0
156               SCREEN = .TRUE.                                          !      0
157!              Set NOCHKD option on for SCREEN mode
158               NOCHKD = .TRUE.
159            ELSE
160!              WRITE Warning Message     ! Non-DEFAULT Option Overridden
161               CALL ERRHDL(PATH,MODNAM,'W','206',KOPT)                  !      0
162            ENDIF
163         ELSEIF ( KOPT.EQ.'FLAT' ) THEN
164            IF ( .NOT.DFAULT ) THEN                                     !      3
165               FLAT = .TRUE.                                            !      3
166               ELEV = .FALSE.
167            ELSE
168!              WRITE Warning Message     ! Non-DEFAULT Option Overridden
169               CALL ERRHDL(PATH,MODNAM,'W','206',KOPT)                  !      0
170            ENDIF
171         ELSEIF ( KOPT.EQ.'SCIM' ) THEN
172            IF ( TOXICS ) THEN                                          !      0
173               SCIM = .TRUE.                                            !      0
174            ELSE
175!              WRITE Warning Message     ! Non-DEFAULT Option Overridden
176               CALL ERRHDL(PATH,MODNAM,'E','198',KOPT)                  !      0
177            ENDIF
178         ELSEIF ( KOPT.EQ.'TOXICS' ) THEN
179            IF ( .NOT.DFAULT ) THEN                                     !      0
180               TOXICS = .TRUE.                                          !      0
181            ELSE
182!              WRITE Warning Message     ! Non-DEFAULT Option Overridden
183               CALL ERRHDL(PATH,MODNAM,'W','206',KOPT)                  !      0
184            ENDIF
185         ELSEIF ( KOPT.EQ.'PVMRM' ) THEN
186            IF ( .NOT.DFAULT ) THEN                                     !      0
187               PVMRM = .TRUE.                                           !      0
188            ELSE
189!              WRITE Warning Message     ! Non-DEFAULT Option Overridden
190               CALL ERRHDL(PATH,MODNAM,'W','206',KOPT)                  !      0
191            ENDIF
192         ELSEIF ( KOPT.EQ.'OLM' ) THEN
193            IF ( .NOT.DFAULT ) THEN                                     !      0
194               OLM = .TRUE.                                             !      0
195            ELSE
196!              WRITE Warning Message     ! Non-DEFAULT Option Overridden
197               CALL ERRHDL(PATH,MODNAM,'W','206',KOPT)                  !      0
198            ENDIF
199         ELSE
200!           WRITE Error Message     ! Invalid Parameter
201            CALL ERRHDL(PATH,MODNAM,'E','203',KOPT)                     !      0
202         ENDIF
203      ENDDO
204
205!        WRITE Error Message       ! Can't specify PVMRM and OLM
206      IF ( OLM .AND. PVMRM )                                            &
207     &      CALL ERRHDL(PATH,MODNAM,'E','141','        ')
208
209!     Setup Label Array for Concentration and Depositions
210      IF ( NUMTYP.GT.NTYP ) THEN
211!        WRITE Error Message: Number of output types exceeds maximum
212         WRITE (DUMMY,'(I4)') NTYP                                      !      0
213         CALL ERRHDL(PATH,MODNAM,'E','290',DUMMY)
214      ELSEIF ( NUMTYP.EQ.0 ) THEN
215!        WRITE Warning Message: No Output Types Selected, Assume CONC Only
216         CALL ERRHDL(PATH,MODNAM,'W','205','CONC')                      !      0
217         NUMTYP = 1
218         ITYP = 1
219         CONC = .TRUE.
220         CHIDEP(1,ITYP) = 'AVER'
221         CHIDEP(2,ITYP) = 'AGE '
222         CHIDEP(3,ITYP) = 'CONC'
223         CHIDEP(4,ITYP) = 'ENTR'
224         CHIDEP(5,ITYP) = 'ATIO'
225         CHIDEP(6,ITYP) = 'N   '
226         EMIFAC(ITYP) = 1.0E06
227         EMILBL(ITYP) = 'GRAMS/SEC'
228         OUTLBL(ITYP) = 'MICROGRAMS/M**3'
229         PERLBL(ITYP) = 'MICROGRAMS/M**3'
230         OUTTYP(ITYP) = 'CONC'
231      ELSEIF ( CONC ) THEN
232         ITYP = 1                                                       !      3
233         CHIDEP(1,ITYP) = 'AVER'
234         CHIDEP(2,ITYP) = 'AGE '
235         CHIDEP(3,ITYP) = 'CONC'
236         CHIDEP(4,ITYP) = 'ENTR'
237         CHIDEP(5,ITYP) = 'ATIO'
238         CHIDEP(6,ITYP) = 'N   '
239         EMIFAC(ITYP) = 1.0E06
240         EMILBL(ITYP) = 'GRAMS/SEC'
241         OUTLBL(ITYP) = 'MICROGRAMS/M**3'
242         PERLBL(ITYP) = 'MICROGRAMS/M**3'
243         OUTTYP(ITYP) = 'CONC'
244         IF ( DEPOS ) THEN
245            ITYP = 2                                                    !      0
246            CHIDEP(1,ITYP) = '  TO'
247            CHIDEP(2,ITYP) = 'TAL '
248            CHIDEP(3,ITYP) = 'DEPO'
249            CHIDEP(4,ITYP) = 'SITI'
250            CHIDEP(5,ITYP) = 'ON  '
251            CHIDEP(6,ITYP) = '    '
252            EMIFAC(ITYP) = 3600.
253            EMILBL(ITYP) = 'GRAMS/SEC'
254            OUTLBL(ITYP) = 'GRAMS/M**2'
255            PERLBL(ITYP) = 'GRAMS/M**2'
256            OUTTYP(ITYP) = 'DEPOS'
257            IF ( DDEP ) THEN
258               ITYP = 3                                                 !      0
259               CHIDEP(1,ITYP) = '    '
260               CHIDEP(2,ITYP) = 'DRY '
261               CHIDEP(3,ITYP) = 'DEPO'
262               CHIDEP(4,ITYP) = 'SITI'
263               CHIDEP(5,ITYP) = 'ON  '
264               CHIDEP(6,ITYP) = '    '
265               EMIFAC(ITYP) = 3600.
266               EMILBL(ITYP) = 'GRAMS/SEC'
267               OUTLBL(ITYP) = 'GRAMS/M**2'
268               PERLBL(ITYP) = 'GRAMS/M**2'
269               OUTTYP(ITYP) = 'DDEP'
270               IF ( WDEP ) THEN
271                  ITYP = 4                                              !      0
272                  CHIDEP(1,ITYP) = '    '
273                  CHIDEP(2,ITYP) = 'WET '
274                  CHIDEP(3,ITYP) = 'DEPO'
275                  CHIDEP(4,ITYP) = 'SITI'
276                  CHIDEP(5,ITYP) = 'ON  '
277                  CHIDEP(6,ITYP) = '    '
278                  EMIFAC(ITYP) = 3600.
279                  EMILBL(ITYP) = 'GRAMS/SEC'
280                  OUTLBL(ITYP) = 'GRAMS/M**2'
281                  PERLBL(ITYP) = 'GRAMS/M**2'
282                  OUTTYP(ITYP) = 'WDEP'
283               ENDIF
284            ELSEIF ( WDEP ) THEN
285               ITYP = 3                                                 !      0
286               CHIDEP(1,ITYP) = '    '
287               CHIDEP(2,ITYP) = 'WET '
288               CHIDEP(3,ITYP) = 'DEPO'
289               CHIDEP(4,ITYP) = 'SITI'
290               CHIDEP(5,ITYP) = 'ON  '
291               CHIDEP(6,ITYP) = '    '
292               EMIFAC(ITYP) = 3600.
293               EMILBL(ITYP) = 'GRAMS/SEC'
294               OUTLBL(ITYP) = 'GRAMS/M**2'
295               PERLBL(ITYP) = 'GRAMS/M**2'
296               OUTTYP(ITYP) = 'WDEP'
297            ENDIF
298         ELSEIF ( DDEP ) THEN
299            ITYP = 2                                                    !      0
300            CHIDEP(1,ITYP) = '    '
301            CHIDEP(2,ITYP) = 'DRY '
302            CHIDEP(3,ITYP) = 'DEPO'
303            CHIDEP(4,ITYP) = 'SITI'
304            CHIDEP(5,ITYP) = 'ON  '
305            CHIDEP(6,ITYP) = '    '
306            EMIFAC(ITYP) = 3600.
307            EMILBL(ITYP) = 'GRAMS/SEC'
308            OUTLBL(ITYP) = 'GRAMS/M**2'
309            PERLBL(ITYP) = 'GRAMS/M**2'
310            OUTTYP(ITYP) = 'DDEP'
311            IF ( WDEP ) THEN
312               ITYP = 3                                                 !      0
313               CHIDEP(1,ITYP) = '    '
314               CHIDEP(2,ITYP) = 'WET '
315               CHIDEP(3,ITYP) = 'DEPO'
316               CHIDEP(4,ITYP) = 'SITI'
317               CHIDEP(5,ITYP) = 'ON  '
318               CHIDEP(6,ITYP) = '    '
319               EMIFAC(ITYP) = 3600.
320               EMILBL(ITYP) = 'GRAMS/SEC'
321               OUTLBL(ITYP) = 'GRAMS/M**2'
322               PERLBL(ITYP) = 'GRAMS/M**2'
323               OUTTYP(ITYP) = 'WDEP'
324            ENDIF
325         ELSEIF ( WDEP ) THEN
326            ITYP = 2                                                    !      0
327            CHIDEP(1,ITYP) = '    '
328            CHIDEP(2,ITYP) = 'WET '
329            CHIDEP(3,ITYP) = 'DEPO'
330            CHIDEP(4,ITYP) = 'SITI'
331            CHIDEP(5,ITYP) = 'ON  '
332            CHIDEP(6,ITYP) = '    '
333            EMIFAC(ITYP) = 3600.
334            EMILBL(ITYP) = 'GRAMS/SEC'
335            OUTLBL(ITYP) = 'GRAMS/M**2'
336            PERLBL(ITYP) = 'GRAMS/M**2'
337            OUTTYP(ITYP) = 'WDEP'
338         ENDIF
339      ELSEIF ( DEPOS ) THEN
340         ITYP = 1                                                       !      0
341         CHIDEP(1,ITYP) = '  TO'
342         CHIDEP(2,ITYP) = 'TAL '
343         CHIDEP(3,ITYP) = 'DEPO'
344         CHIDEP(4,ITYP) = 'SITI'
345         CHIDEP(5,ITYP) = 'ON  '
346         CHIDEP(6,ITYP) = '    '
347         EMIFAC(ITYP) = 3600.
348         EMILBL(ITYP) = 'GRAMS/SEC'
349         OUTLBL(ITYP) = 'GRAMS/M**2'
350         PERLBL(ITYP) = 'GRAMS/M**2'
351         OUTTYP(ITYP) = 'DEPOS'
352         IF ( DDEP ) THEN
353            ITYP = 2                                                    !      0
354            CHIDEP(1,ITYP) = '    '
355            CHIDEP(2,ITYP) = 'DRY '
356            CHIDEP(3,ITYP) = 'DEPO'
357            CHIDEP(4,ITYP) = 'SITI'
358            CHIDEP(5,ITYP) = 'ON  '
359            CHIDEP(6,ITYP) = '    '
360            EMIFAC(ITYP) = 3600.
361            EMILBL(ITYP) = 'GRAMS/SEC'
362            OUTLBL(ITYP) = 'GRAMS/M**2'
363            PERLBL(ITYP) = 'GRAMS/M**2'
364            OUTTYP(ITYP) = 'DDEP'
365            IF ( WDEP ) THEN
366               ITYP = 3                                                 !      0
367               CHIDEP(1,ITYP) = '    '
368               CHIDEP(2,ITYP) = 'WET '
369               CHIDEP(3,ITYP) = 'DEPO'
370               CHIDEP(4,ITYP) = 'SITI'
371               CHIDEP(5,ITYP) = 'ON  '
372               CHIDEP(6,ITYP) = '    '
373               EMIFAC(ITYP) = 3600.
374               EMILBL(ITYP) = 'GRAMS/SEC'
375               OUTLBL(ITYP) = 'GRAMS/M**2'
376               PERLBL(ITYP) = 'GRAMS/M**2'
377               OUTTYP(ITYP) = 'WDEP'
378            ENDIF
379         ELSEIF ( WDEP ) THEN
380            ITYP = 2                                                    !      0
381            CHIDEP(1,ITYP) = '    '
382            CHIDEP(2,ITYP) = 'WET '
383            CHIDEP(3,ITYP) = 'DEPO'
384            CHIDEP(4,ITYP) = 'SITI'
385            CHIDEP(5,ITYP) = 'ON  '
386            CHIDEP(6,ITYP) = '    '
387            EMIFAC(ITYP) = 3600.
388            EMILBL(ITYP) = 'GRAMS/SEC'
389            OUTLBL(ITYP) = 'GRAMS/M**2'
390            PERLBL(ITYP) = 'GRAMS/M**2'
391            OUTTYP(ITYP) = 'WDEP'
392         ENDIF
393      ELSEIF ( DDEP ) THEN
394         ITYP = 1                                                       !      0
395         CHIDEP(1,ITYP) = '    '
396         CHIDEP(2,ITYP) = 'DRY '
397         CHIDEP(3,ITYP) = 'DEPO'
398         CHIDEP(4,ITYP) = 'SITI'
399         CHIDEP(5,ITYP) = 'ON  '
400         CHIDEP(6,ITYP) = '    '
401         EMIFAC(ITYP) = 3600.
402         EMILBL(ITYP) = 'GRAMS/SEC'
403         OUTLBL(ITYP) = 'GRAMS/M**2'
404         PERLBL(ITYP) = 'GRAMS/M**2'
405         OUTTYP(ITYP) = 'DDEP'
406         IF ( WDEP ) THEN
407            ITYP = 2                                                    !      0
408            CHIDEP(1,ITYP) = '    '
409            CHIDEP(2,ITYP) = 'WET '
410            CHIDEP(3,ITYP) = 'DEPO'
411            CHIDEP(4,ITYP) = 'SITI'
412            CHIDEP(5,ITYP) = 'ON  '
413            CHIDEP(6,ITYP) = '    '
414            EMIFAC(ITYP) = 3600.
415            EMILBL(ITYP) = 'GRAMS/SEC'
416            OUTLBL(ITYP) = 'GRAMS/M**2'
417            PERLBL(ITYP) = 'GRAMS/M**2'
418            OUTTYP(ITYP) = 'WDEP'
419         ENDIF
420      ELSEIF ( WDEP ) THEN
421         ITYP = 1                                                       !      0
422         CHIDEP(1,ITYP) = '    '
423         CHIDEP(2,ITYP) = 'WET '
424         CHIDEP(3,ITYP) = 'DEPO'
425         CHIDEP(4,ITYP) = 'SITI'
426         CHIDEP(5,ITYP) = 'ON  '
427         CHIDEP(6,ITYP) = '    '
428         EMIFAC(ITYP) = 3600.
429         EMILBL(ITYP) = 'GRAMS/SEC'
430         OUTLBL(ITYP) = 'GRAMS/M**2'
431         PERLBL(ITYP) = 'GRAMS/M**2'
432         OUTTYP(ITYP) = 'WDEP'
433      ENDIF
434
435      EMICON = 1.0E06                                                   !      3
436
437!     Modify PLTFRM and PSTFRM if needed for more than one output type
438      IF ( NUMTYP.GT.1 ) THEN
439         WRITE (PLTFRM,1009) NUMTYP + 2                                 !      0
440 1009    FORMAT ('(',I1,                                                &
441     &   '(1X,F13.5),3(1X,F8.2),3X,A5,2X,A8,2X,A4,6X,A8,2X,         I8)'&
442     &   )
443         WRITE (PSTFRM,1019) NUMTYP + 2
444 1019    FORMAT ('(',I1,                                                &
445     &           '(1X,F13.5),3(1X,F8.2),2X,A6,2X,A8,2X,I8.8,2X,A8)')
446      ENDIF
447
448      CONTINUE                                                          !      3
449      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