!
      module chemrates_module
!
! 11/2/06 btf: chemrates for venus, as per Bougher vtgcm2 notes.
! 11/15/06 swb: double-checked chemrates for venus (OK). All now
!	        compatible with Fox and Sung (2001)
! 11/20/06 btf: allocate fs array at end of tdep subroutine
! 11/30/06 swb: pass te and ti from settei for use in chemrates
! 10/09/07 swb: NOX rates updated/added for N4S, N2D, NO, NO* calculation
! 10/30/07 swb: r2(k,i,lat) updated (Slanger et al., 2006; Pejakovic et al., 2007)
! 03/17/08 swb: NOX rates updated from Gerard et al., (2008)
! 04/01/08 asb: added low altitude chem rates (Yung & DeMore, 1982)
! 04/04/08 swb: checks of low altitude chem rates (Yung & DeMore, 1982)
! 04/02/09 asb: included OH chemical rates for OH airglow
!
! btf 6/13/13: Add SOx chemical rates for SO2 and SO reactions
!              from Zhang et al (2012). Icarus, 217. Table 2.
!
      use params_module,only: nlevp1,nlonp4
      implicit none
      real,parameter :: preset=0.
!
! Matrices for O,CO (set by comp_oco.F, used by comp.F)
      real,allocatable :: fs(:,:,:,:,:) ! (i,k,2,0:2,j)
!
! Temperature independent reaction rate constants:
      real,parameter ::
!
! Ion-neutral chemistry (constants):
     | r18 = 1.1e-9,   ! CO2 + O+ [cm3/sec]
     | r19 = 9.6e-11,  ! O + CO2+  to O+
     | r20 = 1.64e-10, ! O + CO2+  to O2+ 
     | r23 = 1.1e-9,   ! 
     | r26 = 4.5e-10,  ! 
     | r28 = 1.0e-10,  ! N4S + O2+
!    | r28 = 0.,  ! N4S + O2+
!    | r29 = 5.0e13,   ! N2 + O+
!
! N2D Quenching reactions (s.a., rk1-rk5, minus rk2, T-dependent):
!    | rk1 = 3.6e-13,  ! N2D+CO2 [cm3/sec]
     | rk1 = 2.8e-13,  ! N2D+CO2 [cm3/sec]
     | rk3 = 1.9e-12,  ! N2D+CO
!    | rk3 = 4.0e-12,  ! N2D+CO
!    | rk4 = 6.9e-13,  ! N2D+O
!    | rk4 = 2.0e-12,  ! N2D+O
     | rk4 = 2.0e-11,  ! N2D+O
     | rk5 = 1.7e-14,  ! N2D+N2
!
! N4S losses:
     | rk6 = 1.7e-16,  ! N4S+CO2
!    | rg2 = 2.26e-32,   ! O + N4S + CO2 -> NO + CO2 [cm6/sec]
!    | rg2 = 3.46e-32,   ! O + N4S + CO2 -> NO + CO2 [cm6/sec]
!    | rg3 = 3.4e-11,  ! N4S + NO -> N2 + O
!
! Msc:
     | rk10 = 4.5e-10, ! NO+ O2+
     | rk11 = 6.7e-11, ! NO+ N2D
!
! Oxygen Loss
     | r2 = 2.75e-32,   ! O+O+CO2 (Gerard et al., 2008 / Campbell and Grey 1973)
!    | r2 = 2.5e-32,    ! O+O+CO2 (Slanger et al., 2006)
!    | r2 = 1.8e-32,    ! O+O+CO2 (for ~200K Recommended by Huestis from lab measurments by Corey Jamieson)
!    | r2 = 1.2e-32,    ! O+O+CO2 (Recommended by Huestis from lab measurments by Corey Jamieson)
     | r5 = 1.35e-33,   ! O+O2+CO2 (Yung and DeMore 1982)
!    | r5 = 4e-33,      ! O+O2+CO2 (Recommended by Huestis JPL current evaluation for N2 x 2.5)
!
! Low altitude tracers and  OH Losses:
!    | rk28 = 3.8e-11, ! OH+O = H+O2    (Yung and DeMore,1982)??
     | r51 = 1.5e-13,  ! OH+CO -> H+CO2 (Liang and Yung,2009/ Saunder et al. 2006)
     | r102a = 3.0e-11, ! CLCO +O = CO2+CL (Yung and DeMore 1982)
     | r102b = 3.0e-12, ! CLCO+O = CO+CLO (Yung and DeMore 1982)
!    | r31 = 3.1e-11,   ! HO2+O = OH+O2  *** SEE R49 ***
     | r25 = 1.5e-13,     ! OH+CO = H+CO2 [Sander et al 2006]
!
! SOx reactions:  Zhang et al. (2012). Icarus, 217. Table 2.
     | s133 = 2.8E-11,   ! ClO+SO --> SO2 + Cl
     | s166 = 2.3E-12,   ! S + O2 --> SO  + O
     | s240 = 5.1E-31,   ! O + SO + M --> SO2 + M
     | s244 = 1.0E-11,   ! ClCO3 + SO --> SO2 + X
     | s249 = 4.4E-31,   ! 2SO + M -->  X + M
!
!
! O3 chem
     | k55 = 1.4e-17  ! clo+o3->cloo+o2
!
!  OH Vibrational 
!    |  v1  = 0.,
!    |  v2  = 0.,
!    |  v3  = 0.,
!    |  v4  = 0.,
!    | kv98 = 4.20e-12,
!    | kv97 = 4.00e-12,
!    | kv96 = 3.80e-12,
!    | kv95 = 3.60e-12,
!    | kv94 = 3.40e-12,
!    | kv93 = 3.20e-12,
!    | kv92 = 3.10e-12,
!    | kv91 = 2.90e-12,
!    | kv9g = 2.80e-12,
!    | kv87 = 3.30e-12,
!    | kv86 = 2.50e-12,
!    | kv85 = 1.90e-12,
!    | kv84 = 1.40e-12,
!    | kv83 = 1.00e-12,
!    | kv82 = 8.00e-13,
!    | kv81 = 6.00e-13,
!    | kv8g = 4.00e-13,
!    | kv76 = 3.20e-12,
!    | kv75 = 2.30e-12,
!    | kv74 = 1.60e-12,
!    | kv73 = 1.20e-12,
!    | kv72 = 9.00e-13,
!    | kv71 = 6.00e-13,
!    | kv7g = 4.00e-13,
!    | kv65 = 1.10e-12,
!    | kv64 = 6.00e-13,
!    | kv63 = 3.00e-13,
!    | kv62 = 1.00e-13,
!    | kv61 = 1.00e-13,
!    | kv6g = 1.00e-13,
!    | kv54 = 1.60e-12,
!    | kv53 = 6.00e-13,
!    | kv52 = 2.00e-13,
!    | kv51 = 1.00e-13,
!    | kv5g = 0.00,
!    | kv43 = 1.00e-12,
!    | kv42 = 2.00e-13,
!    | kv41 = 1.00e-13,
!    | kv4g = 0.00,
!    | kv32 = 7.00e-13,
!    | kv31 = 1.00e-13,
!    | kv3g = 0.00,
!    | kv21 = 4.00e-13,
!    | kv2g = 0.00,
!    | kv1g = 2.00e-13
!
! Temperature dependent chemical reaction rate coefficients.
! These are set by rates_tdep for every latitude at every timestep.
!
      real,dimension(:,:,:),allocatable :: ! (nlevp1,lon0:lon1,lat0:lat1)
!
!OH Chem
     |  v5,
     |  v6,
     |  v7,
     |  v8,
     |  v9,
!
! N2 quenching:
     |  rk2,   ! N2D+O2
!
! Dissociative recombination:
     |  a15,   ! N2+ + e [cm3/sec]
     |  a17,   ! NO+ + e  (0.75 N2D, 0.25 N4S)
     |  a14,   ! CO2+ +e
     |  a13,   ! O2+ +e
!
! Ti-dependent ion-netural reactions:
     |  r21,   ! CO2+ N2+ [cm3/sec]
     |  r22,   ! 
     |  r27,   ! O + N2+
     |  r29,   ! N2 + O+
!
! NOx rates from Gerard et al. (2008); Table 1
     |  rg1,   ! N4S + O -> NO* + hv
     |  rg2,   ! O + N4S + CO2 -> NO + CO2 [cm6/sec]
     |  rg3,   ! N4S + NO -> N2 + O
!
! 3-body recombination rates:
!    |  r2,    ! O+O+CO2  (Slanger et al., 2006) [cm6/sec]
!    |  r2,    ! O+O+CO2  (case 1 and 3 for Marie-Eve) [cm6/sec]
     |  r3,    ! O+CO+CO2 [cm6/sec]
!    |  r5,    ! O+O2+CO2 [cm6/sec]
!
! OH Sources:
     |  r49,   ! HO2+O->OH+O2    (Liang and Yung,2009/Saunder et al. 2006)
     |  r41b,  ! HO2+Cl->OH+ClO  (Saunder et al. 2006)
     |  r66,   ! HCl+O->OH+Cl    (Liang and Yung,2009/Saunder et al. 2006)
     |  r104,  ! H2+O->OH+H      (Liang and Yung,2009)
     |  r54,   ! HO2+O3->OH+2O2  (Liang and Yung,2009/Saunder et al. 2006)
     |  rk23,  ! h+O3->OH+O2  (Saunder et al. 2006)
!
! OH Sinks:
     |  rk28,  !OH+O->H+O2       (Saunder et al. 2006) 
     |  r53,   !OH+O3->HO2+O2    (Liang and Yung,2009/Saunder et al. 2006)
     |  r105,  !2OH->H2O+O       (Liang and Yung,2009)
!
! O3 chem:
     |  k50,   !2o+o2->o3+o
     |  k51,   !o+2o2->o3+o2
     |  k52,   !o+o2+co->o3+co
     |  k53,   !no+o3->no2+o2  (Saunder et al. 2006)
     |  k54,   !cl+o3->clo+o2  (Atkinson et al. 2007)
     |  k56,   !clo+o3->oclo+o2
!
! NO Tracer chem:
     |  k45,   ! no+o+M (Sander et al. 2006/Krasnopolsky 2010)
     |  k46,   ! no+o3 (Sander et al. 2006/Krasnopolsky 2010)
     |  k47,   ! no+ho2  (Sander et al. 2006/Krasnopolsky 2010)
!
! Low Altitude Tracers (Yung and Demore, 1982)
     |  rk20,  ! O3+O = 2O2  (Saunder et al. 2006)
     |  r44,   ! CLO+O = CL+O2 (Atkinson et al. 2007)
!    |  r16,   ! HCL+O = OH+CL
     |  r15,   ! H2+O = OH+H
     |  r108,  ! CL2+O = CLO+CL
     |  r43,   ! CLO+CO = CL+CO2
     |  r99,   ! CL+CO+M = CLCO+M [cm6/sec] (Niovich et al. 1990 For N2 and Corrected for w/factor)
!
! SOx reactions:  Zhang et al. (2012). Icarus, 217. Table 2.
     | s114,   ! Cl + SO2 + M --> X
     | s258    ! O + SO2 + M --> SO3 + M
!
      contains
!-----------------------------------------------------------------------
      subroutine alloc_tdep
!
! Allocate temperature-dependent reaction rates for task subdomain:
! Called once per run from init_fields.
!
      use mpi_module,only: lon0,lon1,lat0,lat1
      integer :: istat
!
      allocate(v5(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' v5: stat=',i3)") istat
!
      allocate(v6(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' v6: stat=',i3)") istat
!
      allocate(v7(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' v7: stat=',i3)") istat
!
      allocate(v8(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' v8: stat=',i3)") istat
!
      allocate(v9(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' v9: stat=',i3)") istat
!
      allocate(rk2(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' rk2: stat=',i3)") istat
!
      allocate(a15(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' a15: stat=',i3)") istat
!
      allocate(a17(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' a17: stat=',i3)") istat
!
      allocate(a14(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' a14: stat=',i3)") istat
!
      allocate(a13(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' a13: stat=',i3)") istat
!
      allocate(r21(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' r21: stat=',i3)") istat
!
      allocate(r22(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' r22: stat=',i3)") istat
!
      allocate(r27(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' r27: stat=',i3)") istat
!
      allocate(r29(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' r29: stat=',i3)") istat
!
      allocate(rg1(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' rg1: stat=',i3)") istat
!
      allocate(rg2(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' rg2: stat=',i3)") istat
!
      allocate(rg3(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' rg3: stat=',i3)") istat
!
!     allocate(r2(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
!     if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
!    |  ' r2: stat=',i3)") istat
!
      allocate(r3(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' r3: stat=',i3)") istat
!
!     allocate(r5(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
!     if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
!    |  ' r5: stat=',i3)") istat
!
! LOW ALTITUDE TRACERS
      allocate(rk20(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' rk20: stat=',i3)") istat
!
      allocate(r44(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' r44: stat=',i3)") istat
!
!     allocate(r16(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
!     if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
!    |  ' r16: stat=',i3)") istat
!
      allocate(r15(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' r15: stat=',i3)") istat
!
      allocate(r108(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' r108: stat=',i3)") istat
!
      allocate(r43(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' r43: stat=',i3)") istat
!
      allocate(r99(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' r99: stat=',i3)") istat
!
! O3 CHEM
      allocate(k50(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' k50: stat=',i3)") istat
!
      allocate(k51(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' k51: stat=',i3)") istat
!
      allocate(k52(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' k52: stat=',i3)") istat
!
      allocate(k53(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' k53: stat=',i3)") istat
!
      allocate(k54(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' k54: stat=',i3)") istat
!
      allocate(k56(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' k56: stat=',i3)") istat
!
      allocate(k45(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' k45: stat=',i3)") istat
!
      allocate(k46(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' k46: stat=',i3)") istat
!
      allocate(k47(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' k47: stat=',i3)") istat
!
! OH CHEM
      allocate(r49(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' r49: stat=',i3)") istat
!
      allocate(r41b(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' r41b: stat=',i3)") istat
!
      allocate(r66(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' r66: stat=',i3)") istat
!
      allocate(r104(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' r104: stat=',i3)") istat
!
      allocate(r54(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' r54: stat=',i3)") istat
!
      allocate(rk23(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' rk23: stat=',i3)") istat
!
      allocate(rk28(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' rk28: stat=',i3)") istat
!
      allocate(r53(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' r53: stat=',i3)") istat
!
      allocate(r105(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' r105: stat=',i3)") istat
!
      allocate(fs(lon0:lon1,nlevp1,2,0:2,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' fs: stat=',i3)") istat
!
! SOX CHEM
      allocate(s114(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' s114: stat=',i3)") istat
!
      allocate(s258(nlevp1,lon0:lon1,lat0:lat1),stat=istat)
      if (istat /= 0) write(6,"('>>> alloc_tdep: error allocating',
     |  ' s258: stat=',i3)") istat

      end subroutine alloc_tdep
!-----------------------------------------------------------------------
! 11/2/06 btf: For now, assume tn==te==ti, so pass only tn.
!              When emperical te,ti are available, add them to
!              arg list as above.
! 11/30/06 swb: Pass te and ti from settei
!      
      subroutine chemrates_tdep(tn,te,ti,lev0,lev1,lon0,lon1,
     |  lat)
!
! Calculate temperature-dependent reaction rates (called at each latitude)
!
      use input_module,only: f107  ! 10.7 cm flux (from input and/or gpi)
      use init_module,only: sfeps  ! flux variation from orbital excentricity
      use cons_module,only: check_exp
      use addfld_module,only: addfld
!
! Args:
      integer,intent(in) ::
     |  lev0,lev1,           ! first and last level indices, this task
     |  lon0,lon1,           ! first and last longitude indices, this task
     |  lat                  ! latitude index
      real,dimension(lev0:lev1,lon0-2:lon1+2),intent(in) ::
     |  tn,     ! neutral temperature (deg K)
     |  te,     ! electron temperature (deg K)
     |  ti      ! ion temperature (deg K)
!
! Local:
      integer :: k,i
!     real,dimension(lev0:lev1,lon0-2:lon1+2) :: te,ti ! temporary locals
!
! expo() (util.F) is used only if check_exp is true. This will avoid
! NaNS fpe, but will degrade performance. Check_exp is in cons.F.
      real,external :: expo
!
! Set te=ti=tn until te and ti can be passed in through arg list:
!     te = tn  ! whole-array
!     ti = tn  ! whole-array
! Get empirical Te and Ti from settei.F
!
      do i=lon0,lon1
        do k=lev0,lev1-1
!         write(6,"('chemrates_tdep: k=',i2,' i=',i2,' lat=',i2)")
!    |      k,i,lat
!
!***************************************************************
!     call addfld('TECHEM',' ',' ',te(:,lon0:lon1),
!    |  'lev',lev0,lev1,'lon',lon0,lon1,lat)
!     call addfld('TICHEM',' ',' ',ti(:,lon0:lon1),
!    |  'lev',lev0,lev1,'lon',lon0,lon1,lat)
!***************************************************************
          v5(k,i,lat) = 1.4e-12*exp(-470./tn(k,i))
          v6(k,i,lat) = 4.2e-12*exp(-470./tn(k,i))
          v7(k,i,lat) = 2.1e-11*exp(-470./tn(k,i))
          v8(k,i,lat) = 4.76e-11*exp(-470./tn(k,i))
          v9(k,i,lat) = 6.58e-11*exp(-470./tn(k,i))
!
          a15(k,i,lat) = 2.196e-7*(300./te(k,i))**0.39  ! N2P+e
          a17(k,i,lat) = 4.0e-7  *(300./te(k,i))**0.5   ! NOP+e
!         a17a(k,i,lat) = 4.0e-7  *(300./te(k,i))**0.5   ! NOP+e->N(4S)
!         a17b(k,i,lat) = 4.0e-7  *(300./te(k,i))**0.5   ! NOP+e->N(2D)
          a14(k,i,lat) = 3.5e-7  *(300./te(k,i))**0.5   ! CO2P+e
          a13(k,i,lat) = 1.95e-7 *(300./te(k,i))**0.7   ! O2P+e (FoxandSung,2001; MehrandBion
di,1969)
!
          r21(k,i,lat) = 9.00e-10*(300./tn(k,i))**0.23
          r22(k,i,lat) = 1.50e-10*(300./tn(k,i))**1.1
          r27(k,i,lat) = 1.33e-10*(300./tn(k,i))**0.44
          r29(k,i,lat) = 1.20e-12*(300./tn(k,i))**0.45
!
          rk2(k,i,lat) = 9.7e-12*exp(-185./tn(k,i))     ! N2D+O2
          rg1(k,i,lat) = 1.9e-17*(300./tn(k,i))**0.5*
     |                  (1.-0.57/tn(k,i)**0.5)         !N4S+O->NO*
!         rg1(k,i,lat) = (2.8*(300./tn(k,i))**0.5)*
!    |                  (1.0*exp(-17.))                 !N4S+O->NO* (Dalgarno, 1992)
!         rg2(k,i,lat) = 2.8e-32*(300./tn(k,i))**0.5    !O+N4S+CO2 (Gerard/Campbell+Thrush)
!         rg2(k,i,lat) = 1.9e-31*(tn(k,i))**0.5         !O+N4S+M   (Yung+DeMore/Stewart)
!         rg2(k,i,lat) = 1.1e-32*(300./tn(k,i))**0.5    !O+N4S+M   (Bougher(90)/Baulch(73))
          rg2(k,i,lat) = 1.83e-32*(298./tn(k,i))**0.5   !O+N4S+CO2 (Campbell and Thrush, 66)
          rg3(k,i,lat) = 2.5e-10*(tn(k,i)/300.)**0.5*
     |                  exp(-600./tn(k,i))              ! NO+N4S->N2+O (Gerard/Fox 1994)
!
!         r2(k,i,lat) = 8.6e-28/tn(k,i)**2.             ! O+O+CO2  (Yung & DeMore, 1999)
!         r2(k,i,lat) = 2.75e-32*(200./tn(k,i))**3.3    ! O+O+CO2  (Slanger,06; Pejakovic.07)
!         r2(k,i,lat) = 1.5e-27*(1./tn(k,i))**2.0       ! O+O+CO2  (Krasnopolsky,10; CampbellandGray, 1973)
!         r2(k,i,lat) = 1.2e-32*(300./tn(k,i))**2.0     ! O+O+CO2  (Krasnopolsky,95)
!         r2(k,i,lat) = 2.5*3.0e-33*(300./tn(k,i))**3.25 ! O+O+CO2  (Smith and Robertson)
          r3(k,i,lat) = 6.5e-33*exp(-2180./tn(k,i))     ! O+CO+CO2
!         r5(k,i,lat) = 5.0e-28/tn(k,i)**2.3            ! O+O2+CO2
!
! LOW ALTITUDE TRACERS
!         rk20(k,i,lat) = 1.5e-11*exp(-2218./tn(k,i))   ! O3+O = 2O2    (Yung & DeMore, 1982)
          rk20(k,i,lat) = 8.0e-12*exp(-2060./tn(k,i))   ! O3+O = 2O2    (Saunder et al. 2006)
!         r44(k,i,lat) = 7.5e-11*exp(-120./tn(k,i))     ! CLO+O = CL+O2 (Yung & DeMore, 1982)
          r44(k,i,lat) = 2.5e-11*exp(110./tn(k,i))      ! CLO+O = CL+O2 (Saunder et al. 2006)
!         r16(k,i,lat) = 1.1e-11*exp(-3370./tn(k,i))    ! *** SEE R66 ***O+HCL = OH+CL (Yung & DeMore, 1982)
!         r15(k,i,lat) = 1.6e-11*exp(-4570./tn(k,i))    ! *** SEE R104 *** O+H2 = OH+H   (Yung & DeMore, 1982)
          r108(k,i,lat) = 4.2e-12*exp(-1370./tn(k,i))   ! CL2+O = CLO+CL (Yung & DeMore, 1982)
          r43(k,i,lat) = 1.0e-12*exp(-3700./tn(k,i))    ! CLO+CO = CL+CO2 (Yung & DeMore, 1982)
!         r99(k,i,lat) = 1.3e-34*exp(1000./tn(k,i))     ! CL+CO+M = CLCO+M (Yung & DeMore, 1982)
          r99(k,i,lat) = 2.6e-34*exp(810./tn(k,i))      ! CL+CO+M = CLCO+M (Niovich et al. 1990 for N2 w/factor)
!
! O3 CHEM:(Chris Parkinson's chem code)
          k50(k,i,lat) = 5.9e-34*(300./tn(k,i))**2.4    !2o+o2->o3+o
          k51(k,i,lat) = 2.8e-12*(tn(k,i))              !o+2O2->o3+o2
          k52(k,i,lat) = 6.7e-34*(300./tn(k,i))**2.5    !o+o2+co->o3+co
          k53(k,i,lat) = 3.0e-12*exp(-1500./tn(k,i))    !no+o3->no2+o2
          k54(k,i,lat) = 2.8e-11*exp(-250./tn(k,i))     !cl+o3->clo+o2
          k56(k,i,lat) = 1.0e-12*exp(-4000./tn(k,i))    !clo+o3->oclo+o2
! NO Loss Chem:
          k45(k,i,lat) = 1.0e-27*(1.0/tn(k,i)**1.5)     ! no+o+m
          k46(k,i,lat) = 3.0e-12*exp(-1500./tn(k,i))    ! no+o3
          k47(k,i,lat) = 3.5e-12*exp(250./tn(k,i))      ! no+ho2
! OH CHEM:	  
!         r49(k,i,lat) = 2.9e-11*exp(200./tn(k,i))      ! HO2+O->OH+O2
          r49(k,i,lat) = 3.0e-11*exp(200./tn(k,i))      ! HO2+O->OH+O2
	  r41b(k,i,lat) = 6.3e-11*exp(-570./tn(k,i))    ! HO2+Cl->OH+ClO
	  r66(k,i,lat) = 1.0e-11*exp(-3300./tn(k,i))    ! HCl+O->OH+Cl
!         r104(k,i,lat) = 9.9e-33*(tn(k,i)**6.5)*exp(-1460./tn(k,i))  ! H2+O->OH+H
	  r104(k,i,lat) = 8.5e-20*(tn(k,i)**2.7)*exp(-3160./tn(k,i))  ! H2+O->OH+H
!         r54(k,i,lat) = 1.1e-14*exp(-500./tn(k,i))     ! HO2+O3->OH+2O2
	  r54(k,i,lat) = 1.0e-14*exp(-490./tn(k,i))     ! HO2+O3->OH+2O2
          rk23(k,i,lat) = 1.40e-10*exp(-470./tn(k,i))   ! H+O3->OH+O2
          rk28(k,i,lat) = 2.2e-11*exp(120./tn(k,i))     ! OH+O->H+O2
!         r53(k,i,lat) = 1.6e-12*exp(-940./tn(k,i))     ! OH+O3->HO2+O2
	  r53(k,i,lat) = 1.7e-12*exp(-940./tn(k,i))     ! OH+O3->HO2+O2
	  r105(k,i,lat) = 4.2e-12*exp(-240./tn(k,i))    ! 2OH->H2O+O
!
! SOX CHEM:
          s114(k,i,lat) = 1.30e-31*exp(940./tn(k,i))     ! Cl + SO2 + M
          s258(k,i,lat) = 1.32e-31*exp(-1000./tn(k,i))   ! o + SO2 + M --> SO3 + M
		  	
        enddo ! k=lev0,lev1-1
      enddo ! i=lon0,lon1

      end subroutine chemrates_tdep
      end module chemrates_module
