1 2 3 SUBROUTINE VRTCBL(HE1,HE2,SZ1,SZ2,FACT) 4 !*********************************************************************** 5 ! VRTCBL Module of the AMS/EPA Regulatory Model - AERMOD 6 ! 7 ! PURPOSE: Calculates Vertical Term for Use in Bi-Gaussian Plume 8 ! Equation for Unstable (Convective) Conditions. 9 ! Skewness of the plume is treated 10 ! using two Gaussian plumes. Revised from VRTCBL as 11 ! programmed by Roger Brode, September 30, 1993. 12 ! 13 ! PROGRAMMERS: Roger Brode, Russ Lee 14 ! 15 ! DATE: July 20, 1994 16 ! 17 ! MODIFIED BY R.W. Brode, PES, Inc. to adjust HE and ZI for cases 18 ! with receptors below stack base (ZR < 0) - 12/26/00 19 ! 20 ! MODIFIED BY R.W. Brode, PES, Inc. to set vertical term to 0.0 21 ! for cases when receptor is above mixing height - 1/22/98 22 ! 23 ! INPUTS: Plume 1 Height (arg), HE1 24 ! Plume 2 Height (arg), HE2 25 ! Vertical Dispersion Parameter (Plume 1), SZ1 26 ! Vertical Dispersion Parameter (Plume 2), SZ2 27 ! Factor to distinguish between direct 28 ! and indirect plumes, FACT = 1.0 for Direct Plume 29 ! FACT = -1.0 for Indirect Plume 30 ! Mixing Height, ZI 31 ! Receptor Height, ZR 32 ! 33 ! OUTPUTS: Vertical Term, FSUBZ 34 ! 35 ! ASSUMPTIONS: Vertical term for UNSTAB plumes includes 36 ! one-half of reflection terms corresponding 37 ! to the updraft portion of the plume. Plume 38 ! heights and sigma-z's are passed as arguments. 39 ! 40 ! CALLED FROM: WRAP, LIFT 41 !*********************************************************************** 42 43 ! Variable Declarations 44 USE MAIN1 45 IMPLICIT NONE 46 CHARACTER MODNAM*12 47 INTEGER :: I 48 REAL :: HE1 , HE2 , SZ1 , SZ2 , FACT , SZARG , HEARG1 , HEARG2 , & 49 & A1 , A2 , A3 , A4 , TWOIZI , SUM , T1 , T2 , TERM , V 50 REAL :: HE1TMP , HE2TMP , ZITMP 51 52 SAVE 53 54 ! Variable Initializations 55 MODNAM = 'VRTCBL' !7278396 56 V = 0.0 57 58 IF ( ZR.EQ.0.0 ) THEN 59 ! Vertical Term for Case With FLAT Terrain and No Flagpole 60 ! Receptor (ZR = 0.0) 61 SUM = 0.0 !7278396 62 63 DO I = 0 , 1000 64 T1 = 0.0 ! 16119K 65 T2 = 0.0 66 TWOIZI = 2.*I*ZI*FACT 67 ! Check for FACT < 0 and skip first term. 68 IF ( FACT.LT.0. .AND. I.EQ.0 ) GOTO 50 69 70 HEARG1 = TWOIZI + HE1 ! 12480K 71 HEARG2 = TWOIZI + HE2 72 A1 = (-0.5/(SZ1*SZ1))*(HEARG1)*(HEARG1) 73 IF ( A1.GT.EXPLIM ) T1 = EXP(A1) 74 A2 = (-0.5/(SZ2*SZ2))*(HEARG2)*(HEARG2) 75 IF ( A2.GT.EXPLIM ) T2 = EXP(A2) 76 77 ! Sum the Plume 1 and Plume 2 Portions 78 TERM = (LAMDA1/SZ1)*T1 + (LAMDA2/SZ2)*T2 79 SUM = SUM + TERM 80 81 ! Check for Convergence of Summation Term 82 ! Exit Loop 83 IF ( ABS(TERM).LE.5.0E-7*ABS(SUM) ) GOTO 100 84 85 50 ENDDO 86 87 ! Calculate Total Vert. Term - (2.*) was Removed for Optimization 88 100 V = 2.*SUM !7278396 89 90 ELSEIF ( ZR.LE.ZI ) THEN 91 ! Vertical Term for Case of ZR .NE. 0.0 92 ! First adjust for terrain below stack base with ZR < 0, 93 ! by keeping HE and ZI horizontal. 94 HE1TMP = MAX(HE1,HE1-ZR) ! 0 95 HE2TMP = MAX(HE2,HE2-ZR) 96 ZITMP = MAX(ZI,ZI-ZR) 97 98 SUM = 0.0 99 100 DO I = 0 , 1000 101 T1 = 0.0 ! 0 102 T2 = 0.0 103 TWOIZI = 2.*I*ZITMP*FACT 104 ! Check for FACT < 0 and skip first term. 105 IF ( FACT.LT.0. .AND. I.EQ.0 ) GOTO 150 106 ! 107 ! Note: The following code can be used for the indirect plume 108 ! as well as the direct plume, since HEn, for the indirect plume, 109 ! already contains ZI, and thus represents the first "reflection" 110 ! off the top of the mixed layer. 111 ! 112 HEARG1 = TWOIZI + HE1TMP ! 0 113 HEARG2 = TWOIZI + HE2TMP 114 A1 = (-0.5/(SZ1*SZ1))*(ZR-(HEARG1))*(ZR-(HEARG1)) 115 A2 = (-0.5/(SZ1*SZ1))*(ZR+(HEARG1))*(ZR+(HEARG1)) 116 IF ( A1.GT.EXPLIM ) T1 = EXP(A1) 117 IF ( A2.GT.EXPLIM ) T1 = T1 + EXP(A2) 118 A3 = (-0.5/(SZ2*SZ2))*(ZR-(HEARG2))*(ZR-(HEARG2)) 119 A4 = (-0.5/(SZ2*SZ2))*(ZR+(HEARG2))*(ZR+(HEARG2)) 120 IF ( A3.GT.EXPLIM ) T2 = EXP(A3) 121 IF ( A4.GT.EXPLIM ) T2 = T2 + EXP(A4) 122 123 ! Sum the Plume 1 and Plume 2 Portions 124 TERM = (LAMDA1/SZ1)*T1 + (LAMDA2/SZ2)*T2 125 SUM = SUM + TERM 126 127 ! Check for Convergence of Summation Term 128 ! Exit Loop 129 IF ( ABS(TERM).LE.1.0E-6*ABS(SUM) ) GOTO 200 130 131 150 ENDDO 132 133 200 V = SUM ! 0 134 135 ELSE 136 ! Receptor is above mixing height, set V=0. 137 V = 0.0 ! 0 138 139 ENDIF 140 141 ! Calculate FSUBZ from V; FSUBZ = V / SQRT(2*PI) 142 ! (Note that 1/SZ term is included in V) 143 FSUBZ = V/SRT2PI !7278396 144 145 CONTINUE 146 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