#include atoms_red #include MOZART_4.spc #include MOZART_4.eqn #include ../boxmox/wrapper #include ../boxmox/setup #LOOKATALL #INLINE F90_GLOBAL ! global variables used by special rate constants of this mechanism ! air/water concentration (molecules/cm3) REAL(KIND=dp) :: c_m, c_h2o ! relative humidity REAL(KIND=dp) :: rh ! SOA formation REAL(KIND=dp) :: nume, den INTEGER, PARAMETER :: vbs_nbin = 4, vbs_nspec = 9, & vbs_alk4 = 1, vbs_alk5 = 2, vbs_ole1 = 3, & vbs_ole2 = 4, vbs_aro1 = 5, vbs_aro2 = 6, & vbs_isop = 7, vbs_sesq = 8, vbs_terp = 9, & vbs_c1 = 1, vbs_c10 = 2, vbs_c100 = 3, & vbs_c1000 = 4 #ENDINLINE #INLINE F90_INIT ! relative humidity (not really used...) rh = 0.5 #ENDINLINE #INLINE F90_RCONST c_m = C(ind_M) c_h2o = C(ind_H2O) #ENDINLINE #INLINE F90_RATES REAL(kind=dp) FUNCTION JPL_TROE( k0_300K, n, kinf_300K, m, base, temp, cair ) !------------------------------------------------------------ ! ... dummy arguments !------------------------------------------------------------ REAL(kind=dp), INTENT(IN) :: base ! base expononent REAL(kind=dp), INTENT(IN) :: temp ! temperature [K] REAL(kind=dp), INTENT(IN) :: cair ! air concentration [molecules/cm3] REAL(kind=dp), INTENT(IN) :: k0_300K ! low pressure limit at 300 K REAL(kind=dp), INTENT(IN) :: n ! exponent for low pressure limit REAL(kind=dp), INTENT(IN) :: kinf_300K ! high pressure limit at 300 K REAL(kind=dp), INTENT(IN) :: m ! exponent for high pressure limit !------------------------------------------------------------ ! ... local variables !------------------------------------------------------------ REAL(kind=dp) :: zt_help, k0_T, kinf_T, k_ratio zt_help = 300._dp/temp k0_T = k0_300K * zt_help**(n) * cair ! k_0 at current T kinf_T = kinf_300K * zt_help**(m) ! k_inf at current T k_ratio = k0_T/kinf_T JPL_TROE = k0_T/(1._dp + k_ratio)*base**(1._dp/(1._dp + LOG10(k_ratio)**2)) END FUNCTION JPL_TROE REAL(KIND=dp) FUNCTION usr5( temp, c_m ) REAL(KIND=dp), INTENT(IN) :: temp REAL(KIND=dp), INTENT(IN) :: c_m REAL(KIND=dp) :: k0, k2 k0 = c_m * 6.5e-34_dp * exp( 1335._dp/temp ) k2 = exp( 2199._dp/temp ) k0 = k0 /(1.0_dp + k0/(2.7e-17_dp*k2)) k2 = exp( 460._dp/temp ) usr5 = k0 + 2.4e-14_dp * k2 END FUNCTION usr5 REAL(KIND=dp) FUNCTION usr8( temp, c_m ) REAL(KIND=dp), INTENT(IN) :: temp REAL(KIND=dp), INTENT(IN) :: c_m REAL(KIND=dp), parameter :: boltz = 1.38044e-16_dp usr8 = 1.5e-13_dp * (1._dp + 6.e-7_dp*boltz*c_m*temp) END FUNCTION usr8 REAL(KIND=dp) FUNCTION usr9( temp, c_m, c_h2o ) REAL(KIND=dp), INTENT(IN) :: temp REAL(KIND=dp), INTENT(IN) :: c_m REAL(KIND=dp), INTENT(IN) :: c_h2o REAL(KIND=dp) :: ko, kinf, fc if( c_h2o > 0._dp ) then ko = 2.3e-13_dp * exp( 600._dp/temp ) kinf = 1.7e-33_dp * c_m * exp( 1000._dp/temp ) fc = 1._dp/c_h2o + 1.4e-21_dp * exp( 2200._dp/temp ) usr9 = (ko + kinf) * fc else usr9 = 0._dp end if END FUNCTION usr9 REAL(KIND=dp) FUNCTION usr16( rh, temp ) REAL(KIND=dp), INTENT(IN) :: rh ! relative humidity REAL(KIND=dp), INTENT(IN) :: temp ! temperature (K) usr16 = 0._dp END FUNCTION usr16 REAL(KIND=dp) FUNCTION usr17( rh, temp ) REAL(KIND=dp), INTENT(IN) :: rh ! relative humidity REAL(KIND=dp), INTENT(IN) :: temp ! temperature (K) usr17 = 0._dp END FUNCTION usr17 REAL(KIND=dp) FUNCTION usr17a( rh, temp ) REAL(KIND=dp), INTENT(IN) :: rh ! relative humidity REAL(KIND=dp), INTENT(IN) :: temp ! temperature (K) usr17a = 0._dp END FUNCTION usr17a REAL(KIND=dp) FUNCTION usr23( temp, c_m ) REAL(KIND=dp), INTENT(IN) :: temp REAL(KIND=dp), INTENT(IN) :: c_m REAL(KIND=dp) :: fc, k0 REAL(KIND=dp) :: wrk fc = 3.e-11_dp * (300._dp/temp) ** 3.3_dp wrk = fc * c_m k0 = wrk / (1._dp + wrk/1.5e-12_dp) usr23 = k0 * .6_dp ** (1._dp/(1._dp + (log10( wrk/1.5e-12_dp ))**2._dp)) END FUNCTION usr23 REAL(KIND=dp) FUNCTION usr24( temp, c_m ) REAL(KIND=dp), INTENT(IN) :: temp REAL(KIND=dp), INTENT(IN) :: c_m REAL(KIND=dp) :: ko, wrk wrk = .21_dp*c_m ko = 1._dp + 5.5e-31_dp*exp( 7460._dp/temp )*wrk usr24 = 1.7e-42_dp*exp( 7810._dp/temp )*wrk/ko END FUNCTION usr24 REAL(KIND=dp) FUNCTION usr26( rh, temp ) REAL(KIND=dp), INTENT(IN) :: rh ! relative humidity REAL(KIND=dp), INTENT(IN) :: temp ! temperature (K) usr26 = 0._dp END FUNCTION usr26 #ENDINLINE