Merge remote-tracking branch 'origin/release-v4.6.1'
[WRF.git] / chem / KPP / mechanisms / cri_mosaic_4bin_aq / cri_mosaic_4bin_aq.def
blobc95c6735ea96e7f506d4338e79a3bae6191eb527
1 #include atoms_red
2 #include ./cri_mosaic_4bin_aq.spc
3 #include ./cri_mosaic_4bin_aq.eqn
8 #INLINE F90_RATES
9 !************** SPECIAL RATE FUNCTIONS **********************
11 REAL(KIND=dp) FUNCTION k46( TEMP, C_M )
12 REAL(KIND=dp), INTENT(IN) :: temp, c_m
13 REAL(KIND=dp) :: k0, k2, k3
15 k0=7.2E-15_dp * EXP(785._dp/TEMP)
16 k2=4.1E-16_dp * EXP(1440._dp/TEMP)
17 k3=1.9E-33_dp * EXP(725._dp/TEMP) * C_M
19 k46=k0+k3/(1+k3/k2)
21 ! print*,'k46=',k46
22 END FUNCTION k46
24 REAL(KIND=dp) FUNCTION k47( TEMP, C_M )
25 REAL(KIND=dp), INTENT(IN) :: temp, c_m
26 REAL(KIND=dp) :: k0, ki, fc, x, ssign, f12
27 k0 = 3.00d-31*((temp/300.0)**(-3.3))*C_M
28 ki = 1.50d-12
29 fc = 0.6
30 x = 1.0d+0
31 ssign = dsign(x,(k0-ki))
32 f12 =10**(dlog10(fc)/(1.0+(ssign*(ABS(dlog10(k0/ki)))**(2.0))))
33 k47=(k0*ki*f12)/(k0+ki)
34 ! print*,'k47=',k47
35 END FUNCTION k47
37 REAL(KIND=dp) FUNCTION k48( TEMP, C_M )
38 REAL(KIND=dp), INTENT(IN) :: temp, c_m
39 REAL(KIND=dp) :: k0, ki, fc, x, ssign, f17
40 k0 = 5.00d-30*((temp/298.0)**(-1.5))*C_M
41 ki = 9.40d-12*EXP(-700.0/temp)
42 fc = (EXP(-temp/580.0) + EXP(-2320.0/temp))
43 x = 1.0d+0
44 ssign = dsign(x,(k0-ki))
45 f17=10**(dlog10(fc)/(1.0+(ssign*(ABS(dlog10(k0/ki)))**(2.0))))
46 k48=(k0*ki*f17)/(k0+ki)
47 ! print*,'k48=',k48
48 END FUNCTION k48
50 REAL(KIND=dp) FUNCTION RJPL( K0300, Q, KU300, R, M, T )
51 REAL(KIND=dp) :: k0300,q,ku300,r,m,t
52 REAL(KIND=dp) :: tt,k0,ku,k0m,kk,lgkk,e,f
53 ! JPL standard three body reaction rate format extended
54 TT= T / 3.D2
55 K0= K0300 * exp(-1._dp*Q*log(TT))
56 KU= KU300 * exp(-1._dp*R*log(TT))
57 K0M= K0 * M
58 KK= K0M / KU
59 LGKK=0.43429448190324926_dp * LOG(KK) ! = log10(KK)
60 E=1.D0 / ( 1.D0 + LGKK*LGKK )
61 F=exp(-0.5108256237659887_dp*E) ! -0.51=log(0.6)
62 RJPL = F * K0M / ( 1.D0 + KK )
63 ! print*,'RJPL=',RJPL
64 END FUNCTION
65 !---------------------------------------------------------------------
69 REAL(KIND=dp) FUNCTION RALKE( K0300, Q, KU, Fc, M, T )
70 REAL(KIND=dp) :: k0300,q,m,t,Fc
71 real(KIND=dp) :: tt,k0,ku,k0m,kk,lgkk,e,f
72 ! special function for alkene+OH reactions
73 TT= T / 3.D2
74 K0= K0300 * exp(-1._dp*Q*log(TT))
75 K0M= K0 * M
76 KK= K0M / KU
77 LGKK=0.43429448190324926_dp * LOG(KK) ! = log10(KK)
78 E=1.D0 / ( 1.D0 + LGKK*LGKK )
79 F=exp(log(Fc)*E)
80 RALKE = F * K0M / ( 1.D0 + KK )
81 ! print*,'RALKE=',RALKE
82 END FUNCTION
85 real(kind=dp) function iupac_ch3sch3(a2,b2,a3,b3,cin_o2,temp)
86 !rate calculation for CH3SCH3 + OH = CH3SCH3OO + H2O
87 ! from IUPAC report (www.iupac-kinetic.ch.cam.ac.uk)
88 real(kind=dp) :: cin_o2, tr, temp
89 real(kind=dp) :: a2, b2, a3, b3
91 tr = 1._dp + ARR2(a3,b3,temp)*cin_o2
92 iupac_ch3sch3 = ARR2(a2,b2,temp)*cin_o2/tr
94 end function iupac_ch3sch3
96 !---------------------------------------------------------------------
98 !- SAN: adding standard 3-body reaction using convention of MCM & IUPAC recommendations
99 ! - Explicit form of TROE reactions
100 ! Based on Atkinson et. al. 2004
102 REAL(KIND=dp) FUNCTION KMT_IUPAC(k0_300K,n,kinf_300K,m,Fc,temp,cair)
104 INTRINSIC LOG10
106 REAL(KIND=dp), INTENT(IN) :: temp ! temperature [K]
107 REAL(KIND=dp), INTENT(IN) :: cair ! air concentration [molecules/cm3]
108 REAL(KIND=dp), INTENT(IN) :: k0_300K ! low pressure limit at 300 K
109 REAL(KIND=dp), INTENT(IN) :: n ! exponent for low pressure limit
110 !!! n.b. - remember to flip sign of exponents from IUPAC data sheets !!!
111 REAL(KIND=dp), INTENT(IN) :: kinf_300K ! high pressure limit at 300 K
112 REAL(KIND=dp), INTENT(IN) :: m ! exponent for high pressure limit
113 REAL(KIND=dp), INTENT(IN) :: Fc ! Approximate broadening factor
115 REAL(KIND=dp) :: zt_help, k0_T, kinf_T, k_ratio, Nint, F_exp
117 zt_help = 300._dp/temp
118 k0_T = k0_300K * zt_help**(n) * cair ! k_0 at current T
119 kinf_T = kinf_300K * zt_help**(m) ! k_inf at current T
120 k_ratio = k0_T/kinf_T
121 Nint = 0.75_dp - 1.27_dp*LOG10(Fc)
122 ! Calculate explicit broadening factor:
123 F_exp = Fc ** (1._dp / (1._dp + ( LOG10(k_ratio) / Nint )**2._dp ) )
125 KMT_IUPAC = k0_T/(1._dp+k_ratio) * F_exp
127 END FUNCTION KMT_IUPAC
129 !---------------------------------------------------------------------
131 !- SAN: Function for calculating NO + OH [+ M] 3-body reaction
132 !- Explicit form of TROE reaction with temperature dependent Fc
134 REAL(KIND=dp) FUNCTION KMT_OH_NO(temp,cair)
136 INTRINSIC LOG10
138 REAL(KIND=dp), INTENT(IN) :: temp ! temperature [K]
139 REAL(KIND=dp), INTENT(IN) :: cair ! air concentration [molecules/cm3]
141 REAL(KIND=dp) :: k0_300K, n, kinf_300K, m, zt_help
142 REAL(KIND=dp) :: k0_T, kinf_T, k_ratio, Nint, Fc, F_exp
144 k0_300K = 7.4D-31 ! low pressure limit at 300 K
145 n = 2.4_dp ! exponent for low pressure limit
146 kinf_300K = 3.3D-11 ! high pressure limit at 300 K
147 m = 0.3_dp ! exponent for high pressure limit
149 zt_help = 300._dp/temp
150 k0_T = k0_300K * zt_help**(n) * cair ! k_0 at current T
151 kinf_T = kinf_300K * zt_help**(m) ! k_inf at current T
152 k_ratio = k0_T/kinf_T
154 ! OH + NO [+ M] uses temperature dependent Fc:
155 Fc = exp(-temp / 1420._dp)
157 Nint = 0.75_dp - 1.27_dp*LOG10(Fc)
159 ! Calculate explicit broadening factor:
160 F_exp = Fc ** (1._dp / (1._dp + ( LOG10(k_ratio) / Nint )**2._dp ) )
162 KMT_OH_NO = k0_T/(1._dp+k_ratio) * F_exp
164 END FUNCTION KMT_OH_NO
169 #ENDINLINE