2 #include .
/cri_mosaic_4bin_aq.spc
3 #include .
/cri_mosaic_4bin_aq.eqn
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
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
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
)
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
))
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
)
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
55 K0
= K0300
* exp(-1._dp
*Q
*log(TT
))
56 KU
= KU300
* exp(-1._dp
*R
*log(TT
))
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
)
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
74 K0
= K0300
* exp(-1._dp
*Q
*log(TT
))
77 LGKK
=0.43429448190324926_dp
* LOG(KK
) ! = log10(KK
)
78 E
=1.D0
/ ( 1.D0
+ LGKK
*LGKK
)
80 RALKE
= F
* K0M
/ ( 1.D0
+ KK
)
81 ! print
*,'RALKE=',RALKE
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
)
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
)
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