!
#define TRACEBACK write (gol,'("in ",a," (",a,", line",i5,")")') rname, __FILE__, __LINE__; call goErr
#define IF_NOTOK_RETURN(action) if (status/=0) then; TRACEBACK; action; return; end if
#define IF_ERROR_RETURN(action) if (status> 0) then; TRACEBACK; action; return; end if
!
#include "tm5.inc"
!
module reaction_data

  implicit none

  public

  integer, parameter :: nreac=76       !number of thermal reactions
  integer, parameter :: nreacw=4       !number of aqueous phase reactions
  integer, parameter :: nthigh=320
  integer, parameter :: ntlow=165
  integer, parameter :: ntemp=nthigh-ntlow
  integer, parameter :: nrat=nreac+36
  character(len=9), dimension(nreac),parameter :: ratnam=(/&
       'RNOO3    ','RHO2NO   ','RMO2NO   ','RNO2OH   ','ROHHNO3  ',&
       'RNO2O3   ','RNONO3   ','RNO2NO3  ','RN2O5    ','RHNO4OH  ',&
       'RNO2HO2  ','RHNO4M   ','RODM     ','RH2OOD   ','RO3HO2   ',&
       'RCOOH    ','RO3OH    ','RHPOH    ','RFRMOH   ','RCH4OH   ',&
       'ROHMPER  ','ROHROOH  ','RMO2HO2  ','RMO2MO2  ','RHO2OH   ',&
       'RHO2HO2  ','RN2O5AQ  ','RN2O5L   ','RH2OH    ','RC41     ',&
       'RC43     ','RC44     ','RC46     ','RC47     ','RC48     ',&
       'RC49     ','RC50     ','RC52     ','RC53     ','RC54     ',&
       'RC57     ','RC58     ','RC59     ','RC61     ','RC62     ',&
       'RC73     ','RC76     ','RC77     ','RC78     ','RC79     ',&
       'RC80     ','RC81     ','RC82     ','RC83     ','RC84     ',&
       'RC85     ','RCdmsoha ','RCdmsohb ','RCdmsno3 ','RCso2oh  ',&
       'RCnh3so4 ','RCnh3oh  ','RCnh2no  ','RCnh2no2 ','RCnh2ho2 ',&
       'RCnh2o2  ','RCnh2o3  ','DRN222   ','RCO3PO3  ','RCO3PO2  ',&
       'RXO2XO2N ','RXO2N    ','RN2O5AER ','RNO3_AER ','RHO2_AER ',&
       'RHO2_L   '/)
  character(len=8), dimension(nreacw),parameter :: rwnam = &
       (/'kso2o3  ','kso2hp  ','knh3so4 ','void    '/)
  !
  ! reaction rates
  !
  integer, parameter :: KNOO3=1
  integer, parameter :: KHO2NO=2
  integer, parameter :: KMO2NO=3
  integer, parameter :: KNO2OH=4
  integer, parameter :: KOHHNO3=5 
  integer, parameter :: KNO2O3=6
  integer, parameter :: KNONO3=7
  integer, parameter :: KNO2NO3=8
  integer, parameter :: KN2O5=9
  integer, parameter :: KHNO4OH=10 
  integer, parameter :: KNO2HO2=11
  integer, parameter :: KHNO4M=12
  integer, parameter :: KODM=13
  integer, parameter :: KH2OOD=14
  integer, parameter :: KO3HO2=15 
  integer, parameter :: KCOOH=16
  integer, parameter :: KO3OH=17
  integer, parameter :: KHPOH=18
  integer, parameter :: KFRMOH=19
  integer, parameter :: KCH4OH=20 
  integer, parameter :: KOHMPER=21
  integer, parameter :: KOHROOH=22
  integer, parameter :: KMO2HO2=23
  integer, parameter :: KMO2MO2=24 
  integer, parameter :: KHO2OH=25 
  integer, parameter :: KHO2HO2=26
  integer, parameter :: KN2O5AQ=27
  integer, parameter :: KN2O5L=28
  integer, parameter :: KH2OH=29 
  integer, parameter :: KC41=30
  integer, parameter :: KC43=31
  integer, parameter :: KC44=32
  integer, parameter :: KC46=33
  integer, parameter :: KC47=34 
  integer, parameter :: KC48=35 
  integer, parameter :: KC49=36
  integer, parameter :: KC50=37
  integer, parameter :: KC52=38
  integer, parameter :: KC53=39
  integer, parameter :: KC54=40
  integer, parameter :: KC57=41 
  integer, parameter :: KC58=42
  integer, parameter :: KC59=43
  integer, parameter :: KC61=44
  integer, parameter :: KC62=45
  integer, parameter :: KC73=46
  integer, parameter :: KC76=47 
  integer, parameter :: KC77=48
  integer, parameter :: KC78=49
  integer, parameter :: KC79=50
  integer, parameter :: KC80=51
  integer, parameter :: KC81=52
  integer, parameter :: KC82=53 
  integer, parameter :: KC83=54
  integer, parameter :: KC84=55
  integer, parameter :: KC85=56
  integer, parameter :: Kdmsoha=57
  integer, parameter :: Kdmsohb=58
  integer, parameter :: Kdmsno3=59
  integer, parameter :: Kso2oh=60
  integer, parameter :: Knh3so4=61
  integer, parameter :: Knh3oh=62
  integer, parameter :: Knh2no=63
  integer, parameter :: Knh2no2=64
  integer, parameter :: Knh2ho2=65
  integer, parameter :: Knh2o2=66
  integer, parameter :: Knh2o3=67
  integer, parameter :: krn222=68
  integer, parameter :: ko3po3=69
  integer, parameter :: ko3po2=70
  integer, parameter :: kxo2xo2n=71
  integer, parameter :: kxo2n=72
  integer, parameter :: kn2o5_aer=73
  integer, parameter :: kno3_aer=74
  integer, parameter :: kho2_aer=75
  integer, parameter :: kho2_l=76
  !
  ! additional parameters needed for 3-body and other reactions
  !
  integer, parameter :: KNO2OHA=nreac+1
  integer, parameter :: KNO2OHB=nreac+2
  integer, parameter :: KOHHNO3A=nreac+3
  integer, parameter :: KOHHNO3B=nreac+4
  integer, parameter :: KOHHNO3C=nreac+5
  integer, parameter :: KNO2NO3A=nreac+6   
  integer, parameter :: KNO2NO3B=nreac+7
  integer, parameter :: KNO2HO2A=nreac+8
  integer, parameter :: KNO2HO2B=nreac+9    
  integer, parameter :: KHO2HO2A=nreac+10
  integer, parameter :: KHO2HO2B=nreac+11
  integer, parameter :: KHO2HO2C=nreac+12
  integer, parameter :: KC47A=nreac+13
  integer, parameter :: KC47B=nreac+14
  integer, parameter :: KC48A=nreac+15
  integer, parameter :: KC48B=nreac+16  
  integer, parameter :: KC61A=nreac+17
  integer, parameter :: KC61B=nreac+18 
  integer, parameter :: kso2oha=nreac+19
  integer, parameter :: kso2ohb=nreac+20
  integer, parameter :: kdmsohc=nreac+21
  !JEW new parameters needed for the new CO + OH formulation  
  integer, parameter :: kcooha=nreac+22 
  integer, parameter :: kcoohb=nreac+23
  integer, parameter :: kcoohc=nreac+24
  integer, parameter :: kcoohd=nreac+25  
!JEW new parameters needed for the update to OH + organics  
  integer, parameter :: kohmcho=nreac+26 
  integer, parameter :: kohmch2cho=nreac+27
  
  integer, parameter  :: kno3mcho=nreac+28 
  integer, parameter  :: kno3mch2cho=nreac+29
! JEW ; OLE reactions now calcuated using MVK and MACR rates to
!       account for link of OLE to ISOP oxidation . For NO3
!       these are fed directly into to rr in chem_rates.F90     
  integer, parameter  :: kohmvk=nreac+30
  integer, parameter  :: kohole=nreac+31
  integer, parameter  :: kohmacr=nreac+32 
  
  integer, parameter  :: ko3mvk=nreac+33 
  integer, parameter  :: ko3ole=nreac+34
  integer, parameter  :: ko3macr=nreac+35 
  
  integer, parameter  :: kno3ole=nreac+36         

  integer, parameter :: kso2hp=2
  integer, parameter :: kso2o3=1

  ! rates_lut : for reaction rate look up table !WP!
  real,dimension(nrat,ntemp) :: rates_lut

  ! for N2O5 removal on aerosol parameterisation:
  ! nr_interval : number of interval for intergration over aerosol size 
  integer,parameter          :: nr_interval=13
  ! np_interval : number of interval for integration over pressure 
  integer,parameter          :: np_interval=11
  integer,parameter          :: ncomponent=2
  ! aerdens : density of aerosols(g/cm3) (water 1.0 )
  real,parameter             :: aerdens=1.8
  ! rra     : lookup table radius..
  real,dimension(nr_interval):: rra = &
       (/1.0,1.25,1.5,1.75,2.0,2.25,2.5,2.75,3.,4.,5.,10.,15./)
  ! hetrem  : heterogeneous removal coefficient [s-1]
  !           for 1 ppbv NH4HSO4 at given aerosol radius and pressure
  real,dimension(nr_interval,np_interval,ncomponent) :: hetrem


end module reaction_data
