photolysis_data.F90 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. !
  2. #include "tm5.inc"
  3. !
  4. MODULE PHOTOLYSIS_DATA
  5. use dims, only: nregions
  6. implicit none
  7. ! types used in photolysis...
  8. TYPE PHOT_DATA
  9. !
  10. ! o3klim_top
  11. ! vo3_surf : vertical column ozone at the surface (#/cm2)
  12. ! cloudfrac : maximum overlap cloud fraction (-)
  13. ! albedo : surface albedo (UV spectral region)
  14. ! vo3 : overhead ozone (#/cm2)
  15. ! ags_av : statistics: contains average albedo
  16. ! vo3s_av : statistics: contains average ozone column (#/cm2)
  17. ! cfr_av : statistics: average cloud fraction
  18. ! jo3_av : statistics: contains average jo3 (1/s)
  19. ! jno2_av : statistics: contains average jno2 (1/s)
  20. ! additional fields added to assess the upgrade to the photolysis
  21. ! jch2o_a_av : statistics: contains average jach2o(1/s)
  22. ! jch2o_b_av : statistics: contains average jbch2o(1/s)
  23. ! jmepe_av : statistics: contains average jch3ooh(1/s)
  24. ! jpan_av : statistics: contains average jpan(1/s)
  25. ! jorgn_av : statistics: contains average jorgn(1/s)
  26. ! jno3a_av : statistics: contains average jno3a(1/s)
  27. ! jno3b_av : statistics: contains average jno3b(1/s)
  28. ! nj_av, nvo3s_av, ncloud_av, nalb_av : couters for statistics
  29. !
  30. real, dimension(:), pointer :: o3klim_top
  31. real, dimension(:,:), pointer :: albedo
  32. ! real, dimension(:,:,:), pointer :: vo3
  33. real, dimension(:,:,:), pointer :: cloud_reff
  34. real, dimension(:,:,:), pointer :: sad_cld
  35. real, dimension(:,:,:), pointer :: sad_ice
  36. real, dimension(:,:,:), pointer :: sad_aer
  37. real, dimension(:,:,:), pointer :: sad_cld_av
  38. real, dimension(:,:,:), pointer :: sad_ice_av
  39. real, dimension(:,:,:), pointer :: sad_aer_av
  40. real, dimension(:,:,:), pointer :: cfr_av
  41. real, dimension(:,:,:), pointer :: lwp_av
  42. real, dimension(:,:,:), pointer :: reff_av
  43. real, dimension(:,:), pointer :: ags_av
  44. real, dimension(:,:), pointer :: sza_av
  45. integer, dimension(:,:), pointer :: aero_surface_clim
  46. ! J-values and their averages
  47. real, dimension(:,:,:), pointer :: jo3 , jo3_av
  48. real, dimension(:,:,:), pointer :: jno2 , jno2_av
  49. real, dimension(:,:,:), pointer :: jhno2 , jhno2_av
  50. real, dimension(:,:,:), pointer :: jch2oa, jch2oa_av
  51. real, dimension(:,:,:), pointer :: jch2ob, jch2ob_av
  52. ! averaged optical
  53. real, dimension(:,:,:), pointer :: pmcld_av
  54. real, dimension(:,:,:), pointer :: taus_cld_av
  55. real, dimension(:,:,:), pointer :: taua_cld_av
  56. real, dimension(:,:,:,:,:), pointer :: pmaer_av
  57. real, dimension(:,:,:,:,:), pointer :: taus_aer_av
  58. real, dimension(:,:,:,:,:), pointer :: taua_aer_av
  59. ! counters for averages
  60. real :: nj_av, nvo3s_av, nalb_av, ncloud_av, naer_av, nsad_av
  61. ! ONLINE PARAMETERS
  62. ! ------------------
  63. ! optical depth aerosol
  64. real, dimension(:,:,:,:,:), pointer :: taus_aer, taua_aer
  65. ! optical depth clouds and aerosols
  66. real, dimension(:,:,:), pointer :: taua_cld, taus_cld
  67. ! scattering aerosol
  68. real, dimension(:,:,:,:,:), pointer :: pmaer
  69. ! scattering cloud
  70. real, dimension(:,:,:), pointer :: pmcld
  71. ! column densities
  72. real, dimension(:,:,:), pointer :: v2, v3
  73. ! scaling ratio limits
  74. real, dimension(:,:), pointer :: v3_surf
  75. ! band limits for low direct fluxes
  76. real, dimension(:,:), pointer :: band1_limit, band3_limit
  77. ! temp dependent cross-sections ; the o2 has been replaced by a 1-D array
  78. ! each individual look up array has been tuned to reduce the overhead (JEW, AUG 2008)
  79. ! the valuesa are now ascribed in the main loop calculating the photolysis rates
  80. real, dimension(:,:,:,:), pointer :: qy_ch3cocho
  81. real, dimension(:,:,:,:), pointer :: qy_c2o3
  82. END TYPE PHOT_DATA
  83. type(phot_data),dimension(nregions),target :: phot_dat
  84. !
  85. ! Three channels introduced for ALD2 (JEW 24.10.14)
  86. ! HONO added (JEW 08.01.2015)
  87. !
  88. integer,parameter :: nj = 25
  89. integer,parameter :: jo3d = 1
  90. integer,parameter :: jno2 = 2
  91. integer,parameter :: jh2o2 = 3
  92. integer,parameter :: jhno3 = 4
  93. integer,parameter :: jhno4 = 5
  94. integer,parameter :: jn2o5a = 6
  95. integer,parameter :: jn2o5b = 7
  96. integer,parameter :: jach2o = 8
  97. integer,parameter :: jbch2o = 9
  98. integer,parameter :: jmepe = 10
  99. integer,parameter :: jano3 = 11
  100. integer,parameter :: jbno3 = 12
  101. integer,parameter :: jpana = 13
  102. integer,parameter :: jpanb = 14
  103. integer,parameter :: jorgn = 15
  104. integer,parameter :: jald2 = 16
  105. integer,parameter :: jmgly = 17
  106. integer,parameter :: jrooh = 18
  107. integer,parameter :: jo2 = 19
  108. integer,parameter :: jispd = 20
  109. integer,parameter :: ja_acet = 21
  110. integer,parameter :: jb_acet = 22
  111. integer,parameter :: jhono = 23
  112. integer,parameter :: jmo2no2a = 24
  113. integer,parameter :: jmo2no2b = 25
  114. character(len=9), dimension(nj), parameter :: jnam = (/ &
  115. 'jo3d ','jno2 ','jh2o2 ','jhno3 ','jhno4 ', &
  116. 'jn2o5a ','jn2o5b ','jach2o ','jbch2o ','jmepe ', &
  117. 'jano3 ','jbno3 ','jpana ','jpanb ','jorgn ',&
  118. 'jald2 ','jmgly ','jrooh ','jo2 ','jispd ', &
  119. 'ja_acet ','jb_acet ','jhono ','jmo2no2a ','jmo2no2b '/)
  120. integer, parameter :: maxwav = 122 ! maximal number of wave length intervals
  121. integer, parameter :: maxw = 120 ! maximal number of wave length intervals for calculations
  122. ! purely o2 and o3 absorbing atmosphere
  123. integer, parameter :: nmom = 16 ! number of moments of phase functions
  124. integer, parameter :: nbands_trop = 7 ! number of wave length intervals (bands)
  125. integer, parameter :: ngrid = 2 ! number of spectral grid types: normal and high angle
  126. integer :: nwdep ! number of wave length intervals (bands)
  127. ! o2 cross section in band 1
  128. real,dimension(17) :: cross_o2
  129. data cross_o2 /7.448E-24, 7.322E-24, 7.002E-24, 6.608E-24, 6.118E-24, 5.736E-24, 5.302E-24,&
  130. 4.741E-24, 4.261E-24, 3.788E-24, 3.213E-24, 2.69E-24, 2.218E-24, 1.793E-24,&
  131. 1.384E-24, 1.054E-24, 6.318E-25/
  132. ! rayleigh scattering cross section [cm^2/part.]
  133. real,dimension(maxwav) :: cs_ray
  134. !cross sections [cm^2/part.]
  135. real,dimension(maxwav,nj) :: cs
  136. real,dimension(maxwav,8,4) :: sca,abs_eff,g,ext
  137. ! effective scattering cross section [cm^2/p]
  138. ! effective absorption cross section [cm^2/p]
  139. ! effective asymmetry factor,extinction coefficient [1/km]
  140. ! different aerosol types:
  141. ! 1 = rural aerosol
  142. ! 2 = maritime aerosol
  143. ! 3 = urban aerosol
  144. ! 4 = free troposphere aerosol
  145. real,dimension(4) :: pn_ref = (/ 15000., 4000., 20000., 5000./)
  146. ! The wavelengths < 204 nm are not yet considered for the tropospheric version
  147. ! ------------------------------------------------------------------------
  148. ! O2 absorption features:
  149. ! ------------------------------------------------------------------------
  150. ! ( 121.4 - 121.9 nm Lyman-Alpha line : removed in trop version)
  151. ! ( 100 - 175 nm Schumann-Runge continuum : removed in trop version)
  152. ! ( 175 - 204 nm Schumann-Runge bands : removed in trop version)
  153. ! 204 - 241 nm Herzberg continuum : include scattering effects
  154. !
  155. ! ------------------------------------------------------------------------
  156. ! O3 absorption features:
  157. ! ------------------------------------------------------------------------
  158. ! 204 - 240 nm (no name) : include scattering effects
  159. ! 240 - 310 nm Hartley band : include scattering effects
  160. ! 310 - 400 nm Huggins band : include scattering effects
  161. ! 400 - 850 nm Chappuis bands : include scattering effects
  162. !
  163. ! ------------------------------------------------------------------------
  164. ! Scattering bands: The selection of the bands and their effective
  165. ! wavelengths are inspired on Landgraf and Crutzen
  166. ! ------------------------------------------------------------------------
  167. ! band spectral range eff. wavelength index spectral grid
  168. ! ------------------------------------------------------------------------
  169. ! 1 204.082 - 240.964 nm 205.128 1
  170. ! 2 240.964 - 289.855 nm 287.770 29
  171. ! 3 289.855 - 305.500 nm 303.000 33
  172. ! 4 305.500 - 313.500 nm 309.000 39
  173. ! 5 313.500 - 337.500 nm 320.000 46
  174. ! 6 337.500 - 422.500 nm 370.000 56
  175. ! 7 422.500 - 735.000 nm 580.000 98
  176. !
  177. ! JEW : band 7 has been optimized and truncated down to end of NO3 spectra
  178. ! JEW : Removal of bins < 204nm and >640nm reduces the main spectral array by ~25%
  179. ! JEW : Band limits for band 7 have subsequently changed
  180. real, dimension(:), allocatable :: photo_wavelengths
  181. integer, dimension(nbands_trop) :: wav_grid , wav_gridA
  182. integer,dimension(nbands_trop) :: &
  183. lini = (/1, 18, 31, 40, 48, 61, 78 /), &
  184. lfin = (/17, 30, 39, 47, 60, 77, 122/), &
  185. lmid = (/2, 30, 36, 43, 54, 67, 109/)
  186. integer,dimension(nbands_trop) :: &
  187. lini_gridA = (/1, 18, 31, 40, 48, 63, 90/), &
  188. lfin_gridA = (/17, 30, 39, 47, 62, 89, 122/), &
  189. lmid_gridA = (/4, 30, 36, 45, 58, 70, 115/)
  190. ! Maximum zenith angle for photolysis calculations. Between SZA_LIMIT and SZA_WIDELIMIT,
  191. ! photorates are linearly interpolated.
  192. real, parameter :: sza_limit = 85. ! max angle for calculations
  193. real, parameter :: sza_widelimit = 94.
  194. real,dimension(maxwav) :: wave ! wavelength in the middle of the interval
  195. real,dimension(maxwav+54) :: wave_full ! full 8 band grid
  196. real,dimension(maxwav) :: dwave ! width of the wavelength intervals [cm]
  197. real,dimension(maxwav+54) :: dwave_full
  198. ! extra-terrestrial flux per wave length bin
  199. real,dimension(maxwav) :: flux
  200. end module photolysis_data