1
2      SUBROUTINE NO2RAT
3!***********************************************************************
4!                 NO2RAT Module of the AMS/EPA Regulatory Model - AERMOD
5!
6!        PURPOSE: Processes In-stack NO2/NOX Ratios by Source for
7!                 OLM and PVMRM Options
8!
9!        PROGRAMMER: Roger W. Brode, PES, Inc.
10!
11!        DATE:    May 6, 2002
12!
13!        INPUTS:  Input Runstream Image Parameters
14!
15!        OUTPUTS: Array of in-stack NO2/NOX ratios
16!
17!        CALLED FROM:   SOCARD
18!***********************************************************************
19
20!     Variable Declarations
21      USE MAIN1
22      IMPLICIT NONE
23      CHARACTER MODNAM*12
24
25      SAVE
26      INTEGER :: I , IH , IL , ISDX , IING , IPINDEX
27      CHARACTER LID*8 , HID*8 , LID1*8 , LID2*8 , HID1*8 , HID2*8
28      CHARACTER(LEN=ILEN_FLD) :: SOID
29      LOGICAL FIND , INGRP , RMARK
30
31!     Variable Initializations
32      FIND = .FALSE.                                                    !      0
33      INGRP = .FALSE.
34      MODNAM = 'NO2RAT'
35
36!     Check the Number of Fields
37      IF ( IFC.LE.2 ) THEN
38!        Error Message: No Parameters
39         CALL ERRHDL(PATH,MODNAM,'E','200',KEYWRD)                      !      0
40         GOTO 999
41      ELSEIF ( IFC.LT.4 ) THEN
42!        Error Message: Not Enough Parameters
43         CALL ERRHDL(PATH,MODNAM,'E','201',KEYWRD)                      !      0
44         GOTO 999
45      ELSEIF ( IFC.GT.4 ) THEN
46!        Error Message: Too Many Parameters
47         CALL ERRHDL(PATH,MODNAM,'E','202',KEYWRD)                      !      0
48         GOTO 999
49      ENDIF
50
51!     Get The Source ID(s)
52      SOID = FIELD(3)                                                   !      0
53      CALL FSPLIT(PATH,KEYWRD,SOID,ILEN_FLD,'-',RMARK,LID,HID)
54
55      IF ( LID.EQ.HID ) THEN
56!        Search For The Index
57         CALL SINDEX(SRCID,NSRC,SOID,ISDX,FIND)                         !      0
58         IF ( FIND ) THEN
59!           Read NO2/NOX Ratio and Convert to Real
60            CALL STONUM(FIELD(4),ILEN_FLD,FNUM,IMIT)                    !      0
61!           Check The Numerical Field
62            IF ( IMIT.EQ.-1 ) THEN
63               CALL ERRHDL(PATH,MODNAM,'E','208',KEYWRD)                !      0
64               GOTO 999
65            ENDIF
66!              WRITE Error Message: NO2_Ratio Out-of-Range
67            IF ( FNUM.LT.0.0 .OR. FNUM.GT.1.0 )                         &
68     &            CALL ERRHDL(PATH,MODNAM,'E','336',SRCID(ISDX))
69!           Assign The Field
70            ANO2_RATIO(ISDX) = FNUM
71         ELSE
72!           WRITE Error Message     ! Source Location Has Not Been Identified
73            CALL ERRHDL(PATH,MODNAM,'E','300',KEYWRD)                   !      0
74         ENDIF
75      ELSE
76!        First Check Range for Upper Value < Lower Value
77         CALL SETIDG(LID,LID1,IL,LID2)                                  !      0
78         CALL SETIDG(HID,HID1,IH,HID2)
79         IF ( (HID1.LT.LID1) .OR. (IH.LT.IL) .OR. (HID2.LT.LID2) ) THEN
80!           WRITE Error Message:  Invalid Range,  Upper < Lower
81            CALL ERRHDL(PATH,MODNAM,'E','203','SRCRANGE')               !      0
82            GOTO 999
83         ENDIF
84         DO I = 1 , NUMSRC                                              !      0
85!           See Whether It's In The Group
86            CALL ASNGRP(SRCID(I),LID,HID,INGRP)                         !      0
87            IF ( INGRP ) THEN
88               IING = I                                                 !      0
89!              Read NO2/NOX Ratio and Convert to Real
90               CALL STONUM(FIELD(4),ILEN_FLD,FNUM,IMIT)
91!              Check The Numerical Field
92               IF ( IMIT.EQ.-1 ) THEN
93                  CALL ERRHDL(PATH,MODNAM,'E','208',KEYWRD)             !      0
94                  GOTO 999
95               ENDIF
96!                 WRITE Error Message: NO2_Ratio Out-of-Range
97               IF ( FNUM.LT.0.0 .OR. FNUM.GT.1.0 )                      &
98     &              CALL ERRHDL(PATH,MODNAM,'E','336',SRCID(IING))
99!              Assign The Field
100               ANO2_RATIO(IING) = FNUM
101            ENDIF
102         ENDDO
103      ENDIF
104
105 999  CONTINUE                                                          !      0
106      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