1 !=============================================================================*
2 ! This file contains the following subroutines, related to reading/loading
3 ! the product (cross section) x (quantum yield) for photo-reactions:
5 ! r101 through r148, skipped r116,r117, added pxCH2O
6 !=============================================================================*
14 private :: fo3qy2, qyacet
16 logical, private :: initialize = .true.
17 integer, parameter :: max_files = 5
19 integer :: npht, npht_tab
23 integer :: nskip(max_files)
24 integer :: nread(max_files)
25 real :: xfac(max_files)
26 character(len=132) :: filename(max_files)
34 real, allocatable :: sq(:,:)
35 character(len=50) :: label
36 character(len=50) :: wrf_label
37 type(xs_qy_tab), pointer :: next
38 type(xs_qy_tab), pointer :: last
39 type(file_specs) :: filespec
42 type(xs_qy_tab), allocatable, target :: xsqy_tab(:)
43 type(xs_qy_tab), pointer :: xsqy_tab_head
44 type(xs_qy_tab), pointer :: xsqy_tab_tail
46 !=====================================================================
47 ! the following is fortran2003 compliant code
48 !=====================================================================
50 procedure(xsqy), nopass, pointer :: xsqy_sub
54 SUBROUTINE xsqy(nw,wl,wc,nz,tlev,airden,j)
58 INTEGER, intent(in) :: nw
59 INTEGER, intent(in) :: nz
60 REAL, intent(in) :: wl(kw), wc(kw)
61 REAL, intent(in) :: tlev(kz)
62 REAL, intent(in) :: airden(kz)
64 INTEGER, intent(inout) :: j
68 type(xsqy_subs), allocatable :: the_subs(:)
72 SUBROUTINE no_z_dep(nw,wl,wc,nz,tlev,airden,j)
73 !-----------------------------------------------------------------------------*
75 !-----------------------------------------------------------------------------*
81 INTEGER, intent(in) :: nw
82 INTEGER, intent(in) :: nz
83 INTEGER, intent(inout) :: j
84 REAL, intent(in) :: wl(kw), wc(kw)
85 REAL, intent(in) :: airden(kz)
86 REAL, intent(in) :: tlev(kz)
88 integer, PARAMETER :: kdata=500
99 call check_alloc( ndx=j, nz=nw-1, nw=1 )
100 if( xsqy_tab(j)%qyld == 1. ) then
101 !*** quantum yield assumed to be unity
102 xsqy_tab(j)%sq(1:nw-1,1) = yg(1:nw-1)
104 xsqy_tab(j)%sq(1:nw-1,1) = xsqy_tab(j)%qyld * yg(1:nw-1)
114 character(len=132) :: filename
116 do fileno = 1,xsqy_tab(j)%filespec%nfiles
117 filename = trim( xsqy_tab(j)%filespec%filename(fileno) )
118 n = xsqy_tab(j)%filespec%nread(fileno)
119 if( xsqy_tab(j)%filespec%nskip(fileno) >= 0 ) then
120 CALL base_read( filespec=trim(filename), &
121 skip_cnt=xsqy_tab(j)%filespec%nskip(fileno), &
122 rd_cnt =n,x=x1,y=y1 )
124 CALL base_read( filespec=trim(filename),rd_cnt=n,x=x1,y=y1 )
126 y1(1:n) = y1(1:n) * xsqy_tab(j)%filespec%xfac(fileno)
128 CALL add_pnts_inter2(x1,y1,yg,kdata,n, &
129 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
132 END SUBROUTINE readit
134 END SUBROUTINE no_z_dep
136 LOGICAL FUNCTION get_initialization()
138 get_initialization = initialize
140 END FUNCTION get_initialization
142 SUBROUTINE set_initialization( status )
144 LOGICAL, intent(in) :: status
148 END SUBROUTINE set_initialization
150 SUBROUTINE rxn_init( nw, wl )
151 !---------------------------------------------
153 !---------------------------------------------
155 use module_xsections, only : rdxs_init
157 integer, intent(in) :: nw
158 real, intent(in) :: wl(nw)
160 integer :: astat, m, n, debug_level
161 character(len=256) :: emsg
163 call set_initialization( status=.true. )
164 call get_wrf_debug_level( debug_level )
166 if( .not. allocated( xsqy_tab ) ) then
167 allocate( xsqy_tab(kj),stat=astat )
168 if( astat /= 0 ) then
169 write(emsg,'(''rxn_init: failed to allocate xsqy_tab; error = '',i4)') astat
170 call wrf_error_fatal( trim(emsg) )
173 if( .not. allocated( the_subs ) ) then
174 allocate( the_subs(kj),stat=astat )
175 if( astat /= 0 ) then
176 write(emsg,'(''rxn_init: failed to allocate xsqy_tab subs; error = '',i4)') astat
177 call wrf_error_fatal( trim(emsg) )
181 nullify( xsqy_tab_head )
182 nullify( xsqy_tab_tail )
184 xsqy_tab(1:kj)%tpflag = 0
185 xsqy_tab(1:kj)%channel = 1
186 xsqy_tab(1:kj)%label = ' '
187 xsqy_tab(1:kj)%qyld = 1.
188 xsqy_tab(1:kj)%filespec%nfiles = 1
190 xsqy_tab(1:kj)%filespec%nskip(m) = 0
191 xsqy_tab(1:kj)%filespec%nread(m) = 0
192 xsqy_tab(1:kj)%filespec%xfac(m) = 1.e-20
193 xsqy_tab(1:kj)%filespec%filename(m) = ' '
196 nullify( xsqy_tab(m)%next )
197 nullify( xsqy_tab(m)%last )
198 the_subs(m)%xsqy_sub => null()
202 call setup_sub_calls( the_subs,npht_tab )
204 IF ( 100 .LE. debug_level ) THEN
208 call rdxs_init( nw, wl )
210 END SUBROUTINE rxn_init
212 subroutine setup_sub_calls( subr, m )
214 integer, intent(inout) :: m
215 type(xsqy_subs), intent(inout) :: subr(:)
217 xsqy_tab(m)%label = 'O3 -> O2 + O(1D)'
218 xsqy_tab(m+1)%label = 'O3 -> O2 + O(3P)'
219 xsqy_tab(m)%wrf_label = 'j_o1d'
220 xsqy_tab(m+1)%wrf_label = 'j_o3p'
221 xsqy_tab(m:m+1)%jndx = (/ m,m+1 /)
222 xsqy_tab(m+1)%channel = 2
223 xsqy_tab(m:m+1)%tpflag = 1
224 subr(m)%xsqy_sub => r01
225 subr(m+1)%xsqy_sub => r01
228 xsqy_tab(m)%label = 'NO2 -> NO + O(3P)'
229 xsqy_tab(m)%wrf_label = 'j_no2'
231 xsqy_tab(m)%tpflag = 1
232 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/YLD/NO2_jpl11.yld'
233 xsqy_tab(m)%filespec%nskip(1) = 2
234 xsqy_tab(m)%filespec%nread(1) = 25
235 subr(m)%xsqy_sub => r02
238 xsqy_tab(m)%label = 'NO3 -> NO + O2'
239 xsqy_tab(m+1)%label = 'NO3 -> NO2 + O(3P)'
240 xsqy_tab(m)%wrf_label = 'j_no3_a'
241 xsqy_tab(m+1)%wrf_label = 'j_no3_b'
243 xsqy_tab(m+1)%channel = 2
244 xsqy_tab(m:m+1)%tpflag = 1
245 xsqy_tab(m)%filespec%nfiles = 2
246 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/NO3_jpl11.abs'
247 xsqy_tab(m)%filespec%nskip(1) = 6
248 xsqy_tab(m)%filespec%nread(1) = 289
249 xsqy_tab(m)%filespec%filename(2) = 'DATAJ1/YLD/NO3_jpl2011.qy'
250 xsqy_tab(m)%filespec%nskip(2) = 5
251 xsqy_tab(m)%filespec%nread(2) = 56
252 xsqy_tab(m)%filespec%xfac(2) = 1.e-3
253 subr(m)%xsqy_sub => r03
254 subr(m+1)%xsqy_sub => r03
257 xsqy_tab(m)%label = 'N2O5 -> NO3 + NO + O(3P)'
258 xsqy_tab(m+1)%label = 'N2O5 -> NO3 + NO2'
259 xsqy_tab(m)%wrf_label = 'j_n2o5_a'
260 xsqy_tab(m+1)%wrf_label = 'j_n2o5_b'
262 xsqy_tab(m+1)%channel = 2
263 xsqy_tab(m:m+1)%tpflag = 1
264 xsqy_tab(m)%filespec%nfiles = 2
265 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/N2O5_jpl11.abs'
266 xsqy_tab(m)%filespec%filename(2) = 'DATAJ1/ABS/N2O5_jpl11.abs'
267 xsqy_tab(m)%filespec%nskip(1:2) = (/ 4,111 /)
268 xsqy_tab(m)%filespec%nread(1:2) = (/ 103,8 /)
269 subr(m)%xsqy_sub => r04
270 subr(m+1)%xsqy_sub => r04
273 xsqy_tab(m)%label = 'HNO2 -> OH + NO'
274 xsqy_tab(m)%wrf_label = 'j_hno2'
276 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/HONO_jpl11.abs'
277 xsqy_tab(m)%filespec%nskip(1) = 3
278 xsqy_tab(m)%filespec%nread(1) = 192
279 subr(m)%xsqy_sub => no_z_dep
282 xsqy_tab(m)%label = 'HNO3 -> OH + NO2'
283 xsqy_tab(m)%wrf_label = 'j_hno3'
285 xsqy_tab(m)%tpflag = 1
286 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/HNO3_burk.abs'
287 xsqy_tab(m)%filespec%nskip(1) = 6
288 xsqy_tab(m)%filespec%nread(1) = 83
289 subr(m)%xsqy_sub => r06
292 xsqy_tab(m)%label = 'HNO4 -> HO2 + NO2'
293 xsqy_tab(m)%wrf_label = 'j_hno4'
295 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/HNO4_jpl11.abs'
296 xsqy_tab(m)%filespec%nskip(1) = 2
297 xsqy_tab(m)%filespec%nread(1) = 54
298 subr(m)%xsqy_sub => no_z_dep
301 xsqy_tab(m)%label = 'H2O2 -> 2 OH'
302 xsqy_tab(m)%wrf_label = 'j_h2o2'
304 xsqy_tab(m)%tpflag = 1
305 xsqy_tab(m)%filespec%nfiles = 2
306 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/H2O2_jpl94.abs'
307 xsqy_tab(m)%filespec%filename(2) = 'DATAJ1/ABS/H2O2_Kahan.abs'
308 xsqy_tab(m)%filespec%nskip(1:2) = (/ -1,0 /)
309 xsqy_tab(m)%filespec%nread(2) = 494
310 subr(m)%xsqy_sub => r08
313 xsqy_tab(m)%label = 'CHBr3 -> Products'
314 xsqy_tab(m)%wrf_label = 'j_chbr3'
316 xsqy_tab(m)%tpflag = 1
317 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/CHBr3.jpl97'
318 xsqy_tab(m)%filespec%nskip(1) = 6
319 xsqy_tab(m)%filespec%nread(1) = 87
320 subr(m)%xsqy_sub => r09
323 xsqy_tab(m)%label = 'CH3CHO -> CH3 + HCO'
324 xsqy_tab(m+1)%label = 'CH3CHO -> CH4 + CO'
325 xsqy_tab(m+2)%label = 'CH3CHO -> CH3CO + H'
326 xsqy_tab(m)%wrf_label = 'j_ch3cho_a'
327 xsqy_tab(m+1)%wrf_label = 'j_ch3cho_b'
328 xsqy_tab(m+2)%wrf_label = 'j_ch3cho_c'
330 xsqy_tab(m+1:m+2)%channel = (/ 2,3 /)
331 xsqy_tab(m:m+2)%tpflag = (/ 2,0,0 /)
332 xsqy_tab(m)%filespec%nfiles = 2
333 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/CH3CHO/CH3CHO_jpl11.abs'
334 xsqy_tab(m)%filespec%filename(2) = 'DATAJ1/CH3CHO/CH3CHO_uip.yld'
335 xsqy_tab(m)%filespec%nskip(1:2) = (/ 2,4 /)
336 xsqy_tab(m)%filespec%nread(1:2) = (/ 101,12 /)
337 subr(m)%xsqy_sub => r11
338 subr(m+1)%xsqy_sub => r11
339 subr(m+2)%xsqy_sub => r11
342 xsqy_tab(m)%label = 'C2H5CHO -> C2H5 + HCO'
343 xsqy_tab(m)%wrf_label = 'j_c2h5cho'
345 xsqy_tab(m)%tpflag = 2
346 xsqy_tab(m)%filespec%nfiles = 2
347 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/C2H5CHO/C2H5CHO_iup.abs'
348 xsqy_tab(m)%filespec%filename(2) = 'DATAJ1/C2H5CHO/C2H5CHO_iup.yld'
349 xsqy_tab(m)%filespec%nskip(1:2) = 4
350 xsqy_tab(m)%filespec%nread(1:2) = (/ 106,5 /)
351 subr(m)%xsqy_sub => r12
354 xsqy_tab(m)%label = 'CHOCHO -> HCO + HCO'
355 xsqy_tab(m+1)%label = 'CHOCHO -> H2 + 2CO'
356 xsqy_tab(m+2)%label = 'CHOCHO -> CH2O + CO'
357 xsqy_tab(m)%wrf_label = 'j_gly_a'
358 xsqy_tab(m+1)%wrf_label = 'j_gly_b'
359 xsqy_tab(m+2)%wrf_label = 'j_gly_c'
361 xsqy_tab(m+1:m+2)%channel = (/ 2,3 /)
362 xsqy_tab(m)%filespec%nfiles = 2
363 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/CHOCHO/glyoxal_jpl11.abs'
364 xsqy_tab(m)%filespec%filename(2) = 'DATAJ1/CHOCHO/glyoxal_jpl11.qy'
365 xsqy_tab(m)%filespec%nskip(1:2) = (/ 2,3 /)
366 xsqy_tab(m)%filespec%nread(1:2) = (/ 277,40 /)
367 subr(m)%xsqy_sub => r13
368 subr(m+1)%xsqy_sub => r13
369 subr(m+2)%xsqy_sub => r13
372 xsqy_tab(m)%label = 'CH3COCHO -> CH3CO + HCO'
373 xsqy_tab(m)%wrf_label = 'j_mgly'
375 xsqy_tab(m)%tpflag = 2
376 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/CH3COCHO/CH3COCHO_jpl11.abs'
377 xsqy_tab(m)%filespec%nskip(1) = 2
378 xsqy_tab(m)%filespec%nread(1) = 294
379 subr(m)%xsqy_sub => r14
382 xsqy_tab(m)%label = 'CH3COCH3 -> CH3CO + CH3'
383 xsqy_tab(m)%wrf_label = 'j_ch3coch3'
385 xsqy_tab(m)%tpflag = 3
386 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/CH3COCH3/CH3COCH3_jpl11.abs'
387 xsqy_tab(m)%filespec%nskip(1) = 5
388 xsqy_tab(m)%filespec%nread(1) = 135
389 subr(m)%xsqy_sub => r15
392 xsqy_tab(m)%label = 'CH3OOH -> CH3O + OH'
393 xsqy_tab(m)%wrf_label = 'j_ch3ooh'
395 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/CH3OOH/CH3OOH_jpl11.abs'
396 xsqy_tab(m)%filespec%nskip(1) = 2
397 xsqy_tab(m)%filespec%nread(1) = 40
398 subr(m)%xsqy_sub => no_z_dep
401 xsqy_tab(m)%label = 'CH3ONO2 -> CH3O + NO2'
402 xsqy_tab(m)%wrf_label = 'j_ch3ono2'
404 xsqy_tab(m)%tpflag = 1
405 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/RONO2/CH3ONO2_jpl11.abs'
406 xsqy_tab(m)%filespec%nskip(1) = 2
407 xsqy_tab(m)%filespec%nread(1) = 65
408 subr(m)%xsqy_sub => r17
411 xsqy_tab(m)%label = 'CH3CO(OONO2) -> CH3CO(OO) + NO2'
412 xsqy_tab(m+1)%label = 'CH3CO(OONO2) -> CH3CO(O) + NO3'
413 xsqy_tab(m)%wrf_label = 'j_pan_a'
414 xsqy_tab(m+1)%wrf_label = 'j_pan_b'
416 xsqy_tab(m+1)%channel = 2
417 xsqy_tab(m:m+1)%tpflag = 1
418 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/RONO2/PAN_talukdar.abs'
419 xsqy_tab(m)%filespec%nskip(1) = 14
420 xsqy_tab(m)%filespec%nread(1) = 78
421 subr(m)%xsqy_sub => r18
422 subr(m+1)%xsqy_sub => r18
425 xsqy_tab(m)%label = 'CCl2O -> Products'
426 xsqy_tab(m)%wrf_label = 'j_ccl2o'
428 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/CCl2O_jpl94.abs'
429 xsqy_tab(m)%filespec%nskip(1) = -1
430 subr(m)%xsqy_sub => no_z_dep
433 xsqy_tab(m)%label = 'CCl4 -> Products'
434 xsqy_tab(m)%wrf_label = 'j_ccl4'
436 xsqy_tab(m)%tpflag = 1
437 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/CCl4_jpl11.abs'
438 xsqy_tab(m)%filespec%nskip(1) = 5
439 xsqy_tab(m)%filespec%nread(1) = 44
440 subr(m)%xsqy_sub => r20
443 xsqy_tab(m)%label = 'CClFO -> Products'
444 xsqy_tab(m)%wrf_label = 'j_cclfo'
446 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/CClFO_jpl94.abs'
447 xsqy_tab(m)%filespec%nskip(1) = -1
448 subr(m)%xsqy_sub => no_z_dep
451 xsqy_tab(m)%label = 'CF2O -> Products'
452 xsqy_tab(m)%wrf_label = 'j_cf2o'
454 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/CF2O_jpl11.abs'
455 xsqy_tab(m)%filespec%nskip(1) = 5
456 xsqy_tab(m)%filespec%nread(1) = 21
457 subr(m)%xsqy_sub => no_z_dep
460 xsqy_tab(m)%label = 'CF2ClCFCl2 (CFC-113) -> Products'
461 xsqy_tab(m)%wrf_label = 'j_cf2clcfcl2'
463 xsqy_tab(m)%tpflag = 1
464 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/CFC-113_jpl94.abs'
465 xsqy_tab(m)%filespec%nskip(1) = -1
466 subr(m)%xsqy_sub => r23
469 xsqy_tab(m)%label = 'CF2ClCF2Cl (CFC-114) -> Products'
470 xsqy_tab(m)%wrf_label = 'j_cf2clcf2cl'
472 xsqy_tab(m)%tpflag = 1
473 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/CFC-114_jpl94.abs'
474 xsqy_tab(m)%filespec%nskip(1) = -1
475 subr(m)%xsqy_sub => r24
478 xsqy_tab(m)%label = 'CF3CF2Cl (CFC-115) -> Products'
479 xsqy_tab(m)%wrf_label = 'j_cf3cf2cl'
481 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/CFC-115_jpl94.abs'
482 xsqy_tab(m)%filespec%nskip(1) = -1
483 subr(m)%xsqy_sub => no_z_dep
486 xsqy_tab(m)%label = 'CCl3F (CFC-11) -> Products'
487 xsqy_tab(m)%wrf_label = 'j_ccl3f'
489 xsqy_tab(m)%tpflag = 1
490 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/CFC-11_jpl94.abs'
491 xsqy_tab(m)%filespec%nskip(1) = -1
492 subr(m)%xsqy_sub => r26
495 xsqy_tab(m)%label = 'CCl2F2 (CFC-12) -> Products'
496 xsqy_tab(m)%wrf_label = 'j_ccl2f2'
498 xsqy_tab(m)%tpflag = 1
499 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/CFC-12_jpl94.abs'
500 xsqy_tab(m)%filespec%nskip(1) = -1
501 subr(m)%xsqy_sub => r27
504 xsqy_tab(m)%label = 'CH3Br -> Products'
505 xsqy_tab(m)%wrf_label = 'j_ch3br'
507 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/CH3Br_jpl94.abs'
508 xsqy_tab(m)%filespec%nskip(1) = -1
509 subr(m)%xsqy_sub => no_z_dep
512 xsqy_tab(m)%label = 'CH3CCl3 -> Products'
513 xsqy_tab(m)%wrf_label = 'j_ch3ccl3'
515 xsqy_tab(m)%tpflag = 1
516 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/CH3CCl3_jpl94.abs'
517 xsqy_tab(m)%filespec%nskip(1) = -1
518 subr(m)%xsqy_sub => r29
521 xsqy_tab(m)%label = 'CH3Cl -> Products'
522 xsqy_tab(m)%wrf_label = 'j_ch3cl'
524 xsqy_tab(m)%tpflag = 1
525 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/CH3Cl_jpl94.abs'
526 xsqy_tab(m)%filespec%nskip(1) = -1
527 subr(m)%xsqy_sub => r30
530 xsqy_tab(m)%label = 'ClOO -> Products'
531 xsqy_tab(m)%wrf_label = 'j_cloo'
533 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/ClOO_jpl94.abs'
534 xsqy_tab(m)%filespec%nskip(1) = -1
535 subr(m)%xsqy_sub => no_z_dep
538 xsqy_tab(m)%label = 'CF3CHCl2 (HCFC-123) -> Products'
539 xsqy_tab(m)%wrf_label = 'j_cf3chcl2'
541 xsqy_tab(m)%tpflag = 1
542 subr(m)%xsqy_sub => r32
545 xsqy_tab(m)%label = 'CF3CHFCl (HCFC-124) -> Products'
546 xsqy_tab(m)%wrf_label = 'j_cf3chfcl'
548 xsqy_tab(m)%tpflag = 1
549 subr(m)%xsqy_sub => r33
552 xsqy_tab(m)%label = 'CH3CFCl2 (HCFC-141b) -> Products'
553 xsqy_tab(m)%wrf_label = 'j_ch3cfcl2'
555 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/HCFC-141b_jpl94.abs'
556 xsqy_tab(m)%filespec%nskip(1) = -1
557 subr(m)%xsqy_sub => no_z_dep
560 xsqy_tab(m)%label = 'CH3CF2Cl (HCFC-142b) -> Products'
561 xsqy_tab(m)%wrf_label = 'j_ch3cf2cl'
563 xsqy_tab(m)%tpflag = 1
564 subr(m)%xsqy_sub => r35
567 xsqy_tab(m)%label = 'CF3CF2CHCl2 (HCFC-225ca) -> Products'
568 xsqy_tab(m)%wrf_label = 'j_cf3cf2chcl2'
570 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/HCFC-225ca_jpl94.abs'
571 xsqy_tab(m)%filespec%nskip(1) = -1
572 subr(m)%xsqy_sub => no_z_dep
575 xsqy_tab(m)%label = 'CF2ClCF2CHFCl (HCFC-225cb) -> Products'
576 xsqy_tab(m)%wrf_label = 'j_cf2clcf2chfcl'
578 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/HCFC-225cb_jpl94.abs'
579 xsqy_tab(m)%filespec%nskip(1) = -1
580 subr(m)%xsqy_sub => no_z_dep
583 xsqy_tab(m)%label = 'CHClF2 (HCFC-22) -> Products'
584 xsqy_tab(m)%wrf_label = 'j_chclf2'
586 xsqy_tab(m)%tpflag = 1
587 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/HCFC-22_jpl94.abs'
588 xsqy_tab(m)%filespec%nskip(1) = -1
589 subr(m)%xsqy_sub => r38
592 xsqy_tab(m)%label = 'HO2 -> OH + O'
593 xsqy_tab(m)%wrf_label = 'j_ho2'
595 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/HO2_jpl11.abs'
596 xsqy_tab(m)%filespec%nskip(1) = 10
597 xsqy_tab(m)%filespec%nread(1) = 15
598 subr(m)%xsqy_sub => r39
601 xsqy_tab(m)%label = 'CF2Br2 (Halon-1202) -> Products'
602 xsqy_tab(m)%wrf_label = 'j_cf2bf2'
604 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/Halon-1202_jpl97.abs'
605 xsqy_tab(m)%filespec%nskip(1) = -1
606 subr(m)%xsqy_sub => no_z_dep
609 xsqy_tab(m)%label = 'CF2BrCl (Halon-1211) -> Products'
610 xsqy_tab(m)%wrf_label = 'j_cf2brcl'
612 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/Halon-1211_jpl97.abs'
613 xsqy_tab(m)%filespec%nskip(1) = -1
614 subr(m)%xsqy_sub => no_z_dep
617 xsqy_tab(m)%label = 'CF3Br (Halon-1301) -> Products'
618 xsqy_tab(m)%wrf_label = 'j_cf3br'
620 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/Halon-1301_jpl97.abs'
621 xsqy_tab(m)%filespec%nskip(1) = -1
622 subr(m)%xsqy_sub => no_z_dep
625 xsqy_tab(m)%label = 'CF2BrCF2Br (Halon-2402) -> Products'
626 xsqy_tab(m)%wrf_label = 'j_cf2brcf2br'
628 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/Halon-2402_jpl97.abs'
629 xsqy_tab(m)%filespec%nskip(1) = -1
630 subr(m)%xsqy_sub => no_z_dep
633 xsqy_tab(m)%label = 'N2O -> N2 + O(1D)'
634 xsqy_tab(m)%wrf_label = 'j_n2o'
636 xsqy_tab(m)%tpflag = 1
637 subr(m)%xsqy_sub => r44
640 xsqy_tab(m)%label = 'ClONO2 -> Cl + NO3'
641 xsqy_tab(m+1)%label = 'ClONO2 -> ClO + NO2'
642 xsqy_tab(m)%wrf_label = 'j_clono2_a'
643 xsqy_tab(m+1)%wrf_label = 'j_clono2_b'
645 xsqy_tab(m+1)%channel = 2
646 xsqy_tab(m:m+1)%tpflag = 1
647 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/ClONO2_jpl97.abs'
648 xsqy_tab(m)%filespec%nskip(1) = 2
649 xsqy_tab(m)%filespec%nread(1) = 119
650 subr(m)%xsqy_sub => r45
651 subr(m+1)%xsqy_sub => r45
654 xsqy_tab(m)%label = 'BrONO2 -> BrO + NO2'
655 xsqy_tab(m+1)%label = 'BrONO2 -> Br + NO3'
656 xsqy_tab(m)%wrf_label = 'j_brono2_a'
657 xsqy_tab(m+1)%wrf_label = 'j_brono2_b'
659 xsqy_tab(m+1)%channel = 2
660 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/BrONO2_jpl03.abs'
661 xsqy_tab(m)%filespec%nskip(1) = 13
662 xsqy_tab(m)%filespec%nread(1) = 61
663 subr(m)%xsqy_sub => r46
664 subr(m+1)%xsqy_sub => r46
667 xsqy_tab(m)%label = 'Cl2 -> Cl + Cl'
668 xsqy_tab(m)%wrf_label = 'j_cl2'
670 xsqy_tab(m)%tpflag = 1
671 subr(m)%xsqy_sub => r47
674 xsqy_tab(m)%label = 'HOCH2CHO -> CH2OH + HCO'
675 xsqy_tab(m+1)%label = 'HOCH2CHO -> CH3OH + CO'
676 xsqy_tab(m+2)%label = 'HOCH2CHO -> CH2CHO + OH'
677 xsqy_tab(m)%wrf_label = 'j_glyald_a'
678 xsqy_tab(m+1)%wrf_label = 'j_glyald_b'
679 xsqy_tab(m+2)%wrf_label = 'j_glyald_c'
681 xsqy_tab(m+1:m+2)%channel = (/ 2,3 /)
682 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/CH2OHCHO/glycolaldehyde_jpl11.abs'
683 xsqy_tab(m)%filespec%nskip(1) = 2
684 xsqy_tab(m)%filespec%nread(1) = 63
685 subr(m)%xsqy_sub => r101
686 subr(m+1)%xsqy_sub => r101
687 subr(m+2)%xsqy_sub => r101
690 xsqy_tab(m)%label = 'CH3COCOCH3 -> Products'
691 xsqy_tab(m)%wrf_label = 'j_biacetyl'
692 xsqy_tab(m)%qyld = .158
694 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/CH3COCOCH3/biacetyl_horowitz.abs'
695 xsqy_tab(m)%filespec%nskip(1) = 8
696 xsqy_tab(m)%filespec%nread(1) = 287
697 subr(m)%xsqy_sub => no_z_dep
700 xsqy_tab(m)%label = 'CH3COCH=CH2 -> Products'
701 xsqy_tab(m)%wrf_label = 'j_mvk'
703 xsqy_tab(m)%tpflag = 2
704 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/MVK_jpl11.abs'
705 xsqy_tab(m)%filespec%nskip(1) = 2
706 xsqy_tab(m)%filespec%nread(1) = 146
707 subr(m)%xsqy_sub => r103
710 xsqy_tab(m)%label = 'CH2=C(CH3)CHO -> Products'
711 xsqy_tab(m)%wrf_label = 'j_macr'
712 xsqy_tab(m)%qyld = .01
714 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/Methacrolein_jpl11.abs'
715 xsqy_tab(m)%filespec%nskip(1) = 7
716 xsqy_tab(m)%filespec%nread(1) = 146
717 subr(m)%xsqy_sub => no_z_dep
720 xsqy_tab(m)%label = 'CH3COCO(OH) -> Products'
721 xsqy_tab(m)%wrf_label = 'j_ch3cocooh'
723 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/CH3COCOOH/pyruvic_jpl11.abs'
724 xsqy_tab(m)%filespec%nskip(1) = 2
725 xsqy_tab(m)%filespec%nread(1) = 139
726 subr(m)%xsqy_sub => no_z_dep
729 xsqy_tab(m)%label = 'CH3CH2ONO2 -> CH3CH2O + NO2'
730 xsqy_tab(m)%wrf_label = 'j_ch3ch2ono2'
732 xsqy_tab(m)%tpflag = 1
733 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/RONO2/RONO2_talukdar.abs'
734 xsqy_tab(m)%filespec%nskip(1) = 10
735 xsqy_tab(m)%filespec%nread(1) = 63
736 subr(m)%xsqy_sub => r106
739 xsqy_tab(m)%label = 'CH3CHONO2CH3 -> CH3CHOCH3 + NO2'
740 xsqy_tab(m)%wrf_label = 'j_ch3chono2ch3'
742 xsqy_tab(m)%tpflag = 1
743 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/RONO2/RONO2_talukdar.abs'
744 xsqy_tab(m)%filespec%nskip(1) = 10
745 xsqy_tab(m)%filespec%nread(1) = 63
746 subr(m)%xsqy_sub => r107
749 xsqy_tab(m)%label = 'CH2(OH)CH2(ONO2) -> CH2(OH)CH2(O.) + NO2'
750 xsqy_tab(m)%wrf_label = 'j_ch2ohch2ono2'
752 subr(m)%xsqy_sub => r108
755 xsqy_tab(m)%label = 'CH3COCH2(ONO2) -> CH3COCH2(O.) + NO2'
756 xsqy_tab(m)%wrf_label = 'j_ch3coch2ono2'
758 subr(m)%xsqy_sub => r109
761 xsqy_tab(m)%label = 'C(CH3)3(ONO2) -> C(CH3)3(O.) + NO2'
762 xsqy_tab(m)%wrf_label = 'j_bnit1'
764 subr(m)%xsqy_sub => r110
767 xsqy_tab(m)%label = 'ClOOCl -> Cl + ClOO'
768 xsqy_tab(m)%wrf_label = 'j_cloocl'
770 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/ClOOCl_jpl11.abs'
771 xsqy_tab(m)%filespec%nskip(1) = 3
772 xsqy_tab(m)%filespec%nread(1) = 111
773 subr(m)%xsqy_sub => no_z_dep
776 xsqy_tab(m)%label = 'CH2(OH)COCH3 -> CH3CO + CH2(OH)'
777 xsqy_tab(m+1)%label = 'CH2(OH)COCH3 -> CH2(OH)CO + CH3'
778 xsqy_tab(m)%wrf_label = 'j_hyac_a'
779 xsqy_tab(m+1)%wrf_label = 'j_hyac_b'
781 xsqy_tab(m+1)%channel = 2
782 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/Hydroxyacetone_jpl11.abs'
783 xsqy_tab(m)%filespec%nskip(1) = 2
784 xsqy_tab(m)%filespec%nread(1) = 96
785 subr(m)%xsqy_sub => r112
786 subr(m+1)%xsqy_sub => r112
789 xsqy_tab(m)%label = 'HOBr -> OH + Br'
790 xsqy_tab(m)%wrf_label = 'j_hobr'
792 subr(m)%xsqy_sub => r113
795 xsqy_tab(m)%label = 'BrO -> Br + O'
796 xsqy_tab(m)%wrf_label = 'j_bro'
798 subr(m)%xsqy_sub => r114
801 xsqy_tab(m)%label = 'Br2 -> Br + Br'
802 xsqy_tab(m)%wrf_label = 'j_br2'
804 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/Br2.abs'
805 xsqy_tab(m)%filespec%nskip(1) = 6
806 xsqy_tab(m)%filespec%nread(1) = 29
807 xsqy_tab(m)%filespec%xfac(1) = 1.
808 subr(m)%xsqy_sub => no_z_dep
811 xsqy_tab(m)%label = 'NO3-(aq) -> NO2(aq) + O-'
812 xsqy_tab(m+1)%label = 'NO3-(aq) -> NO2-(aq) + O(3P)'
813 xsqy_tab(m+2)%label = 'NO3-(aq) with qy=1'
814 xsqy_tab(m)%wrf_label = 'j_no3_aq_a'
815 xsqy_tab(m+1)%wrf_label = 'j_no3_aq_b'
816 xsqy_tab(m+2)%wrf_label = 'j_no3_aq_c'
818 xsqy_tab(m+1:m+2)%channel = (/ 2,3 /)
819 xsqy_tab(m)%tpflag = 1
820 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/NO3-_CA03.abs'
821 xsqy_tab(m)%filespec%nskip(1) = 7
822 xsqy_tab(m)%filespec%nread(1) = 43
823 subr(m)%xsqy_sub => r118
824 subr(m+1)%xsqy_sub => r118
825 subr(m+2)%xsqy_sub => r118
828 xsqy_tab(m)%label = 'CH3COCH2CH3 -> CH3CO + CH2CH3'
829 xsqy_tab(m)%wrf_label = 'j_mek'
831 xsqy_tab(m)%tpflag = 2
832 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/Martinez.abs'
833 xsqy_tab(m)%filespec%nskip(1) = 4
834 xsqy_tab(m)%filespec%nread(1) = 96
835 subr(m)%xsqy_sub => r119
838 xsqy_tab(m)%label = 'CH3CH2CO(OONO2) -> CH3CH2CO(OO) + NO2'
839 xsqy_tab(m+1)%label = 'CH3CH2CO(OONO2) -> CH3CH2CO(O) + NO3'
840 xsqy_tab(m)%wrf_label = 'j_ppn_a'
841 xsqy_tab(m+1)%wrf_label = 'j_ppn_b'
842 xsqy_tab(m:m+1)%tpflag = 1
844 xsqy_tab(m+1)%channel = 2
845 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/PPN_Harwood.txt'
846 xsqy_tab(m)%filespec%nskip(1) = 10
847 xsqy_tab(m)%filespec%nread(1) = 66
848 subr(m)%xsqy_sub => r120
849 subr(m+1)%xsqy_sub => r120
852 xsqy_tab(m)%label = 'HOCH2OOH -> HOCH2O. + OH'
853 xsqy_tab(m)%wrf_label = 'j_hoch2ooh'
855 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/HOCH2OOH_jpl11.abs'
856 xsqy_tab(m)%filespec%nskip(1) = 3
857 xsqy_tab(m)%filespec%nread(1) = 32
858 subr(m)%xsqy_sub => no_z_dep
861 xsqy_tab(m)%label = 'CH2=CHCHO -> Products'
862 xsqy_tab(m)%wrf_label = 'j_acrol'
864 xsqy_tab(m)%tpflag = 2
865 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/Acrolein.txt'
866 xsqy_tab(m)%filespec%nskip(1) = 6
867 xsqy_tab(m)%filespec%nread(1) = 55
868 subr(m)%xsqy_sub => r122
871 xsqy_tab(m)%label = 'CH3CO(OOH) -> Products'
872 xsqy_tab(m)%wrf_label = 'j_ch3coooh'
874 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/Peracetic_acid.txt'
875 xsqy_tab(m)%filespec%nskip(1) = 6
876 xsqy_tab(m)%filespec%nread(1) = 66
877 subr(m)%xsqy_sub => no_z_dep
880 xsqy_tab(m)%label = '(CH3)2NNO -> Products'
881 xsqy_tab(m)%wrf_label = 'j_amine'
883 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/dmna.abs'
884 xsqy_tab(m)%filespec%nskip(1) = 5
885 xsqy_tab(m)%filespec%nread(1) = 132
886 xsqy_tab(m)%filespec%xfac(1) = 1.e-19
887 subr(m)%xsqy_sub => no_z_dep
890 xsqy_tab(m)%label = 'ClO -> Cl + O(1D)'
891 xsqy_tab(m+1)%label = 'ClO -> Cl + O(3P)'
892 xsqy_tab(m)%wrf_label = 'j_clo_a'
893 xsqy_tab(m+1)%wrf_label = 'j_clo_b'
895 xsqy_tab(m+1)%channel = 2
896 xsqy_tab(m:m+1)%tpflag = 1
897 subr(m)%xsqy_sub => r125
898 subr(m+1)%xsqy_sub => r125
901 xsqy_tab(m)%label = 'ClNO2 -> Cl + NO2'
902 xsqy_tab(m)%wrf_label = 'j_clno2'
904 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/ClNO2.abs'
905 xsqy_tab(m)%filespec%nskip(1) = 2
906 xsqy_tab(m)%filespec%nread(1) = 26
907 subr(m)%xsqy_sub => no_z_dep
910 xsqy_tab(m)%label = 'BrNO -> Br + NO'
911 xsqy_tab(m)%wrf_label = 'j_brno'
913 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/BrNO.abs'
914 xsqy_tab(m)%filespec%nskip(1) = 3
915 xsqy_tab(m)%filespec%nread(1) = 27
916 xsqy_tab(m)%filespec%xfac(1) = 1.
917 subr(m)%xsqy_sub => no_z_dep
920 xsqy_tab(m)%label = 'BrNO2 -> Br + NO2'
921 xsqy_tab(m)%wrf_label = 'j_brno2'
923 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/BrNO2.abs'
924 xsqy_tab(m)%filespec%nskip(1) = 6
925 xsqy_tab(m)%filespec%nread(1) = 54
926 xsqy_tab(m)%filespec%xfac(1) = 1.
927 subr(m)%xsqy_sub => no_z_dep
930 xsqy_tab(m)%label = 'BrONO -> Br + NO2'
931 xsqy_tab(m+1)%label = 'BrONO -> BrO + NO'
932 xsqy_tab(m)%wrf_label = 'j_brono_a'
933 xsqy_tab(m+1)%wrf_label = 'j_brono_b'
935 xsqy_tab(m+1)%channel = 2
936 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/BrONO.abs'
937 xsqy_tab(m)%filespec%nskip(1) = 8
938 xsqy_tab(m)%filespec%nread(1) = 32
939 subr(m)%xsqy_sub => r129
940 subr(m+1)%xsqy_sub => r129
943 xsqy_tab(m)%label = 'HOCl -> HO + Cl'
944 xsqy_tab(m)%wrf_label = 'j_hocl'
946 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/HOCl.abs'
947 xsqy_tab(m)%filespec%nskip(1) = 7
948 xsqy_tab(m)%filespec%nread(1) = 111
949 xsqy_tab(m)%filespec%xfac(1) = 1.
950 subr(m)%xsqy_sub => no_z_dep
953 xsqy_tab(m)%label = 'NOCl -> NO + Cl'
954 xsqy_tab(m)%wrf_label = 'j_nocl'
956 xsqy_tab(m)%tpflag = 1
957 xsqy_tab(m)%filespec%nfiles = 2
958 xsqy_tab(m)%filespec%filename(1:2) = 'DATAJ1/ABS/NOCl.abs'
959 xsqy_tab(m)%filespec%nskip(1:2) = (/ 7,88 /)
960 xsqy_tab(m)%filespec%nread(1:2) = (/ 80,61 /)
961 subr(m)%xsqy_sub => r131
964 xsqy_tab(m)%label = 'OClO -> Products'
965 xsqy_tab(m)%wrf_label = 'j_oclo'
967 xsqy_tab(m)%tpflag = 1
968 xsqy_tab(m)%filespec%nfiles = 3
969 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/OClO.abs'
970 xsqy_tab(m)%filespec%filename(2) = 'DATAJ1/ABS/OClO.abs'
971 xsqy_tab(m)%filespec%filename(3) = 'DATAJ1/ABS/OClO.abs'
972 xsqy_tab(m)%filespec%nskip(1:3) = (/ 6,1075,2142 /)
973 xsqy_tab(m)%filespec%nread(1:3) = (/ 1068,1067,1068 /)
974 subr(m)%xsqy_sub => r132
977 xsqy_tab(m)%label = 'BrCl -> Br + Cl'
978 xsqy_tab(m)%wrf_label = 'j_brcl'
980 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/BrCl.abs'
981 xsqy_tab(m)%filespec%nskip(1) = 9
982 xsqy_tab(m)%filespec%nread(1) = 81
983 xsqy_tab(m)%filespec%xfac(1) = 1.
984 subr(m)%xsqy_sub => no_z_dep
987 xsqy_tab(m)%label = 'CH3(OONO2) -> CH3(OO) + NO2'
988 xsqy_tab(m)%wrf_label = 'j_ch3oono2'
990 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/CH3OONO2.abs'
991 xsqy_tab(m)%filespec%nskip(1) = 9
992 xsqy_tab(m)%filespec%nread(1) = 26
993 xsqy_tab(m)%filespec%xfac(1) = 1.
994 subr(m)%xsqy_sub => no_z_dep
997 xsqy_tab(m)%label = 'C(CH3)3(ONO) -> C(CH3)3(O) + NO'
998 xsqy_tab(m)%wrf_label = 'j_bnit2'
1000 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/t-butyl-nitrite.abs'
1001 xsqy_tab(m)%filespec%nskip(1) = 4
1002 xsqy_tab(m)%filespec%nread(1) = 96
1003 xsqy_tab(m)%filespec%xfac(1) = 1.
1004 subr(m)%xsqy_sub => no_z_dep
1007 xsqy_tab(m)%label = 'ClONO -> Cl + NO2'
1008 xsqy_tab(m)%wrf_label = 'j_clono'
1009 xsqy_tab(m)%jndx = m
1010 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/ClONO_jpl11.abs'
1011 xsqy_tab(m)%filespec%nskip(1) = 3
1012 xsqy_tab(m)%filespec%nread(1) = 34
1013 subr(m)%xsqy_sub => no_z_dep
1016 xsqy_tab(m)%label = 'HCl -> H + Cl'
1017 xsqy_tab(m)%wrf_label = 'j_hcl'
1018 xsqy_tab(m)%jndx = m
1019 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/HCl_jpl11.abs'
1020 xsqy_tab(m)%filespec%nskip(1) = 3
1021 xsqy_tab(m)%filespec%nread(1) = 31
1022 subr(m)%xsqy_sub => no_z_dep
1025 xsqy_tab(m)%label = 'CH2O -> H + HCO'
1026 xsqy_tab(m+1)%label = 'CH2O -> H2 + CO'
1027 xsqy_tab(m)%wrf_label = 'j_ch2o_r'
1028 xsqy_tab(m+1)%wrf_label = 'j_ch2o_m'
1029 xsqy_tab(m)%jndx = m
1030 xsqy_tab(m+1)%channel = 2
1031 xsqy_tab(m:m+1)%tpflag = (/ 1,3 /)
1032 xsqy_tab(m)%filespec%nfiles = 2
1033 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/CH2O/CH2O_jpl11.abs'
1034 xsqy_tab(m)%filespec%filename(2) = 'DATAJ1/CH2O/CH2O_jpl11.yld'
1035 xsqy_tab(m)%filespec%nskip(1:2) = 4
1036 xsqy_tab(m)%filespec%nread(1:2) = (/ 150,112 /)
1037 subr(m)%xsqy_sub => pxCH2O
1038 subr(m+1)%xsqy_sub => pxCH2O
1041 xsqy_tab(m)%label = 'CH3COOH -> CH3 + COOH'
1042 xsqy_tab(m)%wrf_label = 'j_ch3cooh'
1043 xsqy_tab(m)%qyld = .55
1044 xsqy_tab(m)%jndx = m
1045 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/CH3COOH_jpl11.abs'
1046 xsqy_tab(m)%filespec%nskip(1) = 2
1047 xsqy_tab(m)%filespec%nread(1) = 18
1048 subr(m)%xsqy_sub => no_z_dep
1051 xsqy_tab(m)%label = 'CH3OCl -> CH3O + Cl'
1052 xsqy_tab(m)%wrf_label = 'j_ch3ocl'
1053 xsqy_tab(m)%jndx = m
1054 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/CH3OCl_jpl11.abs'
1055 xsqy_tab(m)%filespec%nskip(1) = 3
1056 xsqy_tab(m)%filespec%nread(1) = 83
1057 subr(m)%xsqy_sub => no_z_dep
1060 xsqy_tab(m)%label = 'CHCl3 -> Products'
1061 xsqy_tab(m)%wrf_label = 'j_chcl3'
1062 xsqy_tab(m)%jndx = m
1063 xsqy_tab(m)%tpflag = 1
1064 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/CHCl3_jpl11.abs'
1065 xsqy_tab(m)%filespec%nskip(1) = 3
1066 xsqy_tab(m)%filespec%nread(1) = 39
1067 subr(m)%xsqy_sub => r140
1070 xsqy_tab(m)%label = 'C2H5ONO2 -> C2H5O + NO2'
1071 xsqy_tab(m)%wrf_label = 'j_c2h5ono2'
1072 xsqy_tab(m)%jndx = m
1073 xsqy_tab(m)%tpflag = 1
1074 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/RONO2/C2H5ONO2_iup2006.abs'
1075 xsqy_tab(m)%filespec%nskip(1) = 4
1076 xsqy_tab(m)%filespec%nread(1) = 32
1077 subr(m)%xsqy_sub => r141
1080 xsqy_tab(m)%label = 'n-C3H7ONO2 -> C3H7O + NO2'
1081 xsqy_tab(m)%wrf_label = 'j_nc3h7ono2'
1082 xsqy_tab(m)%jndx = m
1083 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/RONO2/nC3H7ONO2_iup2006.abs'
1084 xsqy_tab(m)%filespec%nskip(1) = 3
1085 xsqy_tab(m)%filespec%nread(1) = 32
1086 subr(m)%xsqy_sub => no_z_dep
1089 xsqy_tab(m)%label = '1-C4H9ONO2 -> 1-C4H9O + NO2'
1090 xsqy_tab(m)%wrf_label = 'j_1c4h9ono2'
1091 xsqy_tab(m)%jndx = m
1092 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/RONO2/1C4H9ONO2_iup2006.abs'
1093 xsqy_tab(m)%filespec%nskip(1) = 3
1094 xsqy_tab(m)%filespec%nread(1) = 32
1095 subr(m)%xsqy_sub => no_z_dep
1098 xsqy_tab(m)%label = '2-C4H9ONO2 -> 2-C4H9O + NO2'
1099 xsqy_tab(m)%wrf_label = 'j_2c4h9ono2'
1100 xsqy_tab(m)%jndx = m
1101 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/RONO2/2C4H9ONO2_iup2006.abs'
1102 xsqy_tab(m)%filespec%nskip(1) = 3
1103 xsqy_tab(m)%filespec%nread(1) = 15
1104 subr(m)%xsqy_sub => no_z_dep
1107 xsqy_tab(m)%label = 'perfluoro 1-iodopropane -> products'
1108 xsqy_tab(m)%wrf_label = 'j_perfluoro'
1109 xsqy_tab(m)%jndx = m
1110 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/PF-n-iodopropane.abs'
1111 xsqy_tab(m)%filespec%nskip(1) = 2
1112 xsqy_tab(m)%filespec%nread(1) = 16
1113 subr(m)%xsqy_sub => no_z_dep
1116 xsqy_tab(m)%label = 'I2 -> I + I'
1117 xsqy_tab(m)%wrf_label = 'j_i2'
1118 xsqy_tab(m)%jndx = m
1119 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/YLD/I2.qy'
1120 xsqy_tab(m)%filespec%nskip(1) = 4
1121 xsqy_tab(m)%filespec%nread(1) = 12
1122 subr(m)%xsqy_sub => r146
1125 xsqy_tab(m)%label = 'IO -> I + O'
1126 xsqy_tab(m)%wrf_label = 'j_io'
1127 xsqy_tab(m)%jndx = m
1128 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/IO_jpl11.abs'
1129 xsqy_tab(m)%filespec%nskip(1) = 2
1130 xsqy_tab(m)%filespec%nread(1) = 133
1131 subr(m)%xsqy_sub => no_z_dep
1134 xsqy_tab(m)%label = 'IOH -> I + OH'
1135 xsqy_tab(m)%wrf_label = 'j_ioh'
1136 xsqy_tab(m)%jndx = m
1137 xsqy_tab(m)%filespec%filename(1) = 'DATAJ1/ABS/IOH_jpl11.abs'
1138 xsqy_tab(m)%filespec%nskip(1) = 2
1139 xsqy_tab(m)%filespec%nread(1) = 101
1140 subr(m)%xsqy_sub => no_z_dep
1142 end subroutine setup_sub_calls
1144 !-----------------------------------------------------------------------------*
1145 != *** ALL the following subroutines have the following arguments
1146 != *** except for the routines:
1147 != rxn_init, base_read, readit, add_pnts_inter2
1150 != NW - INTEGER, number of specified intervals + 1 in working (I)=*
1151 != wavelength grid =*
1152 != WL - REAL, vector of lower limits of wavelength intervals in (I)=*
1153 != working wavelength grid =*
1154 != WC - REAL, vector of center points of wavelength intervals in (I)=*
1155 != working wavelength grid =*
1156 != NZ - INTEGER, number of altitude levels in working altitude grid (I)=*
1157 != TLEV - REAL, temperature (K) at each specified altitude level (I)=*
1158 != AIRDEN - REAL, air density (molec/cc) at each altitude level (I)=*
1159 != J - INTEGER, counter for number of weighting functions defined (IO)=*
1160 != SQ - REAL, cross section x quantum yield (cm^2) for each (O)=*
1161 != photolysis reaction defined, at each defined wavelength and =*
1162 != at each defined altitude level =*
1163 != JLABEL - CHARACTER(len=50) ::, string identifier for each photolysis (O)=*
1164 != reaction defined =*
1165 !-----------------------------------------------------------------------------*
1167 SUBROUTINE r01(nw,wl,wc,nz,tlev,airden,j)
1168 !-----------------------------------------------------------------------------*
1170 != Provide the product of (cross section) x (quantum yield) for the two =*
1171 != O3 photolysis reactions: =*
1172 != (a) O3 + hv -> O2 + O(1D) =*
1173 != (b) O3 + hv -> O2 + O(3P) =*
1174 != Cross section: Combined data from WMO 85 Ozone Assessment (use 273K =*
1175 != value from 175.439-847.5 nm) and data from Molina and =*
1176 != Molina (use in Hartley and Huggins bans (240.5-350 nm) =*
1177 != Quantum yield: Choice between =*
1178 != (1) data from Michelsen et al, 1994 =*
1179 != (2) JPL 87 recommendation =*
1180 != (3) JPL 90/92 recommendation (no "tail") =*
1181 != (4) data from Shetter et al., 1996 =*
1182 != (5) JPL 97 recommendation =*
1183 != (6) JPL 00 recommendation =*
1184 !-----------------------------------------------------------------------------*
1186 use module_xsections, only : o3xs
1190 INTEGER, intent(in) :: nw
1191 INTEGER, intent(in) :: nz
1192 REAL, intent(in) :: wl(kw), wc(kw)
1193 REAL, intent(in) :: tlev(kz)
1194 REAL, intent(in) :: airden(kz)
1196 INTEGER, intent(inout) :: j
1204 if( .not. initialize ) then
1205 call check_alloc( j, nz, nw-1 )
1207 ! call cross section read/interpolate routine
1208 ! cross sections from WMO 1985 Ozone Assessment
1209 ! from 175.439 to 847.500 nm. Using value at 273 K.
1210 ! Values are over-written in Hartly and Huggins bands, using different
1211 ! options depending on value of mopt:
1213 ! mabs = 1 = mostly Reims grp (Malicet, Brion)
1214 ! mabs = 2 = JPL 2006
1216 CALL o3xs(nz,tlev,nw,wl, xs)
1218 !****** quantum yield:
1219 ! choose quantum yield recommendation:
1220 ! kjpl87: JPL recommendation 1987 - JPL 87, 90, 92 do not "tail"
1221 ! kjpl92: JPL recommendations 1990/92 (identical) - still with no "tail"
1222 ! kjpl97: JPL recommendation 1997, includes tail, similar to Shetter et al.
1223 ! kmich : Michelsen et al., 1994
1224 ! kshet : Shetter et al., 1996
1226 ! kmats: Matsumi et al., 2002
1228 ! compute cross sections and yields at different wavelengths, altitudes:
1230 ! quantum yields, Matsumi et al.
1231 CALL fo3qy2(nz,wc(iw),tlev,qy1d)
1232 if( xsqy_tab(j)%channel == 2 ) then
1233 qy1d(1:nz) = (1. - qy1d(1:nz))
1235 xsqy_tab(j)%sq(1:nz,iw) = qy1d(1:nz)*xs(1:nz,iw)
1241 !=============================================================================*
1243 SUBROUTINE r02(nw,wl,wc,nz,tlev,airden,j)
1244 !-----------------------------------------------------------------------------*
1246 != Provide the product (cross section) x (quantum yield) for NO2 =*
1248 != NO2 + hv -> NO + O(3P) =*
1249 != Cross section from JPL94 (can also have Davidson et al.) =*
1250 != Quantum yield from Gardiner, Sperry, and Calvert =*
1251 !-----------------------------------------------------------------------------*
1253 use module_xsections, only : no2xs_jpl06a
1255 INTEGER, intent(in) :: nw
1256 INTEGER, intent(in) :: nz
1257 INTEGER, intent(inout) :: j
1258 REAL, intent(in) :: wl(kw), wc(kw)
1259 REAL, intent(in) :: tlev(kz)
1260 REAL, intent(in) :: airden(kz)
1264 INTEGER, parameter :: kdata = 200
1267 REAL y1(kdata), y2(kdata)
1270 REAL, save :: yg1(kw), ydel(kw)
1274 REAL :: no2xs(nz,nw-1)
1275 INTEGER :: i, iw, n, idum, ierr
1276 CHARACTER(len=256) :: msg
1278 !*************** NO2 photodissociation
1280 if( initialize ) then
1282 ydel(1:nw-1) = yg1(1:nw-1) - yg2(1:nw-1)
1284 call check_alloc( j, nz, nw-1 )
1286 ! options for NO2 cross section:
1287 ! 1 = Davidson et al. (1988), indepedent of T
1288 ! 2 = JPL 1994 (same as JPL 1997, JPL 2002)
1290 ! 4 = JPL 2006, interpolating between midpoints of bins
1291 ! 5 = JPL 2006, bin-to-bin interpolation
1295 CALL no2xs_jpl06a(nz,tlev,nw,wl, no2xs)
1298 ! myld = 1 NO2_calvert.yld (same as JPL2002)
1299 ! myld = 2 NO2_jpl11.yld (same as jpl2006)
1305 t(1:nz) = .02*(tlev(1:nz) - 298.)
1307 qy(1:nz) = yg1(iw) + ydel(iw)*t(1:nz)
1308 xsqy_tab(j)%sq(1:nz,iw) = no2xs(1:nz,iw)*max( qy(1:nz),0. )
1320 CALL base_read( filespec='DATAJ1/YLD/NO2_jpl11.yld', &
1321 skip_cnt=2,rd_cnt=n,x=x1,y=y1,y1=y2 )
1323 CALL add_pnts_inter2(x1,y1,yg1,kdata,n, &
1324 nw,wl,xsqy_tab(j)%label,deltax,(/y1(1),0./))
1327 CALL add_pnts_inter2(x1,y2,yg2,kdata,n, &
1328 nw,wl,xsqy_tab(j)%label,deltax,(/y2(1),0./))
1330 END SUBROUTINE readit
1334 !=============================================================================*
1336 SUBROUTINE r03(nw,wl,wc,nz,tlev,airden,j)
1338 !-----------------------------------------------------------------------------*
1340 != Provide the product (absorptioon cross section) x (quantum yield) for =*
1341 != both channels of NO3 photolysis: =*
1342 != (a) NO3 + hv -> NO2 + O(3P) =*
1343 != (b) NO3 + hv -> NO + O2 =*
1344 != Cross section combined from Graham and Johnston (<600 nm) and JPL 94 =*
1345 != Quantum yield from Madronich (1988) =*
1346 !-----------------------------------------------------------------------------*
1348 INTEGER, intent(in) :: nw
1349 INTEGER, intent(in) :: nz
1350 INTEGER, intent(inout) :: j
1351 REAL, intent(in) :: wl(kw), wc(kw)
1352 REAL, intent(in) :: tlev(kz)
1353 REAL, intent(in) :: airden(kz)
1356 INTEGER, PARAMETER :: kdata=350
1358 REAL x(kdata), x1(kdata)
1360 real q1_298(kdata), q1_230(kdata), q1_190(kdata)
1361 real q2_298(kdata), q2_230(kdata), q2_190(kdata)
1365 real, parameter :: tfac1 = 1./(230. - 190.)
1366 real, parameter :: tfac2 = 1./(298. - 230.)
1368 REAL :: qy, qy1, qy2, xsect
1369 REAL, save :: yg1(kw)
1370 real, save :: yg_298(kw,2), yg_230(kw,2), yg_190(kw,2)
1371 real, save :: delabs(kw,2,2)
1374 INTEGER i, iw, iz, n, idum, chnl
1376 LOGICAL, save :: is_initialized = .false.
1378 if( initialize ) then
1379 if( .not. is_initialized ) then
1380 ! yields from JPL2011:
1382 delabs(1:nw-1,1,1) = yg_230(1:nw-1,1) - yg_190(1:nw-1,1)
1383 delabs(1:nw-1,2,1) = yg_298(1:nw-1,1) - yg_230(1:nw-1,1)
1384 delabs(1:nw-1,1,2) = yg_230(1:nw-1,2) - yg_190(1:nw-1,2)
1385 delabs(1:nw-1,2,2) = yg_298(1:nw-1,2) - yg_230(1:nw-1,2)
1386 is_initialized = .true.
1389 call check_alloc( j, nz, nw-1 )
1393 ! myld = 2 from JPL-2011
1396 ! compute T-dependent quantum yields
1397 chnl = xsqy_tab(j)%channel
1400 where(tlev(1:nz) <= 190. )
1401 sq_wrk(1:nz) = yg_190(iw,chnl)*xsect
1402 elsewhere(tlev(1:nz) > 190. .and. tlev(1:nz) <= 230. )
1403 t(1:nz) = tfac1*(tlev(1:nz) - 190.)
1404 sq_wrk(1:nz) = yg_190(iw,chnl) + delabs(iw,1,chnl)*t(1:nz)
1405 elsewhere(tlev(1:nz) > 230. .and. tlev(1:nz) <= 298. )
1406 t(1:nz) = tfac2*(tlev(1:nz) - 230.)
1407 sq_wrk(1:nz) = yg_230(iw,chnl) + delabs(iw,2,chnl)*t(1:nz)
1408 elsewhere(tlev(1:nz) > 298. )
1409 sq_wrk(1:nz) = yg_298(iw,chnl)
1411 xsqy_tab(j)%sq(1:nz,iw) = sq_wrk(1:nz)*xsect
1423 CALL base_read( filespec='DATAJ1/ABS/NO3_jpl11.abs', &
1424 skip_cnt=6,rd_cnt=n,x=x1,y=y1 )
1425 y1(1:n) = y1(1:n)*1.E-20
1426 CALL add_pnts_inter2(x1,y1,yg1,kdata,n, &
1427 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
1430 CALL base_read( filespec='DATAJ1/YLD/NO3_jpl2011.qy', &
1431 skip_cnt=5,rd_cnt=n,x=x,y=q1_298, &
1432 y1=q1_230,y2=q1_190,y3=q2_298, &
1433 y4=q2_230,y5=q2_190 )
1435 q1_298(1:n) = q1_298(1:n)*.001
1436 q1_230(1:n) = q1_230(1:n)*.001
1437 q1_190(1:n) = q1_190(1:n)*.001
1438 q2_298(1:n) = q2_298(1:n)*.001
1439 q2_230(1:n) = q2_230(1:n)*.001
1440 q2_190(1:n) = q2_190(1:n)*.001
1442 CALL add_pnts_inter2(x,q1_298,yg_298,kdata,n, &
1443 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
1444 n = nsav ; x(1:n) = xsav(1:n)
1445 CALL add_pnts_inter2(x,q1_230,yg_230,kdata,n, &
1446 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
1447 n = nsav ; x(1:n) = xsav(1:n)
1448 CALL add_pnts_inter2(x,q1_190,yg_190,kdata,n, &
1449 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
1451 n = nsav ; x(1:n) = xsav(1:n)
1452 CALL add_pnts_inter2(x,q2_298,yg_298(1,2),kdata,n, &
1453 nw,wl,xsqy_tab(j)%label,deltax,(/1.,0./))
1454 n = nsav ; x(1:n) = xsav(1:n)
1455 CALL add_pnts_inter2(x,q2_230,yg_230(1,2),kdata,n, &
1456 nw,wl,xsqy_tab(j)%label,deltax,(/1.,0./))
1457 n = nsav ; x(1:n) = xsav(1:n)
1458 CALL add_pnts_inter2(x,q2_190,yg_190(1,2),kdata,n, &
1459 nw,wl,xsqy_tab(j)%label,deltax,(/1.,0./))
1461 END SUBROUTINE readit
1465 !=============================================================================*
1467 SUBROUTINE r04(nw,wl,wc,nz,tlev,airden,j)
1468 !-----------------------------------------------------------------------------*
1470 != Provide product of (cross section) x (quantum yiels) for N2O5 photolysis =*
1472 != (a) N2O5 + hv -> NO3 + NO + O(3P) =*
1473 != (b) N2O5 + hv -> NO3 + NO2 =*
1474 != Cross section from JPL2011: use tabulated values for 300K, correct for =*
1476 != Quantum yield: Analysis of data in JPL94 (->DATAJ1/YLD/N2O5.qy) =*
1477 !-----------------------------------------------------------------------------*
1479 INTEGER, intent(in) :: nw
1480 INTEGER, intent(in) :: nz
1481 INTEGER, intent(inout) :: j
1482 REAL, intent(in) :: wl(kw), wc(kw)
1483 REAL, intent(in) :: tlev(kz)
1484 REAL, intent(in) :: airden(kz)
1487 INTEGER, PARAMETER :: kdata = 200
1489 REAL x1(kdata), x2(kdata)
1490 REAL y1(kdata), A(kdata), B(kdata)
1491 INTEGER :: n, n1, n2
1496 REAL, save :: yg1(kw), yg2(kw)
1499 LOGICAL, save :: is_initialized = .false.
1501 if( initialize ) then
1502 if( .not. is_initialized ) then
1504 is_initialized = .true.
1507 call check_alloc( j, nz, nw-1 )
1508 if( xsqy_tab(j)%channel == 1 ) then
1510 xsqy_tab(j)%sq(1:nz,iw) = 0.
1512 elseif( xsqy_tab(j)%channel == 2 ) then
1513 ! temperature dependence only valid for 233 - 295 K. Extend to 300.
1514 t(1:nz) = MAX(233.,MIN(tlev(1:nz),300.))
1517 ! Apply temperature correction to 300K values. Do not use A-coefficients
1518 ! because they are inconsistent with the values at 300K.
1519 ! quantum yield = 1 for NO2 + NO3, zero for other channels
1520 dum(1:nz) = 1000.*yg2(iw)*(300. - t(1:nz))/(300.*t(1:nz))
1521 xsqy_tab(j)%sq(1:nz,iw) = yg1(iw) * 10.**(dum(1:nz))
1529 ! cross section from jpl2011, at 300 K
1532 CALL base_read( filespec='DATAJ1/ABS/N2O5_jpl11.abs', &
1533 skip_cnt=4,rd_cnt=n1,x=x1,y=y1 )
1534 y1(1:n1) = y1(1:n1) * 1.E-20
1535 CALL add_pnts_inter2(x1,y1,yg1,kdata,n1, &
1536 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
1538 ! read temperature dependence coefficients:
1540 CALL base_read( filespec='DATAJ1/ABS/N2O5_jpl11.abs', &
1541 skip_cnt=111,rd_cnt=n2,x=x2,y=A,y1=B )
1543 CALL add_pnts_inter2(x2,B,yg2,kdata,n2, &
1544 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
1546 END SUBROUTINE readit
1550 !=============================================================================*
1552 SUBROUTINE r06(nw,wl,wc,nz,tlev,airden,j)
1553 !-----------------------------------------------------------------------------*
1555 != Provide product of (cross section) x (quantum yield) for HNO3 photolysis =*
1556 != HNO3 + hv -> OH + NO2 =*
1557 != Cross section: Burkholder et al., 1993 =*
1558 != Quantum yield: Assumed to be unity =*
1559 !-----------------------------------------------------------------------------*
1561 INTEGER, intent(in) :: nw
1562 INTEGER, intent(in) :: nz
1563 INTEGER, intent(inout) :: j
1564 REAL, intent(in) :: wl(kw), wc(kw)
1565 REAL, intent(in) :: tlev(kz)
1566 REAL, intent(in) :: airden(kz)
1569 integer, PARAMETER :: kdata=100
1572 REAL x1(kdata), x2(kdata)
1573 REAL y1(kdata), y2(kdata)
1577 REAL, save :: yg1(kw), yg2(kw)
1581 if( initialize ) then
1584 call check_alloc( j, nz, nw-1 )
1586 ! correct for temperature dependence
1587 t(1:nz) = tlev(1:nz) - 298.
1589 xsqy_tab(j)%sq(1:nz,iw) = yg1(iw) * exp( yg2(iw)*t(1:nz) )
1596 ! HNO3 cross section parameters from Burkholder et al. 1993
1603 CALL base_read( filespec='DATAJ1/ABS/HNO3_burk.abs', &
1604 skip_cnt=6,rd_cnt=n1,x=y1,y=y2 )
1606 x1(1:n1) = (/ (184. + real(i)*2.,i=1,n1) /)
1607 xsav(1:n1) = x1(1:n1)
1609 y1(1:n1) = y1(1:n1) * 1.e-20
1610 CALL add_pnts_inter2(x1,y1,yg1,kdata,n1, &
1611 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
1613 y2(1:n1) = y2(1:n1) * 1.e-3
1614 yends(:) = (/ y2(1),y2(n1) /)
1615 n1 = nsav ; x1(1:n1) = xsav(1:n1)
1616 CALL add_pnts_inter2(x1,y2,yg2,kdata,n1, &
1617 nw,wl,xsqy_tab(j)%label,deltax,yends)
1619 END SUBROUTINE readit
1623 !=============================================================================*
1625 SUBROUTINE r08(nw,wl,wc,nz,tlev,airden,j)
1626 !-----------------------------------------------------------------------------*
1628 != Provide product of (cross section) x (quantum yield) for H2O2 photolysis =*
1629 != H2O2 + hv -> 2 OH =*
1630 != Cross section: From JPL97, tabulated values @ 298K for <260nm, T-depend.=*
1631 != parameterization for 260-350nm =*
1632 != Quantum yield: Assumed to be unity =*
1633 !-----------------------------------------------------------------------------*
1635 INTEGER, intent(in) :: nw
1636 INTEGER, intent(in) :: nz
1637 INTEGER, intent(inout) :: j
1638 REAL, intent(in) :: wl(kw), wc(kw)
1639 REAL, intent(in) :: tlev(kz)
1640 REAL, intent(in) :: airden(kz)
1643 integer, PARAMETER :: kdata=600
1649 real, parameter :: A0 = 6.4761E+04
1650 real, parameter :: A1 = -9.2170972E+02
1651 real, parameter :: A2 = 4.535649
1652 real, parameter :: A3 = -4.4589016E-03
1653 real, parameter :: A4 = -4.035101E-05
1654 real, parameter :: A5 = 1.6878206E-07
1655 real, parameter :: A6 = -2.652014E-10
1656 real, parameter :: A7 = 1.5534675E-13
1658 real, parameter :: B0 = 6.8123E+03
1659 real, parameter :: B1 = -5.1351E+01
1660 real, parameter :: B2 = 1.1522E-01
1661 real, parameter :: B3 = -3.0493E-05
1662 real, parameter :: B4 = -1.0924E-07
1664 INTEGER i, iw, n, idum
1670 REAL, save :: yg(kw)
1672 ! cross section from Lin et al. 1978
1674 if( initialize ) then
1677 call check_alloc( j, nz, nw-1 )
1679 t(1:nz) = MIN(MAX(tlev(1:nz),200.),400.)
1680 chi(1:nz) = 1./(1. + EXP(-1265./t(1:nz)))
1682 ! Parameterization (JPL94)
1683 ! Range 260-350 nm; 200-400 K
1684 IF ((wl(iw) .GE. 260.) .AND. (wl(iw) .LT. 350.)) THEN
1686 sumA = ((((((A7*lambda + A6)*lambda + A5)*lambda + &
1687 A4)*lambda +A3)*lambda + A2)*lambda + &
1689 sumB = (((B4*lambda + B3)*lambda + B2)*lambda + &
1692 xsqy_tab(j)%sq(1:nz,iw) = &
1693 (chi(1:nz) * sumA + (1. - chi(1:nz))*sumB)*1.E-21
1695 xsqy_tab(j)%sq(1:nz,iw) = yg(iw)
1703 ! cross section from JPL94 (identical to JPL97)
1704 ! tabulated data up to 260 nm
1708 CALL base_read( filespec='DATAJ1/ABS/H2O2_jpl94.abs', &
1709 rd_cnt=n,x=x1,y=y1 )
1710 y1(1:n) = y1(1:n) * 1.E-20
1713 CALL base_read( filespec='DATAJ1/ABS/H2O2_Kahan.abs', &
1714 skip_cnt=0,rd_cnt=n1,x=x1(n+1:),y=y1(n+1:) )
1717 CALL add_pnts_inter2(x1,y1,yg,kdata,n, &
1718 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
1720 END SUBROUTINE readit
1724 !=============================================================================*
1726 SUBROUTINE r09(nw,wl,wc,nz,tlev,airden,j)
1727 !-----------------------------------------------------------------------------*
1729 != Provide product of (cross section) x (quantum yield) for CHBr3 photolysis=*
1730 != CHBr3 + hv -> Products =*
1731 != Cross section: Choice of data from Atlas (?Talukdar???) or JPL97 =*
1732 != Quantum yield: Assumed to be unity =*
1733 !-----------------------------------------------------------------------------*
1735 INTEGER, intent(in) :: nw
1736 INTEGER, intent(in) :: nz
1737 INTEGER, intent(inout) :: j
1738 REAL, intent(in) :: wl(kw), wc(kw)
1739 REAL, intent(in) :: tlev(kz)
1740 REAL, intent(in) :: airden(kz)
1743 integer, PARAMETER :: kdata=200
1750 REAL, save :: yg(kw)
1757 if( initialize ) then
1760 call check_alloc( j, nz, nw-1 )
1764 ! kopt = 1: cross section from Elliot Atlas, 1997
1765 ! kopt = 2: cross section from JPL 1997
1770 t(1:nz) = 273. - tlev(1:nz)
1772 IF (wc(iw) .GT. 290. .AND. wc(iw) .LT. 340. ) then
1773 where( tlev(1:nz) > 210. .AND. tlev(1:nz) < 300. )
1774 xsqy_tab(j)%sq(1:nz,iw) = &
1775 EXP( (.06183 - .000241*wc(iw))*t(1:nz) &
1776 - (2.376 + 0.14757*wc(iw)) )
1778 xsqy_tab(j)%sq(1:nz,iw) = yg(iw)
1781 xsqy_tab(j)%sq(1:nz,iw) = yg(iw)
1789 ! jpl97, with temperature dependence formula,
1790 !w = 290 nm to 340 nm,
1792 !sigma, cm2 = exp((0.06183-0.000241*w)*(273.-T)-(2.376+0.14757*w))
1795 CALL base_read( filespec='DATAJ1/ABS/CHBr3.jpl97', &
1796 skip_cnt=6,rd_cnt=n1,x=x1,y=y1 )
1798 y1(1:n1) = y1(1:n1) * 1.e-20
1799 CALL add_pnts_inter2(x1,y1,yg,kdata,n1, &
1800 nw,wl,xsqy_tab(j)%label,deltax,(/y1(1),0./))
1802 END SUBROUTINE readit
1806 !=============================================================================*
1808 SUBROUTINE r11(nw,wl,wc,nz,tlev,airden,j)
1809 !-----------------------------------------------------------------------------*
1811 != Provide product (cross section) x (quantum yield) for CH3CHO photolysis: =*
1812 != (a) CH3CHO + hv -> CH3 + HCO =*
1813 != (b) CH3CHO + hv -> CH4 + CO =*
1814 != (c) CH3CHO + hv -> CH3CO + H =*
1815 != Cross section: Choice between =*
1816 != (1) IUPAC 97 data, from Martinez et al. =*
1817 != (2) Calvert and Pitts =*
1818 != (3) Martinez et al., Table 1 scanned from paper =*
1819 != (4) KFA tabulations =*
1820 != Quantum yields: Choice between =*
1821 != (1) IUPAC 97, pressure correction using Horowith and =*
1823 != (2) NCAR data file, from Moortgat, 1986 =*
1824 !-----------------------------------------------------------------------------*
1826 INTEGER, intent(in) :: nw
1827 INTEGER, intent(in) :: nz
1828 INTEGER, intent(inout) :: j
1829 REAL, intent(in) :: wl(kw), wc(kw)
1830 REAL, intent(in) :: tlev(kz)
1831 REAL, intent(in) :: airden(kz)
1834 integer, PARAMETER :: kdata=150
1838 REAL x1(kdata), x2(kdata)
1839 REAL y1(kdata), y2(kdata)
1848 REAL :: qy1_n0, qy1_0, x
1849 REAL, save :: yg(kw), yg1(kw), yg2(kw), yg3(kw)
1851 LOGICAL, save :: is_initialized = .false.
1853 chnl = xsqy_tab(j)%channel
1854 if( initialize ) then
1855 if( .not. is_initialized ) then
1857 is_initialized = .true.
1860 call check_alloc( ndx=j, nz=nw-1, nw=1 )
1861 if( chnl == 2 ) then
1862 xsqy_tab(j)%sq(1:nw-1,1) = yg(1:nw-1) * yg2(1:nw-1)
1863 elseif( chnl == 3 ) then
1864 xsqy_tab(j)%sq(1:nw-1,1) = yg(1:nw-1) * yg3(1:nw-1)
1868 if( xsqy_tab(j)%channel == 1 ) then
1869 call check_alloc( j, nz, nw-1 )
1875 ! input yields at n0 = 1 atm
1877 ! Pressure correction for CH3 + CHO channel:
1878 ! Assume pressure-dependence only for qy1, not qy2 or qy2.
1879 ! Assume total yield 1 at zero pressure
1880 qy1_0 = 1. - (yg2(iw) + yg3(iw))
1882 ! compute coefficient:
1883 ! Stern-Volmer: 1/q = 1/q0 + k N and N0 = 1 atm,
1884 ! then x = K N0 q0 = qy_0/qy_N0 - 1
1885 if (qy1_n0 > 0.) then
1886 x = qy1_0/qy1_n0 - 1.
1891 qy1(1:nz) = qy1_n0 * (1. + x) / (1. + x * airden(1:nz)/2.465E19)
1892 qy1(1:nz) = MIN( 1.,MAX(0.,qy1(1:nz)) )
1893 xsqy_tab(j)%sq(1:nz,iw) = sig * qy1(1:nz)
1906 CALL base_read( filespec='DATAJ1/CH3CHO/CH3CHO_jpl11.abs', &
1907 skip_cnt=2,rd_cnt=n,x=x1,y=y1 )
1908 y1(1:n) = y1(1:n) * 1.e-20
1910 CALL add_pnts_inter2(x1,y1,yg,kdata,n, &
1911 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
1916 CALL base_read( filespec='DATAJ1/CH3CHO/CH3CHO_iup.yld', &
1917 skip_cnt=4,rd_cnt=n,x=x1,y=y2,y1=y1 )
1920 CALL add_pnts_inter2(x1,y1,yg1,kdata,n, &
1921 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
1924 CALL add_pnts_inter2(x1,y2,yg2,kdata,n, &
1925 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
1929 END SUBROUTINE readit
1933 !=============================================================================*
1935 SUBROUTINE r12(nw,wl,wc,nz,tlev,airden,j)
1936 !-----------------------------------------------------------------------------*
1938 != Provide the product (cross section) x (quantum yield) for C2H5CHO =*
1940 != C2H5CHO + hv -> C2H5 + HCO =*
1942 != Cross section: Choice between =*
1943 != (1) IUPAC 97 data, from Martinez et al. =*
1944 != (2) Calvert and Pitts, as tabulated by KFA =*
1945 != Quantum yield: IUPAC 97 recommendation =*
1946 !-----------------------------------------------------------------------------*
1948 INTEGER, intent(in) :: nw
1949 INTEGER, intent(in) :: nz
1950 INTEGER, intent(inout) :: j
1951 REAL, intent(in) :: wl(kw), wc(kw)
1952 REAL, intent(in) :: tlev(kz)
1953 REAL, intent(in) :: airden(kz)
1955 integer, PARAMETER :: kdata=150
1963 REAL, save :: yg(kw), yg1(kw)
1969 if( initialize ) then
1972 call check_alloc( j, nz, nw-1 )
1975 ! 1: IUPAC-97 data, from Martinez et al.
1976 ! 2: Calvert and Pitts, as tabulated by KFA.
1986 ! use Stern-Volmer pressure dependence:
1987 IF (yg1(iw) .LT. pzero) THEN
1988 xsqy_tab(j)%sq(1:nz,iw) = 0.
1990 qy1(1:nz) = 1./(1. + (1./yg1(iw) - 1.)*airden(1:nz)/2.45e19)
1991 qy1(1:nz) = MIN(qy1(1:nz),1.)
1992 xsqy_tab(j)%sq(1:nz,iw) = yg(iw) * qy1(1:nz)
2001 character(len=256) :: emsg
2004 CALL base_read( filespec='DATAJ1/C2H5CHO/C2H5CHO_iup.abs', &
2005 skip_cnt=4,rd_cnt=n,x=x1,y=y1 )
2006 y1(1:n) = y1(1:n) * 1.e-20
2008 CALL add_pnts_inter2(x1,y1,yg,kdata,n, &
2009 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2014 CALL base_read( filespec='DATAJ1/C2H5CHO/C2H5CHO_iup.yld', &
2015 skip_cnt=4,rd_cnt=n,x=x1,y=y1 )
2017 CALL addpnt(x1,y1,kdata,n,x1(1)*(1.-deltax),0.)
2018 CALL addpnt(x1,y1,kdata,n, 0.,0.)
2019 CALL addpnt(x1,y1,kdata,n,340.,0.)
2020 CALL addpnt(x1,y1,kdata,n, 1.e+38,0.)
2021 CALL inter2(nw,wl,yg1,n,x1,y1,ierr)
2022 IF (ierr .NE. 0) THEN
2023 write(emsg,'(''readit: Error '',i5,'' in inter2 for '',a)') ierr,trim(xsqy_tab(j)%label)
2024 call wrf_error_fatal( trim(emsg) )
2027 END SUBROUTINE readit
2031 !=============================================================================*
2033 SUBROUTINE r13(nw,wl,wc,nz,tlev,airden,j)
2034 !-----------------------------------------------------------------------------*
2036 != Provide the product (cross section) x (quantum yield) for CHOCHO =*
2038 != CHOCHO + hv -> Products =*
2040 != Cross section: Choice between =*
2041 != (1) Plum et al., as tabulated by IUPAC 97 =*
2042 != (2) Plum et al., as tabulated by KFA. =*
2043 != (3) Orlando et al. =*
2044 != (4) Horowitz et al., 2001 =*
2045 != Quantum yield: IUPAC 97 recommendation =*
2046 !-----------------------------------------------------------------------------*
2048 INTEGER, intent(in) :: nw
2049 INTEGER, intent(in) :: nz
2050 INTEGER, intent(inout) :: j
2051 REAL, intent(in) :: wl(kw), wc(kw)
2052 REAL, intent(in) :: tlev(kz)
2053 REAL, intent(in) :: airden(kz)
2056 integer, PARAMETER :: kdata=500
2059 REAL x(kdata), x1(kdata)
2060 REAL y1(kdata), y2(kdata), y3(kdata)
2063 REAL, save :: yg(kw), yg1(kw), yg2(kw), yg3(kw)
2065 LOGICAL, save :: is_initialized = .false.
2070 if( initialize ) then
2071 if( .not. is_initialized ) then
2073 is_initialized = .true.
2075 call check_alloc( ndx=j, nz=nw-1, nw=1 )
2076 if( xsqy_tab(j)%channel == 1 ) then
2077 xsqy_tab(j)%sq(1:nw-1,1) = yg(1:nw-1) * yg1(1:nw-1)
2078 elseif( xsqy_tab(j)%channel == 2 ) then
2079 xsqy_tab(j)%sq(1:nw-1,1) = yg(1:nw-1) * yg2(1:nw-1)
2080 elseif( xsqy_tab(j)%channel == 3 ) then
2081 xsqy_tab(j)%sq(1:nw-1,1) = yg(1:nw-1) * yg3(1:nw-1)
2095 CALL base_read( filespec='DATAJ1/CHOCHO/glyoxal_jpl11.abs', &
2096 skip_cnt=2,rd_cnt=n,x=x1,y=y1 )
2097 y1(1:n) = y1(1:n) * 1.e-20
2099 CALL add_pnts_inter2(x1,y1,yg,kdata,n, &
2100 nw,wl,xsqy_tab(j)%label,deltax,yends)
2105 CALL base_read( filespec='DATAJ1/CHOCHO/glyoxal_jpl11.qy', &
2106 skip_cnt=3,rd_cnt=n,x=x,y=dum,y1=y1,y2=y2,y3=y3 )
2109 CALL add_pnts_inter2(x,y1,yg1,kdata,n, &
2110 nw,wl,xsqy_tab(j)%label,deltax,yends)
2111 n = nsav ; x(1:n) = xsav(1:n)
2113 CALL add_pnts_inter2(x,y2,yg2,kdata,n, &
2114 nw,wl,xsqy_tab(j)%label,deltax,yends)
2115 n = nsav ; x(1:n) = xsav(1:n)
2117 CALL add_pnts_inter2(x,y3,yg3,kdata,n, &
2118 nw,wl,xsqy_tab(j)%label,deltax,yends)
2120 END SUBROUTINE readit
2124 !=============================================================================*
2126 SUBROUTINE r14(nw,wl,wc,nz,tlev,airden,j)
2127 !-----------------------------------------------------------------------------*
2129 != Provide the product (cross section) x (quantum yield) for CH3COCHO =*
2131 != CH3COCHO + hv -> CH3CO + HCO =*
2132 !-----------------------------------------------------------------------------*
2134 INTEGER, intent(in) :: nw
2135 INTEGER, intent(in) :: nz
2136 INTEGER, intent(inout) :: j
2137 REAL, intent(in) :: wl(kw), wc(kw)
2138 REAL, intent(in) :: tlev(kz)
2139 REAL, intent(in) :: airden(kz)
2142 integer, PARAMETER :: kdata=500
2150 REAL, save :: yg(kw)
2157 if( initialize ) then
2160 call check_alloc( j, nz, nw-1 )
2168 ! zero pressure yield:
2169 ! 1.0 for wc < 380 nm
2170 ! 0.0 for wc > 440 nm
2171 ! linear in between:
2172 phi0 = 1. - (wc(iw) - 380.)/60.
2173 phi0 = MIN(MAX(0.,phi0),1.)
2175 ! Pressure correction: quenching coefficient, torr-1
2176 ! in air, Koch and Moortgat:
2177 kq = 1.36e8 * EXP(-8793./wc(iw))
2178 ! in N2, Chen et al:
2179 IF(phi0 .GT. 0.) THEN
2180 IF (wc(iw) .GE. 380. .AND. wc(iw) .LE. 440.) THEN
2181 xsqy_tab(j)%sq(1:nz,iw) = sig * phi0 &
2182 / (phi0 + kq * airden(1:nz) * 760./2.456E19)
2184 xsqy_tab(j)%sq(1:nz,iw) = sig * phi0
2187 xsqy_tab(j)%sq(1:nz,iw) = 0.
2197 CALL base_read( filespec='DATAJ1/CH3COCHO/CH3COCHO_jpl11.abs', &
2198 skip_cnt=2,rd_cnt=n,x=x1,y=y1 )
2199 y1(1:n) = y1(1:n) * 1.e-20
2200 CALL add_pnts_inter2(x1,y1,yg,kdata,n, &
2201 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2203 END SUBROUTINE readit
2207 !=============================================================================*
2209 SUBROUTINE r15(nw,wl,wc,nz,tlev,airden,j)
2210 !-----------------------------------------------------------------------------*
2212 != Provide product (cross section) x (quantum yield) for CH3COCH3 photolysis=*
2213 != CH3COCH3 + hv -> Products =*
2214 !-----------------------------------------------------------------------------*
2216 INTEGER, intent(in) :: nw
2217 INTEGER, intent(in) :: nz
2218 INTEGER, intent(inout) :: j
2219 REAL, intent(in) :: wl(kw), wc(kw)
2220 REAL, intent(in) :: tlev(kz)
2221 REAL, intent(in) :: airden(kz)
2223 integer, PARAMETER :: kdata=150
2227 REAL y1(kdata), y2(kdata), y3(kdata), y4(kdata)
2230 REAL, save :: yg(kw), yg2(kw), yg3(kw)
2238 if( initialize ) then
2241 call check_alloc( j, nz, nw-1 )
2246 T(1:nz) = MIN(MAX(tlev(1:nz), 235.),298.)
2248 sig(1:nz) = yg(iw) * (1. + t(1:nz)*(yg2(iw) + t(1:nz)*yg3(iw)))
2249 CALL qyacet(nz, wc(iw), tlev, airden, fac)
2250 xsqy_tab(j)%sq(1:nz,iw) = sig(1:nz)*min(max(0.,fac(1:nz)),1.)
2261 n = 135 ; nsav = 135
2262 CALL base_read( filespec='DATAJ1/CH3COCH3/CH3COCH3_jpl11.abs', &
2263 skip_cnt=5,rd_cnt=n,x=x1,y=y1,y1=y2,y2=y3,y3=y4 )
2264 y1(1:n) = y1(1:n) * 1.e-20
2265 y2(1:n) = y2(1:n) * 1.e-3
2266 y3(1:n) = y3(1:n) * 1.e-5
2269 CALL add_pnts_inter2(x1,y1,yg,kdata,n, &
2270 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2271 n = nsav ; x1(1:n) = xsav(1:n)
2272 CALL add_pnts_inter2(x1,y2,yg2,kdata,n, &
2273 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2274 n = nsav ; x1(1:n) = xsav(1:n)
2275 CALL add_pnts_inter2(x1,y3,yg3,kdata,n, &
2276 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2278 END SUBROUTINE readit
2282 !=============================================================================*
2284 SUBROUTINE r17(nw,wl,wc,nz,tlev,airden,j)
2285 !-----------------------------------------------------------------------------*
2287 != Provide product (cross section) x (quantum yield) for CH3ONO2 =*
2289 != CH3ONO2 + hv -> CH3O + NO2 =*
2290 !-----------------------------------------------------------------------------*
2292 INTEGER, intent(in) :: nw
2293 INTEGER, intent(in) :: nz
2294 INTEGER, intent(inout) :: j
2295 REAL, intent(in) :: wl(kw), wc(kw)
2296 REAL, intent(in) :: tlev(kz)
2297 REAL, intent(in) :: airden(kz)
2299 integer, PARAMETER :: kdata = 100
2305 REAL :: y1(kdata), y2(kdata)
2308 REAL, save :: yg(kw), yg1(kw)
2314 if( initialize ) then
2317 call check_alloc( j, nz, nw-1 )
2322 T(1:nz) = tlev(1:nz) - 298.
2324 xsqy_tab(j)%sq(1:nz,iw) = yg(iw) * exp( yg1(iw) * T(1:nz) )
2336 CALL base_read( filespec='DATAJ1/RONO2/CH3ONO2_jpl11.abs', &
2337 skip_cnt=2,rd_cnt=n,x=x1,y=y1,y1=y2 )
2338 y1(1:n) = y1(1:n) * 1.e-20
2339 y2(1:n) = y2(1:n) * 1.e-3
2341 CALL add_pnts_inter2(x1,y1,yg,kdata,n, &
2342 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2343 n = nsav ; x1(1:n) = xsav(1:n)
2344 CALL add_pnts_inter2(x1,y2,yg1,kdata,n, &
2345 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2347 END SUBROUTINE readit
2351 !=============================================================================*
2353 SUBROUTINE r18(nw,wl,wc,nz,tlev,airden,j)
2354 !-----------------------------------------------------------------------------*
2356 != Provide product (cross section) x (quantum yield) for PAN photolysis: =*
2357 != PAN + hv -> Products =*
2359 != Cross section: from Talukdar et al., 1995 =*
2360 != Quantum yield: Assumed to be unity =*
2361 !-----------------------------------------------------------------------------*
2363 INTEGER, intent(in) :: nw
2364 INTEGER, intent(in) :: nz
2365 INTEGER, intent(inout) :: j
2366 REAL, intent(in) :: wl(kw), wc(kw)
2367 REAL, intent(in) :: tlev(kz)
2368 REAL, intent(in) :: airden(kz)
2371 integer, PARAMETER :: kdata=100
2376 REAL :: y1(kdata), y2(kdata)
2381 ! from JPL 2011 values for >300 nm.
2382 ! real, parameter :: qyNO2 = .7
2383 ! real, parameter :: qyNO3 = .3
2384 real, parameter :: qyld(2) = (/ .7,.3 /)
2386 INTEGER :: ierr, chnl
2387 REAL, save :: yg(kw), yg2(kw)
2388 REAL :: sig(nz), T(nz)
2389 LOGICAL, save :: is_initialized = .false.
2391 if( initialize ) then
2392 if( .not. is_initialized ) then
2394 is_initialized = .true.
2397 call check_alloc( j, nz, nw-1 )
2399 chnl = xsqy_tab(j)%channel
2400 T(1:nz) = tlev(1:nz) - 298.
2402 sig(1:nz) = yg(iw) * EXP( yg2(iw)*T(1:nz) )
2403 xsqy_tab(j)%sq(1:nz,iw) = qyld(chnl) * sig(1:nz)
2410 ! cross section from
2411 ! Talukdar et al., 1995, J.Geophys.Res. 100/D7, 14163-14174
2417 CALL base_read( filespec='DATAJ1/RONO2/PAN_talukdar.abs', &
2418 skip_cnt=14,rd_cnt=n,x=x1,y=y1,y1=y2 )
2419 y1(1:n) = y1(1:n) * 1.E-20
2420 y2(1:n) = y2(1:n) * 1.E-3
2423 CALL add_pnts_inter2(x1,y1,yg,kdata,n, &
2424 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2425 n = nsav ; x1(1:n) = xsav(1:n)
2426 CALL add_pnts_inter2(x1,y2,yg2,kdata,n, &
2427 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2429 END SUBROUTINE readit
2433 !=============================================================================*
2435 SUBROUTINE r20(nw,wl,wc,nz,tlev,airden,j)
2436 !-----------------------------------------------------------------------------*
2438 != Provide product (cross section) x (quantum yield) for CCl4 photolysis: =*
2439 != CCl4 + hv -> Products =*
2440 != Cross section: from JPL 97 recommendation =*
2441 != Quantum yield: assumed to be unity =*
2442 !-----------------------------------------------------------------------------*
2444 INTEGER, intent(in) :: nw
2445 INTEGER, intent(in) :: nz
2446 INTEGER, intent(inout) :: j
2447 REAL, intent(in) :: wl(kw), wc(kw)
2448 REAL, intent(in) :: tlev(kz)
2449 REAL, intent(in) :: airden(kz)
2452 integer, PARAMETER :: kdata=100
2458 real, parameter :: b0 = 1.0739
2459 real, parameter :: b1 = -1.6275e-2
2460 real, parameter :: b2 = 8.8141e-5
2461 real, parameter :: b3 = -1.9811e-7
2462 real, parameter :: b4 = 1.5022e-10
2464 REAL, save :: yg(kw)
2465 INTEGER i, iw, n, idum
2471 if( initialize ) then
2474 call check_alloc( j, nz, nw-1 )
2476 ! mabs = 1: jpl 1997 recommendation
2477 ! mabs = 2: jpl 2011 recommendation, with T dependence
2481 ! compute temperature correction factors:
2483 !** quantum yield assumed to be unity
2485 temp(1:nz) = min(max(tlev(1:nz),210.),300.)
2486 temp(1:nz) = temp(1:nz) - 295.
2488 ! compute temperature correction coefficients:
2490 IF(wc(iw) .GT. 194. .AND. wc(iw) .LT. 250.) THEN
2492 tcoeff = b0 + w1*(b1 + w1*(b2 + w1*(b3 + w1*b4)))
2494 xsqy_tab(j)%sq(1:nz,iw) = yg(iw) * 10.**(tcoeff*temp(1:nz))
2501 !** cross sections from JPL97 recommendation (identical to 94 data)
2504 CALL base_read( filespec='DATAJ1/ABS/CCl4_jpl11.abs', &
2505 skip_cnt=5,rd_cnt=n,x=x1,y=y1 )
2506 y1(1:n) = y1(1:n) * 1.E-20
2508 CALL add_pnts_inter2(x1,y1,yg,kdata,n, &
2509 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2511 END SUBROUTINE readit
2515 !=============================================================================*
2517 SUBROUTINE r23(nw,wl,wc,nz,tlev,airden,j)
2518 !-----------------------------------------------------------------------------*
2520 != Provide product (cross section) x (quantum yield) for CFC-113 photolysis:=*
2521 != CF2ClCFCl2 + hv -> Products =*
2522 != Cross section: from JPL 97 recommendation, linear interp. between =*
2523 != values at 210 and 295K =*
2524 != Quantum yield: assumed to be unity =*
2525 !-----------------------------------------------------------------------------*
2527 INTEGER, intent(in) :: nw
2528 INTEGER, intent(in) :: nz
2529 INTEGER, intent(inout) :: j
2530 REAL, intent(in) :: wl(kw), wc(kw)
2531 REAL, intent(in) :: tlev(kz)
2532 REAL, intent(in) :: airden(kz)
2535 integer, PARAMETER :: kdata=100
2538 REAL x1(kdata), x2(kdata)
2539 REAL y1(kdata), y2(kdata)
2542 real, parameter :: tfac1 = 1./(295. - 210.)
2544 REAL, save :: yg2(kw), ydel(kw)
2549 INTEGER i, iw, n, idum
2553 if( initialize ) then
2555 ydel(1:nw-1) = yg1(1:nw-1) - yg2(1:nw-1)
2557 call check_alloc( j, nz, nw-1 )
2559 !** quantum yield assumed to be unity
2561 t(1:nz) = MAX(210.,MIN(tlev(1:nz),295.))
2562 slope(1:nz) = (t(1:nz) - 210.)*tfac1
2564 xsqy_tab(j)%sq(1:nz,iw) = yg2(iw) + slope(1:nz)*ydel(iw)
2571 !** cross sections from JPL97 recommendation (identical to 94 recommendation)
2576 CALL base_read( filespec='DATAJ1/ABS/CFC-113_jpl94.abs', &
2577 rd_cnt=n,x=x1,y=y1,y1=y2 )
2578 y1(1:n) = y1(1:n) * 1.E-20
2579 y2(1:n) = y2(1:n) * 1.E-20
2584 CALL add_pnts_inter2(x1,y1,yg1,kdata,n, &
2585 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2588 n = nsav ; x1(1:n) = xsav(1:n)
2589 CALL add_pnts_inter2(x1,y2,yg2,kdata,n, &
2590 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2592 END SUBROUTINE readit
2596 !=============================================================================*
2598 SUBROUTINE r24(nw,wl,wc,nz,tlev,airden,j)
2599 !-----------------------------------------------------------------------------*
2601 != Provide product (cross section) x (quantum yield) for CFC-144 photolysis:=*
2602 != CF2ClCF2Cl + hv -> Products =*
2603 != Cross section: from JPL 97 recommendation, linear interp. between values =*
2604 != at 210 and 295K =*
2605 != Quantum yield: assumed to be unity =*
2606 !-----------------------------------------------------------------------------*
2608 INTEGER, intent(in) :: nw
2609 INTEGER, intent(in) :: nz
2610 INTEGER, intent(inout) :: j
2611 REAL, intent(in) :: wl(kw), wc(kw)
2612 REAL, intent(in) :: tlev(kz)
2613 REAL, intent(in) :: airden(kz)
2616 integer, PARAMETER :: kdata=100
2619 REAL x1(kdata), x2(kdata)
2620 REAL y1(kdata), y2(kdata)
2623 real, parameter :: tfac1 = 1./(295. - 210.)
2625 REAL, save :: yg2(kw), ydel(kw)
2630 INTEGER i, iw, n, idum
2634 if( initialize ) then
2636 ydel(1:nw-1) = yg1(1:nw-1) - yg2(1:nw-1)
2638 call check_alloc( j, nz, nw-1 )
2640 !** quantum yield assumed to be unity
2642 t(1:nz) = MAX(210.,MIN(tlev(1:nz),295.))
2643 slope(1:nz) = (t(1:nz) - 210.)*tfac1
2645 xsqy_tab(j)%sq(1:nz,iw) = yg2(iw) + slope(1:nz)*ydel(iw)
2652 !*** cross sections from JPL97 recommendation (identical to 94 recommendation)
2657 CALL base_read( filespec='DATAJ1/ABS/CFC-114_jpl94.abs', &
2658 rd_cnt=n,x=x1,y=y1,y1=y2 )
2659 y1(1:n) = y1(1:n) * 1.E-20
2660 y2(1:n) = y2(1:n) * 1.E-20
2665 CALL add_pnts_inter2(x1,y1,yg1,kdata,n, &
2666 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2668 n = nsav ; x1(1:n) = xsav(1:n)
2670 CALL add_pnts_inter2(x1,y2,yg2,kdata,n, &
2671 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2673 END SUBROUTINE readit
2677 !=============================================================================*
2679 SUBROUTINE r26(nw,wl,wc,nz,tlev,airden,j)
2680 !-----------------------------------------------------------------------------*
2682 != Provide product (cross section) x (quantum yield) for CFC-11 photolysis =*
2683 != CCl3F + hv -> Products =*
2684 != Cross section: from JPL 97 recommendation =*
2685 != Quantum yield: assumed to be unity =*
2686 !-----------------------------------------------------------------------------*
2688 INTEGER, intent(in) :: nw
2689 INTEGER, intent(in) :: nz
2690 INTEGER, intent(inout) :: j
2691 REAL, intent(in) :: wl(kw), wc(kw)
2692 REAL, intent(in) :: tlev(kz)
2693 REAL, intent(in) :: airden(kz)
2695 integer, PARAMETER :: kdata=100
2701 REAL, save :: yg(kw)
2705 if( initialize ) then
2708 call check_alloc( j, nz, nw-1 )
2710 !*** quantum yield assumed to be unity
2712 t(1:nz) = 1.E-04 * (tlev(1:nz) - 298.)
2714 xsqy_tab(j)%sq(1:nz,iw) = yg(iw) * EXP((wc(iw)-184.9) * t(1:nz))
2721 !*** cross sections from JPL97 recommendation (identical to 94 recommendation)
2723 CALL base_read( filespec='DATAJ1/ABS/CFC-11_jpl94.abs',rd_cnt=n,x=x1,y=y1 )
2724 y1(1:n) = y1(1:n) * 1.E-20
2728 CALL add_pnts_inter2(x1,y1,yg,kdata,n, &
2729 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2731 END SUBROUTINE readit
2735 !=============================================================================*
2737 SUBROUTINE r27(nw,wl,wc,nz,tlev,airden,j)
2738 !-----------------------------------------------------------------------------*
2740 != Provide product (cross section) x (quantum yield) for CFC-12 photolysis:=*
2741 != CCl2F2 + hv -> Products =*
2742 != Cross section: from JPL 97 recommendation =*
2743 != Quantum yield: assumed to be unity =*
2744 !-----------------------------------------------------------------------------*
2746 INTEGER, intent(in) :: nw
2747 INTEGER, intent(in) :: nz
2748 INTEGER, intent(inout) :: j
2749 REAL, intent(in) :: wl(kw), wc(kw)
2750 REAL, intent(in) :: tlev(kz)
2751 REAL, intent(in) :: airden(kz)
2754 integer, PARAMETER :: kdata=100
2760 REAL, save :: yg(kw)
2764 if( initialize ) then
2767 call check_alloc( j, nz, nw-1 )
2768 !*** quantum yield assumed to be unity
2769 t(1:nz) = 1.E-04 * (tlev(1:nz) - 298.)
2771 xsqy_tab(j)%sq(1:nz,iw) = yg(iw) * EXP((wc(iw)-184.9) * t(1:nz))
2778 !*** cross sections from JPL97 recommendation (identical to 94 recommendation)
2780 CALL base_read( filespec='DATAJ1/ABS/CFC-12_jpl94.abs',rd_cnt=n,x=x1,y=y1 )
2781 y1(1:n) = y1(1:n) * 1.E-20
2784 CALL add_pnts_inter2(x1,y1,yg,kdata,n, &
2785 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2787 END SUBROUTINE readit
2791 !=============================================================================*
2793 SUBROUTINE r29(nw,wl,wc,nz,tlev,airden,j)
2794 !-----------------------------------------------------------------------------*
2796 != Provide product (cross section) x (quantum yield) for CH3CCl3 photolysis =*
2797 != CH3CCl3 + hv -> Products =*
2798 != Cross section: from JPL 97 recommendation, piecewise linear interp. =*
2799 != of data at 210, 250, and 295K =*
2800 != Quantum yield: assumed to be unity =*
2801 !-----------------------------------------------------------------------------*
2803 INTEGER, intent(in) :: nw
2804 INTEGER, intent(in) :: nz
2805 INTEGER, intent(inout) :: j
2806 REAL, intent(in) :: wl(kw), wc(kw)
2807 REAL, intent(in) :: tlev(kz)
2808 REAL, intent(in) :: airden(kz)
2811 integer, PARAMETER :: kdata=100
2814 REAL x1(kdata), x2(kdata), x3(kdata)
2815 REAL y1(kdata), y2(kdata), y3(kdata)
2818 real, parameter :: tfac1 = 1./(250. - 210.)
2819 real, parameter :: tfac2 = 1./(295. - 250.)
2821 REAL, save :: yg2(kw), yg3(kw), ydel1(kw), ydel2(kw)
2826 INTEGER i, iw, n, idum
2830 if( initialize ) then
2832 ydel2(1:nw-1) = yg2(1:nw-1) - yg3(1:nw-1)
2833 ydel1(1:nw-1) = yg1(1:nw-1) - yg2(1:nw-1)
2835 call check_alloc( j, nz, nw-1 )
2837 !*** quantum yield assumed to be unity
2839 t(1:nz) = MIN(295.,MAX(tlev(1:nz),210.))
2841 where( t(1:nz) <= 250. )
2842 slope(1:nz) = (t(1:nz) - 210.)*tfac1
2843 xsqy_tab(j)%sq(1:nz,iw) = yg3(iw) + slope(1:nz)*ydel2(iw)
2845 slope(1:nz) = (t(1:nz) - 250.)*tfac2
2846 xsqy_tab(j)%sq(1:nz,iw) = yg2(iw) + slope(1:nz)*ydel1(iw)
2854 !*** cross sections from JPL97 recommendation (identical to 94 recommendation)
2859 CALL base_read( filespec='DATAJ1/ABS/CH3CCl3_jpl94.abs', &
2860 rd_cnt=n,x=x1,y=y1,y1=y2,y2=y3 )
2861 y1(1:n) = y1(1:n) * 1.E-20
2862 y2(1:n) = y2(1:n) * 1.E-20
2863 y3(1:n) = y3(1:n) * 1.E-20
2868 CALL add_pnts_inter2(x1,y1,yg1,kdata,n, &
2869 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2871 n = nsav ; x1(1:n) = xsav(1:n)
2873 CALL add_pnts_inter2(x1,y2,yg2,kdata,n, &
2874 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2876 n = nsav ; x1(1:n) = xsav(1:n)
2878 CALL add_pnts_inter2(x1,y3,yg3,kdata,n, &
2879 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2881 END SUBROUTINE readit
2885 !=============================================================================*
2887 SUBROUTINE r30(nw,wl,wc,nz,tlev,airden,j)
2888 !-----------------------------------------------------------------------------*
2890 != Provide product (cross section) x (quantum yield) for CH3Cl photolysis: =*
2891 != CH3Cl + hv -> Products =*
2892 != Cross section: from JPL 97 recommendation, piecewise linear interp. =*
2893 != from values at 255, 279, and 296K =*
2894 != Quantum yield: assumed to be unity =*
2895 !-----------------------------------------------------------------------------*
2897 INTEGER, intent(in) :: nw
2898 INTEGER, intent(in) :: nz
2899 INTEGER, intent(inout) :: j
2900 REAL, intent(in) :: wl(kw), wc(kw)
2901 REAL, intent(in) :: tlev(kz)
2902 REAL, intent(in) :: airden(kz)
2905 integer, PARAMETER :: kdata=100
2908 REAL x1(kdata), x2(kdata), x3(kdata)
2909 REAL y1(kdata), y2(kdata), y3(kdata)
2912 real, parameter :: tfac1 = 1./(279. - 255.)
2913 real, parameter :: tfac2 = 1./(296. - 279.)
2915 REAL, save :: yg2(kw), yg3(kw)
2916 REAL, save :: ydel1(kw), ydel2(kw)
2921 INTEGER i, iw, n, idum
2925 if( initialize ) then
2927 ydel2(1:nw-1) = yg2(1:nw-1) - yg3(1:nw-1)
2928 ydel1(1:nw-1) = yg1(1:nw-1) - yg2(1:nw-1)
2930 call check_alloc( j, nz, nw-1 )
2932 !*** quantum yield assumed to be unity
2934 t(1:nz) = MAX(255.,MIN(tlev(1:nz),296.))
2936 where( t(1:nz) <= 279. )
2937 slope(1:nz) = (t(1:nz) - 255.)*tfac1
2938 xsqy_tab(j)%sq(1:nz,iw) = yg3(iw) + slope(1:nz)*ydel2(iw)
2940 slope(1:nz) = (t(1:nz) - 279.)*tfac2
2941 xsqy_tab(j)%sq(1:nz,iw) = yg2(iw) + slope(1:nz)*ydel1(iw)
2949 !*** cross sections from JPL97 recommendation (identical to 94 recommendation)
2954 CALL base_read( filespec='DATAJ1/ABS/CH3Cl_jpl94.abs', &
2955 rd_cnt=n,x=x1,y=y1,y1=y2,y2=y3 )
2956 y1(1:n) = y1(1:n) * 1.E-20
2957 y2(1:n) = y2(1:n) * 1.E-20
2958 y3(1:n) = y3(1:n) * 1.E-20
2963 CALL add_pnts_inter2(x1,y1,yg1,kdata,n, &
2964 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2966 n = nsav ; x1(1:n) = xsav(1:n)
2968 CALL add_pnts_inter2(x1,y2,yg2,kdata,n, &
2969 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2971 n = nsav ; x1(1:n) = xsav(1:n)
2973 CALL add_pnts_inter2(x1,y3,yg3,kdata,n, &
2974 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
2976 END SUBROUTINE readit
2980 !=============================================================================*
2982 SUBROUTINE r32(nw,wl,wc,nz,tlev,airden,j)
2983 !-----------------------------------------------------------------------------*
2985 != Provide product (cross section) x (quantum yield) for HCFC-123 photolysis=*
2986 != CF3CHCl2 + hv -> Products =*
2987 != Cross section: from Orlando et al., 1991 =*
2988 != Quantum yield: assumed to be unity =*
2989 !-----------------------------------------------------------------------------*
2991 INTEGER, intent(in) :: nw
2992 INTEGER, intent(in) :: nz
2993 INTEGER, intent(inout) :: j
2994 REAL, intent(in) :: wl(kw), wc(kw)
2995 REAL, intent(in) :: tlev(kz)
2996 REAL, intent(in) :: airden(kz)
2999 real, parameter :: LBar = 206.214
3008 REAL, save :: coeff(4,3)
3009 CHARACTER*120 inline
3011 if( initialize ) then
3014 call check_alloc( j, nz, nw-1 )
3016 !*** quantum yield assumed to be unity
3020 ! use parameterization only up to 220 nm, as the error bars associated with
3021 ! the measurements beyond 220 nm are very large (Orlando, priv.comm.)
3022 IF (lambda .GE. 190. .AND. lambda .LE. 220.) THEN
3023 t(1:nz) = MIN(295.,MAX(tlev(1:nz),203.)) - TBar
3026 sum(1:nz) = (coeff(i,1) + t(1:nz)*(coeff(i,2) + t(1:nz)*coeff(i,3))) &
3027 * (lambda-LBar)**(i-1) + sum(1:nz)
3029 xsqy_tab(j)%sq(1:nz,iw) = EXP(sum(1:nz))
3031 xsqy_tab(j)%sq(1:nz,iw) = 0.
3039 !*** cross section from Orlando et al., 1991
3041 OPEN(kin,FILE='DATAJ1/ABS/HCFCs_orl.abs',STATUS='OLD')
3046 READ(kin,'(a120)') inline
3047 READ(inline(6:),*) TBar,i,(coeff(i,k),k=1,3)
3048 READ(kin,*) i,(coeff(i,k),k=1,3)
3049 READ(kin,*) i,(coeff(i,k),k=1,3)
3050 READ(kin,*) i,(coeff(i,k),k=1,3)
3053 END SUBROUTINE readit
3057 !=============================================================================*
3059 SUBROUTINE r33(nw,wl,wc,nz,tlev,airden,j)
3060 !-----------------------------------------------------------------------------*
3062 != Provide product (cross section) x (quantum yield) for HCFC-124 photolysis=*
3063 != CF3CHFCl + hv -> Products =*
3064 != Cross section: from Orlando et al., 1991 =*
3065 != Quantum yield: assumed to be unity =*
3066 !-----------------------------------------------------------------------------*
3068 INTEGER, intent(in) :: nw
3069 INTEGER, intent(in) :: nz
3070 INTEGER, intent(inout) :: j
3071 REAL, intent(in) :: wl(kw), wc(kw)
3072 REAL, intent(in) :: tlev(kz)
3073 REAL, intent(in) :: airden(kz)
3076 real, parameter :: LBar = 206.214
3078 INTEGER i, iw, n, idum
3085 REAL, save :: coeff(4,3)
3086 CHARACTER*120 inline
3088 if( initialize ) then
3091 call check_alloc( j, nz, nw-1 )
3093 !*** quantum yield assumed to be unity
3097 IF (lambda .GE. 190. .AND. lambda .LE. 230.) THEN
3098 t(1:nz) = MIN(295.,MAX(tlev(1:nz),203.)) - TBar
3101 sum(1:nz) = (coeff(i,1) + t(1:nz)*(coeff(i,2) + t(1:nz)*coeff(i,3))) &
3102 * (lambda-LBar)**(i-1) + sum(1:nz)
3104 xsqy_tab(j)%sq(1:nz,iw) = EXP(sum(1:nz))
3106 xsqy_tab(j)%sq(1:nz,iw) = 0.
3114 !*** cross section from Orlando et al., 1991
3116 OPEN(kin,FILE='DATAJ1/ABS/HCFCs_orl.abs',STATUS='OLD')
3122 READ(kin,'(a120)') inline
3123 READ(inline(6:),*) TBar,i,(coeff(i,k),k=1,3)
3124 READ(kin,*) i,(coeff(i,k),k=1,3)
3125 READ(kin,*) i,(coeff(i,k),k=1,3)
3126 READ(kin,*) i,(coeff(i,k),k=1,3)
3129 END SUBROUTINE readit
3133 !=============================================================================*
3135 SUBROUTINE r35(nw,wl,wc,nz,tlev,airden,j)
3136 !-----------------------------------------------------------------------------*
3138 != Provide product (cross section) x (quantum yield) for HCFC-142b =*
3140 != CH3CF2Cl + hv -> Products =*
3141 != Cross section: from Orlando et al., 1991 =*
3142 != Quantum yield: assumed to be unity =*
3143 !-----------------------------------------------------------------------------*
3145 INTEGER, intent(in) :: nw
3146 INTEGER, intent(in) :: nz
3147 INTEGER, intent(inout) :: j
3148 REAL, intent(in) :: wl(kw), wc(kw)
3149 REAL, intent(in) :: tlev(kz)
3150 REAL, intent(in) :: airden(kz)
3153 real, parameter :: LBar = 206.214
3155 INTEGER i, iw, n, idum
3163 REAL, save :: coeff(4,3)
3166 if( initialize ) then
3169 call check_alloc( j, nz, nw-1 )
3171 !*** quantum yield assumed to be unity
3175 IF (lambda .GE. 190. .AND. lambda .LE. 230.) THEN
3176 t(1:nz) = MIN(295.,MAX(tlev(1:nz),203.)) - TBar
3179 sum(1:nz) = (coeff(i,1) + t(1:nz)*(coeff(i,2) + t(1:nz)*coeff(i,3))) &
3180 * (lambda-LBar)**(i-1) + sum(1:nz)
3182 ! offeset exponent by 40 (exp(-40.) = 4.248e-18) to prevent exp. underflow errors
3184 xsqy_tab(j)%sq(1:nz,iw) = 4.248e-18 * EXP(sum(1:nz) + 40.)
3186 xsqy_tab(j)%sq(1:nz,iw) = 0.
3194 !*** cross section from Orlando et al., 1991
3196 OPEN(kin,FILE='DATAJ1/ABS/HCFCs_orl.abs',STATUS='OLD')
3202 READ(kin,'(a80)') inline
3203 READ(inline(6:),*) TBar,i,(coeff(i,k),k=1,3)
3204 READ(kin,*) i,(coeff(i,k),k=1,3)
3205 READ(kin,*) i,(coeff(i,k),k=1,3)
3206 READ(kin,*) i,(coeff(i,k),k=1,3)
3209 END SUBROUTINE readit
3213 !=============================================================================*
3215 SUBROUTINE r38(nw,wl,wc,nz,tlev,airden,j)
3216 !-----------------------------------------------------------------------------*
3218 != Provide product (cross section) x (quantum yield) for HCFC-22 photolysis =*
3219 != CHClF2 + hv -> Products =*
3220 != Cross section: from JPL 97 recommendation, piecewise linear interp. =*
3221 != from values at 210, 230, 250, 279, and 295 K =*
3222 != Quantum yield: assumed to be unity =*
3223 !-----------------------------------------------------------------------------*
3225 INTEGER, intent(in) :: nw
3226 INTEGER, intent(in) :: nz
3227 INTEGER, intent(inout) :: j
3228 REAL, intent(in) :: wl(kw), wc(kw)
3229 REAL, intent(in) :: tlev(kz)
3230 REAL, intent(in) :: airden(kz)
3233 integer, PARAMETER :: kdata=100
3235 INTEGER n1, n2, n3, n4, n5
3236 REAL x1(kdata), x2(kdata), x3(kdata), x4(kdata), x5(kdata)
3237 REAL y1(kdata), y2(kdata), y3(kdata), y4(kdata), y5(kdata)
3240 real, parameter :: tfac1 = 1./(230. - 210.)
3241 real, parameter :: tfac2 = 1./(250. - 230.)
3242 real, parameter :: tfac3 = 1./(270. - 250.)
3243 real, parameter :: tfac4 = 1./(295. - 270.)
3246 REAL, save :: yg2(kw), yg3(kw), yg4(kw), yg5(kw)
3248 REAL, save :: ydel1(kw), ydel2(kw), ydel3(kw), ydel4(kw)
3249 REAL :: t(nz), t1(nz), t2(nz), t3(nz), t4(nz)
3251 INTEGER i, iw, n, idum
3255 if( initialize ) then
3257 ydel4(1:nw-1) = yg4(1:nw-1) - yg5(1:nw-1)
3258 ydel3(1:nw-1) = yg3(1:nw-1) - yg4(1:nw-1)
3259 ydel2(1:nw-1) = yg2(1:nw-1) - yg3(1:nw-1)
3260 ydel1(1:nw-1) = yg1(1:nw-1) - yg2(1:nw-1)
3262 call check_alloc( j, nz, nw-1 )
3264 !*** quantum yield assumed to be unity
3266 t(1:nz) = MIN(295.,MAX(tlev(1:nz),210.))
3267 t1(1:nz) = (t(1:nz) - 210.)*tfac1
3268 t2(1:nz) = (t(1:nz) - 230.)*tfac2
3269 t3(1:nz) = (t(1:nz) - 250.)*tfac3
3270 t4(1:nz) = (t(1:nz) - 270.)*tfac4
3272 where( t(1:nz) <= 230. )
3273 xsqy_tab(j)%sq(1:nz,iw) = yg5(iw) + t1(1:nz)*ydel4(iw)
3274 elsewhere( t(1:nz) > 230. .and. t(1:nz) <= 250. )
3275 xsqy_tab(j)%sq(1:nz,iw) = yg4(iw) + t2(1:nz)*ydel3(iw)
3276 elsewhere( t(1:nz) > 250. .and. t(1:nz) <= 270. )
3277 xsqy_tab(j)%sq(1:nz,iw) = yg3(iw) + t3(1:nz)*ydel2(iw)
3279 xsqy_tab(j)%sq(1:nz,iw) = yg2(iw) + t4(1:nz)*ydel1(iw)
3287 !*** cross sections from JPL97 recommendation (identical to 94 recommendation)
3292 CALL base_read( filespec='DATAJ1/ABS/HCFC-22_jpl94.abs', &
3293 rd_cnt=n,x=x1,y=y1,y1=y2,y2=y3,y3=y4,y4=y5 )
3294 y1(1:n) = y1(1:n) * 1.E-20
3295 y2(1:n) = y2(1:n) * 1.E-20
3296 y3(1:n) = y3(1:n) * 1.E-20
3297 y4(1:n) = y4(1:n) * 1.E-20
3298 y5(1:n) = y5(1:n) * 1.E-20
3299 nsav = n ; xsav(1:n) = x1(1:n)
3302 CALL add_pnts_inter2(x1,y1,yg1,kdata,n, &
3303 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
3305 n = nsav ; x1(1:n) = xsav(1:n)
3307 CALL add_pnts_inter2(x1,y2,yg2,kdata,n, &
3308 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
3310 n = nsav ; x1(1:n) = xsav(1:n)
3312 CALL add_pnts_inter2(x1,y3,yg3,kdata,n, &
3313 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
3315 n = nsav ; x1(1:n) = xsav(1:n)
3317 CALL add_pnts_inter2(x1,y4,yg4,kdata,n, &
3318 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
3320 n = nsav ; x1(1:n) = xsav(1:n)
3322 CALL add_pnts_inter2(x1,y5,yg5,kdata,n, &
3323 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
3325 END SUBROUTINE readit
3329 !=============================================================================*
3331 SUBROUTINE r39(nw,wl,wc,nz,tlev,airden,j)
3332 !-----------------------------------------------------------------------------*
3334 != Provide product (cross section) x (quantum yield) for HO2 photolysis: =*
3335 != HO2 + hv -> OH + O =*
3336 != Cross section: from JPL 97 recommendation =*
3337 != Quantum yield: assumed shape based on work by Lee, 1982; normalized =*
3338 != to unity at 248 nm =*
3339 !-----------------------------------------------------------------------------*
3341 INTEGER, intent(in) :: nw
3342 INTEGER, intent(in) :: nz
3343 INTEGER, intent(inout) :: j
3344 REAL, intent(in) :: wl(kw), wc(kw)
3345 REAL, intent(in) :: tlev(kz)
3346 REAL, intent(in) :: airden(kz)
3349 integer, PARAMETER :: kdata=100
3355 real, parameter :: tfac1 = 1./(248. - 193.)
3356 real, parameter :: xfac1 = 1./15.
3362 if( initialize ) then
3364 call check_alloc( ndx=j, nz=nw-1, nw=1 )
3365 WHERE( wc(1:nw-1) >= 248. )
3368 qy(1:nw-1) = max( (1. + (wc(1:nw-1) - 193.)*14.*tfac1)*xfac1,0. )
3370 xsqy_tab(j)%sq(1:nw-1,1) = qy(1:nw-1) * yg(1:nw-1)
3376 !*** cross sections from JPL11 recommendation
3379 CALL base_read( filespec='DATAJ1/ABS/HO2_jpl11.abs', &
3380 skip_cnt=10,rd_cnt=n,x=x1,y=y1 )
3381 y1(1:n) = y1(1:n) * 1.E-20
3383 CALL add_pnts_inter2(x1,y1,yg,kdata,n, &
3384 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
3386 END SUBROUTINE readit
3390 !=============================================================================*
3392 SUBROUTINE r44(nw,wl,wc,nz,tlev,airden,j)
3393 !-----------------------------------------------------------------------------*
3395 != Provide product (cross section) x (quantum yield) for N2O photolysis: =*
3396 != N2O + hv -> N2 + O(1D) =*
3397 != Cross section: from JPL 97 recommendation =*
3398 != Quantum yield: assumed to be unity, based on Greenblatt and Ravishankara =*
3399 !-----------------------------------------------------------------------------*
3401 INTEGER, intent(in) :: nw
3402 INTEGER, intent(in) :: nz
3403 INTEGER, intent(inout) :: j
3404 REAL, intent(in) :: wl(kw), wc(kw)
3405 REAL, intent(in) :: tlev(kz)
3406 REAL, intent(in) :: airden(kz)
3409 real, parameter :: A0 = 68.21023
3410 real, parameter :: A1 = -4.071805
3411 real, parameter :: A2 = 4.301146E-02
3412 real, parameter :: A3 = -1.777846E-04
3413 real, parameter :: A4 = 2.520672E-07
3415 real, parameter :: B0 = 123.4014
3416 real, parameter :: B1 = -2.116255
3417 real, parameter :: B2 = 1.111572E-02
3418 real, parameter :: B3 = -1.881058E-05
3421 REAL, save :: a(kw), b(kw)
3426 if( initialize ) then
3429 IF (lambda >= 173. .AND. lambda <= 240.) THEN
3430 A(iw) = (((A4*lambda+A3)*lambda+A2)*lambda+A1)*lambda+A0
3431 B(iw) = (((B3*lambda+B2)*lambda+B1)*lambda+B0)
3435 call check_alloc( j, nz, nw-1 )
3437 !*** cross sections according to JPL97 recommendation (identical to 94 rec.)
3438 !*** see file DATAJ1/ABS/N2O_jpl94.abs for detail
3439 !*** quantum yield of N(4s) and NO(2Pi) is less than 1% (Greenblatt and
3440 !*** Ravishankara), so quantum yield of O(1D) is assumed to be unity
3442 t(1:nz) = MAX(194.,MIN(tlev(1:nz),320.))
3445 IF (lambda >= 173. .AND. lambda <= 240.) THEN
3446 BT(1:nz) = (t(1:nz) - 300.)*EXP(B(iw))
3447 xsqy_tab(j)%sq(1:nz,iw) = EXP(A(iw)+BT(1:nz))
3449 xsqy_tab(j)%sq(1:nz,iw) = 0.
3456 !=============================================================================*
3458 SUBROUTINE r45(nw,wl,wc,nz,tlev,airden,j)
3459 !-----------------------------------------------------------------------------*
3461 != Provide product (cross section) x (quantum yield) for ClONO2 photolysis: =*
3462 != ClONO2 + hv -> Products =*
3464 != Cross section: JPL 97 recommendation =*
3465 != Quantum yield: JPL 97 recommendation =*
3466 !-----------------------------------------------------------------------------*
3468 INTEGER, intent(in) :: nw
3469 INTEGER, intent(in) :: nz
3470 INTEGER, intent(inout) :: j
3471 REAL, intent(in) :: wl(kw), wc(kw)
3472 REAL, intent(in) :: tlev(kz)
3473 REAL, intent(in) :: airden(kz)
3476 integer, PARAMETER :: kdata=150
3479 REAL y1(kdata),y2(kdata),y3(kdata)
3485 REAL, save :: yg1(kw), yg2(kw), yg3(kw)
3486 INTEGER i, iw, n, idum, chnl
3489 LOGICAL, save :: is_initialized = .false.
3491 if( initialize ) then
3492 if( .not. is_initialized ) then
3494 is_initialized = .true.
3497 call check_alloc( j, nz, nw-1 )
3499 t(1:nz) = tlev(1:nz) - 296.
3500 chnl = xsqy_tab(j)%channel
3502 !** quantum yields (from jpl97, same in jpl2011)
3503 IF( wc(iw) .LT. 308.) THEN
3505 ELSEIF( (wc(iw) .GE. 308) .AND. (wc(iw) .LE. 364.) ) THEN
3506 qy1 = 7.143e-3 * wc(iw) - 1.6
3507 ELSEIF( wc(iw) .GT. 364. ) THEN
3510 IF( chnl == 2 ) then
3513 ! compute T-dependent cross section
3514 xs(1:nz) = yg1(iw) * (1. + t(1:nz) &
3515 * (yg2(iw) + t(1:nz)*yg3(iw)))
3516 xsqy_tab(j)%sq(1:nz,iw) = qy1 * xs(1:nz)
3523 !** cross sections from JPL97 recommendation. Same in JPL-2011.
3528 n = 119 ; nsav = 119
3529 CALL base_read( filespec='DATAJ1/ABS/ClONO2_jpl97.abs', &
3530 skip_cnt=2,rd_cnt=n,x=x1,y=y1,y1=y2,y2=y3 )
3532 y1(1:n) = y1(1:n) * 1.E-20
3534 CALL add_pnts_inter2(x1,y1,yg1,kdata,n, &
3535 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
3537 n = nsav ; x1(1:n) = xsav(1:n)
3538 CALL add_pnts_inter2(x1,y2,yg2,kdata,n, &
3539 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
3541 n = nsav ; x1(1:n) = xsav(1:n)
3542 CALL add_pnts_inter2(x1,y3,yg3,kdata,n, &
3543 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
3545 END SUBROUTINE readit
3549 !=============================================================================*
3551 SUBROUTINE r46(nw,wl,wc,nz,tlev,airden,j)
3552 !-----------------------------------------------------------------------------*
3554 != Provide product (cross section) x (quantum yield) for BrONO2 photolysis: =*
3555 != BrONO2 + hv -> Products =*
3557 != Cross section: JPL 03 recommendation =*
3558 != Quantum yield: JPL 03 recommendation =*
3559 !-----------------------------------------------------------------------------*
3561 INTEGER, intent(in) :: nw
3562 INTEGER, intent(in) :: nz
3563 INTEGER, intent(inout) :: j
3564 REAL, intent(in) :: wl(kw), wc(kw)
3565 REAL, intent(in) :: tlev(kz)
3566 REAL, intent(in) :: airden(kz)
3569 integer, PARAMETER :: kdata=100
3575 REAL, parameter :: qyld(2) = (/ .15,.85 /)
3581 if( initialize ) then
3583 call check_alloc( ndx=j, nz=nw-1, nw=1 )
3584 chnl = xsqy_tab(j)%channel
3585 xsqy_tab(j)%sq(1:nw-1,1) = qyld(chnl) * yg1(1:nw-1)
3591 !** cross sections from JPL03 recommendation
3594 CALL base_read( filespec='DATAJ1/ABS/BrONO2_jpl03.abs', &
3595 skip_cnt=13,rd_cnt=n,x=x1,y=y1 )
3596 y1(1:n) = y1(1:n) * 1.E-20
3598 CALL add_pnts_inter2(x1,y1,yg1,kdata,n, &
3599 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
3601 END SUBROUTINE readit
3605 !=============================================================================*
3607 SUBROUTINE r47(nw,wl,wc,nz,tlev,airden,j)
3608 !-----------------------------------------------------------------------------*
3610 != Provide product (cross section) x (quantum yield) for Cl2 photolysis: =*
3611 != Cl2 + hv -> 2 Cl =*
3613 != Cross section: JPL 97 recommendation =*
3614 != Quantum yield: 1 (Calvert and Pitts, 1966) =*
3615 !-----------------------------------------------------------------------------*
3617 INTEGER, intent(in) :: nw
3618 INTEGER, intent(in) :: nz
3619 INTEGER, intent(inout) :: j
3620 REAL, intent(in) :: wl(kw), wc(kw)
3621 REAL, intent(in) :: tlev(kz)
3622 REAL, intent(in) :: airden(kz)
3625 real :: ex1(nz), ex2(nz)
3629 real :: aa, bb, bb2, sig
3631 if( .not. initialize ) then
3632 call check_alloc( j, nz, nw-1 )
3634 ! mabs = 1: Finlayson-Pitts and Pitts
3635 ! mabs = 2: JPL2011 formula
3641 alpha(iz) = (bb2 - 1.)/(bb2 + 1.)
3644 !** quantum yield = 1 (Calvert and Pitts, 1966)
3647 ex1(1:nz) = 27.3 * exp(-99.0 * alpha(1:nz) * (log(329.5/wc(iw)))**2)
3648 ex2(1:nz) = .932 * exp(-91.5 * alpha(1:nz) * (log(406.5/wc(iw)))**2)
3649 xsqy_tab(j)%sq(1:nz,iw) = 1.e-20 * sqrt(alpha(1:nz)) * (ex1(1:nz) + ex2(1:nz))
3655 !=============================================================================*
3657 SUBROUTINE r101(nw,wl,wc,nz,tlev,airden,j)
3658 !-----------------------------------------------------------------------------*
3660 != Provide the product (cross section) x (quantum yield) for CH2(OH)CHO =*
3661 != (glycolaldehye, hydroxy acetaldehyde) photolysis: =*
3662 != CH2(OH)CHO + hv -> Products =*
3664 != Quantum yield about 50% =*
3665 !-----------------------------------------------------------------------------*
3667 INTEGER, intent(in) :: nw
3668 INTEGER, intent(in) :: nz
3669 INTEGER, intent(inout) :: j
3670 REAL, intent(in) :: wl(kw), wc(kw)
3671 REAL, intent(in) :: tlev(kz)
3672 REAL, intent(in) :: airden(kz)
3675 integer, PARAMETER :: kdata=100
3678 REAL x(kdata), y(kdata)
3681 real, parameter :: qyld(3) = (/ .83, .10, .07 /)
3686 if( initialize ) then
3687 chnl = xsqy_tab(j)%channel
3689 call check_alloc( ndx=j, nz=nw-1, nw=1 )
3690 xsqy_tab(j)%sq(1:nw-1,1) = yg(1:nw-1) * qyld(chnl)
3698 CALL base_read( filespec='DATAJ1/CH2OHCHO/glycolaldehyde_jpl11.abs', &
3699 skip_cnt=2,rd_cnt=n,x=x,y=y )
3700 y(1:n) = y(1:n) * 1.e-20
3702 CALL add_pnts_inter2(x,y,yg,kdata,n, &
3703 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
3705 END SUBROUTINE readit
3709 !=============================================================================*
3711 SUBROUTINE r103(nw,wl,wc,nz,tlev,airden,j)
3712 !-----------------------------------------------------------------------------*
3714 != Provide the product (cross section) x (quantum yield) for CH3COCHCH2 =*
3715 != Methyl vinyl ketone photolysis: =*
3716 != CH3COCH=CH2 + hv -> Products =*
3717 !-----------------------------------------------------------------------------*
3719 INTEGER, intent(in) :: nw
3720 INTEGER, intent(in) :: nz
3721 INTEGER, intent(inout) :: j
3722 REAL, intent(in) :: wl(kw), wc(kw)
3723 REAL, intent(in) :: tlev(kz)
3724 REAL, intent(in) :: airden(kz)
3727 integer, PARAMETER :: kdata=150
3730 REAL x(kdata), y(kdata)
3733 REAL, save :: yg(kw)
3739 if( initialize ) then
3742 call check_alloc( j, nz, nw-1 )
3744 ! mabs = 1: Schneider and moortgat
3745 ! mabs = 2: jpl 2011
3748 ! quantum yield from
3749 ! Gierczak, T., J. B. Burkholder, R. K. Talukdar, A. Mellouki, S. B. Barone,
3750 ! and A. R. Ravishankara, Atmospheric fate of methyl vinyl ketone and methacrolein,
3751 ! J. Photochem. Photobiol A: Chemistry, 110 1-10, 1997.
3752 ! depends on pressure and wavelength, set upper limit to 1.0
3755 qy(1:nz) = exp(-0.055*(wc(iw) - 308.)) &
3756 / (5.5 + 9.2e-19*airden(1:nz))
3757 qy(1:nz) = min(qy(1:nz), 1.)
3758 xsqy_tab(j)%sq(1:nz,iw) = yg(iw) * qy(1:nz)
3767 CALL base_read( filespec='DATAJ1/ABS/MVK_jpl11.abs', &
3768 skip_cnt=2,rd_cnt=n,x=x,y=y )
3769 y(1:n) = y(1:n) * 1.e-20
3771 CALL add_pnts_inter2(x,y,yg,kdata,n, &
3772 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
3774 END SUBROUTINE readit
3778 !=============================================================================*
3780 SUBROUTINE r106(nw,wl,wc,nz,tlev,airden,j)
3781 !-----------------------------------------------------------------------------*
3783 != Provide the product (cross section) x (quantum yield) for CH3CH2ONO2 =*
3784 != ethyl nitrate photolysis: =*
3785 != CH3CH2ONO2 + hv -> CH3CH2O + NO2 =*
3786 !-----------------------------------------------------------------------------*
3788 INTEGER, intent(in) :: nw
3789 INTEGER, intent(in) :: nz
3790 INTEGER, intent(inout) :: j
3791 REAL, intent(in) :: wl(kw), wc(kw)
3792 REAL, intent(in) :: tlev(kz)
3793 REAL, intent(in) :: airden(kz)
3796 integer, PARAMETER :: kdata=100
3799 REAL x1(kdata), y1(kdata)
3800 REAL x2(kdata), y2(kdata)
3807 REAL, save :: yg1(kw), yg2(kw)
3810 if( initialize ) then
3813 call check_alloc( j, nz, nw-1 )
3817 t(1:nz) = tlev(1:nz) - 298.
3819 xsqy_tab(j)%sq(1:nz,iw) = yg1(iw)*exp(yg2(iw)*t(1:nz))
3829 character(len=256) :: emsg
3832 CALL base_read( filespec='DATAJ1/RONO2/RONO2_talukdar.abs', &
3833 skip_cnt=10,rd_cnt=n,x=x1,y=wrk,y1=wrk, &
3834 y2=y1,y3=y2,y4=wrk,y5=wrk )
3838 n1 = count( y1(1:n) > 0. )
3840 wrk(1:n1) = pack( y1(1:n),mask=y1(1:n) > 0. )
3841 y1(1:n1) = wrk(1:n1) * 1.e-20
3842 wrk(1:n1) = pack( x1(1:n),mask=y1(1:n) > 0. )
3843 x1(1:n1) = wrk(1:n1)
3844 CALL add_pnts_inter2(x1,y1,yg1,kdata,n1, &
3845 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
3851 n2 = count( y2(1:n) > 0. )
3853 wrk(1:n2) = pack( y2(1:n),mask=y2(1:n) > 0. )
3854 y2(1:n2) = wrk(1:n2) * 1.e-3
3855 wrk(1:n2) = pack( x2(1:n),mask=y2(1:n) > 0. )
3856 x2(1:n2) = wrk(1:n2)
3857 CALL addpnt(x2,y2,kdata,n2, 0.,y2(1))
3858 CALL addpnt(x2,y2,kdata,n2, 1.e+38,y2(n2))
3859 CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)
3860 IF (ierr .NE. 0) THEN
3861 write(emsg,'(''readit: Error '',i5,'' in inter2 for '',a)') ierr,trim(xsqy_tab(j)%label)
3862 call wrf_error_fatal( trim(emsg) )
3868 END SUBROUTINE readit
3872 !=============================================================================*
3874 SUBROUTINE r107(nw,wl,wc,nz,tlev,airden,j)
3875 !-----------------------------------------------------------------------------*
3877 != Provide the product (cross section) x (quantum yield) for CH3CHONO2CH3 =*
3878 != isopropyl nitrate photolysis: =*
3879 != CH3CHONO2CH3 + hv -> CH3CHOCH3 + NO2 =*
3880 !-----------------------------------------------------------------------------*
3882 INTEGER, intent(in) :: nw
3883 INTEGER, intent(in) :: nz
3884 INTEGER, intent(inout) :: j
3885 REAL, intent(in) :: wl(kw), wc(kw)
3886 REAL, intent(in) :: tlev(kz)
3887 REAL, intent(in) :: airden(kz)
3890 integer, PARAMETER :: kdata=100
3893 REAL x1(kdata), y1(kdata)
3894 REAL x2(kdata), y2(kdata)
3901 REAL, save :: yg1(kw), yg2(kw)
3904 if( initialize ) then
3907 call check_alloc( j, nz, nw-1 )
3911 t(1:nz) = tlev(1:nz) - 298.
3913 xsqy_tab(j)%sq(1:nz,iw) = yg1(iw)*exp(yg2(iw)*t(1:nz))
3923 character(len=256) :: emsg
3926 CALL base_read( filespec='DATAJ1/RONO2/RONO2_talukdar.abs', &
3927 skip_cnt=10,rd_cnt=n,x=x1,y=wrk, &
3928 y1=wrk,y2=wrk,y3=wrk,y4=y1,y5=y2 )
3932 n1 = count( y1(1:n) > 0. )
3934 wrk(1:n1) = pack( y1(1:n),mask=y1(1:n) > 0. )
3935 y1(1:n1) = wrk(1:n1) * 1.e-20
3936 wrk(1:n1) = pack( x1(1:n),mask=y1(1:n) > 0. )
3937 x1(1:n1) = wrk(1:n1)
3938 CALL add_pnts_inter2(x1,y1,yg1,kdata,n1, &
3939 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
3944 n2 = count( y2(1:n) > 0. )
3946 wrk(1:n2) = pack( y2(1:n),mask=y2(1:n) > 0. )
3947 y2(1:n2) = wrk(1:n2) * 1.e-3
3948 wrk(1:n2) = pack( x2(1:n),mask=y2(1:n) > 0. )
3949 x2(1:n2) = wrk(1:n2)
3950 CALL addpnt(x2,y2,kdata,n2, 0.,y2(1))
3951 CALL addpnt(x2,y2,kdata,n2, 1.e+38,y2(n2))
3952 CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)
3953 IF (ierr .NE. 0) THEN
3954 write(emsg,'(''readit: Error '',i5,'' in inter2 for '',a)') ierr,trim(xsqy_tab(j)%label)
3955 call wrf_error_fatal( trim(emsg) )
3961 END SUBROUTINE readit
3965 !=============================================================================*
3967 SUBROUTINE r108(nw,wl,wc,nz,tlev,airden,j)
3968 !-----------------------------------------------------------------------------*
3970 != Provide the product (cross section) x (quantum yield) for =*
3971 != nitroxy ethanol CH2(OH)CH2(ONO2) + hv -> CH2(OH)CH2(O.) + NO2 =*
3972 !-----------------------------------------------------------------------------*
3974 INTEGER, intent(in) :: nw
3975 INTEGER, intent(in) :: nz
3976 INTEGER, intent(inout) :: j
3977 REAL, intent(in) :: wl(kw), wc(kw)
3978 REAL, intent(in) :: tlev(kz)
3979 REAL, intent(in) :: airden(kz)
3982 ! coefficients from Roberts and Fajer 1989, over 270-306 nm
3983 real, parameter ::a = -2.359E-3
3984 real, parameter ::b = 1.2478
3985 real, parameter ::c = -210.4
3987 if( initialize ) then
3988 call check_alloc( ndx=j, nz=nw-1, nw=1 )
3990 WHERE( wc(1:nw-1) >= 270. .AND. wc(1:nw-1) <= 306. )
3991 xsqy_tab(j)%sq(1:nw-1,1) = EXP(c + wc(1:nw-1)*(b + wc(1:nw-1)*a))
3993 xsqy_tab(j)%sq(1:nw-1,1) = 0.
3999 !=============================================================================*
4001 SUBROUTINE r109(nw,wl,wc,nz,tlev,airden,j)
4002 !-----------------------------------------------------------------------------*
4004 != Provide the product (cross section) x (quantum yield) for =*
4005 != nitroxy acetone CH3COCH2(ONO2) + hv -> CH3COCH2(O.) + NO2 =*
4006 !-----------------------------------------------------------------------------*
4008 INTEGER, intent(in) :: nw
4009 INTEGER, intent(in) :: nz
4010 INTEGER, intent(inout) :: j
4011 REAL, intent(in) :: wl(kw), wc(kw)
4012 REAL, intent(in) :: tlev(kz)
4013 REAL, intent(in) :: airden(kz)
4016 ! coefficients from Roberts and Fajer 1989, over 284-335 nm
4017 real, parameter :: a = -1.365E-3
4018 real, parameter :: b = 0.7834
4019 real, parameter :: c = -156.8
4021 if( initialize ) then
4022 call check_alloc( ndx=j, nz=nw-1, nw=1 )
4024 WHERE( wc(1:nw-1) >= 284. .AND. wc(1:nw-1) <= 335. )
4025 xsqy_tab(j)%sq(1:nw-1,1) = EXP(c + wc(1:nw-1)*(b + wc(1:nw-1)*a))
4027 xsqy_tab(j)%sq(1:nw-1,1) = 0.
4033 !=============================================================================*
4035 SUBROUTINE r110(nw,wl,wc,nz,tlev,airden,j)
4036 !-----------------------------------------------------------------------------*
4038 != Provide the product (cross section) x (quantum yield) for =*
4039 != t-butyl nitrate C(CH3)3(ONO2) + hv -> C(CH3)(O.) + NO2 =*
4040 !-----------------------------------------------------------------------------*
4042 INTEGER, intent(in) :: nw
4043 INTEGER, intent(in) :: nz
4044 INTEGER, intent(inout) :: j
4045 REAL, intent(in) :: wl(kw), wc(kw)
4046 REAL, intent(in) :: tlev(kz)
4047 REAL, intent(in) :: airden(kz)
4050 ! coefficients from Roberts and Fajer 1989, over 270-330 nm
4051 real, parameter ::a = -0.993E-3
4052 real, parameter ::b = 0.5307
4053 real, parameter ::c = -115.5
4055 if( initialize ) then
4056 call check_alloc( ndx=j, nz=nw-1, nw=1 )
4058 WHERE( wc(1:nw-1) >= 270. .AND. wc(1:nw-1) <= 330. )
4059 xsqy_tab(j)%sq(1:nw-1,1) = EXP(c + wc(1:nw-1)*(b + wc(1:nw-1)*a))
4061 xsqy_tab(j)%sq(1:nw-1,1) = 0.
4067 !=============================================================================*
4069 SUBROUTINE r112(nw,wl,wc,nz,tlev,airden,j)
4070 !-----------------------------------------------------------------------------*
4072 != Provide the product (cross section) x (quantum yield) for hydroxyacetone =*
4073 != CH2(OH)COCH3 photolysis: =*
4074 != CH2(OH)COCH3 -> CH3CO + CH2OH
4075 != -> CH2(OH)CO + CH3 =*
4077 != Cross section from Orlando et al. (1999) =*
4079 != Quantum yield assumed 0.325 for each channel (J. Orlando, priv.comm.2003)=*
4080 !-----------------------------------------------------------------------------*
4082 INTEGER, intent(in) :: nw
4083 INTEGER, intent(in) :: nz
4084 INTEGER, intent(inout) :: j
4085 REAL, intent(in) :: wl(kw), wc(kw)
4086 REAL, intent(in) :: tlev(kz)
4087 REAL, intent(in) :: airden(kz)
4090 integer, PARAMETER :: kdata=100
4093 REAL :: x(kdata), y(kdata)
4096 REAL, parameter :: qy = .325
4100 if( initialize ) then
4101 call check_alloc( ndx=j, nz=nw-1, nw=1 )
4103 xsqy_tab(j)%sq(1:nw-1,1) = yg(1:nw-1) * qy
4111 CALL base_read( filespec='DATAJ1/ABS/Hydroxyacetone_jpl11.abs', &
4112 skip_cnt=2,rd_cnt=n,x=x,y=y )
4113 y(1:n) = y(1:n) * 1.e-20
4115 CALL add_pnts_inter2(x,y,yg,kdata,n, &
4116 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
4118 END SUBROUTINE readit
4122 !=============================================================================*
4124 SUBROUTINE r113(nw,wl,wc,nz,tlev,airden,j)
4125 !-----------------------------------------------------------------------------*
4127 != Provide the product (cross section) x (quantum yield) for HOBr =*
4128 != HOBr -> OH + Br =*
4129 != Cross section from JPL 2003 =*
4130 != Quantum yield assumed unity as in JPL2003 =*
4131 !-----------------------------------------------------------------------------*
4133 INTEGER, intent(in) :: nw
4134 INTEGER, intent(in) :: nz
4135 INTEGER, intent(inout) :: j
4136 REAL, intent(in) :: wl(kw), wc(kw)
4137 REAL, intent(in) :: tlev(kz)
4138 REAL, intent(in) :: airden(kz)
4145 if( initialize ) then
4146 call check_alloc( ndx=j, nz=nw-1, nw=1 )
4147 xsqy_tab(j)%sq(1:nw-1,1) = 0.
4148 WHERE( wc(1:nw-1) >= 250. .and. wc(1:nw-1) <= 550. )
4149 xfac1(1:nw-1) = 1./wc(1:nw-1)
4150 sig(1:nw-1) = 24.77 * exp( -109.80*(LOG(284.01*xfac1(1:nw-1)))**2 ) &
4151 + 12.22 * exp( -93.63*(LOG(350.57*xfac1(1:nw-1)))**2 ) &
4152 + 2.283 * exp(- 242.40*(LOG(457.38*xfac1(1:nw-1)))**2 )
4153 xsqy_tab(j)%sq(1:nw-1,1) = sig(1:nw-1) * 1.e-20
4159 !=============================================================================*
4161 SUBROUTINE r114(nw,wl,wc,nz,tlev,airden,j)
4162 !-----------------------------------------------------------------------------*
4164 != Provide the product (cross section) x (quantum yield) for BrO =*
4166 != Cross section from JPL 2003 =*
4167 != Quantum yield assumed unity as in JPL2003 =*
4168 !-----------------------------------------------------------------------------*
4170 INTEGER, intent(in) :: nw
4171 INTEGER, intent(in) :: nz
4172 INTEGER, intent(inout) :: j
4173 REAL, intent(in) :: wl(kw), wc(kw)
4174 REAL, intent(in) :: tlev(kz)
4175 REAL, intent(in) :: airden(kz)
4179 REAL :: x(20), y(20)
4183 if( initialize ) then
4184 call check_alloc( ndx=j, nz=nw-1, nw=1 )
4185 OPEN(UNIT=kin,FILE='DATAJ1/ABS/BrO.jpl03',STATUS='old')
4191 READ(kin,*) x(i), dum, y(i)
4195 y(1:n) = y(1:n) * 1.e-20
4198 ! use bin-to-bin interpolation
4199 CALL inter4(nw,wl,yg,n,x,y,1)
4200 xsqy_tab(j)%sq(1:nw-1,1) = yg(1:nw-1)
4205 !=============================================================================*
4207 SUBROUTINE r118(nw,wl,wc,nz,tlev,airden,j)
4208 !-----------------------------------------------------------------------------*
4209 != NO3-(aq) photolysis for snow simulations =*
4210 != a) NO3-(aq) + hv -> NO2 + O- =*
4211 != b) NO3-(aq) + hv -> NO2- + O(3P) =*
4212 != Cross section: =*
4213 != Burley & Johnston, Geophys. Res. Lett., 19, 1359-1362 (1992) =*
4214 != Chu & Anastasio, J. Phys. Chem. A, 107, 9594-9602 (2003) =*
4215 != Quantum yield: =*
4216 != Warneck & Wurzinger, J. Phys. Chem., 92, 6278-6283 (1988) =*
4217 != Chu & Anastasio, J. Phys. Chem. A, 107, 9594-9602 (2003) =*
4218 !-----------------------------------------------------------------------------*
4219 != NOTE: user may have to manually add these reactions to the end of the =*
4220 != reaction list in file usrinp to include these reactions for a snow run: =*
4221 != T 74 NO3-(aq) -> NO2 + O- =*
4222 != T 75 NO3-(aq) -> NO2- + O(3P) =*
4223 !-----------------------------------------------------------------------------*
4225 INTEGER, intent(in) :: nw
4226 INTEGER, intent(in) :: nz
4227 INTEGER, intent(inout) :: j
4228 REAL, intent(in) :: wl(kw), wc(kw)
4229 REAL, intent(in) :: tlev(kz)
4230 REAL, intent(in) :: airden(kz)
4233 integer, PARAMETER :: kdata=50
4235 REAL x1(kdata),x2(kdata)
4236 REAL y1(kdata),y2(kdata) ! y1 = 20'C, y2 = -20'C
4239 REAL, parameter :: qyld(2:3) = (/ 1.1e-3,1. /)
4240 ! REAL, parameter :: qy2 = 1.1e-3
4241 ! REAL, parameter :: qy3 = 1.
4243 REAL, save :: yg2(kw)
4245 INTEGER i, iw, n, idum
4247 LOGICAL, save :: is_initialized = .false.
4249 chnl = xsqy_tab(j)%channel
4250 if( initialize ) then
4251 if( .not. is_initialized ) then
4253 is_initialized = .true.
4256 call check_alloc( ndx=j, nz=nw-1, nw=1 )
4257 xsqy_tab(j)%sq(1:nw-1,1) = qyld(chnl)*yg2(1:nw-1)
4260 if( chnl == 1 ) then
4261 call check_alloc( j, nz, nw-1 )
4263 qy1(1:nz) = exp(-2400./tlev(1:nz) + 3.6) ! Chu & Anastasio, 2003
4265 xsqy_tab(j)%sq(1:nz,iw) = qy1(1:nz)*yg2(iw)
4273 !** NO3-(aq) cross sections from Chu and Anastasio 2003:
4274 ! convert from molar abs log10 to cm2 per molec
4279 CALL base_read( filespec='DATAJ1/ABS/NO3-_CA03.abs', &
4280 skip_cnt=7,rd_cnt=n,x=x1,y=y1,y1=wrk, &
4281 y2=wrk,y3=wrk,y4=wrk )
4282 y1(1:n) = y1(1:n) * 3.82e-21
4283 CALL add_pnts_inter2(x1,y1,yg2,kdata,n, &
4284 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
4286 END SUBROUTINE readit
4290 !=============================================================================*
4292 SUBROUTINE r119(nw,wl,wc,nz,tlev,airden,j)
4293 !-----------------------------------------------------------------------------*
4295 != Provide the product (cross section) x (quantum yield) for =*
4296 != methylethylketone =*
4297 != CH3COCH2CH3 photolysis: =*
4298 != CH3COCH2CH3 -> CH3CO + CH2CH3 =*
4300 != Cross section from Martinez et al. (1992) =*
4302 != Quantum yield assumed 0.325 for each channel (J. Orlando, priv.comm.2003)=*
4303 !-----------------------------------------------------------------------------*
4305 INTEGER, intent(in) :: nw
4306 INTEGER, intent(in) :: nz
4307 INTEGER, intent(inout) :: j
4308 REAL, intent(in) :: wl(kw), wc(kw)
4309 REAL, intent(in) :: tlev(kz)
4310 REAL, intent(in) :: airden(kz)
4313 integer, PARAMETER :: kdata=100
4316 REAL x(kdata), y(kdata)
4319 REAL, save :: yg(kw)
4325 if( initialize ) then
4328 call check_alloc( j, nz, nw-1 )
4330 ! Quantum Yields from
4331 ! Raber, W.H. (1992) PhD Thesis, Johannes Gutenberg-Universitaet, Mainz, Germany.
4332 ! other channels assumed negligible (less than 10%).
4333 ! Total quantum yield = 0.38 at 760 Torr.
4334 ! Stern-Volmer form given: 1/phi = 0.96 + 2.22e-3*P(torr)
4335 ! compute local pressure in torr
4337 ptorr(1:nz) = 760.*airden(1:nz)/2.69e19
4338 qy(1:nz) = min( 1./(0.96 + 2.22E-3*ptorr(1:nz)),1. )
4340 xsqy_tab(j)%sq(1:nz,iw) = yg(iw) * qy(1:nz)
4350 CALL base_read( filespec='DATAJ1/ABS/Martinez.abs', &
4351 skip_cnt=4,rd_cnt=n,x=x,y=wrk,y1=y, &
4353 y(1:n) = y(1:n) * 1.e-20
4355 CALL add_pnts_inter2(x,y,yg,kdata,n, &
4356 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
4358 END SUBROUTINE readit
4362 !=============================================================================*
4364 SUBROUTINE r120(nw,wl,wc,nz,tlev,airden,j)
4365 !-----------------------------------------------------------------------------*
4367 != Provide product (cross section) x (quantum yield) for PPN photolysis: =*
4368 != PPN + hv -> Products =*
4370 != Cross section: from JPL 2006 (originally from Harwood et al. 2003) =*
4371 != Quantum yield: Assumed to be unity =*
4372 !-----------------------------------------------------------------------------*
4374 INTEGER, intent(in) :: nw
4375 INTEGER, intent(in) :: nz
4376 INTEGER, intent(inout) :: j
4377 REAL, intent(in) :: wl(kw), wc(kw)
4378 REAL, intent(in) :: tlev(kz)
4379 REAL, intent(in) :: airden(kz)
4382 integer, PARAMETER :: kdata=100
4386 REAL :: x1(kdata), x2(kdata)
4387 REAL :: y1(kdata), y2(kdata)
4390 real, parameter :: qyld(2) = (/ 0.61,0.39 /)
4393 REAL, save :: yg(kw), yg2(kw)
4396 LOGICAL, save :: is_initialized = .false.
4398 if( initialize ) then
4399 if( .not. is_initialized ) then
4401 is_initialized = .true.
4404 call check_alloc( j, nz, nw-1 )
4406 chnl = xsqy_tab(j)%channel
4407 t(1:nz) = tlev(1:nz) - 298.
4409 sig(1:nz) = yg(iw) * EXP(yg2(iw)*t(1:nz))
4410 xsqy_tab(j)%sq(1:nz,iw) = qyld(chnl) * sig(1:nz)
4417 ! cross section from JPL 2011 (originally from Harwood et al. 2003)
4423 CALL base_read( filespec='DATAJ1/ABS/PPN_Harwood.txt', &
4424 skip_cnt=10,rd_cnt=n,x=x1,y=y1,y1=y2 )
4425 y1(1:n) = y1(1:n) * 1.E-20
4426 y2(1:n) = y2(1:n) * 1E-3
4429 CALL add_pnts_inter2(x1,y1,yg,kdata,n, &
4430 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
4432 n = nsav ; x1(1:n) = xsav(1:n)
4433 CALL add_pnts_inter2(x1,y2,yg2,kdata,n, &
4434 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
4436 END SUBROUTINE readit
4440 !=============================================================================*
4442 SUBROUTINE r122(nw,wl,wc,nz,tlev,airden,j)
4443 !-----------------------------------------------------------------------------*
4445 != Provide product (cross section) x (quantum yield) for CH2=CHCHO =*
4446 != (acrolein) photolysis: =*
4447 != CH2=CHCHO + hv -> Products =*
4449 != Cross section: from JPL 2006 (originally from Magneron et al. =*
4450 != Quantum yield: P-dependent, JPL 2006 orig. from Gardner et al. =*
4451 !-----------------------------------------------------------------------------*
4453 INTEGER, intent(in) :: nw
4454 INTEGER, intent(in) :: nz
4455 INTEGER, intent(inout) :: j
4456 REAL, intent(in) :: wl(kw), wc(kw)
4457 REAL, intent(in) :: tlev(kz)
4458 REAL, intent(in) :: airden(kz)
4461 integer, PARAMETER :: kdata=100
4466 REAL x1(kdata), x2(kdata)
4467 REAL y1(kdata), y2(kdata)
4470 REAL, save :: yg(kw)
4471 real :: qy(nz), qym1(nz)
4475 if( initialize ) then
4478 call check_alloc( j, nz, nw-1 )
4480 ! quantum yields are pressure dependent between air number densities
4481 ! of 8e17 and 2.6e19, Gardner et al.:
4483 where( airden(1:nz) > 2.6e19 )
4485 elsewhere( airden(1:nz) > 8.e17 .and. airden(1:nz) <= 2.6e19 )
4486 qym1(1:nz) = 0.086 + 1.613e-17 * airden(1:nz)
4487 qy(1:nz) = 0.004 + 1./qym1(1:nz)
4488 elsewhere( airden(1:nz) <= 8.e17 )
4489 qym1(1:nz) = 0.086 + 1.613e-17 * 8.e17
4490 qy(1:nz) = 0.004 + 1./qym1(1:nz)
4492 xsqy_tab(j)%sq(1:nz,iw) = qy(1:nz) * yg(iw)
4499 ! cross section from JPL 2006 (originally from Magneron et al.)
4502 CALL base_read( filespec='DATAJ1/ABS/Acrolein.txt',skip_cnt=6,rd_cnt=n,x=x1,y=y1 )
4503 y1(1:n) = y1(1:n) * 1.E-20
4505 CALL add_pnts_inter2(x1,y1,yg,kdata,n,nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
4507 END SUBROUTINE readit
4511 !=============================================================================*
4513 SUBROUTINE r125(nw,wl,wc,nz,tlev,airden,j)
4514 !-----------------------------------------------------------------------------*
4516 != Provide product (cross section) x (quantum yield) for ClO photolysis =*
4517 != ClO + hv -> Cl + O =*
4519 != Cross section: from Maric and Burrows 1999 =*
4520 != Quantum yield: Assumed to be unity =*
4521 !-----------------------------------------------------------------------------*
4523 INTEGER, intent(in) :: nw
4524 INTEGER, intent(in) :: nz
4525 REAL, intent(in) :: wl(kw), wc(kw)
4526 REAL, intent(in) :: tlev(kz)
4527 REAL, intent(in) :: airden(kz)
4529 INTEGER, intent(inout) :: j
4531 integer, PARAMETER :: kdata=500
4543 real, save :: tmp(12)
4544 real, save :: ygt(kw,12)
4545 real x(kdata), y(kdata,12)
4550 LOGICAL, save :: is_initialized = .false.
4552 if( initialize ) then
4553 if( .not. is_initialized ) then
4556 tmp(2:12) = (/ (190. + 10.*real(m-1),m=2,12) /)
4557 is_initialized = .true.
4560 call check_alloc( j, nz, nw-1 )
4564 ! locate temperature indices for interpolation:
4565 m1 = 1 + INT(.1*(tx - 190.))
4566 m1 = MIN(MAX(1 ,m1),11)
4569 yy = ygt(iw,m1) + (ygt(iw,m2) - ygt(iw,m1)) &
4570 * (tx - tmp(m1))/(tmp(m2) - tmp(m1))
4571 ! threshold for O(1D) productionis 263.4 nm:
4572 if(wc(iw) .lt. 263.4) then
4578 if( xsqy_tab(j)%channel == 1 ) then
4579 xsqy_tab(j)%sq(i,iw) = qy1 * yy
4580 elseif( xsqy_tab(j)%channel == 2 ) then
4581 xsqy_tab(j)%sq(i,iw) = qy2 * yy
4590 ! cross section from
4591 ! Maric D. and J.P. Burrows, J. Quantitative Spectroscopy and
4592 ! Radiative Transfer 62, 345-369, 1999. Data was downloaded from
4593 ! their web site on 15 September 2009.
4598 OPEN(UNIT=kin,FILE='DATAJ1/ABS/ClO_spectrum.prn',STATUS='OLD')
4602 nn = 453 ; nsav = 453
4605 READ(kin,*) xdum, x(i), xdum, (y(i,m), m = 1, 12)
4609 xsav(1:nn) = x(1:nn)
4612 x1(1:nn) = xsav(1:nn)
4613 y1(1:nn) = y(1:nn,m)
4614 CALL add_pnts_inter2(x1,y1,yg,kdata,nn, &
4615 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
4616 ygt(1:nw-1,m) = yg(1:nw-1)
4619 END SUBROUTINE readit
4623 !=============================================================================*
4625 SUBROUTINE r129(nw,wl,wc,nz,tlev,airden,j)
4626 !-----------------------------------------------------------------------------*
4628 != Provide product (cross section) x (quantum yield) for bromine nitrite =*
4629 != BrONO -> Br + NO2 =*
4630 != BrONO -> BrO + NO =*
4632 != Cross section: from IUPAC (vol.3) =*
4633 != Quantum yield: Assumed to be 0.5 for each channel =*
4634 !-----------------------------------------------------------------------------*
4636 INTEGER, intent(in) :: nw
4637 INTEGER, intent(in) :: nz
4638 INTEGER, intent(inout) :: j
4639 REAL, intent(in) :: wl(kw), wc(kw)
4640 REAL, intent(in) :: tlev(kz)
4641 REAL, intent(in) :: airden(kz)
4644 integer, PARAMETER :: kdata=50
4652 real, parameter :: qyld(2) = 0.5
4656 if( initialize ) then
4657 call check_alloc( ndx=j, nz=nw-1, nw=1 )
4659 chnl = xsqy_tab(j)%channel
4660 xsqy_tab(j)%sq(1:nw-1,1) = qyld(chnl) * yg(1:nw-1)
4666 ! cross section from IUPAC (vol III) 2007
4669 CALL base_read( filespec='DATAJ1/ABS/BrONO.abs', &
4670 skip_cnt=8,rd_cnt=n,x=x1,y=y1 )
4672 CALL add_pnts_inter2(x1,y1,yg,kdata,n, &
4673 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
4675 END SUBROUTINE readit
4679 !******************************************************************
4681 SUBROUTINE r131(nw,wl,wc,nz,tlev,airden,j)
4682 !-----------------------------------------------------------------------------*
4684 != Provide product (cross section) x (quantum yield) for
4685 != NOCl -> NO + Cl =*
4686 != Cross section: from IUPAC (vol.3) =*
4687 != Quantum yield: Assumed to be 1 =*
4688 !-----------------------------------------------------------------------------*
4690 INTEGER, intent(in) :: nw
4691 INTEGER, intent(in) :: nz
4692 INTEGER, intent(inout) :: j
4693 REAL, intent(in) :: wl(kw), wc(kw)
4694 REAL, intent(in) :: tlev(kz)
4695 REAL, intent(in) :: airden(kz)
4698 integer, PARAMETER :: kdata=150
4702 REAL x1(kdata), y1(kdata)
4703 REAL y223(kdata),y243(kdata),y263(kdata),y298(kdata), &
4704 y323(kdata), y343(kdata)
4708 REAL, save :: yg223(kw),yg243(kw),yg263(kw), &
4709 yg298(kw),yg323(kw), yg343(kw)
4712 if( initialize ) then
4715 call check_alloc( j, nz, nw-1 )
4716 ! quantum yields assumed unity
4718 where( tlev(1:nz) .le. 223. )
4719 xsqy_tab(j)%sq(1:nz,iw) = yg223(iw)
4720 elsewhere (tlev(1:nz) .gt. 223. .and. tlev(1:nz) .le. 243. )
4721 xsqy_tab(j)%sq(1:nz,iw) = yg223(iw) &
4722 + (yg243(iw) - yg223(iw))*(tlev(1:nz) - 223.)*.05
4723 elsewhere (tlev(1:nz) .gt. 243. .and. tlev(1:nz) .le. 263. )
4724 xsqy_tab(j)%sq(1:nz,iw) = yg243(iw) &
4725 + (yg263(iw) - yg243(iw))*(tlev(1:nz) - 243.)*.05
4726 elsewhere (tlev(1:nz) .gt. 263. .and. tlev(1:nz) .le. 298. )
4727 xsqy_tab(j)%sq(1:nz,iw) = yg263(iw) &
4728 + (yg298(iw) - yg263(iw))*(tlev(1:nz) - 263.)/35.
4729 elsewhere (tlev(1:nz) .gt. 298. .and. tlev(1:nz) .le. 323. )
4730 xsqy_tab(j)%sq(1:nz,iw) = yg298(iw) &
4731 + (yg323(iw) - yg298(iw))*(tlev(1:nz) - 298.)*.04
4732 elsewhere (tlev(1:nz) .gt. 323. .and. tlev(1:nz) .le. 343. )
4733 xsqy_tab(j)%sq(1:nz,iw) = yg323(iw) &
4734 + (yg343(iw) - yg323(iw))*(tlev(1:nz) - 323.)*.05
4735 elsewhere (tlev(1:nz) .gt. 343. )
4736 xsqy_tab(j)%sq(1:nz,iw) = 0.
4744 ! cross section from IUPAC (vol III) 2007
4750 CALL base_read( filespec='DATAJ1/ABS/NOCl.abs', &
4751 skip_cnt=7,rd_cnt=n,x=x1,y=y1 )
4759 CALL base_read( filespec='DATAJ1/ABS/NOCl.abs', &
4760 skip_cnt=88,rd_cnt=ii,x=x1(n+1:),y=y223(n+1:), &
4761 y1=y243(n+1:),y2=y263(n+1:),y3=y298(n+1:), &
4762 y4=y323(n+1:),y5=y343(n+1:) )
4765 nsav = n ; xsav(1:n) = x1(1:n)
4767 CALL add_pnts_inter2(x1,y223,yg223,kdata,n, &
4768 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
4770 n = nsav ; x1(1:n) = xsav(1:n)
4771 CALL add_pnts_inter2(x1,y243,yg243,kdata,n, &
4772 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
4774 n = nsav ; x1(1:n) = xsav(1:n)
4775 CALL add_pnts_inter2(x1,y263,yg263,kdata,n, &
4776 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
4778 n = nsav ; x1(1:n) = xsav(1:n)
4779 CALL add_pnts_inter2(x1,y298,yg298,kdata,n, &
4780 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
4782 n = nsav ; x1(1:n) = xsav(1:n)
4783 CALL add_pnts_inter2(x1,y323,yg323,kdata,n, &
4784 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
4786 n = nsav ; x1(1:n) = xsav(1:n)
4787 CALL add_pnts_inter2(x1,y343,yg343,kdata,n, &
4788 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
4790 END SUBROUTINE readit
4794 !******************************************************************
4796 SUBROUTINE r132(nw,wl,wc,nz,tlev,airden,j)
4797 !-----------------------------------------------------------------------------*
4799 != Provide product (cross section) x (quantum yield) for
4800 != OClO -> Products =*
4801 != Cross section: from Wahner et al., J. Phys. Chem. 91, 2734, 1987 =*
4802 != Quantum yield: Assumed to be 1 =*
4803 !-----------------------------------------------------------------------------*
4805 INTEGER, intent(in) :: nw
4806 INTEGER, intent(in) :: nz
4807 INTEGER, intent(inout) :: j
4808 REAL, intent(in) :: wl(kw), wc(kw)
4809 REAL, intent(in) :: tlev(kz)
4810 REAL, intent(in) :: airden(kz)
4813 integer, PARAMETER :: kdata=2000
4817 REAL x1(kdata), y1(kdata)
4818 integer nn, n204, n296, n378
4819 REAL x204(kdata),x296(kdata),x378(kdata)
4820 REAL y204(kdata),y296(kdata),y378(kdata)
4825 REAL, save :: yg204(kw),yg296(kw),yg378(kw)
4828 if( initialize ) then
4831 call check_alloc( j, nz, nw-1 )
4832 ! quantum yields assumed unity
4834 where(tlev(1:nz) .le. 204. )
4835 xsqy_tab(j)%sq(1:nz,iw) = yg204(iw)
4836 elsewhere (tlev(1:nz) .gt. 204. .and. tlev(1:nz) .le. 296. )
4837 xsqy_tab(j)%sq(1:nz,iw) = yg204(iw) &
4838 + (yg296(iw) - yg204(iw))*(tlev(1:nz) - 204.)/92.
4839 elsewhere (tlev(1:nz) .gt. 296. .and. tlev(1:nz) .le. 378. )
4840 xsqy_tab(j)%sq(1:nz,iw) = yg296(iw) &
4841 + (yg378(iw) - yg296(iw))*(tlev(1:nz) - 296.)/82.
4842 elsewhere (tlev(1:nz) .gt. 378. )
4843 xsqy_tab(j)%sq(1:nz,iw) = yg378(iw)
4851 ! cross section from
4852 !A. Wahner, G.S. tyndall, A.R. Ravishankara, J. Phys. Chem., 91, 2734, (1987).
4853 !Supplementary Data, as quoted at:
4854 !http://www.atmosphere.mpg.de/enid/26b4b5172008b02407b2e47f08de2fa1,0/Spectra/Introduction_1rr.html
4856 OPEN(UNIT=kin,FILE='DATAJ1/ABS/OClO.abs',STATUS='OLD')
4862 READ(kin,*) x204(i), y204(i)
4868 read(kin,*) x296(i), y296(i)
4874 read(kin,*) x378(i), y378(i)
4879 CALL add_pnts_inter2(x204,y204,yg204,kdata,n204, &
4880 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
4882 CALL add_pnts_inter2(x296,y296,yg296,kdata,n296, &
4883 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
4885 CALL add_pnts_inter2(x378,y378,yg378,kdata,n378, &
4886 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
4888 END SUBROUTINE readit
4892 !******************************************************************
4894 SUBROUTINE pxCH2O(nw,wl,wc,nz,tlev,airden,j)
4895 !-----------------------------------------------------------------------------*
4897 != JPL 2011 recommendation. =*
4898 != Provide product of (cross section) x (quantum yield) for CH2O photolysis =*
4899 != (a) CH2O + hv -> H + HCO =*
4900 != (b) CH2O + hv -> H2 + CO =*
4901 != written by s. madronich march 2013
4902 !-----------------------------------------------------------------------------*
4904 INTEGER, intent(in) :: nw
4905 INTEGER, intent(in) :: nz
4906 INTEGER, intent(inout) :: j
4907 REAL, intent(in) :: wl(kw), wc(kw)
4908 REAL, intent(in) :: tlev(kz)
4909 REAL, intent(in) :: airden(kz)
4911 integer, PARAMETER :: kdata=200
4916 REAL x1(kdata), x2(kdata)
4917 REAL y298(kdata), tcoef(kdata)
4918 REAL qr(kdata), qm(kdata)
4924 REAL, save :: yg1(kw), yg2(kw), yg3(kw), yg4(kw)
4925 REAL :: t(nz), t1(nz)
4929 LOGICAL, save :: is_initialized = .false.
4931 if( initialize ) then
4932 if( .not. is_initialized ) then
4934 is_initialized = .true.
4937 call check_alloc( j, nz, nw-1 )
4939 t(1:nz) = tlev(1:nz) - 298.
4940 t1(1:nz) = (300. - tlev(1:nz))/80.
4942 ! correct cross section for temperature dependence:
4943 sig(1:nz) = yg1(iw) + yg2(iw) * t(1:nz)
4944 ! assign room temperature quantum yields for radical and molecular channels
4947 ! between 330 ande 360 nm, molecular channel is pressure and temperature dependent.
4948 IF (wc(iw) .ge. 330. .and. wc(iw) .lt. 360. .and. qym300 .gt. 0.) then
4949 ak300 = (1. - (qym300+qyr300))/(qym300*(1. - qyr300))
4950 ak300 = ak300/2.45e19
4951 akt(1:nz) = ak300 * (1. + 0.05 * (wc(iw) - 329.) * t1(1:nz))
4952 qymt(1:nz) = 1./(1./(1.-qyr300) + akt(1:nz)*airden(1:nz))
4956 if( xsqy_tab(j)%channel == 1 ) then
4957 xsqy_tab(j)%sq(1:nz,iw) = sig(1:nz) * qyr300
4958 elseif( xsqy_tab(j)%channel == 2 ) then
4959 xsqy_tab(j)%sq(1:nz,iw) = sig(1:nz) * qymt(1:nz)
4967 ! read JPL2011 cross section data:
4972 n = 150 ; nsav = 150
4973 CALL base_read( filespec='DATAJ1/CH2O/CH2O_jpl11.abs', &
4974 skip_cnt=4,rd_cnt=n,x=x1,y=y298, &
4976 y298(1:n) = y298(1:n) * 1.e-20
4977 tcoef(1:n) = tcoef(1:n) * 1.e-24
4980 ! terminate endpoints and interpolate to working grid
4981 CALL add_pnts_inter2(x1,y298,yg1,kdata,n, &
4982 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
4984 n = nsav ; x1(1:n) = xsav(1:n)
4985 CALL add_pnts_inter2(x1,tcoef,yg2,kdata,n, &
4986 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
4988 ! quantum yields: Read, terminate, interpolate:
4990 n = 112 ; nsav = 112
4991 CALL base_read( filespec='DATAJ1/CH2O/CH2O_jpl11.yld', &
4992 skip_cnt=4,rd_cnt=n,x=x1,y=qr,y1=qm )
4995 CALL add_pnts_inter2(x1,qr,yg3,kdata,n, &
4996 nw,wl,xsqy_tab(j)%label,deltax,(/qr(1),0./))
4998 n = nsav ; x1(1:n) = xsav(1:n)
4999 CALL add_pnts_inter2(x1,qm,yg4,kdata,n, &
5000 nw,wl,xsqy_tab(j)%label,deltax,(/qm(1),0./))
5002 END SUBROUTINE readit
5004 END SUBROUTINE pxCH2O
5006 !=============================================================================*
5008 SUBROUTINE r140(nw,wl,wc,nz,tlev,airden,j)
5009 !-----------------------------------------------------------------------------*
5011 != Provide product (cross section) x (quantum yield) for CHCl3 photolysis: =*
5012 != CHCL3 + hv -> Products =*
5013 != Cross section: from JPL 2011 recommendation =*
5014 != Quantum yield: assumed to be unity =*
5015 !-----------------------------------------------------------------------------*
5017 INTEGER, intent(in) :: nw
5018 INTEGER, intent(in) :: nz
5019 INTEGER, intent(inout) :: j
5020 REAL, intent(in) :: wl(kw), wc(kw)
5021 REAL, intent(in) :: tlev(kz)
5022 REAL, intent(in) :: airden(kz)
5025 integer, PARAMETER :: kdata=50
5031 ! temperature correction factors:
5032 real, parameter :: b0 = 3.7973
5033 real, parameter :: b1 = -7.0913e-2
5034 real, parameter :: b2 = 4.9397e-4
5035 real, parameter :: b3 = -1.5226e-6
5036 real, parameter :: b4 = 1.7555e-9
5039 REAL, save :: yg(kw)
5045 if( initialize ) then
5048 call check_alloc( j, nz, nw-1 )
5050 !** quantum yield assumed to be unity
5051 temp(1:nz) = min(max(tlev(1:nz),210.),300.) - 295.
5053 ! compute temperature correction coefficients:
5056 IF(w1 > 190. .AND. w1 < 240.) THEN
5057 tcoeff = b0 + w1*(b1 + w1*(b2 + w1*(b3 + w1*b4)))
5059 xsqy_tab(j)%sq(1:nz,iw) = yg(iw) * 10.**(tcoeff*temp(1:nz))
5068 CALL base_read( filespec='DATAJ1/ABS/CHCl3_jpl11.abs', &
5069 skip_cnt=3,rd_cnt=n,x=x1,y=y1 )
5070 y1(1:n) = y1(1:n) * 1.E-20
5072 CALL add_pnts_inter2(x1,y1,yg,kdata,n, &
5073 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
5075 END SUBROUTINE readit
5079 !=============================================================================*
5081 SUBROUTINE r141(nw,wl,wc,nz,tlev,airden,j)
5082 !-----------------------------------------------------------------------------*
5084 != Provide product (cross section) x (quantum yield) for C2H5ONO2 =*
5086 != C2H5ONO2 + hv -> C2H5O + NO2 =*
5088 != Cross section: IUPAC 2006 (Atkinson et al., ACP, 6, 3625-4055, 2006) =*
5089 != Quantum yield: Assumed to be unity =*
5090 !-----------------------------------------------------------------------------*
5092 INTEGER, intent(in) :: nw
5093 INTEGER, intent(in) :: nz
5094 INTEGER, intent(inout) :: j
5095 REAL, intent(in) :: wl(kw), wc(kw)
5096 REAL, intent(in) :: tlev(kz)
5097 REAL, intent(in) :: airden(kz)
5100 integer, PARAMETER :: kdata = 50
5103 REAL :: x1(kdata), x2(kdata)
5104 REAL :: y1(kdata), y2(kdata)
5107 REAL, save :: yg1(kw), yg2(kw)
5110 if( initialize ) then
5113 call check_alloc( j, nz, nw-1 )
5115 t(1:nz) = tlev(1:nz) - 298.
5117 xsqy_tab(j)%sq(1:nz,iw) = yg1(iw) * exp(yg2(iw) * t(1:nz))
5124 ! mabs: absorption cross section options: 1: IUPAC 2006
5130 CALL base_read( filespec='DATAJ1/RONO2/C2H5ONO2_iup2006.abs', &
5131 skip_cnt=4,rd_cnt=n,x=x1,y=y1,y1=y2 )
5132 y1(1:n) = y1(1:n) * 1.e-20
5133 y2(1:n) = y2(1:n) * 1.e-3
5136 CALL add_pnts_inter2(x1,y1,yg1,kdata,n, &
5137 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
5139 n = nsav ; x1(1:n) = xsav(1:n)
5140 CALL add_pnts_inter2(x1,y2,yg2,kdata,n, &
5141 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
5143 END SUBROUTINE readit
5147 SUBROUTINE r146(nw,wl,wc,nz,tlev,airden,j)
5148 !-----------------------------------------------------------------------------*
5150 != Provide product (cross section) x (quantum yield) for =*
5151 != molecular Iodine, I2 =*
5152 != cross section from JPL2011 =*
5153 != Quantum yield: wave-dep, from Brewer and Tellinhuisen, 1972 =*
5154 != Quantum yield for Unimolecular Dissociation of I2 in Visible Absorption =*
5155 != J. Chem. Phys. 56, 3929-3937, 1972.
5156 !-----------------------------------------------------------------------------*
5158 INTEGER, intent(in) :: nw
5159 INTEGER, intent(in) :: nz
5160 INTEGER, intent(inout) :: j
5161 REAL, intent(in) :: wl(kw), wc(kw)
5162 REAL, intent(in) :: tlev(kz)
5163 REAL, intent(in) :: airden(kz)
5166 integer, PARAMETER :: kdata=200
5169 REAL :: x(kdata), y(kdata)
5172 REAL :: yg1(kw), yg2(kw)
5174 if( initialize ) then
5175 call check_alloc( ndx=j, nz=nw-1, nw=1 )
5177 xsqy_tab(j)%sq(1:nw-1,1) = yg1(1:nw-1) * yg2(1:nw-1)
5183 ! cross section from JPL2011
5186 CALL base_read( filespec='DATAJ1/ABS/I2_jpl11.abs', &
5187 skip_cnt=2,rd_cnt=n,x=x,y=y )
5188 y(1:n) = y(1:n) * 1.e-20
5190 CALL add_pnts_inter2(x,y,yg1,kdata,n, &
5191 nw,wl,xsqy_tab(j)%label,deltax,(/0.,0./))
5196 CALL base_read( filespec='DATAJ1/YLD/I2.qy',skip_cnt=4,rd_cnt=n,x=x,y=y )
5198 CALL add_pnts_inter2(x,y,yg2,kdata,n,nw,wl,xsqy_tab(j)%label,deltax,(/1.,0./))
5200 END SUBROUTINE readit
5204 SUBROUTINE add_pnts_inter2(xin,yin,yout,kdata,n,nw,wl,jlabel,deltax,yends)
5206 integer, intent(in) :: kdata
5207 integer, intent(in) :: n
5208 integer, intent(in) :: nw
5209 real, intent(in) :: deltax
5210 real, intent(in) :: wl(nw)
5211 real, intent(in) :: xin(kdata)
5212 real, intent(in) :: yin(kdata)
5213 real, intent(in) :: yends(2)
5214 real, intent(inout) :: yout(kdata)
5215 character(len=*), intent(in) :: jlabel
5218 real :: xwrk(kdata), ywrk(kdata)
5219 character(len=256) :: emsg
5222 xwrk(1:n) = xin(1:n)
5223 ywrk(1:n) = yin(1:n)
5224 CALL addpnt(xwrk,ywrk,kdata,m,xin(1)*(1.-deltax),yends(1))
5225 CALL addpnt(xwrk,ywrk,kdata,m, 0.,yends(1))
5226 CALL addpnt(xwrk,ywrk,kdata,m,xin(n)*(1.+deltax),yends(2))
5227 CALL addpnt(xwrk,ywrk,kdata,m, 1.e+38,yends(2))
5229 CALL inter2(nw,wl,yout,m,xwrk,ywrk,ierr)
5232 write(emsg,'(''add_pnts_inter2: Error '',i5,'' in inter2 for '',a)') ierr,trim(jlabel)
5233 call wrf_error_fatal( trim(emsg) )
5236 END SUBROUTINE add_pnts_inter2
5238 SUBROUTINE base_read( filespec, skip_cnt, rd_cnt,x, y, y1, y2, y3, y4, y5 )
5240 integer, optional, intent(in) :: skip_cnt
5241 integer, intent(inout) :: rd_cnt
5242 real, intent(inout) :: x(:), y(:)
5243 real, optional, intent(inout) :: y1(:), y2(:), y3(:)
5244 real, optional, intent(inout) :: y4(:), y5(:)
5245 character(len=*), intent(in) :: filespec
5249 integer :: ios, err_cnt
5250 character(len=256) :: emsg
5253 if( present(y5) ) y_to_rd = y_to_rd + 1
5254 if( present(y4) ) y_to_rd = y_to_rd + 1
5255 if( present(y3) ) y_to_rd = y_to_rd + 1
5256 if( present(y2) ) y_to_rd = y_to_rd + 1
5257 if( present(y1) ) y_to_rd = y_to_rd + 1
5259 OPEN(UNIT=kin,FILE=trim(filespec),STATUS='old',IOSTAT=ios)
5261 write(emsg,'(''base_read: failed to open '',a)') trim(filespec)
5262 call wrf_error_fatal( trim(emsg) )
5265 if( present(skip_cnt) ) then
5267 READ(kin,*,IOSTAT=ios)
5271 READ(kin,*,IOSTAT=ios) idum,rd_cnt
5274 READ(kin,*,IOSTAT=ios)
5281 write(emsg,'(''base_read: failed to read '',a)') trim(filespec)
5282 call wrf_error_fatal( trim(emsg) )
5285 select case( y_to_rd )
5288 READ(kin,*,IOSTAT=ios) x(i), y(i)
5293 READ(kin,*,IOSTAT=ios) x(i), y(i), y1(i)
5298 READ(kin,*,IOSTAT=ios) x(i), y(i), y1(i), y2(i)
5303 READ(kin,*,IOSTAT=ios) x(i), y(i), y1(i), y2(i), y3(i)
5308 READ(kin,*,IOSTAT=ios) x(i), y(i), y1(i), y2(i), y3(i),y4(i)
5313 READ(kin,*,IOSTAT=ios) x(i), y(i), y1(i), y2(i), y3(i),y4(i),y5(i)
5321 write(emsg,'(''base_read: failed to read '',a)') trim(filespec)
5322 call wrf_error_fatal( trim(emsg) )
5325 END SUBROUTINE base_read
5327 SUBROUTINE fo3qy2(nz, w, t, qyld)
5328 !-----------------------------------------------------------------------------*
5330 ! function to calculate the quantum yield O3 + hv -> O(1D) + O2, =*
5332 ! Matsumi, Y., F. J. Comes, G. Hancock, A. Hofzumanhays, A. J. Hynes,
5333 ! M. Kawasaki, and A. R. Ravishankara, QUantum yields for production of O(1D)
5334 ! in the ultraviolet photolysis of ozone: Recommendation based on evaluation
5335 ! of laboratory data, J. Geophys. Res., 107, 10.1029/2001JD000510, 2002.
5336 !-----------------------------------------------------------------------------*
5338 INTEGER, intent(in) :: nz
5339 REAL, intent(in) :: w
5340 REAL, intent(in) :: t(:)
5341 REAL, intent(inout) :: qyld(:)
5343 REAL, parameter :: A(3) = (/ 0.8036, 8.9061, 0.1192/)
5344 REAL, parameter :: X(3) = (/ 304.225, 314.957, 310.737/)
5345 REAL, parameter :: om(3) = (/ 5.576, 6.601, 2.187/)
5347 REAL, parameter :: q1 = 1.
5350 REAL :: q2(nz), qdiv(nz)
5353 kT(1:nz) = 0.695 * t(1:nz)
5354 q2(1:nz) = exp(-825.518/kT(1:nz))
5356 kT(1:nz) = t(1:nz)/300.
5357 qdiv(1:nz) = 1/(q1 + q2(1:nz))
5359 IF(w .LE. 305.) THEN
5361 ELSEIF(w .GT. 305. .AND. w .LE. 328.) THEN
5362 qyld(1:nz) = 0.0765 + a(1)*q1*qdiv(1:nz)*EXP(-((x(1) - w)/om(1))**4) &
5363 + kT(1:nz)*(a(2)*kT(1:nz)*q2*qdiv(1:nz)*EXP(-((x(2) - w)/om(2))**2) &
5364 + a(3)*sqrt(kT(1:nz))*EXP(-((x(3) - w)/om(3))**2))
5365 ELSEIF(w .GT. 328. .AND. w .LE. 340.) THEN
5367 ELSEIF(w .GT. 340.) THEN
5371 END SUBROUTINE fo3qy2
5373 SUBROUTINE qyacet(nz, w, T, M, fac)
5374 ! This file contains subroutines used for calculation of quantum yields for
5375 ! various photoreactions:
5376 ! qyacet - q.y. for acetone, based on Blitz et al. (2004)
5378 ! Compute acetone quantum yields according to the parameterization of:
5379 ! Blitz, M. A., D. E. Heard, M. J. Pilling, S. R. Arnold, and M. P. Chipperfield
5380 ! (2004), Pressure and temperature-dependent quantum yields for the
5381 ! photodissociation of acetone between 279 and 327.5 nm, Geophys.
5382 ! Res. Lett., 31, L06111, doi:10.1029/2003GL018793.
5387 ! w = wavelength, nm
5388 ! T = temperature, K
5389 ! m = air number density, molec. cm-3
5391 INTEGER, intent(in) :: nz
5392 REAL, intent(in) :: w
5393 REAL, intent(in) :: T(:), M(:)
5394 REAL, intent(inout) :: fac(:)
5399 REAL :: a0(nz), a1(nz), a2(nz), a3(nz), a4(nz)
5400 REAL :: b0(nz), b1(nz), b2(nz), b3(nz), b4(nz)
5402 REAL :: cA0(nz), cA1(nz), cA2(nz), cA3(nz), cA4(nz)
5405 ! fac = quantum yield for product CH3CO (acetyl radical)
5410 !** set out-of-range values:
5411 ! use low pressure limits for shorter wavelengths
5412 ! set to zero beyound 327.5
5414 IF(w .LT. 279.) THEN
5416 ELSEIF(w .GT. 327.) THEN
5420 !** CO (carbon monoxide) quantum yields:
5421 tfac(1:nz) = t(1:nz)/295.
5422 a0(1:nz) = 0.350 * tfac(1:nz)**(-1.28)
5423 b0(1:nz) = 0.068 * tfac(1:nz)**(-2.65)
5424 !*SM: prevent exponent overflow in rare cases:
5426 dumexp(1:nz) = b0(1:nz)*(w - 248.)
5427 where( dumexp(1:nz) > 80. )
5430 cA0(1:nz) = exp(dumexp(1:nz)) * a0(1:nz) / (1. - a0(1:nz))
5433 fco(1:nz) = 1. / (1. + cA0(1:nz))
5435 !** CH3CO (acetyl radical) quantum yields:
5437 IF(w >= 279. .AND. w < 302.) THEN
5438 a1(1:nz) = 1.600E-19 * tfac(1:nz)**(-2.38)
5439 b1(1:nz) = 0.55E-3 * tfac(1:nz)**(-3.19)
5440 cA1(1:nz) = a1(1:nz) * EXP(-b1(1:nz)*(wfac - 33113.))
5441 fac(1:nz) = (1. - fco(1:nz)) / (1. + cA1(1:nz) * M(1:nz))
5442 ELSEIF(w >= 302. .AND. w <= 327.) THEN
5443 a2(1:nz) = 1.62E-17 * tfac(1:nz)**(-10.03)
5444 b2(1:nz) = 1.79E-3 * tfac(1:nz)**(-1.364)
5445 cA2(1:nz) = a2(1:nz) * EXP(-b2(1:nz)*(wfac - 30488.))
5447 a3(1:nz) = 26.29 * tfac(1:nz)**(-6.59)
5448 b3(1:nz) = 5.72E-7 * tfac(1:nz)**(-2.93)
5449 c3(1:nz) = 30006. * tfac(1:nz)**(-0.064)
5450 ca3(1:nz) = a3(1:nz) * EXP(-b3(1:nz)*((1.e7/w) - c3(1:nz))**2)
5452 a4(1:nz) = 1.67E-15 * tfac(1:nz)**(-7.25)
5453 b4(1:nz) = 2.08E-3 * tfac(1:nz)**(-1.16)
5454 cA4(1:nz) = a4(1:nz) * EXP(-b4(1:nz)*(wfac - 30488.))
5456 fac(1:nz) = (1. - fco(1:nz)) * (1. + cA3(1:nz) + cA4(1:nz) * M(1:nz)) &
5457 / ((1. + cA3(1:nz) + cA2(1:nz) * M(1:nz)) * (1. + cA4(1:nz) * M(1:nz)))
5461 END SUBROUTINE qyacet
5463 SUBROUTINE diagnostics
5467 open( unit=44,file='TUV.diags')
5469 write(44,*) 'Photolysis diags'
5471 write(44,'(i3,'' Total photorates'')') npht_tab
5474 write(44,'(i3,2x,a)') m,trim(xsqy_tab(m)%label)
5477 write(44,'(''Wrf labels'')')
5480 write(44,'(i3,2x,a)') m,trim(xsqy_tab(m)%wrf_label)
5484 write(44,'(i3,'' Photorate(s) with no p,temp dependence'')') &
5485 count(xsqy_tab(2:npht_tab)%tpflag == 0)
5488 if( xsqy_tab(m)%tpflag == 0 ) then
5489 write(44,'(i3,2x,a)') m,trim(xsqy_tab(m)%label)
5494 write(44,'(i3,'' Photorate(s) with temp dependence'')') &
5495 count(xsqy_tab(2:npht_tab)%tpflag == 1)
5498 if( xsqy_tab(m)%tpflag == 1 ) then
5499 write(44,'(i3,2x,a)') m,trim(xsqy_tab(m)%label)
5504 write(44,'(i3,'' Photorate(s) with press dependence'')') &
5505 count(xsqy_tab(2:npht_tab)%tpflag == 2)
5508 if( xsqy_tab(m)%tpflag == 2 ) then
5509 write(44,'(i3,2x,a)') m,trim(xsqy_tab(m)%label)
5514 write(44,'(i3,'' Photorate(s) with temp,press dependence'')') &
5515 count(xsqy_tab(2:npht_tab)%tpflag == 3)
5518 if( xsqy_tab(m)%tpflag == 3 ) then
5519 write(44,'(i3,2x,a)') m,trim(xsqy_tab(m)%label)
5524 write(44,'(i3,'' Photorate(s) with second channel'')') &
5525 count(xsqy_tab(2:npht_tab)%channel == 2)
5528 if( xsqy_tab(m)%channel == 2 ) then
5529 write(44,'(i3,2x,a)') m,trim(xsqy_tab(m)%label)
5534 write(44,'(i3,'' Photorate(s) with third channel'')') &
5535 count(xsqy_tab(2:npht_tab)%channel == 3)
5538 if( xsqy_tab(m)%channel == 3 ) then
5539 write(44,'(i3,2x,a)') m,trim(xsqy_tab(m)%label)
5544 write(44,'(i3,'' Photorate(s) with multiple input files'')') &
5545 count(xsqy_tab(2:npht_tab)%filespec%nfiles > 1)
5548 if( xsqy_tab(m)%filespec%nfiles > 1 ) then
5549 write(44,'(i3,2x,a)') m,trim(xsqy_tab(m)%label)
5554 write(44,'('' Photorate(s) with skip == -1'')')
5557 n = xsqy_tab(m)%filespec%nfiles
5559 if( xsqy_tab(m)%filespec%nskip(n1) == -1 ) then
5560 write(44,'(i3,2x,a)') m,trim(xsqy_tab(m)%label)
5566 write(44,'('' Photorate(s) with skip >= 0'')')
5569 n = xsqy_tab(m)%filespec%nfiles
5571 if( xsqy_tab(m)%filespec%nskip(n1) >= 0 .and. &
5572 xsqy_tab(m)%filespec%filename(n1) /= ' ' ) then
5573 write(44,'(i3,2x,a)') m,trim(xsqy_tab(m)%label)
5579 write(44,'('' Photorate(s) with xfac /= 1.e-20'')')
5582 n = xsqy_tab(m)%filespec%nfiles
5584 if( xsqy_tab(m)%filespec%xfac(n1) /= 1.e-20 ) then
5585 write(44,'(i3,2x,a,1pg15.7)') &
5586 m,trim(xsqy_tab(m)%label),xsqy_tab(m)%filespec%xfac(n1)
5592 write(44,'('' Filenames'')')
5595 n = xsqy_tab(m)%filespec%nfiles
5597 if( xsqy_tab(m)%filespec%filename(n1) /= ' ' ) then
5598 write(44,'(i3,2x,a,3x,i4,3x,i4)') &
5599 m,trim(xsqy_tab(m)%filespec%filename(n1)), &
5600 xsqy_tab(m)%filespec%nskip(n1), &
5601 xsqy_tab(m)%filespec%nread(n1)
5608 END SUBROUTINE diagnostics
5610 INTEGER FUNCTION get_xsqy_tab_ndx( jlabel,wrf_label )
5612 character(len=*), optional, intent(in) :: jlabel
5613 character(len=*), optional, intent(in) :: wrf_label
5617 get_xsqy_tab_ndx = -1
5619 if( present(jlabel) ) then
5621 if( trim(jlabel) == trim(xsqy_tab(m)%label) ) then
5622 get_xsqy_tab_ndx = m
5626 elseif( present(wrf_label) ) then
5628 if( trim(wrf_label) == trim(xsqy_tab(m)%wrf_label) ) then
5629 get_xsqy_tab_ndx = m
5636 END FUNCTION get_xsqy_tab_ndx
5638 SUBROUTINE check_alloc( ndx, nz, nw )
5640 integer, intent(in) :: ndx
5641 integer, intent(in) :: nz
5642 integer, intent(in) :: nw
5645 character(len=256) :: emsg
5647 if( .not. allocated(xsqy_tab(ndx)%sq) ) then
5648 allocate( xsqy_tab(ndx)%sq(nz,nw),stat=astat )
5649 elseif( size(xsqy_tab(ndx)%sq,dim=1) /= nz ) then
5650 deallocate( xsqy_tab(ndx)%sq )
5651 allocate( xsqy_tab(ndx)%sq(nz,nw),stat=astat )
5656 if( astat /= 0 ) then
5657 write(emsg,'(''check_alloc: failed to alloc sq; error = '',i4)') astat
5658 call wrf_error_fatal( trim(emsg) )
5661 END SUBROUTINE check_alloc
5663 end module module_rxn