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