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