reaction_data.F90 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. !
  2. #define TRACEBACK write (gol,'("in ",a," (",a,", line",i5,")")') rname, __FILE__, __LINE__; call goErr
  3. #define IF_NOTOK_RETURN(action) if (status/=0) then; TRACEBACK; action; return; end if
  4. #define IF_ERROR_RETURN(action) if (status> 0) then; TRACEBACK; action; return; end if
  5. !
  6. #include "tm5.inc"
  7. !
  8. module reaction_data
  9. implicit none
  10. public
  11. integer, parameter :: nreac=76 !number of thermal reactions
  12. integer, parameter :: nreacw=4 !number of aqueous phase reactions
  13. integer, parameter :: nthigh=320
  14. integer, parameter :: ntlow=165
  15. integer, parameter :: ntemp=nthigh-ntlow
  16. integer, parameter :: nrat=nreac+36
  17. character(len=9), dimension(nreac),parameter :: ratnam=(/&
  18. 'RNOO3 ','RHO2NO ','RMO2NO ','RNO2OH ','ROHHNO3 ',&
  19. 'RNO2O3 ','RNONO3 ','RNO2NO3 ','RN2O5 ','RHNO4OH ',&
  20. 'RNO2HO2 ','RHNO4M ','RODM ','RH2OOD ','RO3HO2 ',&
  21. 'RCOOH ','RO3OH ','RHPOH ','RFRMOH ','RCH4OH ',&
  22. 'ROHMPER ','ROHROOH ','RMO2HO2 ','RMO2MO2 ','RHO2OH ',&
  23. 'RHO2HO2 ','RN2O5AQ ','RN2O5L ','RH2OH ','RC41 ',&
  24. 'RC43 ','RC44 ','RC46 ','RC47 ','RC48 ',&
  25. 'RC49 ','RC50 ','RC52 ','RC53 ','RC54 ',&
  26. 'RC57 ','RC58 ','RC59 ','RC61 ','RC62 ',&
  27. 'RC73 ','RC76 ','RC77 ','RC78 ','RC79 ',&
  28. 'RC80 ','RC81 ','RC82 ','RC83 ','RC84 ',&
  29. 'RC85 ','RCdmsoha ','RCdmsohb ','RCdmsno3 ','RCso2oh ',&
  30. 'RCnh3so4 ','RCnh3oh ','RCnh2no ','RCnh2no2 ','RCnh2ho2 ',&
  31. 'RCnh2o2 ','RCnh2o3 ','DRN222 ','RCO3PO3 ','RCO3PO2 ',&
  32. 'RXO2XO2N ','RXO2N ','RN2O5AER ','RNO3_AER ','RHO2_AER ',&
  33. 'RHO2_L '/)
  34. character(len=8), dimension(nreacw),parameter :: rwnam = &
  35. (/'kso2o3 ','kso2hp ','knh3so4 ','void '/)
  36. !
  37. ! reaction rates
  38. !
  39. integer, parameter :: KNOO3=1
  40. integer, parameter :: KHO2NO=2
  41. integer, parameter :: KMO2NO=3
  42. integer, parameter :: KNO2OH=4
  43. integer, parameter :: KOHHNO3=5
  44. integer, parameter :: KNO2O3=6
  45. integer, parameter :: KNONO3=7
  46. integer, parameter :: KNO2NO3=8
  47. integer, parameter :: KN2O5=9
  48. integer, parameter :: KHNO4OH=10
  49. integer, parameter :: KNO2HO2=11
  50. integer, parameter :: KHNO4M=12
  51. integer, parameter :: KODM=13
  52. integer, parameter :: KH2OOD=14
  53. integer, parameter :: KO3HO2=15
  54. integer, parameter :: KCOOH=16
  55. integer, parameter :: KO3OH=17
  56. integer, parameter :: KHPOH=18
  57. integer, parameter :: KFRMOH=19
  58. integer, parameter :: KCH4OH=20
  59. integer, parameter :: KOHMPER=21
  60. integer, parameter :: KOHROOH=22
  61. integer, parameter :: KMO2HO2=23
  62. integer, parameter :: KMO2MO2=24
  63. integer, parameter :: KHO2OH=25
  64. integer, parameter :: KHO2HO2=26
  65. integer, parameter :: KN2O5AQ=27
  66. integer, parameter :: KN2O5L=28
  67. integer, parameter :: KH2OH=29
  68. integer, parameter :: KC41=30
  69. integer, parameter :: KC43=31
  70. integer, parameter :: KC44=32
  71. integer, parameter :: KC46=33
  72. integer, parameter :: KC47=34
  73. integer, parameter :: KC48=35
  74. integer, parameter :: KC49=36
  75. integer, parameter :: KC50=37
  76. integer, parameter :: KC52=38
  77. integer, parameter :: KC53=39
  78. integer, parameter :: KC54=40
  79. integer, parameter :: KC57=41
  80. integer, parameter :: KC58=42
  81. integer, parameter :: KC59=43
  82. integer, parameter :: KC61=44
  83. integer, parameter :: KC62=45
  84. integer, parameter :: KC73=46
  85. integer, parameter :: KC76=47
  86. integer, parameter :: KC77=48
  87. integer, parameter :: KC78=49
  88. integer, parameter :: KC79=50
  89. integer, parameter :: KC80=51
  90. integer, parameter :: KC81=52
  91. integer, parameter :: KC82=53
  92. integer, parameter :: KC83=54
  93. integer, parameter :: KC84=55
  94. integer, parameter :: KC85=56
  95. integer, parameter :: Kdmsoha=57
  96. integer, parameter :: Kdmsohb=58
  97. integer, parameter :: Kdmsno3=59
  98. integer, parameter :: Kso2oh=60
  99. integer, parameter :: Knh3so4=61
  100. integer, parameter :: Knh3oh=62
  101. integer, parameter :: Knh2no=63
  102. integer, parameter :: Knh2no2=64
  103. integer, parameter :: Knh2ho2=65
  104. integer, parameter :: Knh2o2=66
  105. integer, parameter :: Knh2o3=67
  106. integer, parameter :: krn222=68
  107. integer, parameter :: ko3po3=69
  108. integer, parameter :: ko3po2=70
  109. integer, parameter :: kxo2xo2n=71
  110. integer, parameter :: kxo2n=72
  111. integer, parameter :: kn2o5_aer=73
  112. integer, parameter :: kno3_aer=74
  113. integer, parameter :: kho2_aer=75
  114. integer, parameter :: kho2_l=76
  115. !
  116. ! additional parameters needed for 3-body and other reactions
  117. !
  118. integer, parameter :: KNO2OHA=nreac+1
  119. integer, parameter :: KNO2OHB=nreac+2
  120. integer, parameter :: KOHHNO3A=nreac+3
  121. integer, parameter :: KOHHNO3B=nreac+4
  122. integer, parameter :: KOHHNO3C=nreac+5
  123. integer, parameter :: KNO2NO3A=nreac+6
  124. integer, parameter :: KNO2NO3B=nreac+7
  125. integer, parameter :: KNO2HO2A=nreac+8
  126. integer, parameter :: KNO2HO2B=nreac+9
  127. integer, parameter :: KHO2HO2A=nreac+10
  128. integer, parameter :: KHO2HO2B=nreac+11
  129. integer, parameter :: KHO2HO2C=nreac+12
  130. integer, parameter :: KC47A=nreac+13
  131. integer, parameter :: KC47B=nreac+14
  132. integer, parameter :: KC48A=nreac+15
  133. integer, parameter :: KC48B=nreac+16
  134. integer, parameter :: KC61A=nreac+17
  135. integer, parameter :: KC61B=nreac+18
  136. integer, parameter :: kso2oha=nreac+19
  137. integer, parameter :: kso2ohb=nreac+20
  138. integer, parameter :: kdmsohc=nreac+21
  139. !JEW new parameters needed for the new CO + OH formulation
  140. integer, parameter :: kcooha=nreac+22
  141. integer, parameter :: kcoohb=nreac+23
  142. integer, parameter :: kcoohc=nreac+24
  143. integer, parameter :: kcoohd=nreac+25
  144. !JEW new parameters needed for the update to OH + organics
  145. integer, parameter :: kohmcho=nreac+26
  146. integer, parameter :: kohmch2cho=nreac+27
  147. integer, parameter :: kno3mcho=nreac+28
  148. integer, parameter :: kno3mch2cho=nreac+29
  149. ! JEW ; OLE reactions now calcuated using MVK and MACR rates to
  150. ! account for link of OLE to ISOP oxidation . For NO3
  151. ! these are fed directly into to rr in chem_rates.F90
  152. integer, parameter :: kohmvk=nreac+30
  153. integer, parameter :: kohole=nreac+31
  154. integer, parameter :: kohmacr=nreac+32
  155. integer, parameter :: ko3mvk=nreac+33
  156. integer, parameter :: ko3ole=nreac+34
  157. integer, parameter :: ko3macr=nreac+35
  158. integer, parameter :: kno3ole=nreac+36
  159. integer, parameter :: kso2hp=2
  160. integer, parameter :: kso2o3=1
  161. ! rates_lut : for reaction rate look up table !WP!
  162. real,dimension(nrat,ntemp) :: rates_lut
  163. ! for N2O5 removal on aerosol parameterisation:
  164. ! nr_interval : number of interval for intergration over aerosol size
  165. integer,parameter :: nr_interval=13
  166. ! np_interval : number of interval for integration over pressure
  167. integer,parameter :: np_interval=11
  168. integer,parameter :: ncomponent=2
  169. ! aerdens : density of aerosols(g/cm3) (water 1.0 )
  170. real,parameter :: aerdens=1.8
  171. ! rra : lookup table radius..
  172. real,dimension(nr_interval):: rra = &
  173. (/1.0,1.25,1.5,1.75,2.0,2.25,2.5,2.75,3.,4.,5.,10.,15./)
  174. ! hetrem : heterogeneous removal coefficient [s-1]
  175. ! for 1 ppbv NH4HSO4 at given aerosol radius and pressure
  176. real,dimension(nr_interval,np_interval,ncomponent) :: hetrem
  177. end module reaction_data