Merge branch 'master' into devel
[wrffire.git] / wrfv2_fire / chem / KPP / kpp / kpp-2.1 / util / WRF_conform / WRFUserRateLaws.f90
blobf45b9d3854d89c7f87f5a69dd5d67bbeb28607a4
1 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2 ! User-defined Rate Law functions
4 ! !! FROM chem/KPP/kpp/kpp-2.1/util/WRFconform/WRFUserRateLaws !!!!
6 ! Note: the default argument type for rate laws, as read from the equations file, is single precision
7 ! but all the internal calculations are performed in double precision
8 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10 ! Arrhenius (added by psaide 15-07-2009)
11 KPP_REAL FUNCTION ARR( A0,B0,C0, TEMP )
12 KPP_REAL :: TEMP
13 KPP_REAL A0,B0,C0
14 ARR = A0 * EXP( -B0 /TEMP ) * (TEMP/300._dp)**C0
15 END FUNCTION ARR
17 !~~~> Simplified Arrhenius, with two arguments
18 KPP_REAL FUNCTION ARR2( A0,B0, TEMP )
19 KPP_REAL :: TEMP
20 KPP_REAL A0,B0
21 ARR2 = A0 * EXP( -B0 /TEMP )
22 END FUNCTION ARR2
24 ! EP2 (added by psaide 22-07-2009)
25 KPP_REAL FUNCTION EP2( A0,C0,A2,C2,A3,C3,TEMP,cair)
26 KPP_REAL :: TEMP
27 KPP_REAL :: cair
28 KPP_REAL A0,C0,A2,C2,A3,C3
29 KPP_REAL K0,K2,K3
31 K0 = A0 * EXP(-C0 /TEMP)
32 K2 = A2 * EXP(-C2 /TEMP)
33 K3 = A3 * EXP(-C3 /TEMP)
34 ! K3 = K3 * 2.45E13_dp * 1.0E6_dp
35 K3 = K3 * cair
36 EP2 = K0 + K3/(1._dp+K3/K2 )
37 END FUNCTION EP2
39 ! EP3 (added by psaide 15-07-2009)
40 KPP_REAL FUNCTION EP3(A1,C1,A2,C2,TEMP,cair)
41 KPP_REAL :: TEMP
42 KPP_REAL :: cair
43 KPP_REAL A1, C1, A2, C2
44 KPP_REAL K1, K2
46 K1 = A1 * EXP(-C1 /TEMP)
47 K2 = A2 * EXP(-C2 /TEMP)
48 ! EP3 = K1 + K2*(1.0E6_dp * 2.45E13_dp)
49 EP3 = K1 + K2*cair
50 END FUNCTION EP3
52 ! FALL (added by psaide 15-07-2009)
53 KPP_REAL FUNCTION FALL( A0,B0,C0,A1,B1,C1,CF,TEMP,cair)
55 INTRINSIC LOG10
57 KPP_REAL :: TEMP
58 KPP_REAL :: cair
59 KPP_REAL A0,B0,C0,A1,B1,C1,CF
60 KPP_REAL K0, K1
62 K0 = A0 * EXP(-B0 /TEMP)* (TEMP/300._dp)**C0
63 K1 = A1 * EXP(-B1 /TEMP)* (TEMP/300._dp)**C1
64 ! K0 = K0 * 2.45E13_dp * 1.0E6_dp
65 K0 = K0 * cair
66 K1 = K0/K1
67 FALL = (K0/(1._dp+K1))*CF**(1._dp/(1._dp+(LOG10(K1))**2))
69 END FUNCTION FALL
71 ! FALL2 (added by psaide 28-10-2009)
72 KPP_REAL FUNCTION F2( A0,B0,C0,A1,B1,C1,CF,CN,TEMP,cair)
74 INTRINSIC LOG10
76 KPP_REAL :: TEMP
77 KPP_REAL :: cair
78 KPP_REAL A0,B0,C0,A1,B1,C1,CF,CN
79 KPP_REAL K0, K1
81 K0 = A0 * EXP(-B0 /TEMP)* (TEMP/300._dp)**C0
82 K1 = A1 * EXP(-B1 /TEMP)* (TEMP/300._dp)**C1
83 ! K0 = K0 * 2.45E13_dp * 1.0E6_dp
84 K0 = K0 * cair
85 K1 = K0/K1
86 F2 = (K0/(1._dp+K1))*CF**(1._dp/(1._dp+(LOG10(K1)/CN)**2))
88 END FUNCTION F2
90 !------------------------------------
91 ! Troe reactions (as in Stockwell et al, 1997)
93 KPP_REAL FUNCTION TROE(k0_300K,n,kinf_300K,m,temp,cair)
95 INTRINSIC LOG10
97 KPP_REAL, INTENT(IN) :: temp ! temperature [K]
98 KPP_REAL, INTENT(IN) :: cair ! air concentration [molecules/cm3]
99 KPP_REAL, INTENT(IN) :: k0_300K ! low pressure limit at 300 K
100 KPP_REAL, INTENT(IN) :: n ! exponent for low pressure limit
101 KPP_REAL, INTENT(IN) :: kinf_300K ! high pressure limit at 300 K
102 KPP_REAL, INTENT(IN) :: m ! exponent for high pressure limit
103 KPP_REAL :: zt_help, k0_T, kinf_T, k_ratio
105 zt_help = 300._dp/temp
106 k0_T = k0_300K * zt_help**(n) * cair ! k_0 at current T
107 kinf_T = kinf_300K * zt_help**(m) ! k_inf at current T
108 k_ratio = k0_T/kinf_T
109 TROE = k0_T/(1._dp+k_ratio)*0.6_dp**(1._dp/(1._dp+LOG10(k_ratio)**2))
111 END FUNCTION TROE
115 !-------------------------------------------
116 ! Troe equilibrium reactions (as in Stockwell et al, 1997)
118 KPP_REAL FUNCTION TROEE(A, B, k0_300K,n,kinf_300K,m,temp,cair)
120 INTRINSIC LOG10
122 KPP_REAL, INTENT(IN) :: temp ! temperature [K]
123 KPP_REAL, INTENT(IN) :: cair ! air concentration [molecules/cm3]
124 KPP_REAL, INTENT(IN) :: k0_300K ! low pressure limit at 300 K
125 KPP_REAL, INTENT(IN) :: n ! exponent for low pressure limit
126 KPP_REAL, INTENT(IN) :: kinf_300K ! high pressure limit at 300 K
127 KPP_REAL, INTENT(IN) :: m ! exponent for high pressure limit
128 KPP_REAL, INTENT(IN) :: A, B
129 KPP_REAL :: zt_help, k0_T, kinf_T, k_ratio, troe
132 zt_help = 300._dp/temp
133 k0_T = k0_300K * zt_help**(n) * cair ! k_0 at current T
134 kinf_T = kinf_300K * zt_help**(m) ! k_inf at current T
135 k_ratio = k0_T/kinf_T
136 troe = k0_T/(1._dp+k_ratio)*0.6_dp**(1._dp/(1._dp+LOG10(k_ratio)**2))
138 TROEE = A * EXP( - B / temp) * troe
142 END FUNCTION TROEE
144 !------------------------
145 ! k=T^2 C exp (-D/T) reactions
147 KPP_REAL FUNCTION THERMAL_T2(c, d ,temp)
148 KPP_REAL, INTENT(IN) :: temp ! temperature [K]
149 KPP_REAL, INTENT(IN) :: c, d
152 THERMAL_T2= temp**2._dp * c * EXP(- d / temp)
154 END FUNCTION THERMAL_T2
156 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
157 ! End of User-defined Rate Law functions
158 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~