1 !!MODULE module_ra_rrtmg_sw
5 use parkind ,only : im => kind_im, rb => kind_rb
10 !------------------------------------------------------------------
11 ! rrtmg_sw main parameters
13 ! Initial version: JJMorcrette, ECMWF, jul1998
14 ! Revised: MJIacono, AER, jun2006
15 ! Revised: MJIacono, AER, aug2008
16 !------------------------------------------------------------------
19 ! ----- : ---- : ----------------------------------------------
20 ! mxlay : integer: maximum number of layers
21 ! mg : integer: number of original g-intervals per spectral band
22 ! nbndsw : integer: number of spectral bands
23 ! naerec : integer: number of aerosols (iaer=6, ecmwf aerosol option)
24 ! ngptsw : integer: total number of reduced g-intervals for rrtmg_lw
25 ! ngNN : integer: number of reduced g-intervals per spectral band
26 ! ngsNN : integer: cumulative number of g-intervals per band
27 !------------------------------------------------------------------
29 integer(kind=im), parameter :: mxlay = 203 !jplay, klev
30 integer(kind=im), parameter :: mg = 16 !jpg
31 integer(kind=im), parameter :: nbndsw = 14 !jpsw, ksw
32 integer(kind=im), parameter :: naerec = 6 !jpaer
33 integer(kind=im), parameter :: mxmol = 38
34 integer(kind=im), parameter :: nstr = 2
35 integer(kind=im), parameter :: nmol = 7
36 ! Use for 112 g-point model
37 integer(kind=im), parameter :: ngptsw = 112 !jpgpt
38 ! Use for 224 g-point model
39 ! integer(kind=im), parameter :: ngptsw = 224 !jpgpt
41 ! may need to rename these - from v2.6
42 integer(kind=im), parameter :: jpband = 29
43 integer(kind=im), parameter :: jpb1 = 16 !istart
44 integer(kind=im), parameter :: jpb2 = 29 !iend
46 integer(kind=im), parameter :: jmcmu = 32
47 integer(kind=im), parameter :: jmumu = 32
48 integer(kind=im), parameter :: jmphi = 3
49 integer(kind=im), parameter :: jmxang = 4
50 integer(kind=im), parameter :: jmxstr = 16
52 ! Use for 112 g-point model
53 integer(kind=im), parameter :: ng16 = 6
54 integer(kind=im), parameter :: ng17 = 12
55 integer(kind=im), parameter :: ng18 = 8
56 integer(kind=im), parameter :: ng19 = 8
57 integer(kind=im), parameter :: ng20 = 10
58 integer(kind=im), parameter :: ng21 = 10
59 integer(kind=im), parameter :: ng22 = 2
60 integer(kind=im), parameter :: ng23 = 10
61 integer(kind=im), parameter :: ng24 = 8
62 integer(kind=im), parameter :: ng25 = 6
63 integer(kind=im), parameter :: ng26 = 6
64 integer(kind=im), parameter :: ng27 = 8
65 integer(kind=im), parameter :: ng28 = 6
66 integer(kind=im), parameter :: ng29 = 12
68 integer(kind=im), parameter :: ngs16 = 6
69 integer(kind=im), parameter :: ngs17 = 18
70 integer(kind=im), parameter :: ngs18 = 26
71 integer(kind=im), parameter :: ngs19 = 34
72 integer(kind=im), parameter :: ngs20 = 44
73 integer(kind=im), parameter :: ngs21 = 54
74 integer(kind=im), parameter :: ngs22 = 56
75 integer(kind=im), parameter :: ngs23 = 66
76 integer(kind=im), parameter :: ngs24 = 74
77 integer(kind=im), parameter :: ngs25 = 80
78 integer(kind=im), parameter :: ngs26 = 86
79 integer(kind=im), parameter :: ngs27 = 94
80 integer(kind=im), parameter :: ngs28 = 100
81 integer(kind=im), parameter :: ngs29 = 112
83 ! Use for 224 g-point model
84 ! integer(kind=im), parameter :: ng16 = 16
85 ! integer(kind=im), parameter :: ng17 = 16
86 ! integer(kind=im), parameter :: ng18 = 16
87 ! integer(kind=im), parameter :: ng19 = 16
88 ! integer(kind=im), parameter :: ng20 = 16
89 ! integer(kind=im), parameter :: ng21 = 16
90 ! integer(kind=im), parameter :: ng22 = 16
91 ! integer(kind=im), parameter :: ng23 = 16
92 ! integer(kind=im), parameter :: ng24 = 16
93 ! integer(kind=im), parameter :: ng25 = 16
94 ! integer(kind=im), parameter :: ng26 = 16
95 ! integer(kind=im), parameter :: ng27 = 16
96 ! integer(kind=im), parameter :: ng28 = 16
97 ! integer(kind=im), parameter :: ng29 = 16
99 ! integer(kind=im), parameter :: ngs16 = 16
100 ! integer(kind=im), parameter :: ngs17 = 32
101 ! integer(kind=im), parameter :: ngs18 = 48
102 ! integer(kind=im), parameter :: ngs19 = 64
103 ! integer(kind=im), parameter :: ngs20 = 80
104 ! integer(kind=im), parameter :: ngs21 = 96
105 ! integer(kind=im), parameter :: ngs22 = 112
106 ! integer(kind=im), parameter :: ngs23 = 128
107 ! integer(kind=im), parameter :: ngs24 = 144
108 ! integer(kind=im), parameter :: ngs25 = 160
109 ! integer(kind=im), parameter :: ngs26 = 176
110 ! integer(kind=im), parameter :: ngs27 = 192
111 ! integer(kind=im), parameter :: ngs28 = 208
112 ! integer(kind=im), parameter :: ngs29 = 224
114 ! Source function solar constant
115 real(kind=rb), parameter :: rrsw_scon = 1.36822e+03 ! W/m2
121 use parkind, only : im => kind_im, rb => kind_rb
122 use parrrsw, only : nbndsw, naerec
127 !------------------------------------------------------------------
128 ! rrtmg_sw aerosol optical properties
130 ! Data derived from six ECMWF aerosol types and defined for
131 ! the rrtmg_sw spectral intervals
133 ! Initial: J.-J. Morcrette, ECMWF, mar2003
134 ! Revised: MJIacono, AER, jul2006
135 ! Revised: MJIacono, AER, aug2008
136 !------------------------------------------------------------------
138 !-- The six ECMWF aerosol types are respectively:
140 ! 1/ continental average 2/ maritime
142 ! 5/ volcanic active 6/ stratospheric background
144 ! computed from Hess and Koepke (con, mar, des, urb)
145 ! from Bonnel et al. (vol, str)
147 ! rrtmg_sw 14 spectral intervals (microns):
163 !------------------------------------------------------------------
166 ! ----- : ---- : ----------------------------------------------
167 ! rsrtaua : real : ratio of average optical thickness in
168 ! spectral band to that at 0.55 micron
169 ! rsrpiza : real : average single scattering albedo (unitless)
170 ! rsrasya : real : average asymmetry parameter (unitless)
171 !------------------------------------------------------------------
173 real(kind=rb) :: rsrtaua(nbndsw,naerec)
174 real(kind=rb) :: rsrpiza(nbndsw,naerec)
175 real(kind=rb) :: rsrasya(nbndsw,naerec)
181 use parkind, only : im => kind_im, rb => kind_rb
186 !------------------------------------------------------------------
187 ! rrtmg_sw cloud property coefficients
189 ! Initial: J.-J. Morcrette, ECMWF, oct1999
190 ! Revised: J. Delamere/MJIacono, AER, aug2005
191 ! Revised: MJIacono, AER, nov2005
192 ! Revised: MJIacono, AER, jul2006
193 ! Revised: MJIacono, AER, aug2008
194 !------------------------------------------------------------------
197 ! ----- : ---- : ----------------------------------------------
198 ! xxxliq1 : real : optical properties (extinction coefficient, single
199 ! scattering albedo, assymetry factor) from
200 ! Hu & Stamnes, j. clim., 6, 728-742, 1993.
201 ! xxxice2 : real : optical properties (extinction coefficient, single
202 ! scattering albedo, assymetry factor) from streamer v3.0,
203 ! Key, streamer user's guide, cooperative institude
204 ! for meteorological studies, 95 pp., 2001.
205 ! xxxice3 : real : optical properties (extinction coefficient, single
206 ! scattering albedo, assymetry factor) from
207 ! Fu, j. clim., 9, 1996.
208 ! xbari : real : optical property coefficients for five spectral
209 ! intervals (2857-4000, 4000-5263, 5263-7692, 7692-14285,
210 ! and 14285-40000 wavenumbers) following
211 ! Ebert and Curry, jgr, 97, 3831-3836, 1992.
212 !------------------------------------------------------------------
214 real(kind=rb) :: extliq1(58,16:29), ssaliq1(58,16:29), asyliq1(58,16:29)
215 real(kind=rb) :: extice2(43,16:29), ssaice2(43,16:29), asyice2(43,16:29)
216 real(kind=rb) :: extice3(46,16:29), ssaice3(46,16:29), asyice3(46,16:29)
217 real(kind=rb) :: fdlice3(46,16:29)
218 real(kind=rb) :: abari(5),bbari(5),cbari(5),dbari(5),ebari(5),fbari(5)
224 use parkind, only : im => kind_im, rb => kind_rb
229 !------------------------------------------------------------------
232 ! Initial version: MJIacono, AER, jun2006
233 ! Revised: MJIacono, AER, aug2008
234 !------------------------------------------------------------------
237 ! ----- : ---- : ----------------------------------------------
238 ! fluxfac: real : radiance to flux conversion factor
239 ! heatfac: real : flux to heating rate conversion factor
240 !oneminus: real : 1.-1.e-6
242 ! grav : real : acceleration of gravity
243 ! planck : real : planck constant
244 ! boltz : real : boltzmann constant
245 ! clight : real : speed of light
246 ! avogad : real : avogadro constant
247 ! alosmt : real : loschmidt constant
248 ! gascon : real : molar gas constant
249 ! radcn1 : real : first radiation constant
250 ! radcn2 : real : second radiation constant
251 ! sbcnst : real : stefan-boltzmann constant
252 ! secdy : real : seconds per day
253 !------------------------------------------------------------------
255 real(kind=rb) :: fluxfac, heatfac
256 real(kind=rb) :: oneminus, pi, grav
257 real(kind=rb) :: planck, boltz, clight
258 real(kind=rb) :: avogad, alosmt, gascon
259 real(kind=rb) :: radcn1, radcn2
260 real(kind=rb) :: sbcnst, secdy
266 use parkind ,only : im => kind_im, rb => kind_rb
267 use parrrsw, only : ng16
272 !-----------------------------------------------------------------
273 ! rrtmg_sw ORIGINAL abs. coefficients for interval 16
274 ! band 16: 2600-3250 cm-1 (low - h2o,ch4; high - ch4)
276 ! Initial version: JJMorcrette, ECMWF, oct1999
277 ! Revised: MJIacono, AER, jul2006
278 ! Revised: MJIacono, AER, aug2008
279 !-----------------------------------------------------------------
282 ! ---- : ---- : ---------------------------------------------
288 !-----------------------------------------------------------------
290 integer(kind=im), parameter :: no16 = 16
292 real(kind=rb) :: kao(9,5,13,no16)
293 real(kind=rb) :: kbo(5,13:59,no16)
294 real(kind=rb) :: selfrefo(10,no16), forrefo(3,no16)
295 real(kind=rb) :: sfluxrefo(no16)
297 integer(kind=im) :: layreffr
298 real(kind=rb) :: rayl, strrat1
300 !-----------------------------------------------------------------
301 ! rrtmg_sw COMBINED abs. coefficients for interval 16
302 ! band 16: 2600-3250 cm-1 (low - h2o,ch4; high - ch4)
304 ! Initial version: JJMorcrette, ECMWF, oct1999
305 ! Revised: MJIacono, AER, jul2006
306 ! Revised: MJIacono, AER, aug2008
307 !-----------------------------------------------------------------
310 ! ---- : ---- : ---------------------------------------------
318 !-----------------------------------------------------------------
320 real(kind=rb) :: ka(9,5,13,ng16) , absa(585,ng16)
321 real(kind=rb) :: kb(5,13:59,ng16), absb(235,ng16)
322 real(kind=rb) :: selfref(10,ng16), forref(3,ng16)
323 real(kind=rb) :: sfluxref(ng16)
325 equivalence (ka(1,1,1,1),absa(1,1)), (kb(1,13,1),absb(1,1))
331 use parkind ,only : im => kind_im, rb => kind_rb
332 use parrrsw, only : ng17
337 !-----------------------------------------------------------------
338 ! rrtmg_sw ORIGINAL abs. coefficients for interval 17
339 ! band 17: 3250-4000 cm-1 (low - h2o,co2; high - h2o,co2)
341 ! Initial version: JJMorcrette, ECMWF, oct1999
342 ! Revised: MJIacono, AER, jul2006
343 ! Revised: MJIacono, AER, aug2008
344 !-----------------------------------------------------------------
347 ! ---- : ---- : ---------------------------------------------
353 !-----------------------------------------------------------------
355 integer(kind=im), parameter :: no17 = 16
357 real(kind=rb) :: kao(9,5,13,no17)
358 real(kind=rb) :: kbo(5,5,13:59,no17)
359 real(kind=rb) :: selfrefo(10,no17), forrefo(4,no17)
360 real(kind=rb) :: sfluxrefo(no17,5)
362 integer(kind=im) :: layreffr
363 real(kind=rb) :: rayl, strrat
365 !-----------------------------------------------------------------
366 ! rrtmg_sw COMBINED abs. coefficients for interval 17
367 ! band 17: 3250-4000 cm-1 (low - h2o,co2; high - h2o,co2)
369 ! Initial version: JJMorcrette, ECMWF, oct1999
370 ! Revised: MJIacono, AER, jul2006
371 ! Revised: MJIacono, AER, aug2008
372 !-----------------------------------------------------------------
375 ! ---- : ---- : ---------------------------------------------
383 !-----------------------------------------------------------------
385 real(kind=rb) :: ka(9,5,13,ng17) , absa(585,ng17)
386 real(kind=rb) :: kb(5,5,13:59,ng17), absb(1175,ng17)
387 real(kind=rb) :: selfref(10,ng17), forref(4,ng17)
388 real(kind=rb) :: sfluxref(ng17,5)
390 equivalence (ka(1,1,1,1),absa(1,1)), (kb(1,1,13,1),absb(1,1))
396 use parkind ,only : im => kind_im, rb => kind_rb
397 use parrrsw, only : ng18
402 !-----------------------------------------------------------------
403 ! rrtmg_sw ORIGINAL abs. coefficients for interval 18
404 ! band 18: 4000-4650 cm-1 (low - h2o,ch4; high - ch4)
406 ! Initial version: JJMorcrette, ECMWF, oct1999
407 ! Revised: MJIacono, AER, jul2006
408 ! Revised: MJIacono, AER, aug2008
409 !-----------------------------------------------------------------
412 ! ---- : ---- : ---------------------------------------------
418 !-----------------------------------------------------------------
420 integer(kind=im), parameter :: no18 = 16
422 real(kind=rb) :: kao(9,5,13,no18)
423 real(kind=rb) :: kbo(5,13:59,no18)
424 real(kind=rb) :: selfrefo(10,no18), forrefo(3,no18)
425 real(kind=rb) :: sfluxrefo(no18,9)
427 integer(kind=im) :: layreffr
428 real(kind=rb) :: rayl, strrat
430 !-----------------------------------------------------------------
431 ! rrtmg_sw COMBINED abs. coefficients for interval 18
432 ! band 18: 4000-4650 cm-1 (low - h2o,ch4; high - ch4)
434 ! Initial version: JJMorcrette, ECMWF, oct1999
435 ! Revised: MJIacono, AER, jul2006
436 ! Revised: MJIacono, AER, aug2008
437 !-----------------------------------------------------------------
440 ! ---- : ---- : ---------------------------------------------
448 !-----------------------------------------------------------------
450 real(kind=rb) :: ka(9,5,13,ng18), absa(585,ng18)
451 real(kind=rb) :: kb(5,13:59,ng18), absb(235,ng18)
452 real(kind=rb) :: selfref(10,ng18), forref(3,ng18)
453 real(kind=rb) :: sfluxref(ng18,9)
455 equivalence (ka(1,1,1,1),absa(1,1)), (kb(1,13,1),absb(1,1))
461 use parkind ,only : im => kind_im, rb => kind_rb
462 use parrrsw, only : ng19
467 !-----------------------------------------------------------------
468 ! rrtmg_sw ORIGINAL abs. coefficients for interval 19
469 ! band 19: 4650-5150 cm-1 (low - h2o,co2; high - co2)
471 ! Initial version: JJMorcrette, ECMWF, oct1999
472 ! Revised: MJIacono, AER, jul2006
473 ! Revised: MJIacono, AER, aug2008
474 !-----------------------------------------------------------------
477 ! ---- : ---- : ---------------------------------------------
483 !-----------------------------------------------------------------
485 integer(kind=im), parameter :: no19 = 16
487 real(kind=rb) :: kao(9,5,13,no19)
488 real(kind=rb) :: kbo(5,13:59,no19)
489 real(kind=rb) :: selfrefo(10,no19), forrefo(3,no19)
490 real(kind=rb) :: sfluxrefo(no19,9)
492 integer(kind=im) :: layreffr
493 real(kind=rb) :: rayl, strrat
495 !-----------------------------------------------------------------
496 ! rrtmg_sw COMBINED abs. coefficients for interval 19
497 ! band 19: 4650-5150 cm-1 (low - h2o,co2; high - co2)
499 ! Initial version: JJMorcrette, ECMWF, oct1999
500 ! Revised: MJIacono, AER, jul2006
501 ! Revised: MJIacono, AER, aug2008
502 !-----------------------------------------------------------------
505 ! ---- : ---- : ---------------------------------------------
513 !-----------------------------------------------------------------
515 real(kind=rb) :: ka(9,5,13,ng19), absa(585,ng19)
516 real(kind=rb) :: kb(5,13:59,ng19), absb(235,ng19)
517 real(kind=rb) :: selfref(10,ng19), forref(3,ng19)
518 real(kind=rb) :: sfluxref(ng19,9)
520 equivalence (ka(1,1,1,1),absa(1,1)), (kb(1,13,1),absb(1,1))
526 use parkind ,only : im => kind_im, rb => kind_rb
527 use parrrsw, only : ng20
532 !-----------------------------------------------------------------
533 ! rrtmg_sw ORIGINAL abs. coefficients for interval 20
534 ! band 20: 5150-6150 cm-1 (low - h2o; high - h2o)
536 ! Initial version: JJMorcrette, ECMWF, oct1999
537 ! Revised: MJIacono, AER, jul2006
538 ! Revised: MJIacono, AER, aug2008
539 !-----------------------------------------------------------------
542 ! ---- : ---- : ---------------------------------------------
549 !-----------------------------------------------------------------
551 integer(kind=im), parameter :: no20 = 16
553 real(kind=rb) :: kao(5,13,no20)
554 real(kind=rb) :: kbo(5,13:59,no20)
555 real(kind=rb) :: selfrefo(10,no20), forrefo(4,no20)
556 real(kind=rb) :: sfluxrefo(no20)
557 real(kind=rb) :: absch4o(no20)
559 integer(kind=im) :: layreffr
560 real(kind=rb) :: rayl
562 !-----------------------------------------------------------------
563 ! rrtmg_sw COMBINED abs. coefficients for interval 20
564 ! band 20: 5150-6150 cm-1 (low - h2o; high - h2o)
566 ! Initial version: JJMorcrette, ECMWF, oct1999
567 ! Revised: MJIacono, AER, jul2006
568 ! Revised: MJIacono, AER, aug2008
569 !-----------------------------------------------------------------
572 ! ---- : ---- : ---------------------------------------------
581 !-----------------------------------------------------------------
583 real(kind=rb) :: ka(5,13,ng20), absa(65,ng20)
584 real(kind=rb) :: kb(5,13:59,ng20), absb(235,ng20)
585 real(kind=rb) :: selfref(10,ng20), forref(4,ng20)
586 real(kind=rb) :: sfluxref(ng20)
587 real(kind=rb) :: absch4(ng20)
589 equivalence (ka(1,1,1),absa(1,1)), (kb(1,13,1),absb(1,1))
595 use parkind ,only : im => kind_im, rb => kind_rb
596 use parrrsw, only : ng21
601 !-----------------------------------------------------------------
602 ! rrtmg_sw ORIGINAL abs. coefficients for interval 21
603 ! band 21: 6150-7700 cm-1 (low - h2o,co2; high - h2o,co2)
605 ! Initial version: JJMorcrette, ECMWF, oct1999
606 ! Revised: MJIacono, AER, jul2006
607 ! Revised: MJIacono, AER, aug2008
608 !-----------------------------------------------------------------
611 ! ---- : ---- : ---------------------------------------------
617 !-----------------------------------------------------------------
619 integer(kind=im), parameter :: no21 = 16
621 real(kind=rb) :: kao(9,5,13,no21)
622 real(kind=rb) :: kbo(5,5,13:59,no21)
623 real(kind=rb) :: selfrefo(10,no21), forrefo(4,no21)
624 real(kind=rb) :: sfluxrefo(no21,9)
626 integer(kind=im) :: layreffr
627 real(kind=rb) :: rayl, strrat
629 !-----------------------------------------------------------------
630 ! rrtmg_sw COMBINED abs. coefficients for interval 21
631 ! band 21: 6150-7700 cm-1 (low - h2o,co2; high - h2o,co2)
633 ! Initial version: JJMorcrette, ECMWF, oct1999
634 ! Revised: MJIacono, AER, jul2006
635 ! Revised: MJIacono, AER, aug2008
636 !-----------------------------------------------------------------
639 ! ---- : ---- : ---------------------------------------------
647 !-----------------------------------------------------------------
649 real(kind=rb) :: ka(9,5,13,ng21), absa(585,ng21)
650 real(kind=rb) :: kb(5,5,13:59,ng21), absb(1175,ng21)
651 real(kind=rb) :: selfref(10,ng21), forref(4,ng21)
652 real(kind=rb) :: sfluxref(ng21,9)
654 equivalence (ka(1,1,1,1),absa(1,1)), (kb(1,1,13,1),absb(1,1))
660 use parkind ,only : im => kind_im, rb => kind_rb
661 use parrrsw, only : ng22
666 !-----------------------------------------------------------------
667 ! rrtmg_sw ORIGINAL abs. coefficients for interval 22
668 ! band 22: 7700-8050 cm-1 (low - h2o,o2; high - o2)
670 ! Initial version: JJMorcrette, ECMWF, oct1999
671 ! Revised: MJIacono, AER, jul2006
672 ! Revised: MJIacono, AER, aug2008
673 !-----------------------------------------------------------------
676 ! ---- : ---- : ---------------------------------------------
682 !-----------------------------------------------------------------
684 integer(kind=im), parameter :: no22 = 16
686 real(kind=rb) :: kao(9,5,13,no22)
687 real(kind=rb) :: kbo(5,13:59,no22)
688 real(kind=rb) :: selfrefo(10,no22), forrefo(3,no22)
689 real(kind=rb) :: sfluxrefo(no22,9)
691 integer(kind=im) :: layreffr
692 real(kind=rb) :: rayl, strrat
694 !-----------------------------------------------------------------
695 ! rrtmg_sw COMBINED abs. coefficients for interval 22
696 ! band 22: 7700-8050 cm-1 (low - h2o,o2; high - o2)
698 ! Initial version: JJMorcrette, ECMWF, oct1999
699 ! Revised: MJIacono, AER, jul2006
700 ! Revised: MJIacono, AER, aug2008
701 !-----------------------------------------------------------------
704 ! ---- : ---- : ---------------------------------------------
712 !-----------------------------------------------------------------
714 real(kind=rb) :: ka(9,5,13,ng22), absa(585,ng22)
715 real(kind=rb) :: kb(5,13:59,ng22), absb(235,ng22)
716 real(kind=rb) :: selfref(10,ng22), forref(3,ng22)
717 real(kind=rb) :: sfluxref(ng22,9)
719 equivalence (ka(1,1,1,1),absa(1,1)), (kb(1,13,1),absb(1,1))
725 use parkind ,only : im => kind_im, rb => kind_rb
726 use parrrsw, only : ng23
731 !-----------------------------------------------------------------
732 ! rrtmg_sw ORIGINAL abs. coefficients for interval 23
733 ! band 23: 8050-12850 cm-1 (low - h2o; high - nothing)
735 ! Initial version: JJMorcrette, ECMWF, oct1999
736 ! Revised: MJIacono, AER, jul2006
737 ! Revised: MJIacono, AER, aug2008
738 !-----------------------------------------------------------------
741 ! ---- : ---- : ---------------------------------------------
747 !-----------------------------------------------------------------
749 integer(kind=im), parameter :: no23 = 16
751 real(kind=rb) :: kao(5,13,no23)
752 real(kind=rb) :: selfrefo(10,no23), forrefo(3,no23)
753 real(kind=rb) :: sfluxrefo(no23)
754 real(kind=rb) :: raylo(no23)
756 integer(kind=im) :: layreffr
757 real(kind=rb) :: givfac
759 !-----------------------------------------------------------------
760 ! rrtmg_sw COMBINED abs. coefficients for interval 23
761 ! band 23: 8050-12850 cm-1 (low - h2o; high - nothing)
763 ! Initial version: JJMorcrette, ECMWF, oct1999
764 ! Revised: MJIacono, AER, jul2006
765 ! Revised: MJIacono, AER, aug2008
766 !-----------------------------------------------------------------
769 ! ---- : ---- : ---------------------------------------------
777 !-----------------------------------------------------------------
779 real(kind=rb) :: ka(5,13,ng23), absa(65,ng23)
780 real(kind=rb) :: selfref(10,ng23), forref(3,ng23)
781 real(kind=rb) :: sfluxref(ng23), rayl(ng23)
783 equivalence (ka(1,1,1),absa(1,1))
789 use parkind ,only : im => kind_im, rb => kind_rb
790 use parrrsw, only : ng24
795 !-----------------------------------------------------------------
796 ! rrtmg_sw ORIGINAL abs. coefficients for interval 24
797 ! band 24: 12850-16000 cm-1 (low - h2o,o2; high - o2)
799 ! Initial version: JJMorcrette, ECMWF, oct1999
800 ! Revised: MJIacono, AER, jul2006
801 ! Revised: MJIacono, AER, aug2008
802 !-----------------------------------------------------------------
805 ! ---- : ---- : ---------------------------------------------
815 !-----------------------------------------------------------------
817 integer(kind=im), parameter :: no24 = 16
819 real(kind=rb) :: kao(9,5,13,no24)
820 real(kind=rb) :: kbo(5,13:59,no24)
821 real(kind=rb) :: selfrefo(10,no24), forrefo(3,no24)
822 real(kind=rb) :: sfluxrefo(no24,9)
823 real(kind=rb) :: abso3ao(no24), abso3bo(no24)
824 real(kind=rb) :: raylao(no24,9), raylbo(no24)
826 integer(kind=im) :: layreffr
827 real(kind=rb) :: strrat
829 !-----------------------------------------------------------------
830 ! rrtmg_sw COMBINED abs. coefficients for interval 24
831 ! band 24: 12850-16000 cm-1 (low - h2o,o2; high - o2)
833 ! Initial version: JJMorcrette, ECMWF, oct1999
834 ! Revised: MJIacono, AER, jul2006
835 ! Revised: MJIacono, AER, aug2008
836 !-----------------------------------------------------------------
839 ! ---- : ---- : ---------------------------------------------
851 !-----------------------------------------------------------------
853 real(kind=rb) :: ka(9,5,13,ng24), absa(585,ng24)
854 real(kind=rb) :: kb(5,13:59,ng24), absb(235,ng24)
855 real(kind=rb) :: selfref(10,ng24), forref(3,ng24)
856 real(kind=rb) :: sfluxref(ng24,9)
857 real(kind=rb) :: abso3a(ng24), abso3b(ng24)
858 real(kind=rb) :: rayla(ng24,9), raylb(ng24)
860 equivalence (ka(1,1,1,1),absa(1,1)), (kb(1,13,1),absb(1,1))
866 use parkind ,only : im => kind_im, rb => kind_rb
867 use parrrsw, only : ng25
872 !-----------------------------------------------------------------
873 ! rrtmg_sw ORIGINAL abs. coefficients for interval 25
874 ! band 25: 16000-22650 cm-1 (low - h2o; high - nothing)
876 ! Initial version: JJMorcrette, ECMWF, oct1999
877 ! Revised: MJIacono, AER, jul2006
878 ! Revised: MJIacono, AER, aug2008
879 !-----------------------------------------------------------------
882 ! ---- : ---- : ---------------------------------------------
888 !-----------------------------------------------------------------
890 integer(kind=im), parameter :: no25 = 16
892 real(kind=rb) :: kao(5,13,no25)
893 real(kind=rb) :: sfluxrefo(no25)
894 real(kind=rb) :: abso3ao(no25), abso3bo(no25)
895 real(kind=rb) :: raylo(no25)
897 integer(kind=im) :: layreffr
899 !-----------------------------------------------------------------
900 ! rrtmg_sw COMBINED abs. coefficients for interval 25
901 ! band 25: 16000-22650 cm-1 (low - h2o; high - nothing)
903 ! Initial version: JJMorcrette, ECMWF, oct1999
904 ! Revised: MJIacono, AER, jul2006
905 ! Revised: MJIacono, AER, aug2008
906 !-----------------------------------------------------------------
909 ! ---- : ---- : ---------------------------------------------
916 !-----------------------------------------------------------------
918 real(kind=rb) :: ka(5,13,ng25), absa(65,ng25)
919 real(kind=rb) :: sfluxref(ng25)
920 real(kind=rb) :: abso3a(ng25), abso3b(ng25)
921 real(kind=rb) :: rayl(ng25)
923 equivalence (ka(1,1,1),absa(1,1))
929 use parkind ,only : im => kind_im, rb => kind_rb
930 use parrrsw, only : ng26
935 !-----------------------------------------------------------------
936 ! rrtmg_sw ORIGINAL abs. coefficients for interval 26
937 ! band 26: 22650-29000 cm-1 (low - nothing; high - nothing)
939 ! Initial version: JJMorcrette, ECMWF, oct1999
940 ! Revised: MJIacono, AER, jul2006
941 ! Revised: MJIacono, AER, aug2008
942 !-----------------------------------------------------------------
945 ! ---- : ---- : ---------------------------------------------
948 !-----------------------------------------------------------------
950 integer(kind=im), parameter :: no26 = 16
952 real(kind=rb) :: sfluxrefo(no26)
953 real(kind=rb) :: raylo(no26)
955 !-----------------------------------------------------------------
956 ! rrtmg_sw COMBINED abs. coefficients for interval 26
957 ! band 26: 22650-29000 cm-1 (low - nothing; high - nothing)
959 ! Initial version: JJMorcrette, ECMWF, oct1999
960 ! Revised: MJIacono, AER, jul2006
961 ! Revised: MJIacono, AER, aug2008
962 !-----------------------------------------------------------------
965 ! ---- : ---- : ---------------------------------------------
968 !-----------------------------------------------------------------
970 real(kind=rb) :: sfluxref(ng26)
971 real(kind=rb) :: rayl(ng26)
977 use parkind ,only : im => kind_im, rb => kind_rb
978 use parrrsw, only : ng27
983 !-----------------------------------------------------------------
984 ! rrtmg_sw ORIGINAL abs. coefficients for interval 27
985 ! band 27: 29000-38000 cm-1 (low - o3; high - o3)
987 ! Initial version: JJMorcrette, ECMWF, oct1999
988 ! Revised: MJIacono, AER, jul2006
989 ! Revised: MJIacono, AER, aug2008
990 !-----------------------------------------------------------------
993 ! ---- : ---- : ---------------------------------------------
998 !-----------------------------------------------------------------
1000 integer(kind=im), parameter :: no27 = 16
1002 real(kind=rb) :: kao(5,13,no27)
1003 real(kind=rb) :: kbo(5,13:59,no27)
1004 real(kind=rb) :: sfluxrefo(no27)
1005 real(kind=rb) :: raylo(no27)
1007 integer(kind=im) :: layreffr
1008 real(kind=rb) :: scalekur
1010 !-----------------------------------------------------------------
1011 ! rrtmg_sw COMBINED abs. coefficients for interval 27
1012 ! band 27: 29000-38000 cm-1 (low - o3; high - o3)
1014 ! Initial version: JJMorcrette, ECMWF, oct1999
1015 ! Revised: MJIacono, AER, jul2006
1016 ! Revised: MJIacono, AER, aug2008
1017 !-----------------------------------------------------------------
1020 ! ---- : ---- : ---------------------------------------------
1027 !-----------------------------------------------------------------
1029 real(kind=rb) :: ka(5,13,ng27), absa(65,ng27)
1030 real(kind=rb) :: kb(5,13:59,ng27), absb(235,ng27)
1031 real(kind=rb) :: sfluxref(ng27)
1032 real(kind=rb) :: rayl(ng27)
1034 equivalence (ka(1,1,1),absa(1,1)), (kb(1,13,1),absb(1,1))
1036 end module rrsw_kg27
1040 use parkind ,only : im => kind_im, rb => kind_rb
1041 use parrrsw, only : ng28
1046 !-----------------------------------------------------------------
1047 ! rrtmg_sw ORIGINAL abs. coefficients for interval 28
1048 ! band 28: 38000-50000 cm-1 (low - o3, o2; high - o3, o2)
1050 ! Initial version: JJMorcrette, ECMWF, oct1999
1051 ! Revised: MJIacono, AER, jul2006
1052 ! Revised: MJIacono, AER, aug2008
1053 !-----------------------------------------------------------------
1056 ! ---- : ---- : ---------------------------------------------
1060 !-----------------------------------------------------------------
1062 integer(kind=im), parameter :: no28 = 16
1064 real(kind=rb) :: kao(9,5,13,no28)
1065 real(kind=rb) :: kbo(5,5,13:59,no28)
1066 real(kind=rb) :: sfluxrefo(no28,5)
1068 integer(kind=im) :: layreffr
1069 real(kind=rb) :: rayl, strrat
1071 !-----------------------------------------------------------------
1072 ! rrtmg_sw COMBINED abs. coefficients for interval 28
1073 ! band 28: 38000-50000 cm-1 (low - o3, o2; high - o3, o2)
1075 ! Initial version: JJMorcrette, ECMWF, oct1999
1076 ! Revised: MJIacono, AER, jul2006
1077 ! Revised: MJIacono, AER, aug2008
1078 !-----------------------------------------------------------------
1081 ! ---- : ---- : ---------------------------------------------
1085 !-----------------------------------------------------------------
1087 real(kind=rb) :: ka(9,5,13,ng28), absa(585,ng28)
1088 real(kind=rb) :: kb(5,5,13:59,ng28), absb(1175,ng28)
1089 real(kind=rb) :: sfluxref(ng28,5)
1091 equivalence (ka(1,1,1,1),absa(1,1)), (kb(1,1,13,1),absb(1,1))
1093 end module rrsw_kg28
1097 use parkind ,only : im => kind_im, rb => kind_rb
1098 use parrrsw, only : ng29
1103 !-----------------------------------------------------------------
1104 ! rrtmg_sw ORIGINAL abs. coefficients for interval 29
1105 ! band 29: 820-2600 cm-1 (low - h2o; high - co2)
1107 ! Initial version: JJMorcrette, ECMWF, oct1999
1108 ! Revised: MJIacono, AER, jul2006
1109 ! Revised: MJIacono, AER, aug2008
1110 !-----------------------------------------------------------------
1113 ! ---- : ---- : ---------------------------------------------
1121 !-----------------------------------------------------------------
1123 integer(kind=im), parameter :: no29 = 16
1125 real(kind=rb) :: kao(5,13,no29)
1126 real(kind=rb) :: kbo(5,13:59,no29)
1127 real(kind=rb) :: selfrefo(10,no29), forrefo(4,no29)
1128 real(kind=rb) :: sfluxrefo(no29)
1129 real(kind=rb) :: absh2oo(no29), absco2o(no29)
1131 integer(kind=im) :: layreffr
1132 real(kind=rb) :: rayl
1134 !-----------------------------------------------------------------
1135 ! rrtmg_sw COMBINED abs. coefficients for interval 29
1136 ! band 29: 820-2600 cm-1 (low - h2o; high - co2)
1138 ! Initial version: JJMorcrette, ECMWF, oct1999
1139 ! Revised: MJIacono, AER, jul2006
1140 ! Revised: MJIacono, AER, aug2008
1141 !-----------------------------------------------------------------
1144 ! ---- : ---- : ---------------------------------------------
1152 !-----------------------------------------------------------------
1154 real(kind=rb) :: ka(5,13,ng29), absa(65,ng29)
1155 real(kind=rb) :: kb(5,13:59,ng29), absb(235,ng29)
1156 real(kind=rb) :: selfref(10,ng29), forref(4,ng29)
1157 real(kind=rb) :: sfluxref(ng29)
1158 real(kind=rb) :: absh2o(ng29), absco2(ng29)
1160 equivalence (ka(1,1,1),absa(1,1)), (kb(1,13,1),absb(1,1))
1162 end module rrsw_kg29
1166 use parkind, only : im => kind_im, rb => kind_rb
1171 !------------------------------------------------------------------
1172 ! rrtmg_sw reference atmosphere
1173 ! Based on standard mid-latitude summer profile
1175 ! Initial version: JJMorcrette, ECMWF, jul1998
1176 ! Revised: MJIacono, AER, jun2006
1177 ! Revised: MJIacono, AER, aug2008
1178 !------------------------------------------------------------------
1181 ! ----- : ---- : ----------------------------------------------
1182 ! pref : real : Reference pressure levels
1183 ! preflog: real : Reference pressure levels, ln(pref)
1184 ! tref : real : Reference temperature levels for MLS profile
1185 !------------------------------------------------------------------
1187 real(kind=rb) , dimension(59) :: pref
1188 real(kind=rb) , dimension(59) :: preflog
1189 real(kind=rb) , dimension(59) :: tref
1195 use parkind, only : im => kind_im, rb => kind_rb
1200 !------------------------------------------------------------------
1201 ! rrtmg_sw lookup table arrays
1203 ! Initial version: MJIacono, AER, may2007
1204 ! Revised: MJIacono, AER, aug2007
1205 ! Revised: MJIacono, AER, aug2008
1206 !------------------------------------------------------------------
1209 ! ----- : ---- : ----------------------------------------------
1210 ! ntbl : integer: Lookup table dimension
1211 ! tblint : real : Lookup table conversion factor
1212 ! tau_tbl: real : Clear-sky optical depth
1213 ! exp_tbl: real : Exponential lookup table for transmittance
1214 ! od_lo : real : Value of tau below which expansion is used
1215 ! : in place of lookup table
1216 ! pade : real : Pade approximation constant
1217 ! bpade : real : Inverse of Pade constant
1218 !------------------------------------------------------------------
1220 integer(kind=im), parameter :: ntbl = 10000
1222 real(kind=rb), parameter :: tblint = 10000.0_rb
1224 real(kind=rb), parameter :: od_lo = 0.06_rb
1226 real(kind=rb) :: tau_tbl
1227 real(kind=rb) , dimension(0:ntbl) :: exp_tbl
1229 real(kind=rb), parameter :: pade = 0.278_rb
1230 real(kind=rb) :: bpade
1239 !------------------------------------------------------------------
1240 ! rrtmg_sw version information
1242 ! Initial version: JJMorcrette, ECMWF, jul1998
1243 ! Revised: MJIacono, AER, jul2006
1244 ! Revised: MJIacono, AER, aug2008
1245 !------------------------------------------------------------------
1248 ! ----- : ---- : ----------------------------------------------
1249 !hnamrtm :character:
1250 !hnamini :character:
1251 !hnamcld :character:
1252 !hnamclc :character:
1253 !hnamrft :character:
1254 !hnamspv :character:
1255 !hnamspc :character:
1256 !hnamset :character:
1257 !hnamtau :character:
1258 !hnamvqd :character:
1259 !hnamatm :character:
1260 !hnamutl :character:
1261 !hnamext :character:
1264 ! hvrrtm :character:
1265 ! hvrini :character:
1266 ! hvrcld :character:
1267 ! hvrclc :character:
1268 ! hvrrft :character:
1269 ! hvrspv :character:
1270 ! hvrspc :character:
1271 ! hvrset :character:
1272 ! hvrtau :character:
1273 ! hvrvqd :character:
1274 ! hvratm :character:
1275 ! hvrutl :character:
1276 ! hvrext :character:
1278 !------------------------------------------------------------------
1280 character*18 hvrrtm,hvrini,hvrcld,hvrclc,hvrrft,hvrspv, &
1281 hvrspc,hvrset,hvrtau,hvrvqd,hvratm,hvrutl,hvrext
1282 character*20 hnamrtm,hnamini,hnamcld,hnamclc,hnamrft,hnamspv, &
1283 hnamspc,hnamset,hnamtau,hnamvqd,hnamatm,hnamutl,hnamext
1292 use parkind, only : im => kind_im, rb => kind_rb
1293 use parrrsw, only : nbndsw, mg, ngptsw, jpb1, jpb2
1298 !------------------------------------------------------------------
1299 ! rrtmg_sw spectral information
1301 ! Initial version: JJMorcrette, ECMWF, jul1998
1302 ! Revised: MJIacono, AER, jul2006
1303 ! Revised: MJIacono, AER, aug2008
1304 !------------------------------------------------------------------
1307 ! ----- : ---- : ----------------------------------------------
1308 ! ng : integer: Number of original g-intervals in each spectral band
1311 !wavenum1: real : Spectral band lower boundary in wavenumbers
1312 !wavenum2: real : Spectral band upper boundary in wavenumbers
1313 ! delwave: real : Spectral band width in wavenumbers
1315 ! ngc : integer: The number of new g-intervals in each band
1316 ! ngs : integer: The cumulative sum of new g-intervals for each band
1317 ! ngm : integer: The index of each new g-interval relative to the
1318 ! original 16 g-intervals in each band
1319 ! ngn : integer: The number of original g-intervals that are
1320 ! combined to make each new g-intervals in each band
1321 ! ngb : integer: The band index for each new g-interval
1322 ! wt : real : RRTM weights for the original 16 g-intervals
1323 ! rwgt : real : Weights for combining original 16 g-intervals
1324 ! (224 total) into reduced set of g-intervals
1326 !------------------------------------------------------------------
1328 integer(kind=im) :: ng(jpb1:jpb2)
1329 integer(kind=im) :: nspa(jpb1:jpb2)
1330 integer(kind=im) :: nspb(jpb1:jpb2)
1332 real(kind=rb) :: wavenum1(jpb1:jpb2)
1333 real(kind=rb) :: wavenum2(jpb1:jpb2)
1334 real(kind=rb) :: delwave(jpb1:jpb2)
1336 integer(kind=im) :: ngc(nbndsw)
1337 integer(kind=im) :: ngs(nbndsw)
1338 integer(kind=im) :: ngn(ngptsw)
1339 integer(kind=im) :: ngb(ngptsw)
1340 integer(kind=im) :: ngm(nbndsw*mg)
1342 real(kind=rb) :: wt(mg)
1343 real(kind=rb) :: rwgt(nbndsw*mg)
1347 ! path: $Source: /cvsroot/NWP/WRFV3/phys/module_ra_rrtmg_sw.F,v $
1348 ! author: $Author: trn $
1349 ! revision: $Revision: 1.3 $
1350 ! created: $Date: 2009/04/16 19:54:22 $
1352 module mcica_subcol_gen_sw
1354 ! --------------------------------------------------------------------------
1356 ! | Copyright 2006-2008, Atmospheric & Environmental Research, Inc. (AER). |
1357 ! | This software may be used, copied, or redistributed as long as it is |
1358 ! | not sold and this copyright notice is reproduced on each copy made. |
1359 ! | This model is provided as is without any express or implied warranties. |
1360 ! | (http://www.rtweb.aer.com/) |
1362 ! --------------------------------------------------------------------------
1364 ! Purpose: Create McICA stochastic arrays for cloud physical or optical properties.
1365 ! Two options are possible:
1366 ! 1) Input cloud physical properties: cloud fraction, ice and liquid water
1367 ! paths, ice fraction, and particle sizes. Output will be stochastic
1368 ! arrays of these variables. (inflag = 1)
1369 ! 2) Input cloud optical properties directly: cloud optical depth, single
1370 ! scattering albedo and asymmetry parameter. Output will be stochastic
1371 ! arrays of these variables. (inflag = 0)
1373 ! --------- Modules ----------
1375 use parkind, only : im => kind_im, rb => kind_rb
1376 use parrrsw, only : nbndsw, ngptsw
1377 use rrsw_con, only: grav, pi
1378 use rrsw_wvn, only: ngb
1383 ! public interfaces/functions/subroutines
1384 public :: mcica_subcol_sw, generate_stochastic_clouds_sw
1388 !------------------------------------------------------------------
1389 ! Public subroutines
1390 !------------------------------------------------------------------
1392 ! mji - Add height needed for exponential and exponential-random cloud overlap methods
1393 ! (icld=4 and 5, respectively) along with idcor, juldat and lat used to specify
1394 ! the decorrelation length for these methods
1395 subroutine mcica_subcol_sw(iplon, ncol, nlay, icld, permuteseed, irng, play, &
1396 cldfrac, ciwp, clwp, cswp, rei, rel, res, tauc, ssac, asmc, fsfc, &
1397 hgt, idcor, juldat, lat, &
1398 cldfmcl, ciwpmcl, clwpmcl, cswpmcl, reicmcl, relqmcl, resnmcl, &
1399 taucmcl, ssacmcl, asmcmcl, fsfcmcl)
1403 integer(kind=im), intent(in) :: iplon ! column/longitude dimension
1404 integer(kind=im), intent(in) :: ncol ! number of columns
1405 integer(kind=im), intent(in) :: nlay ! number of model layers
1406 integer(kind=im), intent(in) :: icld ! clear/cloud, cloud overlap flag
1407 integer(kind=im), intent(in) :: permuteseed ! if the cloud generator is called multiple times,
1408 ! permute the seed between each call;
1409 ! between calls for LW and SW, recommended
1410 ! permuteseed differs by 'ngpt'
1411 integer(kind=im), intent(inout) :: irng ! flag for random number generator
1413 ! 1 = Mersenne Twister
1416 real(kind=rb), intent(in) :: play(:,:) ! layer pressures (mb)
1417 ! Dimensions: (ncol,nlay)
1419 real(kind=rb), intent(in) :: hgt(:,:) ! layer height (m)
1420 ! Dimensions: (ncol,nlay)
1421 ! Atmosphere/clouds - cldprop
1422 real(kind=rb), intent(in) :: cldfrac(:,:) ! layer cloud fraction
1423 ! Dimensions: (ncol,nlay)
1424 real(kind=rb), intent(in) :: tauc(:,:,:) ! in-cloud optical depth
1425 ! Dimensions: (nbndsw,ncol,nlay)
1426 real(kind=rb), intent(in) :: ssac(:,:,:) ! in-cloud single scattering albedo (non-delta scaled)
1427 ! Dimensions: (nbndsw,ncol,nlay)
1428 real(kind=rb), intent(in) :: asmc(:,:,:) ! in-cloud asymmetry parameter (non-delta scaled)
1429 ! Dimensions: (nbndsw,ncol,nlay)
1430 real(kind=rb), intent(in) :: fsfc(:,:,:) ! in-cloud forward scattering fraction (non-delta scaled)
1431 ! Dimensions: (nbndsw,ncol,nlay)
1432 real(kind=rb), intent(in) :: ciwp(:,:) ! in-cloud ice water path
1433 ! Dimensions: (ncol,nlay)
1434 real(kind=rb), intent(in) :: clwp(:,:) ! in-cloud liquid water path
1435 ! Dimensions: (ncol,nlay)
1436 real(kind=rb), intent(in) :: cswp(:,:) ! in-cloud snow water path
1437 ! Dimensions: (ncol,nlay)
1438 real(kind=rb), intent(in) :: rei(:,:) ! cloud ice particle size
1439 ! Dimensions: (ncol,nlay)
1440 real(kind=rb), intent(in) :: rel(:,:) ! cloud liquid particle size
1441 ! Dimensions: (ncol,nlay)
1442 real(kind=rb), intent(in) :: res(:,:) ! cloud snow particle size
1443 ! Dimensions: (ncol,nlay)
1444 integer(kind=im), intent(in) :: idcor ! Decorrelation length type
1445 integer(kind=im), intent(in) :: juldat ! Julian date (day of year, 1-365)
1446 real(kind=rb), intent(in) :: lat ! latitude (degrees, -90 to 90)
1448 ! ----- Output -----
1449 ! Atmosphere/clouds - cldprmc [mcica]
1450 real(kind=rb), intent(out) :: cldfmcl(:,:,:) ! cloud fraction [mcica]
1451 ! Dimensions: (ngptsw,ncol,nlay)
1452 real(kind=rb), intent(out) :: ciwpmcl(:,:,:) ! in-cloud ice water path [mcica]
1453 ! Dimensions: (ngptsw,ncol,nlay)
1454 real(kind=rb), intent(out) :: clwpmcl(:,:,:) ! in-cloud liquid water path [mcica]
1455 ! Dimensions: (ngptsw,ncol,nlay)
1456 real(kind=rb), intent(out) :: cswpmcl(:,:,:) ! in-cloud snow water path [mcica]
1457 ! Dimensions: (ngptsw,ncol,nlay)
1458 real(kind=rb), intent(out) :: relqmcl(:,:) ! liquid particle size (microns)
1459 ! Dimensions: (ncol,nlay)
1460 real(kind=rb), intent(out) :: reicmcl(:,:) ! ice partcle size (microns)
1461 ! Dimensions: (ncol,nlay)
1462 real(kind=rb), intent(out) :: resnmcl(:,:) ! snow partcle size (microns)
1463 ! Dimensions: (ncol,nlay)
1464 real(kind=rb), intent(out) :: taucmcl(:,:,:) ! in-cloud optical depth [mcica]
1465 ! Dimensions: (ngptsw,ncol,nlay)
1466 real(kind=rb), intent(out) :: ssacmcl(:,:,:) ! in-cloud single scattering albedo [mcica]
1467 ! Dimensions: (ngptsw,ncol,nlay)
1468 real(kind=rb), intent(out) :: asmcmcl(:,:,:) ! in-cloud asymmetry parameter [mcica]
1469 ! Dimensions: (ngptsw,ncol,nlay)
1470 real(kind=rb), intent(out) :: fsfcmcl(:,:,:) ! in-cloud forward scattering fraction [mcica]
1471 ! Dimensions: (ngptsw,ncol,nlay)
1475 ! Stochastic cloud generator variables [mcica]
1476 integer(kind=im), parameter :: nsubcsw = ngptsw ! number of sub-columns (g-point intervals)
1477 integer(kind=im) :: ilev ! loop index
1479 real(kind=rb) :: pmid(ncol,nlay) ! layer pressures (Pa)
1480 ! real(kind=rb) :: pdel(ncol,nlay) ! layer pressure thickness (Pa)
1481 ! real(kind=rb) :: qi(ncol,nlay) ! ice water (specific humidity)
1482 ! real(kind=rb) :: ql(ncol,nlay) ! liq water (specific humidity)
1484 ! MJI - For latitude dependent decorrelation length
1485 real(kind=rb), parameter :: am1 = 1.4315_rb
1486 real(kind=rb), parameter :: am2 = 2.1219_rb
1487 real(kind=rb), parameter :: am4 = -25.584_rb
1488 real(kind=rb), parameter :: amr = 7._rb
1489 real(kind=rb) :: am3
1490 real(kind=rb) :: decorr_len(ncol) ! decorrelation length (meters)
1491 real(kind=rb), parameter :: Zo_default = 2500._rb ! default constant decorrelation length (m)
1493 ! Return if clear sky
1494 if (icld.eq.0) return
1496 ! NOTE: For GCM mode, permuteseed must be offset between LW and SW by at least number of subcolumns
1499 ! Pass particle sizes to new arrays, no subcolumns for these properties yet
1500 ! Convert pressures from mb to Pa
1502 reicmcl(:ncol,:nlay) = rei(:ncol,:nlay)
1503 relqmcl(:ncol,:nlay) = rel(:ncol,:nlay)
1504 resnmcl(:ncol,:nlay) = res(:ncol,:nlay)
1505 pmid(:ncol,:nlay) = play(:ncol,:nlay)*1.e2_rb
1507 ! Convert input ice and liquid cloud water paths to specific humidity ice and liquid components
1509 ! cwp = (q * pdel * 1000.) / gravit)
1510 ! = (kg/kg * kg m-1 s-2 *1000.) / m s-2
1513 ! q = (cwp * gravit) / (pdel *1000.)
1514 ! = (g m-2 * m s-2) / (kg m-1 s-2 * 1000.)
1518 ! qi(ilev) = (ciwp(ilev) * grav) / (pdel(ilev) * 1000._rb)
1519 ! ql(ilev) = (clwp(ilev) * grav) / (pdel(ilev) * 1000._rb)
1522 ! MJI - Latitude and day of year dependent decorrelation length
1523 if (idcor .eq. 1) then
1524 ! Derive decorrelation length based on day of year and latitude (from NASA GMAO method)
1525 ! Result is in meters
1526 if (juldat .gt. 181) then
1527 am3 = -4._rb * amr / 365._rb * (juldat-272)
1529 am3 = 4._rb * amr / 365._rb * (juldat-91)
1531 ! Latitude in radians, decorrelation length in meters
1532 ! decorr_len(:) = ( am1 + am2 * exp(-(lat*180._rb/pi - am3)**2 / (am4*am4)) ) * 1.e3_rb
1533 ! Latitude in degrees, decorrelation length in meters
1534 decorr_len(:) = ( am1 + am2 * exp(-(lat - am3)**2 / (am4*am4)) ) * 1.e3_rb
1536 ! Spatially and temporally constant decorrelation length
1537 decorr_len(:) = Zo_default
1540 ! Generate the stochastic subcolumns of cloud optical properties for the shortwave;
1541 call generate_stochastic_clouds_sw (ncol, nlay, nsubcsw, icld, irng, pmid, cldfrac, clwp, ciwp, cswp, &
1542 tauc, ssac, asmc, fsfc, &
1544 cldfmcl, clwpmcl, ciwpmcl, cswpmcl, &
1545 taucmcl, ssacmcl, asmcmcl, fsfcmcl, permuteseed)
1547 end subroutine mcica_subcol_sw
1550 !-------------------------------------------------------------------------------------------------
1551 subroutine generate_stochastic_clouds_sw(ncol, nlay, nsubcol, icld, irng, pmid, cld, clwp, ciwp, cswp, &
1552 tauc, ssac, asmc, fsfc, &
1554 cld_stoch, clwp_stoch, ciwp_stoch, cswp_stoch, &
1555 tauc_stoch, ssac_stoch, asmc_stoch, fsfc_stoch, changeSeed)
1556 !-------------------------------------------------------------------------------------------------
1558 !----------------------------------------------------------------------------------------------------------------
1559 ! ---------------------
1560 ! Contact: Cecile Hannay (hannay@ucar.edu)
1562 ! Original code: Based on Raisanen et al., QJRMS, 2004.
1564 ! Modifications: Generalized for use with RRTMG and added Mersenne Twister as the default
1565 ! random number generator, which can be changed to the optional kissvec random number generator
1566 ! with flag 'irng'. Some extra functionality has been commented or removed.
1567 ! Michael J. Iacono, AER, Inc., February 2007
1569 ! Given a profile of cloud fraction, cloud water and cloud ice, we produce a set of subcolumns.
1570 ! Each layer within each subcolumn is homogeneous, with cloud fraction equal to zero or one
1571 ! and uniform cloud liquid and cloud ice concentration.
1572 ! The ensemble as a whole reproduces the probability function of cloud liquid and ice within each layer
1573 ! and obeys an overlap assumption in the vertical.
1575 ! Overlap assumption:
1576 ! The cloud are consistent with 4 overlap assumptions: random, maximum, maximum-random and exponential.
1577 ! The default option is maximum-random (option 3)
1578 ! The options are: 1=random overlap, 2=max/random, 3=maximum overlap, 4=exponential overlap
1579 ! This is set with the variable "overlap"
1580 !mji - Exponential overlap option (overlap=4) has been deactivated in this version
1581 ! The exponential overlap uses also a length scale, Zo. (real, parameter :: Zo = 2500. )
1584 ! If the stochastic cloud generator is called several times during the same timestep,
1585 ! one should change the seed between the call to insure that the subcolumns are different.
1586 ! This is done by changing the argument 'changeSeed'
1587 ! For example, if one wants to create a set of columns for the shortwave and another set for the longwave ,
1588 ! use 'changeSeed = 1' for the first call and'changeSeed = 2' for the second call
1591 ! We can use arbitrary complicated PDFS.
1592 ! In the present version, we produce homogeneuous clouds (the simplest case).
1593 ! Future developments include using the PDF scheme of Ben Johnson.
1596 ! Option to add diagnostics variables in the history file. (using FINCL in the namelist)
1597 ! nsubcol = number of subcolumns
1598 ! overlap = overlap type (1-3)
1600 ! CLOUD_S = mean of the subcolumn cloud fraction ('_S" means Stochastic)
1601 ! CLDLIQ_S = mean of the subcolumn cloud water
1602 ! CLDICE_S = mean of the subcolumn cloud ice
1605 ! Here: we force that the cloud condensate to be consistent with the cloud fraction
1606 ! i.e we only have cloud condensate when the cell is cloudy.
1607 ! In CAM: The cloud condensate and the cloud fraction are obtained from 2 different equations
1608 ! and the 2 quantities can be inconsistent (i.e. CAM can produce cloud fraction
1609 ! without cloud condensate or the opposite).
1610 !---------------------------------------------------------------------------------------------------------------
1612 use mcica_random_numbers
1613 ! The Mersenne Twister random number engine
1614 use MersenneTwister, only: randomNumberSequence, &
1615 new_RandomNumberSequence, getRandomReal
1617 type(randomNumberSequence) :: randomNumbers
1621 integer(kind=im), intent(in) :: ncol ! number of layers
1622 integer(kind=im), intent(in) :: nlay ! number of layers
1623 integer(kind=im), intent(in) :: icld ! clear/cloud, cloud overlap flag
1624 integer(kind=im), intent(inout) :: irng ! flag for random number generator
1626 ! 1 = Mersenne Twister
1627 integer(kind=im), intent(in) :: nsubcol ! number of sub-columns (g-point intervals)
1628 integer(kind=im), optional, intent(in) :: changeSeed ! allows permuting seed
1630 ! Column state (cloud fraction, cloud water, cloud ice) + variables needed to read physics state
1631 real(kind=rb), intent(in) :: pmid(:,:) ! layer pressure (Pa)
1632 ! Dimensions: (ncol,nlay)
1633 real(kind=rb), intent(in) :: hgt(:,:) ! layer height (m)
1634 ! Dimensions: (ncol,nlay)
1635 real(kind=rb), intent(in) :: cld(:,:) ! cloud fraction
1636 ! Dimensions: (ncol,nlay)
1637 real(kind=rb), intent(in) :: clwp(:,:) ! in-cloud liquid water path (g/m2)
1638 ! Dimensions: (ncol,nlay)
1639 real(kind=rb), intent(in) :: ciwp(:,:) ! in-cloud ice water path (g/m2)
1640 ! Dimensions: (ncol,nlay)
1641 real(kind=rb), intent(in) :: cswp(:,:) ! in-cloud snow water path (g/m2)
1642 ! Dimensions: (ncol,nlay)
1643 real(kind=rb), intent(in) :: tauc(:,:,:) ! in-cloud optical depth (non-delta scaled)
1644 ! Dimensions: (nbndsw,ncol,nlay)
1645 real(kind=rb), intent(in) :: ssac(:,:,:) ! in-cloud single scattering albedo (non-delta scaled)
1646 ! Dimensions: (nbndsw,ncol,nlay)
1647 real(kind=rb), intent(in) :: asmc(:,:,:) ! in-cloud asymmetry parameter (non-delta scaled)
1648 ! Dimensions: (nbndsw,ncol,nlay)
1649 real(kind=rb), intent(in) :: fsfc(:,:,:) ! in-cloud forward scattering fraction (non-delta scaled)
1650 ! Dimensions: (nbndsw,ncol,nlay)
1651 real(kind=rb), intent(in) :: decorr_len(:) ! decorrelation length (meters)
1652 ! Dimensions: (ncol)
1654 real(kind=rb), intent(out) :: cld_stoch(:,:,:) ! subcolumn cloud fraction
1655 ! Dimensions: (ngptsw,ncol,nlay)
1656 real(kind=rb), intent(out) :: clwp_stoch(:,:,:) ! subcolumn in-cloud liquid water path
1657 ! Dimensions: (ngptsw,ncol,nlay)
1658 real(kind=rb), intent(out) :: ciwp_stoch(:,:,:) ! subcolumn in-cloud ice water path
1659 ! Dimensions: (ngptsw,ncol,nlay)
1660 real(kind=rb), intent(out) :: cswp_stoch(:,:,:) ! subcolumn in-cloud snow water path
1661 ! Dimensions: (ngptsw,ncol,nlay)
1662 real(kind=rb), intent(out) :: tauc_stoch(:,:,:) ! subcolumn in-cloud optical depth
1663 ! Dimensions: (ngptsw,ncol,nlay)
1664 real(kind=rb), intent(out) :: ssac_stoch(:,:,:) ! subcolumn in-cloud single scattering albedo
1665 ! Dimensions: (ngptsw,ncol,nlay)
1666 real(kind=rb), intent(out) :: asmc_stoch(:,:,:) ! subcolumn in-cloud asymmetry parameter
1667 ! Dimensions: (ngptsw,ncol,nlay)
1668 real(kind=rb), intent(out) :: fsfc_stoch(:,:,:) ! subcolumn in-cloud forward scattering fraction
1669 ! Dimensions: (ngptsw,ncol,nlay)
1671 ! -- Local variables
1672 real(kind=rb) :: cldf(ncol,nlay) ! cloud fraction
1673 ! Dimensions: (ncol,nlay)
1675 ! Mean over the subcolumns (cloud fraction, cloud water , cloud ice) - inactive
1676 ! real(kind=rb) :: mean_cld_stoch(ncol,nlay) ! cloud fraction
1677 ! real(kind=rb) :: mean_clwp_stoch(ncol,nlay) ! cloud water
1678 ! real(kind=rb) :: mean_ciwp_stoch(ncol,nlay) ! cloud ice
1679 ! real(kind=rb) :: mean_tauc_stoch(ncol,nlay) ! cloud optical depth
1680 ! real(kind=rb) :: mean_ssac_stoch(ncol,nlay) ! cloud single scattering albedo
1681 ! real(kind=rb) :: mean_asmc_stoch(ncol,nlay) ! cloud asymmetry parameter
1682 ! real(kind=rb) :: mean_fsfc_stoch(ncol,nlay) ! cloud forward scattering fraction
1685 integer(kind=im) :: overlap ! 1 = random overlap, 2 = maximum-random,
1686 ! 3 = maximum overlap, 4 = exponential,
1687 ! 5 = exponential-random
1688 real(kind=rb) :: Zo_inv(ncol) ! inverse of decorrelation length scale (m)
1689 real(kind=rb), dimension(ncol,nlay) :: alpha ! overlap parameter
1691 ! Constants (min value for cloud fraction and cloud water and ice)
1692 real(kind=rb), parameter :: cldmin = 1.0e-20_rb ! min cloud fraction
1693 ! real(kind=rb), parameter :: qmin = 1.0e-10_rb ! min cloud water and cloud ice (not used)
1695 ! Variables related to random number and seed
1696 real(kind=rb), dimension(nsubcol, ncol, nlay) :: CDF, CDF2 ! random numbers
1697 integer(kind=im), dimension(ncol) :: seed1, seed2, seed3, seed4 ! seed to create random number
1698 real(kind=rb), dimension(ncol) :: rand_num ! random number (kissvec)
1699 integer(kind=im) :: iseed ! seed to create random number (Mersenne Twister)
1700 real(kind=rb) :: rand_num_mt ! random number (Mersenne Twister)
1702 ! Flag to identify cloud fraction in subcolumns
1703 logical, dimension(nsubcol, ncol, nlay) :: isCloudy ! flag that says whether a gridbox is cloudy
1706 integer(kind=im) :: ilev, isubcol, i, n, ngbm ! indices
1708 !------------------------------------------------------------------------------------------
1710 ! Check that irng is in bounds; if not, set to default
1711 if (irng .ne. 0) irng = 1
1713 ! Pass input cloud overlap setting to local variable
1715 Zo_inv(:) = 1._rb / decorr_len(:)
1717 ! Ensure that cloud fractions are in bounds
1720 cldf(i,ilev) = cld(i,ilev)
1721 if (cldf(i,ilev) < cldmin) then
1722 cldf(i,ilev) = 0._rb
1727 ! ----- Create seed --------
1729 ! Advance randum number generator by changeseed values
1731 ! For kissvec, create a seed that depends on the state of the columns. Maybe not the best way, but it works.
1732 ! Must use pmid from bottom four layers.
1734 if (pmid(i,1).lt.pmid(i,2)) then
1735 stop 'MCICA_SUBCOL: KISSVEC SEED GENERATOR REQUIRES PMID FROM BOTTOM FOUR LAYERS.'
1737 seed1(i) = (pmid(i,1) - int(pmid(i,1))) * 1000000000_im
1738 seed2(i) = (pmid(i,2) - int(pmid(i,2))) * 1000000000_im
1739 seed3(i) = (pmid(i,3) - int(pmid(i,3))) * 1000000000_im
1740 seed4(i) = (pmid(i,4) - int(pmid(i,4))) * 1000000000_im
1743 call kissvec(seed1, seed2, seed3, seed4, rand_num)
1745 elseif (irng.eq.1) then
1746 randomNumbers = new_RandomNumberSequence(seed = changeSeed)
1750 ! ------ Apply overlap assumption --------
1752 ! generate the random numbers
1754 select case (overlap)
1758 ! i) pick a random value at every level
1761 do isubcol = 1,nsubcol
1763 call kissvec(seed1, seed2, seed3, seed4, rand_num)
1764 CDF(isubcol,:,ilev) = rand_num
1767 elseif (irng.eq.1) then
1768 do isubcol = 1, nsubcol
1771 rand_num_mt = getRandomReal(randomNumbers)
1772 CDF(isubcol,i,ilev) = rand_num_mt
1779 ! Maximum-Random overlap
1780 ! i) pick a random number for top layer.
1781 ! ii) walk down the column:
1782 ! - if the layer above is cloudy, we use the same random number than in the layer above
1783 ! - if the layer above is clear, we use a new random number
1786 do isubcol = 1,nsubcol
1788 call kissvec(seed1, seed2, seed3, seed4, rand_num)
1789 CDF(isubcol,:,ilev) = rand_num
1792 elseif (irng.eq.1) then
1793 do isubcol = 1, nsubcol
1796 rand_num_mt = getRandomReal(randomNumbers)
1797 CDF(isubcol,i,ilev) = rand_num_mt
1805 do isubcol = 1, nsubcol
1806 if (CDF(isubcol, i, ilev-1) > 1._rb - cldf(i,ilev-1) ) then
1807 CDF(isubcol,i,ilev) = CDF(isubcol,i,ilev-1)
1809 CDF(isubcol,i,ilev) = CDF(isubcol,i,ilev) * (1._rb - cldf(i,ilev-1))
1817 ! i) pick same random numebr at every level
1820 do isubcol = 1,nsubcol
1821 call kissvec(seed1, seed2, seed3, seed4, rand_num)
1823 CDF(isubcol,:,ilev) = rand_num
1826 elseif (irng.eq.1) then
1827 do isubcol = 1, nsubcol
1829 rand_num_mt = getRandomReal(randomNumbers)
1831 CDF(isubcol,i,ilev) = rand_num_mt
1837 ! mji - Activate exponential cloud overlap option
1839 ! Exponential overlap: transition from maximum to random cloud overlap increases
1840 ! exponentially with layer thickness and distance through layers
1842 ! j>1 if RND1 < alpha(j,j-1) => RAN(j) = RAN(j-1)
1844 ! alpha is obtained from the equation
1845 ! alpha = exp(-(Z(j)-Z(j-1))/Zo) where Zo is a characteristic length scale
1851 alpha(i, ilev) = exp( -(hgt(i,ilev) - hgt(i,ilev-1)) * Zo_inv(i))
1855 ! generate 2 streams of random numbers
1857 do isubcol = 1,nsubcol
1859 call kissvec(seed1, seed2, seed3, seed4, rand_num)
1860 CDF(isubcol, :, ilev) = rand_num
1861 call kissvec(seed1, seed2, seed3, seed4, rand_num)
1862 CDF2(isubcol, :, ilev) = rand_num
1865 elseif (irng.eq.1) then
1866 do isubcol = 1, nsubcol
1869 rand_num_mt = getRandomReal(randomNumbers)
1870 CDF(isubcol,i,ilev) = rand_num_mt
1871 rand_num_mt = getRandomReal(randomNumbers)
1872 CDF2(isubcol,i,ilev) = rand_num_mt
1878 ! generate random numbers
1880 where (CDF2(:, :, ilev) < spread(alpha (:,ilev), dim=1, nCopies=nsubcol) )
1881 CDF(:,:,ilev) = CDF(:,:,ilev-1)
1885 ! mji - Exponential-random cloud overlap option
1887 ! Exponential_Random overlap: transition from maximum to random cloud overlap increases
1888 ! exponentially with layer thickness and with distance through adjacent cloudy layers.
1889 ! Non-adjacent blocks of clouds are treated randomly, and each block begins a new
1890 ! exponential transition from maximum to random.
1892 ! compute alpha: bottom to top
1893 ! - set alpha to 0 in bottom layer (no layer below for correlation)
1897 alpha(i, ilev) = exp( -(hgt(i,ilev) - hgt(i,ilev-1) ) * Zo_inv(i))
1898 ! Decorrelate layers when clear layer follows a cloudy layer to enforce
1899 ! random correlation between non-adjacent cloudy layers
1900 if (cldf(i,ilev) .eq. 0.0_rb .and. cldf(i,ilev-1) .gt. 0.0_rb) then
1901 alpha(i,ilev) = 0.0_rb
1906 ! generate 2 streams of random numbers
1907 ! CDF2 is used to select which sub-columns are vertically correlated relative to alpha
1908 ! CDF is used to select which sub-columns are treated as cloudy relative to cloud fraction
1910 do isubcol = 1,nsubcol
1912 call kissvec(seed1, seed2, seed3, seed4, rand_num)
1913 CDF(isubcol, :, ilev) = rand_num
1914 call kissvec(seed1, seed2, seed3, seed4, rand_num)
1915 CDF2(isubcol, :, ilev) = rand_num
1918 elseif (irng.eq.1) then
1919 do isubcol = 1, nsubcol
1922 rand_num_mt = getRandomReal(randomNumbers)
1923 CDF(isubcol,i,ilev) = rand_num_mt
1924 rand_num_mt = getRandomReal(randomNumbers)
1925 CDF2(isubcol,i,ilev) = rand_num_mt
1930 ! generate vertical correlations in random number arrays - bottom to top
1932 where (CDF2(:, :, ilev) < spread(alpha (:,ilev), dim=1, nCopies=nsubcol) )
1933 CDF(:,:,ilev) = CDF(:,:,ilev-1)
1940 ! -- generate subcolumns for homogeneous clouds -----
1942 isCloudy(:,:,ilev) = (CDF(:,:,ilev) >= 1._rb - spread(cldf(:,ilev), dim=1, nCopies=nsubcol) )
1945 ! where the subcolumn is cloudy, the subcolumn cloud fraction is 1;
1946 ! where the subcolumn is not cloudy, the subcolumn cloud fraction is 0;
1947 ! where there is a cloud, define the subcolumn cloud properties,
1948 ! otherwise set these to zero
1953 do isubcol = 1, nsubcol
1954 if ( iscloudy(isubcol,i,ilev) ) then
1955 cld_stoch(isubcol,i,ilev) = 1._rb
1956 clwp_stoch(isubcol,i,ilev) = clwp(i,ilev)
1957 ciwp_stoch(isubcol,i,ilev) = ciwp(i,ilev)
1958 cswp_stoch(isubcol,i,ilev) = cswp(i,ilev)
1959 n = ngb(isubcol) - ngbm
1960 tauc_stoch(isubcol,i,ilev) = tauc(n,i,ilev)
1961 ssac_stoch(isubcol,i,ilev) = ssac(n,i,ilev)
1962 asmc_stoch(isubcol,i,ilev) = asmc(n,i,ilev)
1963 fsfc_stoch(isubcol,i,ilev) = fsfc(n,i,ilev)
1965 cld_stoch(isubcol,i,ilev) = 0._rb
1966 clwp_stoch(isubcol,i,ilev) = 0._rb
1967 ciwp_stoch(isubcol,i,ilev) = 0._rb
1968 cswp_stoch(isubcol,i,ilev) = 0._rb
1969 tauc_stoch(isubcol,i,ilev) = 0._rb
1970 ssac_stoch(isubcol,i,ilev) = 1._rb
1971 asmc_stoch(isubcol,i,ilev) = 0._rb
1972 fsfc_stoch(isubcol,i,ilev) = 0._rb
1978 ! -- compute the means of the subcolumns ---
1979 ! mean_cld_stoch(:,:) = 0._rb
1980 ! mean_clwp_stoch(:,:) = 0._rb
1981 ! mean_ciwp_stoch(:,:) = 0._rb
1982 ! mean_tauc_stoch(:,:) = 0._rb
1983 ! mean_ssac_stoch(:,:) = 0._rb
1984 ! mean_asmc_stoch(:,:) = 0._rb
1985 ! mean_fsfc_stoch(:,:) = 0._rb
1987 ! mean_cld_stoch(:,:) = cld_stoch(i,:,:) + mean_cld_stoch(:,:)
1988 ! mean_clwp_stoch(:,:) = clwp_stoch( i,:,:) + mean_clwp_stoch(:,:)
1989 ! mean_ciwp_stoch(:,:) = ciwp_stoch( i,:,:) + mean_ciwp_stoch(:,:)
1990 ! mean_tauc_stoch(:,:) = tauc_stoch( i,:,:) + mean_tauc_stoch(:,:)
1991 ! mean_ssac_stoch(:,:) = ssac_stoch( i,:,:) + mean_ssac_stoch(:,:)
1992 ! mean_asmc_stoch(:,:) = asmc_stoch( i,:,:) + mean_asmc_stoch(:,:)
1993 ! mean_fsfc_stoch(:,:) = fsfc_stoch( i,:,:) + mean_fsfc_stoch(:,:)
1995 ! mean_cld_stoch(:,:) = mean_cld_stoch(:,:) / nsubcol
1996 ! mean_clwp_stoch(:,:) = mean_clwp_stoch(:,:) / nsubcol
1997 ! mean_ciwp_stoch(:,:) = mean_ciwp_stoch(:,:) / nsubcol
1998 ! mean_tauc_stoch(:,:) = mean_tauc_stoch(:,:) / nsubcol
1999 ! mean_ssac_stoch(:,:) = mean_ssac_stoch(:,:) / nsubcol
2000 ! mean_asmc_stoch(:,:) = mean_asmc_stoch(:,:) / nsubcol
2001 ! mean_fsfc_stoch(:,:) = mean_fsfc_stoch(:,:) / nsubcol
2003 end subroutine generate_stochastic_clouds_sw
2006 !--------------------------------------------------------------------------------------------------
2007 subroutine kissvec(seed1,seed2,seed3,seed4,ran_arr)
2008 !--------------------------------------------------------------------------------------------------
2010 ! public domain code
2011 ! made available from http://www.fortran.com/
2012 ! downloaded by pjr on 03/16/04 for NCAR CAM
2013 ! converted to vector form, functions inlined by pjr,mvr on 05/10/2004
2015 ! The KISS (Keep It Simple Stupid) random number generator. Combines:
2016 ! (1) The congruential generator x(n)=69069*x(n-1)+1327217885, period 2^32.
2017 ! (2) A 3-shift shift-register generator, period 2^32-1,
2018 ! (3) Two 16-bit multiply-with-carry generators, period 597273182964842497>2^59
2019 ! Overall period>2^123;
2021 real(kind=rb), dimension(:), intent(inout) :: ran_arr
2022 integer(kind=im), dimension(:), intent(inout) :: seed1,seed2,seed3,seed4
2023 integer(kind=im) :: i,sz,kiss
2024 integer(kind=im) :: m, k, n
2027 m(k, n) = ieor (k, ishft (k, n) )
2031 seed1(i) = 69069_im * seed1(i) + 1327217885_im
2032 seed2(i) = m (m (m (seed2(i), 13_im), - 17_im), 5_im)
2033 seed3(i) = 18000_im * iand (seed3(i), 65535_im) + ishft (seed3(i), - 16_im)
2034 seed4(i) = 30903_im * iand (seed4(i), 65535_im) + ishft (seed4(i), - 16_im)
2035 kiss = seed1(i) + seed2(i) + ishft (seed3(i), 16_im) + seed4(i)
2036 ran_arr(i) = kiss*2.328306e-10_rb + 0.5_rb
2039 end subroutine kissvec
2041 end module mcica_subcol_gen_sw
2043 ! path: $Source: /cvsroot/NWP/WRFV3/phys/module_ra_rrtmg_sw.F,v $
2044 ! author: $Author: trn $
2045 ! revision: $Revision: 1.3 $
2046 ! created: $Date: 2009/04/16 19:54:22 $
2048 module rrtmg_sw_cldprmc
2050 ! --------------------------------------------------------------------------
2052 ! | Copyright 2002-2008, Atmospheric & Environmental Research, Inc. (AER). |
2053 ! | This software may be used, copied, or redistributed as long as it is |
2054 ! | not sold and this copyright notice is reproduced on each copy made. |
2055 ! | This model is provided as is without any express or implied warranties. |
2056 ! | (http://www.rtweb.aer.com/) |
2058 ! --------------------------------------------------------------------------
2060 ! ------- Modules -------
2062 use parkind, only : im => kind_im, rb => kind_rb
2063 use parrrsw, only : ngptsw, jpband, jpb1, jpb2
2064 use rrsw_cld, only : extliq1, ssaliq1, asyliq1, &
2065 extice2, ssaice2, asyice2, &
2066 extice3, ssaice3, asyice3, fdlice3, &
2067 abari, bbari, cbari, dbari, ebari, fbari
2068 use rrsw_wvn, only : wavenum1, wavenum2, ngb
2069 use rrsw_vsn, only : hvrclc, hnamclc
2075 ! ----------------------------------------------------------------------------
2076 subroutine cldprmc_sw(nlayers, inflag, iceflag, liqflag, cldfmc, &
2077 ciwpmc, clwpmc, cswpmc, reicmc, relqmc, resnmc, &
2078 taormc, taucmc, ssacmc, asmcmc, fsfcmc)
2079 ! ----------------------------------------------------------------------------
2081 ! Purpose: Compute the cloud optical properties for each cloudy layer
2082 ! and g-point interval for use by the McICA method.
2083 ! Note: Only inflag = 0 and inflag=2/liqflag=1/iceflag=2,3 are available;
2084 ! (Hu & Stamnes, Key, and Fu) are implemented.
2086 ! ------- Input -------
2088 integer(kind=im), intent(in) :: nlayers ! total number of layers
2089 integer(kind=im), intent(in) :: inflag ! see definitions
2090 integer(kind=im), intent(in) :: iceflag ! see definitions
2091 integer(kind=im), intent(in) :: liqflag ! see definitions
2093 real(kind=rb), intent(in) :: cldfmc(:,:) ! cloud fraction [mcica]
2094 ! Dimensions: (ngptsw,nlayers)
2095 real(kind=rb), intent(in) :: ciwpmc(:,:) ! cloud ice water path [mcica]
2096 ! Dimensions: (ngptsw,nlayers)
2097 real(kind=rb), intent(in) :: clwpmc(:,:) ! cloud liquid water path [mcica]
2098 ! Dimensions: (ngptsw,nlayers)
2099 real(kind=rb), intent(in) :: cswpmc(:,:) ! cloud snow water path [mcica]
2100 ! Dimensions: (ngptsw,nlayers)
2101 real(kind=rb), intent(in) :: resnmc(:) ! cloud snow particle effective radius (microns)
2102 ! Dimensions: (nlayers)
2103 real(kind=rb), intent(in) :: relqmc(:) ! cloud liquid particle effective radius (microns)
2104 ! Dimensions: (nlayers)
2105 real(kind=rb), intent(in) :: reicmc(:) ! cloud ice particle effective radius (microns)
2106 ! Dimensions: (nlayers)
2107 ! specific definition of reicmc depends on setting of iceflag:
2108 ! iceflag = 1: ice effective radius, r_ec, (Ebert and Curry, 1992),
2109 ! r_ec range is limited to 13.0 to 130.0 microns
2110 ! iceflag = 2: ice effective radius, r_k, (Key, Streamer Ref. Manual, 1996)
2111 ! r_k range is limited to 5.0 to 131.0 microns
2112 ! iceflag = 3: generalized effective size, dge, (Fu, 1996),
2113 ! dge range is limited to 5.0 to 140.0 microns
2114 ! [dge = 1.0315 * r_ec]
2115 real(kind=rb), intent(in) :: fsfcmc(:,:) ! cloud forward scattering fraction
2116 ! Dimensions: (ngptsw,nlayers)
2118 ! ------- Output -------
2120 real(kind=rb), intent(inout) :: taucmc(:,:) ! cloud optical depth (delta scaled)
2121 ! Dimensions: (ngptsw,nlayers)
2122 real(kind=rb), intent(inout) :: ssacmc(:,:) ! single scattering albedo (delta scaled)
2123 ! Dimensions: (ngptsw,nlayers)
2124 real(kind=rb), intent(inout) :: asmcmc(:,:) ! asymmetry parameter (delta scaled)
2125 ! Dimensions: (ngptsw,nlayers)
2126 real(kind=rb), intent(out) :: taormc(:,:) ! cloud optical depth (non-delta scaled)
2127 ! Dimensions: (ngptsw,nlayers)
2129 ! ------- Local -------
2131 ! integer(kind=im) :: ncbands
2132 integer(kind=im) :: ib, lay, istr, index, icx, ig
2134 real(kind=rb), parameter :: eps = 1.e-06_rb ! epsilon
2135 real(kind=rb), parameter :: cldmin = 1.e-20_rb ! minimum value for cloud quantities
2136 real(kind=rb) :: cwp ! total cloud water path
2137 real(kind=rb) :: radliq ! cloud liquid droplet radius (microns)
2138 real(kind=rb) :: radice ! cloud ice effective size (microns)
2139 real(kind=rb) :: radsno ! cloud snow effective size (microns)
2140 real(kind=rb) :: factor
2141 real(kind=rb) :: fint
2143 real(kind=rb) :: taucldorig_a, taucloud_a, ssacloud_a, ffp, ffp1, ffpssa
2144 real(kind=rb) :: tauiceorig, scatice, ssaice, tauice, tauliqorig, scatliq, ssaliq, tauliq
2145 real(kind=rb) :: tausnoorig, scatsno, ssasno, tausno
2147 real(kind=rb) :: fdelta(ngptsw)
2148 real(kind=rb) :: extcoice(ngptsw), gice(ngptsw)
2149 real(kind=rb) :: ssacoice(ngptsw), forwice(ngptsw)
2150 real(kind=rb) :: extcoliq(ngptsw), gliq(ngptsw)
2151 real(kind=rb) :: ssacoliq(ngptsw), forwliq(ngptsw)
2152 real(kind=rb) :: extcosno(ngptsw), gsno(ngptsw)
2153 real(kind=rb) :: ssacosno(ngptsw), forwsno(ngptsw)
2155 CHARACTER*80 errmess
2159 !jm not thread safe hvrclc = '$Revision: 1.3 $'
2161 ! Some of these initializations are done elsewhere
2164 taormc(ig,lay) = taucmc(ig,lay)
2165 ! taucmc(ig,lay) = 0.0_rb
2166 ! ssacmc(ig,lay) = 1.0_rb
2167 ! asmcmc(ig,lay) = 0.0_rb
2174 ! Main g-point interval loop
2176 cwp = ciwpmc(ig,lay) + clwpmc(ig,lay) + cswpmc(ig,lay)
2178 if (cldfmc(ig,lay) .ge. cldmin .and. &
2179 (cwp .ge. cldmin .or. taucmc(ig,lay) .ge. cldmin)) then
2181 ! (inflag=0): Cloud optical properties input directly
2182 if (inflag .eq. 0) then
2183 ! Cloud optical properties already defined in taucmc, ssacmc, asmcmc are unscaled;
2184 ! Apply delta-M scaling here (using Henyey-Greenstein approximation)
2185 taucldorig_a = taucmc(ig,lay)
2186 ffp = fsfcmc(ig,lay)
2188 ffpssa = 1.0_rb - ffp * ssacmc(ig,lay)
2189 ssacloud_a = ffp1 * ssacmc(ig,lay) / ffpssa
2190 taucloud_a = ffpssa * taucldorig_a
2192 taormc(ig,lay) = taucldorig_a
2193 ssacmc(ig,lay) = ssacloud_a
2194 taucmc(ig,lay) = taucloud_a
2195 asmcmc(ig,lay) = (asmcmc(ig,lay) - ffp) / (ffp1)
2197 elseif (inflag .eq. 1) then
2198 stop 'INFLAG = 1 OPTION NOT AVAILABLE WITH MCICA'
2200 ! (inflag=2): Separate treatement of ice clouds and water clouds.
2201 elseif (inflag .ge. 2) then
2202 radice = reicmc(lay)
2204 ! Calculation of absorption coefficients due to ice clouds.
2205 if ((ciwpmc(ig,lay)+cswpmc(ig,lay)) .eq. 0.0_rb) then
2206 extcoice(ig) = 0.0_rb
2207 ssacoice(ig) = 0.0_rb
2209 forwice(ig) = 0.0_rb
2211 extcosno(ig) = 0.0_rb
2212 ssacosno(ig) = 0.0_rb
2214 forwsno(ig) = 0.0_rb
2217 ! Note: This option uses Ebert and Curry approach for all particle sizes similar to
2218 ! CAM3 implementation, though this is somewhat unjustified for large ice particles
2219 elseif (iceflag .eq. 1) then
2221 if (wavenum2(ib) .gt. 1.43e04_rb) then
2223 elseif (wavenum2(ib) .gt. 7.7e03_rb) then
2225 elseif (wavenum2(ib) .gt. 5.3e03_rb) then
2227 elseif (wavenum2(ib) .gt. 4.0e03_rb) then
2229 elseif (wavenum2(ib) .ge. 2.5e03_rb) then
2232 extcoice(ig) = (abari(icx) + bbari(icx)/radice)
2233 ssacoice(ig) = 1._rb - cbari(icx) - dbari(icx) * radice
2234 gice(ig) = ebari(icx) + fbari(icx) * radice
2235 ! Check to ensure upper limit of gice is within physical limits for large particles
2236 if (gice(ig).ge.1._rb) gice(ig) = 1._rb - eps
2237 forwice(ig) = gice(ig)*gice(ig)
2238 ! Check to ensure all calculated quantities are within physical limits.
2239 if (extcoice(ig) .lt. 0.0_rb) stop 'ICE EXTINCTION LESS THAN 0.0'
2240 if (ssacoice(ig) .gt. 1.0_rb) stop 'ICE SSA GRTR THAN 1.0'
2241 if (ssacoice(ig) .lt. 0.0_rb) stop 'ICE SSA LESS THAN 0.0'
2242 if (gice(ig) .gt. 1.0_rb) stop 'ICE ASYM GRTR THAN 1.0'
2243 if (gice(ig) .lt. 0.0_rb) stop 'ICE ASYM LESS THAN 0.0'
2245 ! For iceflag=2 option, ice particle effective radius is limited to 5.0 to 131.0 microns
2247 elseif (iceflag .eq. 2) then
2248 if (radice .lt. 5.0_rb .or. radice .gt. 131.0_rb) stop 'ICE RADIUS OUT OF BOUNDS'
2249 factor = (radice - 2._rb)/3._rb
2251 if (index .eq. 43) index = 42
2252 fint = factor - float(index)
2254 extcoice(ig) = extice2(index,ib) + fint * &
2255 (extice2(index+1,ib) - extice2(index,ib))
2256 ssacoice(ig) = ssaice2(index,ib) + fint * &
2257 (ssaice2(index+1,ib) - ssaice2(index,ib))
2258 gice(ig) = asyice2(index,ib) + fint * &
2259 (asyice2(index+1,ib) - asyice2(index,ib))
2260 forwice(ig) = gice(ig)*gice(ig)
2261 ! Check to ensure all calculated quantities are within physical limits.
2262 if (extcoice(ig) .lt. 0.0_rb) stop 'ICE EXTINCTION LESS THAN 0.0'
2263 if (ssacoice(ig) .gt. 1.0_rb) stop 'ICE SSA GRTR THAN 1.0'
2264 if (ssacoice(ig) .lt. 0.0_rb) stop 'ICE SSA LESS THAN 0.0'
2265 if (gice(ig) .gt. 1.0_rb) stop 'ICE ASYM GRTR THAN 1.0'
2266 if (gice(ig) .lt. 0.0_rb) stop 'ICE ASYM LESS THAN 0.0'
2268 ! For iceflag=3 option, ice particle generalized effective size is limited to 5.0 to 140.0 microns
2270 elseif (iceflag .ge. 3) then
2271 if (radice .lt. 5.0_rb .or. radice .gt. 140.0_rb) then
2272 write(errmess,'(A,i5,i5,f8.2,f8.2)' ) &
2273 'ERROR: ICE GENERALIZED EFFECTIVE SIZE OUT OF BOUNDS' &
2274 ,ig, lay, ciwpmc(ig,lay), radice
2275 call wrf_error_fatal(errmess)
2277 factor = (radice - 2._rb)/3._rb
2279 if (index .eq. 46) index = 45
2280 fint = factor - float(index)
2282 extcoice(ig) = extice3(index,ib) + fint * &
2283 (extice3(index+1,ib) - extice3(index,ib))
2284 ssacoice(ig) = ssaice3(index,ib) + fint * &
2285 (ssaice3(index+1,ib) - ssaice3(index,ib))
2286 gice(ig) = asyice3(index,ib) + fint * &
2287 (asyice3(index+1,ib) - asyice3(index,ib))
2288 fdelta(ig) = fdlice3(index,ib) + fint * &
2289 (fdlice3(index+1,ib) - fdlice3(index,ib))
2290 if (fdelta(ig) .lt. 0.0_rb) then
2291 write(errmess, *) 'FDELTA LESS THAN 0.0'
2292 call wrf_error_fatal(errmess)
2294 if (fdelta(ig) .gt. 1.0_rb) then
2295 write(errmess, *) 'FDELTA GT THAN 1.0'
2296 call wrf_error_fatal(errmess)
2298 forwice(ig) = fdelta(ig) + 0.5_rb / ssacoice(ig)
2299 ! See Fu 1996 p. 2067
2300 if (forwice(ig) .gt. gice(ig)) forwice(ig) = gice(ig)
2301 ! Check to ensure all calculated quantities are within physical limits.
2302 if (extcoice(ig) .lt. 0.0_rb) stop 'ICE EXTINCTION LESS THAN 0.0'
2303 if (ssacoice(ig) .gt. 1.0_rb) stop 'ICE SSA GRTR THAN 1.0'
2304 if (ssacoice(ig) .lt. 0.0_rb) stop 'ICE SSA LESS THAN 0.0'
2305 if (gice(ig) .gt. 1.0_rb) stop 'ICE ASYM GRTR THAN 1.0'
2306 if (gice(ig) .lt. 0.0_rb) stop 'ICE ASYM LESS THAN 0.0'
2310 !!!!!!!!!!!!!!!!!! Mukul !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2311 !!!! INSERT THE EQUIVALENT SNOW VARIABLE CODE HERE
2312 !!!! Although far from perfect, the snow will utilize the
2313 !!!! same lookup table constants as cloud ice. Changes
2314 !!!! to those constants for larger particle snow would be
2315 !!!! an improvement.
2316 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2318 if (cswpmc(ig,lay).gt.0.0_rb .and. iceflag .eq. 5) then
2319 radsno = resnmc(lay)
2320 if (radsno .lt. 5.0_rb .or. radsno .gt. 140.0_rb) then
2321 write(errmess,'(A,i5,i5,f8.2,f8.2)' ) &
2322 'ERROR: SNOW GENERALIZED EFFECTIVE SIZE OUT OF BOUNDS' &
2323 ,ig, lay, cswpmc(ig,lay), radsno
2324 call wrf_error_fatal(errmess)
2326 factor = (radsno - 2._rb)/3._rb
2328 if (index .eq. 46) index = 45
2329 fint = factor - float(index)
2331 extcosno(ig) = extice3(index,ib) + fint * &
2332 (extice3(index+1,ib) - extice3(index,ib))
2333 ssacosno(ig) = ssaice3(index,ib) + fint * &
2334 (ssaice3(index+1,ib) - ssaice3(index,ib))
2335 gsno(ig) = asyice3(index,ib) + fint * &
2336 (asyice3(index+1,ib) - asyice3(index,ib))
2337 fdelta(ig) = fdlice3(index,ib) + fint * &
2338 (fdlice3(index+1,ib) - fdlice3(index,ib))
2339 if (fdelta(ig) .lt. 0.0_rb) then
2340 write(errmess, *) 'FDELTA LESS THAN 0.0'
2341 call wrf_error_fatal(errmess)
2343 if (fdelta(ig) .gt. 1.0_rb) then
2344 write(errmess, *) 'FDELTA GT THAN 1.0'
2345 call wrf_error_fatal(errmess)
2347 forwsno(ig) = fdelta(ig) + 0.5_rb / ssacosno(ig)
2348 ! See Fu 1996 p. 2067
2349 if (forwsno(ig) .gt. gsno(ig)) forwsno(ig) = gsno(ig)
2350 ! Check to ensure all calculated quantities are within physical limits.
2351 if (extcosno(ig) .lt. 0.0_rb) then
2352 write(errmess, *) 'SNOW EXTINCTION LESS THAN 0.0'
2353 call wrf_error_fatal(errmess)
2355 if (ssacosno(ig) .gt. 1.0_rb) then
2356 write(errmess, *) 'SNOW SSA GRTR THAN 1.0'
2357 call wrf_error_fatal(errmess)
2359 if (ssacosno(ig) .lt. 0.0_rb) then
2360 write(errmess, *) 'SNOW SSA LESS THAN 0.0'
2361 call wrf_error_fatal(errmess)
2363 if (gsno(ig) .gt. 1.0_rb) then
2364 write(errmess, *) 'SNOW ASYM GRTR THAN 1.0'
2365 call wrf_error_fatal(errmess)
2367 if (gsno(ig) .lt. 0.0_rb) then
2368 write(errmess, *) 'SNOW ASYM LESS THAN 0.0'
2369 call wrf_error_fatal(errmess)
2372 extcosno(ig) = 0.0_rb
2373 ssacosno(ig) = 0.0_rb
2375 forwsno(ig) = 0.0_rb
2379 ! Calculation of absorption coefficients due to water clouds.
2380 if (clwpmc(ig,lay) .eq. 0.0_rb) then
2381 extcoliq(ig) = 0.0_rb
2382 ssacoliq(ig) = 0.0_rb
2384 forwliq(ig) = 0.0_rb
2386 elseif (liqflag .eq. 1) then
2387 radliq = relqmc(lay)
2388 if (radliq .lt. 1.5_rb .or. radliq .gt. 60._rb) stop &
2389 'liquid effective radius out of bounds'
2390 index = int(radliq - 1.5_rb)
2391 if (index .eq. 0) index = 1
2392 if (index .eq. 58) index = 57
2393 fint = radliq - 1.5_rb - float(index)
2395 extcoliq(ig) = extliq1(index,ib) + fint * &
2396 (extliq1(index+1,ib) - extliq1(index,ib))
2397 ssacoliq(ig) = ssaliq1(index,ib) + fint * &
2398 (ssaliq1(index+1,ib) - ssaliq1(index,ib))
2399 if (fint .lt. 0._rb .and. ssacoliq(ig) .gt. 1._rb) &
2400 ssacoliq(ig) = ssaliq1(index,ib)
2401 gliq(ig) = asyliq1(index,ib) + fint * &
2402 (asyliq1(index+1,ib) - asyliq1(index,ib))
2403 forwliq(ig) = gliq(ig)*gliq(ig)
2404 ! Check to ensure all calculated quantities are within physical limits.
2405 if (extcoliq(ig) .lt. 0.0_rb) stop 'LIQUID EXTINCTION LESS THAN 0.0'
2406 if (ssacoliq(ig) .gt. 1.0_rb) stop 'LIQUID SSA GRTR THAN 1.0'
2407 if (ssacoliq(ig) .lt. 0.0_rb) stop 'LIQUID SSA LESS THAN 0.0'
2408 if (gliq(ig) .gt. 1.0_rb) stop 'LIQUID ASYM GRTR THAN 1.0'
2409 if (gliq(ig) .lt. 0.0_rb) stop 'LIQUID ASYM LESS THAN 0.0'
2413 if (iceflag .lt. 5) then
2414 tauliqorig = clwpmc(ig,lay) * extcoliq(ig)
2415 tauiceorig = ciwpmc(ig,lay) * extcoice(ig)
2416 taormc(ig,lay) = tauliqorig + tauiceorig
2418 ssaliq = ssacoliq(ig) * (1._rb - forwliq(ig)) / &
2419 (1._rb - forwliq(ig) * ssacoliq(ig))
2420 tauliq = (1._rb - forwliq(ig) * ssacoliq(ig)) * tauliqorig
2421 ssaice = ssacoice(ig) * (1._rb - forwice(ig)) / &
2422 (1._rb - forwice(ig) * ssacoice(ig))
2423 tauice = (1._rb - forwice(ig) * ssacoice(ig)) * tauiceorig
2424 scatliq = ssaliq * tauliq
2425 scatice = ssaice * tauice
2427 taucmc(ig,lay) = tauliq + tauice
2429 tauliqorig = clwpmc(ig,lay) * extcoliq(ig)
2430 tauiceorig = ciwpmc(ig,lay) * extcoice(ig)
2431 tausnoorig = cswpmc(ig,lay) * extcosno(ig)
2432 taormc(ig,lay) = tauliqorig + tauiceorig + tausnoorig
2434 ssaliq = ssacoliq(ig) * (1._rb - forwliq(ig)) / &
2435 (1._rb - forwliq(ig) * ssacoliq(ig))
2436 tauliq = (1._rb - forwliq(ig) * ssacoliq(ig)) * tauliqorig
2437 ssaice = ssacoice(ig) * (1._rb - forwice(ig)) / &
2438 (1._rb - forwice(ig) * ssacoice(ig))
2439 tauice = (1._rb - forwice(ig) * ssacoice(ig)) * tauiceorig
2440 ssasno = ssacosno(ig) * (1._rb - forwsno(ig)) / &
2441 (1._rb - forwsno(ig) * ssacosno(ig))
2442 tausno = (1._rb - forwsno(ig) * ssacosno(ig)) * tausnoorig
2443 scatliq = ssaliq * tauliq
2444 scatice = ssaice * tauice
2445 scatsno = ssasno * tausno
2446 taucmc(ig,lay) = tauliq + tauice + tausno
2449 ! Ensure non-zero taucmc and scatice
2450 if(taucmc(ig,lay).eq.0.) taucmc(ig,lay) = cldmin
2451 if(scatice.eq.0.) scatice = cldmin
2452 if(scatsno.eq.0.) scatsno = cldmin
2454 if (iceflag .lt. 5) then
2455 ssacmc(ig,lay) = (scatliq + scatice) / taucmc(ig,lay)
2457 ssacmc(ig,lay) = (scatliq + scatice + scatsno) / taucmc(ig,lay)
2460 if (iceflag .eq. 3 .or. iceflag.eq.4) then
2461 ! In accordance with the 1996 Fu paper, equation A.3,
2462 ! the moments for ice were calculated depending on whether using spheres
2463 ! or hexagonal ice crystals.
2464 ! Set asymetry parameter to first moment (istr=1)
2466 asmcmc(ig,lay) = (1.0_rb/(scatliq+scatice))* &
2467 (scatliq*(gliq(ig)**istr - forwliq(ig)) / &
2468 (1.0_rb - forwliq(ig)) + scatice * ((gice(ig)-forwice(ig))/ &
2469 (1.0_rb - forwice(ig)))**istr)
2470 elseif (iceflag .eq. 5) then
2472 asmcmc(ig,lay) = (1.0_rb/(scatliq+scatice+scatsno)) &
2473 * (scatliq*(gliq(ig)**istr - forwliq(ig))/(1.0_rb - forwliq(ig)) &
2474 + scatice * ((gice(ig)-forwice(ig))/(1.0_rb - forwice(ig))) &
2475 + scatsno * ((gsno(ig)-forwsno(ig))/(1.0_rb - forwsno(ig)))**istr)
2478 ! This code is the standard method for delta-m scaling.
2479 ! Set asymetry parameter to first moment (istr=1)
2481 asmcmc(ig,lay) = (scatliq * &
2482 (gliq(ig)**istr - forwliq(ig)) / &
2483 (1.0_rb - forwliq(ig)) + scatice * (gice(ig)**istr - forwice(ig)) / &
2484 (1.0_rb - forwice(ig)))/(scatliq + scatice)
2491 ! End g-point interval loop
2497 end subroutine cldprmc_sw
2499 end module rrtmg_sw_cldprmc
2501 ! path: $Source: /cvsroot/NWP/WRFV3/phys/module_ra_rrtmg_sw.F,v $
2502 ! author: $Author: trn $
2503 ! revision: $Revision: 1.3 $
2504 ! created: $Date: 2009/04/16 19:54:22 $
2506 module rrtmg_sw_reftra
2508 ! --------------------------------------------------------------------------
2510 ! | Copyright 2002-2008, Atmospheric & Environmental Research, Inc. (AER). |
2511 ! | This software may be used, copied, or redistributed as long as it is |
2512 ! | not sold and this copyright notice is reproduced on each copy made. |
2513 ! | This model is provided as is without any express or implied warranties. |
2514 ! | (http://www.rtweb.aer.com/) |
2516 ! --------------------------------------------------------------------------
2518 ! ------- Modules -------
2520 use parkind, only : im => kind_im, rb => kind_rb
2521 use rrsw_tbl, only : tblint, bpade, od_lo, exp_tbl
2522 use rrsw_vsn, only : hvrrft, hnamrft
2528 ! --------------------------------------------------------------------
2529 subroutine reftra_sw(nlayers, lrtchk, pgg, prmuz, ptau, pw, &
2530 pref, prefd, ptra, ptrad)
2531 ! --------------------------------------------------------------------
2533 ! Purpose: computes the reflectivity and transmissivity of a clear or
2534 ! cloudy layer using a choice of various approximations.
2536 ! Interface: *rrtmg_sw_reftra* is called by *rrtmg_sw_spcvrt*
2539 ! explicit arguments :
2540 ! --------------------
2543 ! lrtchk = .t. for all layers in clear profile
2544 ! lrtchk = .t. for cloudy layers in cloud profile
2545 ! = .f. for clear layers in cloud profile
2546 ! pgg = assymetry factor
2547 ! prmuz = cosine solar zenith angle
2548 ! ptau = optical thickness
2549 ! pw = single scattering albedo
2553 ! pref : collimated beam reflectivity
2554 ! prefd : diffuse beam reflectivity
2555 ! ptra : collimated beam transmissivity
2556 ! ptrad : diffuse beam transmissivity
2561 ! standard delta-eddington, p.i.f.m., or d.o.m. layer calculations.
2562 ! kmodts = 1 eddington (joseph et al., 1976)
2563 ! = 2 pifm (zdunkowski et al., 1980)
2564 ! = 3 discrete ordinates (liou, 1973)
2569 ! Original: J-JMorcrette, ECMWF, Feb 2003
2570 ! Revised for F90 reformatting: MJIacono, AER, Jul 2006
2571 ! Revised to add exponential lookup table: MJIacono, AER, Aug 2007
2572 ! Reformulated some code to avoid potential fpes: MJIacono, AER, Nov 2008
2574 ! ------------------------------------------------------------------
2576 ! ------- Declarations ------
2578 ! ------- Input -------
2580 integer(kind=im), intent(in) :: nlayers
2582 logical, intent(in) :: lrtchk(:) ! Logical flag for reflectivity and
2583 ! and transmissivity calculation;
2584 ! Dimensions: (nlayers)
2586 real(kind=rb), intent(in) :: pgg(:) ! asymmetry parameter
2587 ! Dimensions: (nlayers)
2588 real(kind=rb), intent(in) :: ptau(:) ! optical depth
2589 ! Dimensions: (nlayers)
2590 real(kind=rb), intent(in) :: pw(:) ! single scattering albedo
2591 ! Dimensions: (nlayers)
2592 real(kind=rb), intent(in) :: prmuz ! cosine of solar zenith angle
2594 ! ------- Output -------
2596 real(kind=rb), intent(inout) :: pref(:) ! direct beam reflectivity
2597 ! Dimensions: (nlayers+1)
2598 real(kind=rb), intent(inout) :: prefd(:) ! diffuse beam reflectivity
2599 ! Dimensions: (nlayers+1)
2600 real(kind=rb), intent(inout) :: ptra(:) ! direct beam transmissivity
2601 ! Dimensions: (nlayers+1)
2602 real(kind=rb), intent(inout) :: ptrad(:) ! diffuse beam transmissivity
2603 ! Dimensions: (nlayers+1)
2605 ! ------- Local -------
2607 integer(kind=im) :: jk, jl, kmodts
2608 integer(kind=im) :: itind
2610 real(kind=rb) :: tblind
2611 real(kind=rb) :: za, za1, za2
2612 real(kind=rb) :: zbeta, zdend, zdenr, zdent
2613 real(kind=rb) :: ze1, ze2, zem1, zem2, zemm, zep1, zep2
2614 real(kind=rb) :: zg, zg3, zgamma1, zgamma2, zgamma3, zgamma4, zgt
2615 real(kind=rb) :: zr1, zr2, zr3, zr4, zr5
2616 real(kind=rb) :: zrk, zrk2, zrkg, zrm1, zrp, zrp1, zrpp
2617 real(kind=rb) :: zsr3, zt1, zt2, zt3, zt4, zt5, zto1
2618 real(kind=rb) :: zw, zwcrit, zwo
2619 real(kind=rb) :: denom
2621 real(kind=rb), parameter :: eps = 1.e-08_rb
2623 ! ------------------------------------------------------------------
2627 !jm not thread safe hvrrft = '$Revision: 1.3 $'
2634 if (.not.lrtchk(jk)) then
2644 ! General two-stream expressions
2647 if (kmodts == 1) then
2648 zgamma1= (7._rb - zw * (4._rb + zg3)) * 0.25_rb
2649 zgamma2=-(1._rb - zw * (4._rb - zg3)) * 0.25_rb
2650 zgamma3= (2._rb - zg3 * prmuz ) * 0.25_rb
2651 else if (kmodts == 2) then
2652 zgamma1= (8._rb - zw * (5._rb + zg3)) * 0.25_rb
2653 zgamma2= 3._rb *(zw * (1._rb - zg )) * 0.25_rb
2654 zgamma3= (2._rb - zg3 * prmuz ) * 0.25_rb
2655 else if (kmodts == 3) then
2656 zgamma1= zsr3 * (2._rb - zw * (1._rb + zg)) * 0.5_rb
2657 zgamma2= zsr3 * zw * (1._rb - zg ) * 0.5_rb
2658 zgamma3= (1._rb - zsr3 * zg * prmuz ) * 0.5_rb
2660 zgamma4= 1._rb - zgamma3
2662 ! Recompute original s.s.a. to test for conservative solution
2665 if (zg .ne. 1._rb) denom = (1._rb - (1._rb - zw) * (zg / (1._rb - zg))**2)
2666 if (zw .gt. 0._rb .and. denom .ne. 0._rb) zwo = zw / denom
2668 if (zwo >= zwcrit) then
2669 ! Conservative scattering
2671 za = zgamma1 * prmuz
2673 zgt = zgamma1 * zto1
2675 ! Homogeneous reflectance and transmittance,
2678 ze1 = min ( zto1 / prmuz , 500._rb)
2681 ! Use exponential lookup table for transmittance, or expansion of
2682 ! exponential for low tau
2683 if (ze1 .le. od_lo) then
2684 ze2 = 1._rb - ze1 + 0.5_rb * ze1 * ze1
2686 tblind = ze1 / (bpade + ze1)
2687 itind = tblint * tblind + 0.5_rb
2688 ze2 = exp_tbl(itind)
2692 pref(jk) = (zgt - za1 * (1._rb - ze2)) / (1._rb + zgt)
2693 ptra(jk) = 1._rb - pref(jk)
2695 ! isotropic incidence
2697 prefd(jk) = zgt / (1._rb + zgt)
2698 ptrad(jk) = 1._rb - prefd(jk)
2700 ! This is applied for consistency between total (delta-scaled) and direct (unscaled)
2701 ! calculations at very low optical depths (tau < 1.e-4) when the exponential lookup
2702 ! table returns a transmittance of 1.0.
2703 if (ze2 .eq. 1.0_rb) then
2711 ! Non-conservative scattering
2713 za1 = zgamma1 * zgamma4 + zgamma2 * zgamma3
2714 za2 = zgamma1 * zgamma3 + zgamma2 * zgamma4
2715 zrk = sqrt ( zgamma1**2 - zgamma2**2)
2720 zrpp = 1._rb - zrp*zrp
2721 zrkg = zrk + zgamma1
2722 zr1 = zrm1 * (za2 + zrk * zgamma3)
2723 zr2 = zrp1 * (za2 - zrk * zgamma3)
2724 zr3 = zrk2 * (zgamma3 - za2 * prmuz )
2726 zr5 = zrpp * (zrk - zgamma1)
2727 zt1 = zrp1 * (za1 + zrk * zgamma4)
2728 zt2 = zrm1 * (za1 - zrk * zgamma4)
2729 zt3 = zrk2 * (zgamma4 + za1 * prmuz )
2733 ! mji - reformulated code to avoid potential floating point exceptions
2734 ! zbeta = - zr5 / zr4
2735 zbeta = (zgamma1 - zrk) / zrkg
2738 ! Homogeneous reflectance and transmittance
2740 ze1 = min ( zrk * zto1, 500._rb)
2741 ze2 = min ( zto1 / prmuz , 500._rb)
2749 ! Revised original, to reduce exponentials
2751 ! zem1 = 1._rb / zep1
2753 ! zem2 = 1._rb / zep2
2755 ! Use exponential lookup table for transmittance, or expansion of
2756 ! exponential for low tau
2757 if (ze1 .le. od_lo) then
2758 zem1 = 1._rb - ze1 + 0.5_rb * ze1 * ze1
2761 tblind = ze1 / (bpade + ze1)
2762 itind = tblint * tblind + 0.5_rb
2763 zem1 = exp_tbl(itind)
2767 if (ze2 .le. od_lo) then
2768 zem2 = 1._rb - ze2 + 0.5_rb * ze2 * ze2
2771 tblind = ze2 / (bpade + ze2)
2772 itind = tblint * tblind + 0.5_rb
2773 zem2 = exp_tbl(itind)
2779 ! mji - reformulated code to avoid potential floating point exceptions
2780 ! zdenr = zr4*zep1 + zr5*zem1
2781 ! pref(jk) = zw * (zr1*zep1 - zr2*zem1 - zr3*zem2) / zdenr
2782 ! zdent = zt4*zep1 + zt5*zem1
2783 ! ptra(jk) = zem2 - zem2 * zw * (zt1*zep1 - zt2*zem1 - zt3*zep2) / zdent
2785 zdenr = zr4*zep1 + zr5*zem1
2786 zdent = zt4*zep1 + zt5*zem1
2787 if (zdenr .ge. -eps .and. zdenr .le. eps) then
2791 pref(jk) = zw * (zr1*zep1 - zr2*zem1 - zr3*zem2) / zdenr
2792 ptra(jk) = zem2 - zem2 * zw * (zt1*zep1 - zt2*zem1 - zt3*zep2) / zdent
2799 zdend = 1._rb / ( (1._rb - zbeta*zemm ) * zrkg)
2800 prefd(jk) = zgamma2 * (1._rb - zemm) * zdend
2801 ptrad(jk) = zrk2*zem1*zdend
2809 end subroutine reftra_sw
2811 end module rrtmg_sw_reftra
2813 ! path: $Source: /cvsroot/NWP/WRFV3/phys/module_ra_rrtmg_sw.F,v $
2814 ! author: $Author: trn $
2815 ! revision: $Revision: 1.3 $
2816 ! created: $Date: 2009/04/16 19:54:22 $
2818 module rrtmg_sw_setcoef
2820 ! --------------------------------------------------------------------------
2822 ! | Copyright 2002-2008, Atmospheric & Environmental Research, Inc. (AER). |
2823 ! | This software may be used, copied, or redistributed as long as it is |
2824 ! | not sold and this copyright notice is reproduced on each copy made. |
2825 ! | This model is provided as is without any express or implied warranties. |
2826 ! | (http://www.rtweb.aer.com/) |
2828 ! --------------------------------------------------------------------------
2830 ! ------- Modules -------
2832 use parkind, only : im => kind_im, rb => kind_rb
2833 use parrrsw, only : mxmol
2834 use rrsw_ref, only : pref, preflog, tref
2835 use rrsw_vsn, only : hvrset, hnamset
2841 !----------------------------------------------------------------------------
2842 subroutine setcoef_sw(nlayers, pavel, tavel, pz, tz, tbound, coldry, wkl, &
2843 laytrop, layswtch, laylow, jp, jt, jt1, &
2844 co2mult, colch4, colco2, colh2o, colmol, coln2o, &
2845 colo2, colo3, fac00, fac01, fac10, fac11, &
2846 selffac, selffrac, indself, forfac, forfrac, indfor)
2847 !----------------------------------------------------------------------------
2849 ! Purpose: For a given atmosphere, calculate the indices and
2850 ! fractions related to the pressure and temperature interpolations.
2853 ! Original: J. Delamere, AER, Inc. (version 2.5, 02/04/01)
2854 ! Revised: Rewritten and adapted to ECMWF F90, JJMorcrette 030224
2855 ! Revised: For uniform rrtmg formatting, MJIacono, Jul 2006
2857 ! ------ Declarations -------
2860 integer(kind=im), intent(in) :: nlayers ! total number of layers
2862 real(kind=rb), intent(in) :: pavel(:) ! layer pressures (mb)
2863 ! Dimensions: (nlayers)
2864 real(kind=rb), intent(in) :: tavel(:) ! layer temperatures (K)
2865 ! Dimensions: (nlayers)
2866 real(kind=rb), intent(in) :: pz(0:) ! level (interface) pressures (hPa, mb)
2867 ! Dimensions: (0:nlayers)
2868 real(kind=rb), intent(in) :: tz(0:) ! level (interface) temperatures (K)
2869 ! Dimensions: (0:nlayers)
2870 real(kind=rb), intent(in) :: tbound ! surface temperature (K)
2871 real(kind=rb), intent(in) :: coldry(:) ! dry air column density (mol/cm2)
2872 ! Dimensions: (nlayers)
2873 real(kind=rb), intent(in) :: wkl(:,:) ! molecular amounts (mol/cm-2)
2874 ! Dimensions: (mxmol,nlayers)
2876 ! ----- Output -----
2877 integer(kind=im), intent(out) :: laytrop ! tropopause layer index
2878 integer(kind=im), intent(out) :: layswtch !
2879 integer(kind=im), intent(out) :: laylow !
2881 integer(kind=im), intent(out) :: jp(:) !
2882 ! Dimensions: (nlayers)
2883 integer(kind=im), intent(out) :: jt(:) !
2884 ! Dimensions: (nlayers)
2885 integer(kind=im), intent(out) :: jt1(:) !
2886 ! Dimensions: (nlayers)
2888 real(kind=rb), intent(out) :: colh2o(:) ! column amount (h2o)
2889 ! Dimensions: (nlayers)
2890 real(kind=rb), intent(out) :: colco2(:) ! column amount (co2)
2891 ! Dimensions: (nlayers)
2892 real(kind=rb), intent(out) :: colo3(:) ! column amount (o3)
2893 ! Dimensions: (nlayers)
2894 real(kind=rb), intent(out) :: coln2o(:) ! column amount (n2o)
2895 ! Dimensions: (nlayers)
2896 real(kind=rb), intent(out) :: colch4(:) ! column amount (ch4)
2897 ! Dimensions: (nlayers)
2898 real(kind=rb), intent(out) :: colo2(:) ! column amount (o2)
2899 ! Dimensions: (nlayers)
2900 real(kind=rb), intent(out) :: colmol(:) !
2901 ! Dimensions: (nlayers)
2902 real(kind=rb), intent(out) :: co2mult(:) !
2903 ! Dimensions: (nlayers)
2905 integer(kind=im), intent(out) :: indself(:)
2906 ! Dimensions: (nlayers)
2907 integer(kind=im), intent(out) :: indfor(:)
2908 ! Dimensions: (nlayers)
2909 real(kind=rb), intent(out) :: selffac(:)
2910 ! Dimensions: (nlayers)
2911 real(kind=rb), intent(out) :: selffrac(:)
2912 ! Dimensions: (nlayers)
2913 real(kind=rb), intent(out) :: forfac(:)
2914 ! Dimensions: (nlayers)
2915 real(kind=rb), intent(out) :: forfrac(:)
2916 ! Dimensions: (nlayers)
2918 real(kind=rb), intent(out) :: & !
2919 fac00(:), fac01(:), & ! Dimensions: (nlayers)
2924 integer(kind=im) :: indbound
2925 integer(kind=im) :: indlev0
2926 integer(kind=im) :: lay
2927 integer(kind=im) :: jp1
2929 real(kind=rb) :: stpfac
2930 real(kind=rb) :: tbndfrac
2931 real(kind=rb) :: t0frac
2932 real(kind=rb) :: plog
2935 real(kind=rb) :: ft1
2936 real(kind=rb) :: water
2937 real(kind=rb) :: scalefac
2938 real(kind=rb) :: factor
2939 real(kind=rb) :: co2reg
2940 real(kind=rb) :: compfp
2944 stpfac = 296._rb/1013._rb
2946 indbound = tbound - 159._rb
2947 tbndfrac = tbound - int(tbound)
2948 indlev0 = tz(0) - 159._rb
2949 t0frac = tz(0) - int(tz(0))
2957 ! Find the two reference pressures on either side of the
2958 ! layer pressure. Store them in JP and JP1. Store in FP the
2959 ! fraction of the difference (in ln(pressure)) between these
2960 ! two values that the layer pressure lies.
2962 plog = log(pavel(lay))
2963 jp(lay) = int(36._rb - 5*(plog+0.04_rb))
2964 if (jp(lay) .lt. 1) then
2966 elseif (jp(lay) .gt. 58) then
2970 fp = 5._rb * (preflog(jp(lay)) - plog)
2972 ! Determine, for each reference pressure (JP and JP1), which
2973 ! reference temperature (these are different for each
2974 ! reference pressure) is nearest the layer temperature but does
2975 ! not exceed it. Store these indices in JT and JT1, resp.
2976 ! Store in FT (resp. FT1) the fraction of the way between JT
2977 ! (JT1) and the next highest reference temperature that the
2978 ! layer temperature falls.
2980 jt(lay) = int(3._rb + (tavel(lay)-tref(jp(lay)))/15._rb)
2981 if (jt(lay) .lt. 1) then
2983 elseif (jt(lay) .gt. 4) then
2986 ft = ((tavel(lay)-tref(jp(lay)))/15._rb) - float(jt(lay)-3)
2987 jt1(lay) = int(3._rb + (tavel(lay)-tref(jp1))/15._rb)
2988 if (jt1(lay) .lt. 1) then
2990 elseif (jt1(lay) .gt. 4) then
2993 ft1 = ((tavel(lay)-tref(jp1))/15._rb) - float(jt1(lay)-3)
2995 water = wkl(1,lay)/coldry(lay)
2996 scalefac = pavel(lay) * stpfac / tavel(lay)
2998 ! If the pressure is less than ~100mb, perform a different
2999 ! set of species interpolations.
3001 if (plog .le. 4.56_rb) go to 5300
3002 laytrop = laytrop + 1
3003 if (plog .ge. 6.62_rb) laylow = laylow + 1
3005 ! Set up factors needed to separately include the water vapor
3006 ! foreign-continuum in the calculation of absorption coefficient.
3008 forfac(lay) = scalefac / (1.+water)
3009 factor = (332.0_rb-tavel(lay))/36.0_rb
3010 indfor(lay) = min(2, max(1, int(factor)))
3011 forfrac(lay) = factor - float(indfor(lay))
3013 ! Set up factors needed to separately include the water vapor
3014 ! self-continuum in the calculation of absorption coefficient.
3016 selffac(lay) = water * forfac(lay)
3017 factor = (tavel(lay)-188.0_rb)/7.2_rb
3018 indself(lay) = min(9, max(1, int(factor)-7))
3019 selffrac(lay) = factor - float(indself(lay) + 7)
3021 ! Calculate needed column amounts.
3023 colh2o(lay) = 1.e-20_rb * wkl(1,lay)
3024 colco2(lay) = 1.e-20_rb * wkl(2,lay)
3025 colo3(lay) = 1.e-20_rb * wkl(3,lay)
3026 ! colo3(lay) = 0._rb
3027 ! colo3(lay) = colo3(lay)/1.16_rb
3028 coln2o(lay) = 1.e-20_rb * wkl(4,lay)
3029 colch4(lay) = 1.e-20_rb * wkl(6,lay)
3030 colo2(lay) = 1.e-20_rb * wkl(7,lay)
3031 colmol(lay) = 1.e-20_rb * coldry(lay) + colh2o(lay)
3032 ! colco2(lay) = 0._rb
3033 ! colo3(lay) = 0._rb
3034 ! coln2o(lay) = 0._rb
3035 ! colch4(lay) = 0._rb
3036 ! colo2(lay) = 0._rb
3037 ! colmol(lay) = 0._rb
3038 if (colco2(lay) .eq. 0._rb) colco2(lay) = 1.e-32_rb * coldry(lay)
3039 if (coln2o(lay) .eq. 0._rb) coln2o(lay) = 1.e-32_rb * coldry(lay)
3040 if (colch4(lay) .eq. 0._rb) colch4(lay) = 1.e-32_rb * coldry(lay)
3041 if (colo2(lay) .eq. 0._rb) colo2(lay) = 1.e-32_rb * coldry(lay)
3042 ! Using E = 1334.2 cm-1.
3043 co2reg = 3.55e-24_rb * coldry(lay)
3044 co2mult(lay)= (colco2(lay) - co2reg) * &
3045 272.63_rb*exp(-1919.4_rb/tavel(lay))/(8.7604e-4_rb*tavel(lay))
3051 ! Set up factors needed to separately include the water vapor
3052 ! foreign-continuum in the calculation of absorption coefficient.
3054 forfac(lay) = scalefac / (1.+water)
3055 factor = (tavel(lay)-188.0_rb)/36.0_rb
3057 forfrac(lay) = factor - 1.0_rb
3059 ! Calculate needed column amounts.
3061 colh2o(lay) = 1.e-20_rb * wkl(1,lay)
3062 colco2(lay) = 1.e-20_rb * wkl(2,lay)
3063 colo3(lay) = 1.e-20_rb * wkl(3,lay)
3064 coln2o(lay) = 1.e-20_rb * wkl(4,lay)
3065 colch4(lay) = 1.e-20_rb * wkl(6,lay)
3066 colo2(lay) = 1.e-20_rb * wkl(7,lay)
3067 colmol(lay) = 1.e-20_rb * coldry(lay) + colh2o(lay)
3068 if (colco2(lay) .eq. 0._rb) colco2(lay) = 1.e-32_rb * coldry(lay)
3069 if (coln2o(lay) .eq. 0._rb) coln2o(lay) = 1.e-32_rb * coldry(lay)
3070 if (colch4(lay) .eq. 0._rb) colch4(lay) = 1.e-32_rb * coldry(lay)
3071 if (colo2(lay) .eq. 0._rb) colo2(lay) = 1.e-32_rb * coldry(lay)
3072 co2reg = 3.55e-24_rb * coldry(lay)
3073 co2mult(lay)= (colco2(lay) - co2reg) * &
3074 272.63_rb*exp(-1919.4_rb/tavel(lay))/(8.7604e-4_rb*tavel(lay))
3076 selffac(lay) = 0._rb
3077 selffrac(lay)= 0._rb
3082 ! We have now isolated the layer ln pressure and temperature,
3083 ! between two reference pressures and two reference temperatures
3084 ! (for each reference pressure). We multiply the pressure
3085 ! fraction FP with the appropriate temperature fractions to get
3086 ! the factors that will be needed for the interpolation that yields
3087 ! the optical depths (performed in routines TAUGBn for band n).
3090 fac10(lay) = compfp * ft
3091 fac00(lay) = compfp * (1._rb - ft)
3092 fac11(lay) = fp * ft1
3093 fac01(lay) = fp * (1._rb - ft1)
3098 end subroutine setcoef_sw
3100 !***************************************************************************
3102 !***************************************************************************
3106 ! These pressures are chosen such that the ln of the first pressure
3107 ! has only a few non-zero digits (i.e. ln(PREF(1)) = 6.96000) and
3108 ! each subsequent ln(pressure) differs from the previous one by 0.2.
3111 1.05363e+03_rb,8.62642e+02_rb,7.06272e+02_rb,5.78246e+02_rb,4.73428e+02_rb, &
3112 3.87610e+02_rb,3.17348e+02_rb,2.59823e+02_rb,2.12725e+02_rb,1.74164e+02_rb, &
3113 1.42594e+02_rb,1.16746e+02_rb,9.55835e+01_rb,7.82571e+01_rb,6.40715e+01_rb, &
3114 5.24573e+01_rb,4.29484e+01_rb,3.51632e+01_rb,2.87892e+01_rb,2.35706e+01_rb, &
3115 1.92980e+01_rb,1.57998e+01_rb,1.29358e+01_rb,1.05910e+01_rb,8.67114e+00_rb, &
3116 7.09933e+00_rb,5.81244e+00_rb,4.75882e+00_rb,3.89619e+00_rb,3.18993e+00_rb, &
3117 2.61170e+00_rb,2.13828e+00_rb,1.75067e+00_rb,1.43333e+00_rb,1.17351e+00_rb, &
3118 9.60789e-01_rb,7.86628e-01_rb,6.44036e-01_rb,5.27292e-01_rb,4.31710e-01_rb, &
3119 3.53455e-01_rb,2.89384e-01_rb,2.36928e-01_rb,1.93980e-01_rb,1.58817e-01_rb, &
3120 1.30029e-01_rb,1.06458e-01_rb,8.71608e-02_rb,7.13612e-02_rb,5.84256e-02_rb, &
3121 4.78349e-02_rb,3.91639e-02_rb,3.20647e-02_rb,2.62523e-02_rb,2.14936e-02_rb, &
3122 1.75975e-02_rb,1.44076e-02_rb,1.17959e-02_rb,9.65769e-03_rb /)
3125 6.9600e+00_rb, 6.7600e+00_rb, 6.5600e+00_rb, 6.3600e+00_rb, 6.1600e+00_rb, &
3126 5.9600e+00_rb, 5.7600e+00_rb, 5.5600e+00_rb, 5.3600e+00_rb, 5.1600e+00_rb, &
3127 4.9600e+00_rb, 4.7600e+00_rb, 4.5600e+00_rb, 4.3600e+00_rb, 4.1600e+00_rb, &
3128 3.9600e+00_rb, 3.7600e+00_rb, 3.5600e+00_rb, 3.3600e+00_rb, 3.1600e+00_rb, &
3129 2.9600e+00_rb, 2.7600e+00_rb, 2.5600e+00_rb, 2.3600e+00_rb, 2.1600e+00_rb, &
3130 1.9600e+00_rb, 1.7600e+00_rb, 1.5600e+00_rb, 1.3600e+00_rb, 1.1600e+00_rb, &
3131 9.6000e-01_rb, 7.6000e-01_rb, 5.6000e-01_rb, 3.6000e-01_rb, 1.6000e-01_rb, &
3132 -4.0000e-02_rb,-2.4000e-01_rb,-4.4000e-01_rb,-6.4000e-01_rb,-8.4000e-01_rb, &
3133 -1.0400e+00_rb,-1.2400e+00_rb,-1.4400e+00_rb,-1.6400e+00_rb,-1.8400e+00_rb, &
3134 -2.0400e+00_rb,-2.2400e+00_rb,-2.4400e+00_rb,-2.6400e+00_rb,-2.8400e+00_rb, &
3135 -3.0400e+00_rb,-3.2400e+00_rb,-3.4400e+00_rb,-3.6400e+00_rb,-3.8400e+00_rb, &
3136 -4.0400e+00_rb,-4.2400e+00_rb,-4.4400e+00_rb,-4.6400e+00_rb /)
3138 ! These are the temperatures associated with the respective
3139 ! pressures for the MLS standard atmosphere.
3142 2.9420e+02_rb, 2.8799e+02_rb, 2.7894e+02_rb, 2.6925e+02_rb, 2.5983e+02_rb, &
3143 2.5017e+02_rb, 2.4077e+02_rb, 2.3179e+02_rb, 2.2306e+02_rb, 2.1578e+02_rb, &
3144 2.1570e+02_rb, 2.1570e+02_rb, 2.1570e+02_rb, 2.1706e+02_rb, 2.1858e+02_rb, &
3145 2.2018e+02_rb, 2.2174e+02_rb, 2.2328e+02_rb, 2.2479e+02_rb, 2.2655e+02_rb, &
3146 2.2834e+02_rb, 2.3113e+02_rb, 2.3401e+02_rb, 2.3703e+02_rb, 2.4022e+02_rb, &
3147 2.4371e+02_rb, 2.4726e+02_rb, 2.5085e+02_rb, 2.5457e+02_rb, 2.5832e+02_rb, &
3148 2.6216e+02_rb, 2.6606e+02_rb, 2.6999e+02_rb, 2.7340e+02_rb, 2.7536e+02_rb, &
3149 2.7568e+02_rb, 2.7372e+02_rb, 2.7163e+02_rb, 2.6955e+02_rb, 2.6593e+02_rb, &
3150 2.6211e+02_rb, 2.5828e+02_rb, 2.5360e+02_rb, 2.4854e+02_rb, 2.4348e+02_rb, &
3151 2.3809e+02_rb, 2.3206e+02_rb, 2.2603e+02_rb, 2.2000e+02_rb, 2.1435e+02_rb, &
3152 2.0887e+02_rb, 2.0340e+02_rb, 1.9792e+02_rb, 1.9290e+02_rb, 1.8809e+02_rb, &
3153 1.8329e+02_rb, 1.7849e+02_rb, 1.7394e+02_rb, 1.7212e+02_rb /)
3155 end subroutine swatmref
3157 end module rrtmg_sw_setcoef
3159 ! path: $Source: /cvsroot/NWP/WRFV3/phys/module_ra_rrtmg_sw.F,v $
3160 ! author: $Author: trn $
3161 ! revision: $Revision: 1.3 $
3162 ! created: $Date: 2009/04/16 19:54:22 $
3164 module rrtmg_sw_taumol
3166 ! --------------------------------------------------------------------------
3168 ! | Copyright 2002-2008, Atmospheric & Environmental Research, Inc. (AER). |
3169 ! | This software may be used, copied, or redistributed as long as it is |
3170 ! | not sold and this copyright notice is reproduced on each copy made. |
3171 ! | This model is provided as is without any express or implied warranties. |
3172 ! | (http://www.rtweb.aer.com/) |
3174 ! --------------------------------------------------------------------------
3176 ! ------- Modules -------
3178 use parkind, only : im => kind_im, rb => kind_rb
3179 ! use parrrsw, only : mg, jpband, nbndsw, ngptsw
3180 use rrsw_con, only: oneminus
3181 use rrsw_wvn, only: nspa, nspb
3182 use rrsw_vsn, only: hvrtau, hnamtau
3188 !----------------------------------------------------------------------------
3189 subroutine taumol_sw(nlayers, &
3190 colh2o, colco2, colch4, colo2, colo3, colmol, &
3191 laytrop, jp, jt, jt1, &
3192 fac00, fac01, fac10, fac11, &
3193 selffac, selffrac, indself, forfac, forfrac, indfor, &
3194 sfluxzen, taug, taur)
3195 !----------------------------------------------------------------------------
3197 ! ******************************************************************************
3199 ! * Optical depths developed for the *
3201 ! * RAPID RADIATIVE TRANSFER MODEL (RRTM) *
3204 ! * ATMOSPHERIC AND ENVIRONMENTAL RESEARCH, INC. *
3205 ! * 131 HARTWELL AVENUE *
3206 ! * LEXINGTON, MA 02421 *
3210 ! * JENNIFER DELAMERE *
3211 ! * STEVEN J. TAUBMAN *
3212 ! * SHEPARD A. CLOUGH *
3217 ! * email: mlawer@aer.com *
3218 ! * email: jdelamer@aer.com *
3220 ! * The authors wish to acknowledge the contributions of the *
3221 ! * following people: Patrick D. Brown, Michael J. Iacono, *
3222 ! * Ronald E. Farren, Luke Chen, Robert Bergstrom. *
3224 ! ******************************************************************************
3227 ! * This file contains the subroutines TAUGBn (where n goes from *
3228 ! * 1 to 28). TAUGBn calculates the optical depths and Planck fractions *
3229 ! * per g-value and layer for band n. *
3231 ! * Output: optical depths (unitless) *
3232 ! * fractions needed to compute Planck functions at every layer *
3235 ! * COMMON /TAUGCOM/ TAUG(MXLAY,MG) *
3236 ! * COMMON /PLANKG/ FRACS(MXLAY,MG) *
3240 ! * PARAMETER (MG=16, MXLAY=203, NBANDS=14) *
3242 ! * COMMON /FEATURES/ NG(NBANDS),NSPA(NBANDS),NSPB(NBANDS) *
3243 ! * COMMON /PRECISE/ ONEMINUS *
3244 ! * COMMON /PROFILE/ NLAYERS,PAVEL(MXLAY),TAVEL(MXLAY), *
3245 ! * & PZ(0:MXLAY),TZ(0:MXLAY),TBOUND *
3246 ! * COMMON /PROFDATA/ LAYTROP,LAYSWTCH,LAYLOW, *
3247 ! * & COLH2O(MXLAY),COLCO2(MXLAY), *
3248 ! * & COLO3(MXLAY),COLN2O(MXLAY),COLCH4(MXLAY), *
3249 ! * & COLO2(MXLAY),CO2MULT(MXLAY) *
3250 ! * COMMON /INTFAC/ FAC00(MXLAY),FAC01(MXLAY), *
3251 ! * & FAC10(MXLAY),FAC11(MXLAY) *
3252 ! * COMMON /INTIND/ JP(MXLAY),JT(MXLAY),JT1(MXLAY) *
3253 ! * COMMON /SELF/ SELFFAC(MXLAY), SELFFRAC(MXLAY), INDSELF(MXLAY) *
3256 ! * NG(IBAND) - number of g-values in band IBAND *
3257 ! * NSPA(IBAND) - for the lower atmosphere, the number of reference *
3258 ! * atmospheres that are stored for band IBAND per *
3259 ! * pressure level and temperature. Each of these *
3260 ! * atmospheres has different relative amounts of the *
3261 ! * key species for the band (i.e. different binary *
3262 ! * species parameters). *
3263 ! * NSPB(IBAND) - same for upper atmosphere *
3264 ! * ONEMINUS - since problems are caused in some cases by interpolation *
3265 ! * parameters equal to or greater than 1, for these cases *
3266 ! * these parameters are set to this value, slightly < 1. *
3267 ! * PAVEL - layer pressures (mb) *
3268 ! * TAVEL - layer temperatures (degrees K) *
3269 ! * PZ - level pressures (mb) *
3270 ! * TZ - level temperatures (degrees K) *
3271 ! * LAYTROP - layer at which switch is made from one combination of *
3272 ! * key species to another *
3273 ! * COLH2O, COLCO2, COLO3, COLN2O, COLCH4 - column amounts of water *
3274 ! * vapor,carbon dioxide, ozone, nitrous ozide, methane, *
3275 ! * respectively (molecules/cm**2) *
3276 ! * CO2MULT - for bands in which carbon dioxide is implemented as a *
3277 ! * trace species, this is the factor used to multiply the *
3278 ! * band's average CO2 absorption coefficient to get the added *
3279 ! * contribution to the optical depth relative to 355 ppm. *
3280 ! * FACij(LAY) - for layer LAY, these are factors that are needed to *
3281 ! * compute the interpolation factors that multiply the *
3282 ! * appropriate reference k-values. A value of 0 (1) for *
3283 ! * i,j indicates that the corresponding factor multiplies *
3284 ! * reference k-value for the lower (higher) of the two *
3285 ! * appropriate temperatures, and altitudes, respectively. *
3286 ! * JP - the index of the lower (in altitude) of the two appropriate *
3287 ! * reference pressure levels needed for interpolation *
3288 ! * JT, JT1 - the indices of the lower of the two appropriate reference *
3289 ! * temperatures needed for interpolation (for pressure *
3290 ! * levels JP and JP+1, respectively) *
3291 ! * SELFFAC - scale factor needed to water vapor self-continuum, equals *
3292 ! * (water vapor density)/(atmospheric density at 296K and *
3294 ! * SELFFRAC - factor needed for temperature interpolation of reference *
3295 ! * water vapor self-continuum data *
3296 ! * INDSELF - index of the lower of the two appropriate reference *
3297 ! * temperatures needed for the self-continuum interpolation *
3300 ! * COMMON /Kn/ KA(NSPA(n),5,13,MG), KB(NSPB(n),5,13:59,MG), SELFREF(10,MG) *
3301 ! * (note: n is the band number) *
3304 ! * KA - k-values for low reference atmospheres (no water vapor *
3305 ! * self-continuum) (units: cm**2/molecule) *
3306 ! * KB - k-values for high reference atmospheres (all sources) *
3307 ! * (units: cm**2/molecule) *
3308 ! * SELFREF - k-values for water vapor self-continuum for reference *
3309 ! * atmospheres (used below LAYTROP) *
3310 ! * (units: cm**2/molecule) *
3312 ! * DIMENSION ABSA(65*NSPA(n),MG), ABSB(235*NSPB(n),MG) *
3313 ! * EQUIVALENCE (KA,ABSA),(KB,ABSB) *
3315 ! *****************************************************************************
3319 ! Revised: Adapted to F90 coding, J.-J.Morcrette, ECMWF, Feb 2003
3320 ! Revised: Modified for g-point reduction, MJIacono, AER, Dec 2003
3321 ! Revised: Reformatted for consistency with rrtmg_lw, MJIacono, AER, Jul 2006
3323 ! ------- Declarations -------
3326 integer(kind=im), intent(in) :: nlayers ! total number of layers
3328 integer(kind=im), intent(in) :: laytrop ! tropopause layer index
3329 integer(kind=im), intent(in) :: jp(:) !
3330 ! Dimensions: (nlayers)
3331 integer(kind=im), intent(in) :: jt(:) !
3332 ! Dimensions: (nlayers)
3333 integer(kind=im), intent(in) :: jt1(:) !
3334 ! Dimensions: (nlayers)
3336 real(kind=rb), intent(in) :: colh2o(:) ! column amount (h2o)
3337 ! Dimensions: (nlayers)
3338 real(kind=rb), intent(in) :: colco2(:) ! column amount (co2)
3339 ! Dimensions: (nlayers)
3340 real(kind=rb), intent(in) :: colo3(:) ! column amount (o3)
3341 ! Dimensions: (nlayers)
3342 real(kind=rb), intent(in) :: colch4(:) ! column amount (ch4)
3343 ! Dimensions: (nlayers)
3344 ! Dimensions: (nlayers)
3345 real(kind=rb), intent(in) :: colo2(:) ! column amount (o2)
3346 ! Dimensions: (nlayers)
3347 real(kind=rb), intent(in) :: colmol(:) !
3348 ! Dimensions: (nlayers)
3350 integer(kind=im), intent(in) :: indself(:)
3351 ! Dimensions: (nlayers)
3352 integer(kind=im), intent(in) :: indfor(:)
3353 ! Dimensions: (nlayers)
3354 real(kind=rb), intent(in) :: selffac(:)
3355 ! Dimensions: (nlayers)
3356 real(kind=rb), intent(in) :: selffrac(:)
3357 ! Dimensions: (nlayers)
3358 real(kind=rb), intent(in) :: forfac(:)
3359 ! Dimensions: (nlayers)
3360 real(kind=rb), intent(in) :: forfrac(:)
3361 ! Dimensions: (nlayers)
3363 real(kind=rb), intent(in) :: & !
3364 fac00(:), fac01(:), & ! Dimensions: (nlayers)
3367 ! ----- Output -----
3368 real(kind=rb), intent(out) :: sfluxzen(:) ! solar source function
3369 ! Dimensions: (ngptsw)
3370 real(kind=rb), intent(out) :: taug(:,:) ! gaseous optical depth
3371 ! Dimensions: (nlayers,ngptsw)
3372 real(kind=rb), intent(out) :: taur(:,:) ! Rayleigh
3373 ! Dimensions: (nlayers,ngptsw)
3374 ! real(kind=rb), intent(out) :: ssa(:,:) ! single scattering albedo (inactive)
3375 ! Dimensions: (nlayers,ngptsw)
3377 !jm not thread safe hvrtau = '$Revision: 1.3 $'
3379 ! Initialize sfluxzen to 0.0 to prevent junk values when nlayers = laytrop
3383 ! Calculate gaseous optical depth and planck fractions for each spectral band.
3404 !----------------------------------------------------------------------------
3406 !----------------------------------------------------------------------------
3408 ! band 16: 2600-3250 cm-1 (low - h2o,ch4; high - ch4)
3410 !----------------------------------------------------------------------------
3412 ! ------- Modules -------
3414 use parrrsw, only : ng16
3415 use rrsw_kg16, only : absa, ka, absb, kb, forref, selfref, &
3416 sfluxref, rayl, layreffr, strrat1
3418 ! ------- Declarations -------
3422 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
3423 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
3424 fac110, fac111, fs, speccomb, specmult, specparm, &
3427 ! Compute the optical depth by interpolating in ln(pressure),
3428 ! temperature, and appropriate species. Below LAYTROP, the water
3429 ! vapor self-continuum is interpolated (in temperature) separately.
3431 ! Lower atmosphere loop
3433 speccomb = colh2o(lay) + strrat1*colch4(lay)
3434 specparm = colh2o(lay)/speccomb
3435 if (specparm .ge. oneminus) specparm = oneminus
3436 specmult = 8._rb*(specparm)
3437 js = 1 + int(specmult)
3438 fs = mod(specmult, 1._rb )
3439 fac000 = (1._rb - fs) * fac00(lay)
3440 fac010 = (1._rb - fs) * fac10(lay)
3441 fac100 = fs * fac00(lay)
3442 fac110 = fs * fac10(lay)
3443 fac001 = (1._rb - fs) * fac01(lay)
3444 fac011 = (1._rb - fs) * fac11(lay)
3445 fac101 = fs * fac01(lay)
3446 fac111 = fs * fac11(lay)
3447 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(16) + js
3448 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(16) + js
3451 tauray = colmol(lay) * rayl
3454 taug(lay,ig) = speccomb * &
3455 (fac000 * absa(ind0 ,ig) + &
3456 fac100 * absa(ind0 +1,ig) + &
3457 fac010 * absa(ind0 +9,ig) + &
3458 fac110 * absa(ind0+10,ig) + &
3459 fac001 * absa(ind1 ,ig) + &
3460 fac101 * absa(ind1 +1,ig) + &
3461 fac011 * absa(ind1 +9,ig) + &
3462 fac111 * absa(ind1+10,ig)) + &
3464 (selffac(lay) * (selfref(inds,ig) + &
3466 (selfref(inds+1,ig) - selfref(inds,ig))) + &
3467 forfac(lay) * (forref(indf,ig) + &
3469 (forref(indf+1,ig) - forref(indf,ig))))
3470 ! ssa(lay,ig) = tauray/taug(lay,ig)
3471 taur(lay,ig) = tauray
3477 ! Upper atmosphere loop
3478 do lay = laytrop+1, nlayers
3479 if (jp(lay-1) .lt. layreffr .and. jp(lay) .ge. layreffr) &
3481 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(16) + 1
3482 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(16) + 1
3483 tauray = colmol(lay) * rayl
3486 taug(lay,ig) = colch4(lay) * &
3487 (fac00(lay) * absb(ind0 ,ig) + &
3488 fac10(lay) * absb(ind0+1,ig) + &
3489 fac01(lay) * absb(ind1 ,ig) + &
3490 fac11(lay) * absb(ind1+1,ig))
3491 ! ssa(lay,ig) = tauray/taug(lay,ig)
3492 if (lay .eq. laysolfr) sfluxzen(ig) = sfluxref(ig)
3493 taur(lay,ig) = tauray
3497 end subroutine taumol16
3499 !----------------------------------------------------------------------------
3501 !----------------------------------------------------------------------------
3503 ! band 17: 3250-4000 cm-1 (low - h2o,co2; high - h2o,co2)
3505 !----------------------------------------------------------------------------
3507 ! ------- Modules -------
3509 use parrrsw, only : ng17, ngs16
3510 use rrsw_kg17, only : absa, ka, absb, kb, forref, selfref, &
3511 sfluxref, rayl, layreffr, strrat
3513 ! ------- Declarations -------
3517 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
3518 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
3519 fac110, fac111, fs, speccomb, specmult, specparm, &
3522 ! Compute the optical depth by interpolating in ln(pressure),
3523 ! temperature, and appropriate species. Below LAYTROP, the water
3524 ! vapor self-continuum is interpolated (in temperature) separately.
3526 ! Lower atmosphere loop
3528 speccomb = colh2o(lay) + strrat*colco2(lay)
3529 specparm = colh2o(lay)/speccomb
3530 if (specparm .ge. oneminus) specparm = oneminus
3531 specmult = 8._rb*(specparm)
3532 js = 1 + int(specmult)
3533 fs = mod(specmult, 1._rb )
3534 fac000 = (1._rb - fs) * fac00(lay)
3535 fac010 = (1._rb - fs) * fac10(lay)
3536 fac100 = fs * fac00(lay)
3537 fac110 = fs * fac10(lay)
3538 fac001 = (1._rb - fs) * fac01(lay)
3539 fac011 = (1._rb - fs) * fac11(lay)
3540 fac101 = fs * fac01(lay)
3541 fac111 = fs * fac11(lay)
3542 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(17) + js
3543 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(17) + js
3546 tauray = colmol(lay) * rayl
3549 taug(lay,ngs16+ig) = speccomb * &
3550 (fac000 * absa(ind0,ig) + &
3551 fac100 * absa(ind0+1,ig) + &
3552 fac010 * absa(ind0+9,ig) + &
3553 fac110 * absa(ind0+10,ig) + &
3554 fac001 * absa(ind1,ig) + &
3555 fac101 * absa(ind1+1,ig) + &
3556 fac011 * absa(ind1+9,ig) + &
3557 fac111 * absa(ind1+10,ig)) + &
3559 (selffac(lay) * (selfref(inds,ig) + &
3561 (selfref(inds+1,ig) - selfref(inds,ig))) + &
3562 forfac(lay) * (forref(indf,ig) + &
3564 (forref(indf+1,ig) - forref(indf,ig))))
3565 ! ssa(lay,ngs16+ig) = tauray/taug(lay,ngs16+ig)
3566 taur(lay,ngs16+ig) = tauray
3572 ! Upper atmosphere loop
3573 do lay = laytrop+1, nlayers
3574 if (jp(lay-1) .lt. layreffr .and. jp(lay) .ge. layreffr) &
3576 speccomb = colh2o(lay) + strrat*colco2(lay)
3577 specparm = colh2o(lay)/speccomb
3578 if (specparm .ge. oneminus) specparm = oneminus
3579 specmult = 4._rb*(specparm)
3580 js = 1 + int(specmult)
3581 fs = mod(specmult, 1._rb )
3582 fac000 = (1._rb - fs) * fac00(lay)
3583 fac010 = (1._rb - fs) * fac10(lay)
3584 fac100 = fs * fac00(lay)
3585 fac110 = fs * fac10(lay)
3586 fac001 = (1._rb - fs) * fac01(lay)
3587 fac011 = (1._rb - fs) * fac11(lay)
3588 fac101 = fs * fac01(lay)
3589 fac111 = fs * fac11(lay)
3590 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(17) + js
3591 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(17) + js
3593 tauray = colmol(lay) * rayl
3596 taug(lay,ngs16+ig) = speccomb * &
3597 (fac000 * absb(ind0,ig) + &
3598 fac100 * absb(ind0+1,ig) + &
3599 fac010 * absb(ind0+5,ig) + &
3600 fac110 * absb(ind0+6,ig) + &
3601 fac001 * absb(ind1,ig) + &
3602 fac101 * absb(ind1+1,ig) + &
3603 fac011 * absb(ind1+5,ig) + &
3604 fac111 * absb(ind1+6,ig)) + &
3606 forfac(lay) * (forref(indf,ig) + &
3608 (forref(indf+1,ig) - forref(indf,ig)))
3609 ! ssa(lay,ngs16+ig) = tauray/taug(lay,ngs16+ig)
3610 if (lay .eq. laysolfr) sfluxzen(ngs16+ig) = sfluxref(ig,js) &
3611 + fs * (sfluxref(ig,js+1) - sfluxref(ig,js))
3612 taur(lay,ngs16+ig) = tauray
3616 end subroutine taumol17
3618 !----------------------------------------------------------------------------
3620 !----------------------------------------------------------------------------
3622 ! band 18: 4000-4650 cm-1 (low - h2o,ch4; high - ch4)
3624 !----------------------------------------------------------------------------
3626 ! ------- Modules -------
3628 use parrrsw, only : ng18, ngs17
3629 use rrsw_kg18, only : absa, ka, absb, kb, forref, selfref, &
3630 sfluxref, rayl, layreffr, strrat
3632 ! ------- Declarations -------
3636 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
3637 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
3638 fac110, fac111, fs, speccomb, specmult, specparm, &
3641 ! Compute the optical depth by interpolating in ln(pressure),
3642 ! temperature, and appropriate species. Below LAYTROP, the water
3643 ! vapor self-continuum is interpolated (in temperature) separately.
3647 ! Lower atmosphere loop
3649 if (jp(lay) .lt. layreffr .and. jp(lay+1) .ge. layreffr) &
3650 laysolfr = min(lay+1,laytrop)
3651 speccomb = colh2o(lay) + strrat*colch4(lay)
3652 specparm = colh2o(lay)/speccomb
3653 if (specparm .ge. oneminus) specparm = oneminus
3654 specmult = 8._rb*(specparm)
3655 js = 1 + int(specmult)
3656 fs = mod(specmult, 1._rb )
3657 fac000 = (1._rb - fs) * fac00(lay)
3658 fac010 = (1._rb - fs) * fac10(lay)
3659 fac100 = fs * fac00(lay)
3660 fac110 = fs * fac10(lay)
3661 fac001 = (1._rb - fs) * fac01(lay)
3662 fac011 = (1._rb - fs) * fac11(lay)
3663 fac101 = fs * fac01(lay)
3664 fac111 = fs * fac11(lay)
3665 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(18) + js
3666 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(18) + js
3669 tauray = colmol(lay) * rayl
3672 taug(lay,ngs17+ig) = speccomb * &
3673 (fac000 * absa(ind0,ig) + &
3674 fac100 * absa(ind0+1,ig) + &
3675 fac010 * absa(ind0+9,ig) + &
3676 fac110 * absa(ind0+10,ig) + &
3677 fac001 * absa(ind1,ig) + &
3678 fac101 * absa(ind1+1,ig) + &
3679 fac011 * absa(ind1+9,ig) + &
3680 fac111 * absa(ind1+10,ig)) + &
3682 (selffac(lay) * (selfref(inds,ig) + &
3684 (selfref(inds+1,ig) - selfref(inds,ig))) + &
3685 forfac(lay) * (forref(indf,ig) + &
3687 (forref(indf+1,ig) - forref(indf,ig))))
3688 ! ssa(lay,ngs17+ig) = tauray/taug(lay,ngs17+ig)
3689 if (lay .eq. laysolfr) sfluxzen(ngs17+ig) = sfluxref(ig,js) &
3690 + fs * (sfluxref(ig,js+1) - sfluxref(ig,js))
3691 taur(lay,ngs17+ig) = tauray
3695 ! Upper atmosphere loop
3696 do lay = laytrop+1, nlayers
3697 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(18) + 1
3698 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(18) + 1
3699 tauray = colmol(lay) * rayl
3702 taug(lay,ngs17+ig) = colch4(lay) * &
3703 (fac00(lay) * absb(ind0,ig) + &
3704 fac10(lay) * absb(ind0+1,ig) + &
3705 fac01(lay) * absb(ind1,ig) + &
3706 fac11(lay) * absb(ind1+1,ig))
3707 ! ssa(lay,ngs17+ig) = tauray/taug(lay,ngs17+ig)
3708 taur(lay,ngs17+ig) = tauray
3712 end subroutine taumol18
3714 !----------------------------------------------------------------------------
3716 !----------------------------------------------------------------------------
3718 ! band 19: 4650-5150 cm-1 (low - h2o,co2; high - co2)
3720 !----------------------------------------------------------------------------
3722 ! ------- Modules -------
3724 use parrrsw, only : ng19, ngs18
3725 use rrsw_kg19, only : absa, ka, absb, kb, forref, selfref, &
3726 sfluxref, rayl, layreffr, strrat
3728 ! ------- Declarations -------
3732 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
3733 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
3734 fac110, fac111, fs, speccomb, specmult, specparm, &
3737 ! Compute the optical depth by interpolating in ln(pressure),
3738 ! temperature, and appropriate species. Below LAYTROP, the water
3739 ! vapor self-continuum is interpolated (in temperature) separately.
3743 ! Lower atmosphere loop
3745 if (jp(lay) .lt. layreffr .and. jp(lay+1) .ge. layreffr) &
3746 laysolfr = min(lay+1,laytrop)
3747 speccomb = colh2o(lay) + strrat*colco2(lay)
3748 specparm = colh2o(lay)/speccomb
3749 if (specparm .ge. oneminus) specparm = oneminus
3750 specmult = 8._rb*(specparm)
3751 js = 1 + int(specmult)
3752 fs = mod(specmult, 1._rb )
3753 fac000 = (1._rb - fs) * fac00(lay)
3754 fac010 = (1._rb - fs) * fac10(lay)
3755 fac100 = fs * fac00(lay)
3756 fac110 = fs * fac10(lay)
3757 fac001 = (1._rb - fs) * fac01(lay)
3758 fac011 = (1._rb - fs) * fac11(lay)
3759 fac101 = fs * fac01(lay)
3760 fac111 = fs * fac11(lay)
3761 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(19) + js
3762 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(19) + js
3765 tauray = colmol(lay) * rayl
3768 taug(lay,ngs18+ig) = speccomb * &
3769 (fac000 * absa(ind0,ig) + &
3770 fac100 * absa(ind0+1,ig) + &
3771 fac010 * absa(ind0+9,ig) + &
3772 fac110 * absa(ind0+10,ig) + &
3773 fac001 * absa(ind1,ig) + &
3774 fac101 * absa(ind1+1,ig) + &
3775 fac011 * absa(ind1+9,ig) + &
3776 fac111 * absa(ind1+10,ig)) + &
3778 (selffac(lay) * (selfref(inds,ig) + &
3780 (selfref(inds+1,ig) - selfref(inds,ig))) + &
3781 forfac(lay) * (forref(indf,ig) + &
3783 (forref(indf+1,ig) - forref(indf,ig))))
3784 ! ssa(lay,ngs18+ig) = tauray/taug(lay,ngs18+ig)
3785 if (lay .eq. laysolfr) sfluxzen(ngs18+ig) = sfluxref(ig,js) &
3786 + fs * (sfluxref(ig,js+1) - sfluxref(ig,js))
3787 taur(lay,ngs18+ig) = tauray
3791 ! Upper atmosphere loop
3792 do lay = laytrop+1, nlayers
3793 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(19) + 1
3794 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(19) + 1
3795 tauray = colmol(lay) * rayl
3798 taug(lay,ngs18+ig) = colco2(lay) * &
3799 (fac00(lay) * absb(ind0,ig) + &
3800 fac10(lay) * absb(ind0+1,ig) + &
3801 fac01(lay) * absb(ind1,ig) + &
3802 fac11(lay) * absb(ind1+1,ig))
3803 ! ssa(lay,ngs18+ig) = tauray/taug(lay,ngs18+ig)
3804 taur(lay,ngs18+ig) = tauray
3808 end subroutine taumol19
3810 !----------------------------------------------------------------------------
3812 !----------------------------------------------------------------------------
3814 ! band 20: 5150-6150 cm-1 (low - h2o; high - h2o)
3816 !----------------------------------------------------------------------------
3818 ! ------- Modules -------
3820 use parrrsw, only : ng20, ngs19
3821 use rrsw_kg20, only : absa, ka, absb, kb, forref, selfref, &
3822 sfluxref, absch4, rayl, layreffr
3826 ! ------- Declarations -------
3830 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
3831 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
3832 fac110, fac111, fs, speccomb, specmult, specparm, &
3835 ! Compute the optical depth by interpolating in ln(pressure),
3836 ! temperature, and appropriate species. Below LAYTROP, the water
3837 ! vapor self-continuum is interpolated (in temperature) separately.
3841 ! Lower atmosphere loop
3843 if (jp(lay) .lt. layreffr .and. jp(lay+1) .ge. layreffr) &
3844 laysolfr = min(lay+1,laytrop)
3845 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(20) + 1
3846 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(20) + 1
3849 tauray = colmol(lay) * rayl
3852 taug(lay,ngs19+ig) = colh2o(lay) * &
3853 ((fac00(lay) * absa(ind0,ig) + &
3854 fac10(lay) * absa(ind0+1,ig) + &
3855 fac01(lay) * absa(ind1,ig) + &
3856 fac11(lay) * absa(ind1+1,ig)) + &
3857 selffac(lay) * (selfref(inds,ig) + &
3859 (selfref(inds+1,ig) - selfref(inds,ig))) + &
3860 forfac(lay) * (forref(indf,ig) + &
3862 (forref(indf+1,ig) - forref(indf,ig)))) &
3863 + colch4(lay) * absch4(ig)
3864 ! ssa(lay,ngs19+ig) = tauray/taug(lay,ngs19+ig)
3865 taur(lay,ngs19+ig) = tauray
3866 if (lay .eq. laysolfr) sfluxzen(ngs19+ig) = sfluxref(ig)
3870 ! Upper atmosphere loop
3871 do lay = laytrop+1, nlayers
3872 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(20) + 1
3873 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(20) + 1
3875 tauray = colmol(lay) * rayl
3878 taug(lay,ngs19+ig) = colh2o(lay) * &
3879 (fac00(lay) * absb(ind0,ig) + &
3880 fac10(lay) * absb(ind0+1,ig) + &
3881 fac01(lay) * absb(ind1,ig) + &
3882 fac11(lay) * absb(ind1+1,ig) + &
3883 forfac(lay) * (forref(indf,ig) + &
3885 (forref(indf+1,ig) - forref(indf,ig)))) + &
3886 colch4(lay) * absch4(ig)
3887 ! ssa(lay,ngs19+ig) = tauray/taug(lay,ngs19+ig)
3888 taur(lay,ngs19+ig) = tauray
3892 end subroutine taumol20
3894 !----------------------------------------------------------------------------
3896 !----------------------------------------------------------------------------
3898 ! band 21: 6150-7700 cm-1 (low - h2o,co2; high - h2o,co2)
3900 !----------------------------------------------------------------------------
3902 ! ------- Modules -------
3904 use parrrsw, only : ng21, ngs20
3905 use rrsw_kg21, only : absa, ka, absb, kb, forref, selfref, &
3906 sfluxref, rayl, layreffr, strrat
3908 ! ------- Declarations -------
3912 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
3913 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
3914 fac110, fac111, fs, speccomb, specmult, specparm, &
3917 ! Compute the optical depth by interpolating in ln(pressure),
3918 ! temperature, and appropriate species. Below LAYTROP, the water
3919 ! vapor self-continuum is interpolated (in temperature) separately.
3923 ! Lower atmosphere loop
3925 if (jp(lay) .lt. layreffr .and. jp(lay+1) .ge. layreffr) &
3926 laysolfr = min(lay+1,laytrop)
3927 speccomb = colh2o(lay) + strrat*colco2(lay)
3928 specparm = colh2o(lay)/speccomb
3929 if (specparm .ge. oneminus) specparm = oneminus
3930 specmult = 8._rb*(specparm)
3931 js = 1 + int(specmult)
3932 fs = mod(specmult, 1._rb )
3933 fac000 = (1._rb - fs) * fac00(lay)
3934 fac010 = (1._rb - fs) * fac10(lay)
3935 fac100 = fs * fac00(lay)
3936 fac110 = fs * fac10(lay)
3937 fac001 = (1._rb - fs) * fac01(lay)
3938 fac011 = (1._rb - fs) * fac11(lay)
3939 fac101 = fs * fac01(lay)
3940 fac111 = fs * fac11(lay)
3941 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(21) + js
3942 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(21) + js
3945 tauray = colmol(lay) * rayl
3948 taug(lay,ngs20+ig) = speccomb * &
3949 (fac000 * absa(ind0,ig) + &
3950 fac100 * absa(ind0+1,ig) + &
3951 fac010 * absa(ind0+9,ig) + &
3952 fac110 * absa(ind0+10,ig) + &
3953 fac001 * absa(ind1,ig) + &
3954 fac101 * absa(ind1+1,ig) + &
3955 fac011 * absa(ind1+9,ig) + &
3956 fac111 * absa(ind1+10,ig)) + &
3958 (selffac(lay) * (selfref(inds,ig) + &
3960 (selfref(inds+1,ig) - selfref(inds,ig))) + &
3961 forfac(lay) * (forref(indf,ig) + &
3963 (forref(indf+1,ig) - forref(indf,ig))))
3964 ! ssa(lay,ngs20+ig) = tauray/taug(lay,ngs20+ig)
3965 if (lay .eq. laysolfr) sfluxzen(ngs20+ig) = sfluxref(ig,js) &
3966 + fs * (sfluxref(ig,js+1) - sfluxref(ig,js))
3967 taur(lay,ngs20+ig) = tauray
3971 ! Upper atmosphere loop
3972 do lay = laytrop+1, nlayers
3973 speccomb = colh2o(lay) + strrat*colco2(lay)
3974 specparm = colh2o(lay)/speccomb
3975 if (specparm .ge. oneminus) specparm = oneminus
3976 specmult = 4._rb*(specparm)
3977 js = 1 + int(specmult)
3978 fs = mod(specmult, 1._rb )
3979 fac000 = (1._rb - fs) * fac00(lay)
3980 fac010 = (1._rb - fs) * fac10(lay)
3981 fac100 = fs * fac00(lay)
3982 fac110 = fs * fac10(lay)
3983 fac001 = (1._rb - fs) * fac01(lay)
3984 fac011 = (1._rb - fs) * fac11(lay)
3985 fac101 = fs * fac01(lay)
3986 fac111 = fs * fac11(lay)
3987 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(21) + js
3988 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(21) + js
3990 tauray = colmol(lay) * rayl
3993 taug(lay,ngs20+ig) = speccomb * &
3994 (fac000 * absb(ind0,ig) + &
3995 fac100 * absb(ind0+1,ig) + &
3996 fac010 * absb(ind0+5,ig) + &
3997 fac110 * absb(ind0+6,ig) + &
3998 fac001 * absb(ind1,ig) + &
3999 fac101 * absb(ind1+1,ig) + &
4000 fac011 * absb(ind1+5,ig) + &
4001 fac111 * absb(ind1+6,ig)) + &
4003 forfac(lay) * (forref(indf,ig) + &
4005 (forref(indf+1,ig) - forref(indf,ig)))
4006 ! ssa(lay,ngs20+ig) = tauray/taug(lay,ngs20+ig)
4007 taur(lay,ngs20+ig) = tauray
4011 end subroutine taumol21
4013 !----------------------------------------------------------------------------
4015 !----------------------------------------------------------------------------
4017 ! band 22: 7700-8050 cm-1 (low - h2o,o2; high - o2)
4019 !----------------------------------------------------------------------------
4021 ! ------- Modules -------
4023 use parrrsw, only : ng22, ngs21
4024 use rrsw_kg22, only : absa, ka, absb, kb, forref, selfref, &
4025 sfluxref, rayl, layreffr, strrat
4027 ! ------- Declarations -------
4031 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
4032 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
4033 fac110, fac111, fs, speccomb, specmult, specparm, &
4034 tauray, o2adj, o2cont
4036 ! The following factor is the ratio of total O2 band intensity (lines
4037 ! and Mate continuum) to O2 band intensity (line only). It is needed
4038 ! to adjust the optical depths since the k's include only lines.
4041 ! Compute the optical depth by interpolating in ln(pressure),
4042 ! temperature, and appropriate species. Below LAYTROP, the water
4043 ! vapor self-continuum is interpolated (in temperature) separately.
4047 ! Lower atmosphere loop
4049 if (jp(lay) .lt. layreffr .and. jp(lay+1) .ge. layreffr) &
4050 laysolfr = min(lay+1,laytrop)
4051 o2cont = 4.35e-4_rb*colo2(lay)/(350.0_rb*2.0_rb)
4052 speccomb = colh2o(lay) + o2adj*strrat*colo2(lay)
4053 specparm = colh2o(lay)/speccomb
4054 if (specparm .ge. oneminus) specparm = oneminus
4055 specmult = 8._rb*(specparm)
4056 ! odadj = specparm + o2adj * (1._rb - specparm)
4057 js = 1 + int(specmult)
4058 fs = mod(specmult, 1._rb )
4059 fac000 = (1._rb - fs) * fac00(lay)
4060 fac010 = (1._rb - fs) * fac10(lay)
4061 fac100 = fs * fac00(lay)
4062 fac110 = fs * fac10(lay)
4063 fac001 = (1._rb - fs) * fac01(lay)
4064 fac011 = (1._rb - fs) * fac11(lay)
4065 fac101 = fs * fac01(lay)
4066 fac111 = fs * fac11(lay)
4067 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(22) + js
4068 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(22) + js
4071 tauray = colmol(lay) * rayl
4074 taug(lay,ngs21+ig) = speccomb * &
4075 (fac000 * absa(ind0,ig) + &
4076 fac100 * absa(ind0+1,ig) + &
4077 fac010 * absa(ind0+9,ig) + &
4078 fac110 * absa(ind0+10,ig) + &
4079 fac001 * absa(ind1,ig) + &
4080 fac101 * absa(ind1+1,ig) + &
4081 fac011 * absa(ind1+9,ig) + &
4082 fac111 * absa(ind1+10,ig)) + &
4084 (selffac(lay) * (selfref(inds,ig) + &
4086 (selfref(inds+1,ig) - selfref(inds,ig))) + &
4087 forfac(lay) * (forref(indf,ig) + &
4089 (forref(indf+1,ig) - forref(indf,ig)))) &
4091 ! ssa(lay,ngs21+ig) = tauray/taug(lay,ngs21+ig)
4092 if (lay .eq. laysolfr) sfluxzen(ngs21+ig) = sfluxref(ig,js) &
4093 + fs * (sfluxref(ig,js+1) - sfluxref(ig,js))
4094 taur(lay,ngs21+ig) = tauray
4098 ! Upper atmosphere loop
4099 do lay = laytrop+1, nlayers
4100 o2cont = 4.35e-4_rb*colo2(lay)/(350.0_rb*2.0_rb)
4101 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(22) + 1
4102 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(22) + 1
4103 tauray = colmol(lay) * rayl
4106 taug(lay,ngs21+ig) = colo2(lay) * o2adj * &
4107 (fac00(lay) * absb(ind0,ig) + &
4108 fac10(lay) * absb(ind0+1,ig) + &
4109 fac01(lay) * absb(ind1,ig) + &
4110 fac11(lay) * absb(ind1+1,ig)) + &
4112 ! ssa(lay,ngs21+ig) = tauray/taug(lay,ngs21+ig)
4113 taur(lay,ngs21+ig) = tauray
4117 end subroutine taumol22
4119 !----------------------------------------------------------------------------
4121 !----------------------------------------------------------------------------
4123 ! band 23: 8050-12850 cm-1 (low - h2o; high - nothing)
4125 !----------------------------------------------------------------------------
4127 ! ------- Modules -------
4129 use parrrsw, only : ng23, ngs22
4130 use rrsw_kg23, only : absa, ka, forref, selfref, &
4131 sfluxref, rayl, layreffr, givfac
4133 ! ------- Declarations -------
4137 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
4138 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
4139 fac110, fac111, fs, speccomb, specmult, specparm, &
4142 ! Compute the optical depth by interpolating in ln(pressure),
4143 ! temperature, and appropriate species. Below LAYTROP, the water
4144 ! vapor self-continuum is interpolated (in temperature) separately.
4148 ! Lower atmosphere loop
4150 if (jp(lay) .lt. layreffr .and. jp(lay+1) .ge. layreffr) &
4151 laysolfr = min(lay+1,laytrop)
4152 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(23) + 1
4153 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(23) + 1
4158 tauray = colmol(lay) * rayl(ig)
4159 taug(lay,ngs22+ig) = colh2o(lay) * &
4160 (givfac * (fac00(lay) * absa(ind0,ig) + &
4161 fac10(lay) * absa(ind0+1,ig) + &
4162 fac01(lay) * absa(ind1,ig) + &
4163 fac11(lay) * absa(ind1+1,ig)) + &
4164 selffac(lay) * (selfref(inds,ig) + &
4166 (selfref(inds+1,ig) - selfref(inds,ig))) + &
4167 forfac(lay) * (forref(indf,ig) + &
4169 (forref(indf+1,ig) - forref(indf,ig))))
4170 ! ssa(lay,ngs22+ig) = tauray/taug(lay,ngs22+ig)
4171 if (lay .eq. laysolfr) sfluxzen(ngs22+ig) = sfluxref(ig)
4172 taur(lay,ngs22+ig) = tauray
4176 ! Upper atmosphere loop
4177 do lay = laytrop+1, nlayers
4179 ! taug(lay,ngs22+ig) = colmol(lay) * rayl(ig)
4180 ! ssa(lay,ngs22+ig) = 1.0_rb
4181 taug(lay,ngs22+ig) = 0._rb
4182 taur(lay,ngs22+ig) = colmol(lay) * rayl(ig)
4186 end subroutine taumol23
4188 !----------------------------------------------------------------------------
4190 !----------------------------------------------------------------------------
4192 ! band 24: 12850-16000 cm-1 (low - h2o,o2; high - o2)
4194 !----------------------------------------------------------------------------
4196 ! ------- Modules -------
4198 use parrrsw, only : ng24, ngs23
4199 use rrsw_kg24, only : absa, ka, absb, kb, forref, selfref, &
4200 sfluxref, abso3a, abso3b, rayla, raylb, &
4203 ! ------- Declarations -------
4207 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
4208 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
4209 fac110, fac111, fs, speccomb, specmult, specparm, &
4212 ! Compute the optical depth by interpolating in ln(pressure),
4213 ! temperature, and appropriate species. Below LAYTROP, the water
4214 ! vapor self-continuum is interpolated (in temperature) separately.
4218 ! Lower atmosphere loop
4220 if (jp(lay) .lt. layreffr .and. jp(lay+1) .ge. layreffr) &
4221 laysolfr = min(lay+1,laytrop)
4222 speccomb = colh2o(lay) + strrat*colo2(lay)
4223 specparm = colh2o(lay)/speccomb
4224 if (specparm .ge. oneminus) specparm = oneminus
4225 specmult = 8._rb*(specparm)
4226 js = 1 + int(specmult)
4227 fs = mod(specmult, 1._rb )
4228 fac000 = (1._rb - fs) * fac00(lay)
4229 fac010 = (1._rb - fs) * fac10(lay)
4230 fac100 = fs * fac00(lay)
4231 fac110 = fs * fac10(lay)
4232 fac001 = (1._rb - fs) * fac01(lay)
4233 fac011 = (1._rb - fs) * fac11(lay)
4234 fac101 = fs * fac01(lay)
4235 fac111 = fs * fac11(lay)
4236 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(24) + js
4237 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(24) + js
4242 tauray = colmol(lay) * (rayla(ig,js) + &
4243 fs * (rayla(ig,js+1) - rayla(ig,js)))
4244 taug(lay,ngs23+ig) = speccomb * &
4245 (fac000 * absa(ind0,ig) + &
4246 fac100 * absa(ind0+1,ig) + &
4247 fac010 * absa(ind0+9,ig) + &
4248 fac110 * absa(ind0+10,ig) + &
4249 fac001 * absa(ind1,ig) + &
4250 fac101 * absa(ind1+1,ig) + &
4251 fac011 * absa(ind1+9,ig) + &
4252 fac111 * absa(ind1+10,ig)) + &
4253 colo3(lay) * abso3a(ig) + &
4255 (selffac(lay) * (selfref(inds,ig) + &
4257 (selfref(inds+1,ig) - selfref(inds,ig))) + &
4258 forfac(lay) * (forref(indf,ig) + &
4260 (forref(indf+1,ig) - forref(indf,ig))))
4261 ! ssa(lay,ngs23+ig) = tauray/taug(lay,ngs23+ig)
4262 if (lay .eq. laysolfr) sfluxzen(ngs23+ig) = sfluxref(ig,js) &
4263 + fs * (sfluxref(ig,js+1) - sfluxref(ig,js))
4264 taur(lay,ngs23+ig) = tauray
4268 ! Upper atmosphere loop
4269 do lay = laytrop+1, nlayers
4270 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(24) + 1
4271 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(24) + 1
4274 tauray = colmol(lay) * raylb(ig)
4275 taug(lay,ngs23+ig) = colo2(lay) * &
4276 (fac00(lay) * absb(ind0,ig) + &
4277 fac10(lay) * absb(ind0+1,ig) + &
4278 fac01(lay) * absb(ind1,ig) + &
4279 fac11(lay) * absb(ind1+1,ig)) + &
4280 colo3(lay) * abso3b(ig)
4281 ! ssa(lay,ngs23+ig) = tauray/taug(lay,ngs23+ig)
4282 taur(lay,ngs23+ig) = tauray
4286 end subroutine taumol24
4288 !----------------------------------------------------------------------------
4290 !----------------------------------------------------------------------------
4292 ! band 25: 16000-22650 cm-1 (low - h2o; high - nothing)
4294 !----------------------------------------------------------------------------
4296 ! ------- Modules -------
4298 use parrrsw, only : ng25, ngs24
4299 use rrsw_kg25, only : absa, ka, &
4300 sfluxref, abso3a, abso3b, rayl, layreffr
4302 ! ------- Declarations -------
4306 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
4307 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
4308 fac110, fac111, fs, speccomb, specmult, specparm, &
4311 ! Compute the optical depth by interpolating in ln(pressure),
4312 ! temperature, and appropriate species. Below LAYTROP, the water
4313 ! vapor self-continuum is interpolated (in temperature) separately.
4317 ! Lower atmosphere loop
4319 if (jp(lay) .lt. layreffr .and. jp(lay+1) .ge. layreffr) &
4320 laysolfr = min(lay+1,laytrop)
4321 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(25) + 1
4322 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(25) + 1
4325 tauray = colmol(lay) * rayl(ig)
4326 taug(lay,ngs24+ig) = colh2o(lay) * &
4327 (fac00(lay) * absa(ind0,ig) + &
4328 fac10(lay) * absa(ind0+1,ig) + &
4329 fac01(lay) * absa(ind1,ig) + &
4330 fac11(lay) * absa(ind1+1,ig)) + &
4331 colo3(lay) * abso3a(ig)
4332 ! ssa(lay,ngs24+ig) = tauray/taug(lay,ngs24+ig)
4333 if (lay .eq. laysolfr) sfluxzen(ngs24+ig) = sfluxref(ig)
4334 taur(lay,ngs24+ig) = tauray
4338 ! Upper atmosphere loop
4339 do lay = laytrop+1, nlayers
4341 tauray = colmol(lay) * rayl(ig)
4342 taug(lay,ngs24+ig) = colo3(lay) * abso3b(ig)
4343 ! ssa(lay,ngs24+ig) = tauray/taug(lay,ngs24+ig)
4344 taur(lay,ngs24+ig) = tauray
4348 end subroutine taumol25
4350 !----------------------------------------------------------------------------
4352 !----------------------------------------------------------------------------
4354 ! band 26: 22650-29000 cm-1 (low - nothing; high - nothing)
4356 !----------------------------------------------------------------------------
4358 ! ------- Modules -------
4360 use parrrsw, only : ng26, ngs25
4361 use rrsw_kg26, only : sfluxref, rayl
4363 ! ------- Declarations -------
4367 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
4368 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
4369 fac110, fac111, fs, speccomb, specmult, specparm, &
4372 ! Compute the optical depth by interpolating in ln(pressure),
4373 ! temperature, and appropriate species. Below LAYTROP, the water
4374 ! vapor self-continuum is interpolated (in temperature) separately.
4378 ! Lower atmosphere loop
4381 ! taug(lay,ngs25+ig) = colmol(lay) * rayl(ig)
4382 ! ssa(lay,ngs25+ig) = 1.0_rb
4383 if (lay .eq. laysolfr) sfluxzen(ngs25+ig) = sfluxref(ig)
4384 taug(lay,ngs25+ig) = 0._rb
4385 taur(lay,ngs25+ig) = colmol(lay) * rayl(ig)
4389 ! Upper atmosphere loop
4390 do lay = laytrop+1, nlayers
4392 ! taug(lay,ngs25+ig) = colmol(lay) * rayl(ig)
4393 ! ssa(lay,ngs25+ig) = 1.0_rb
4394 taug(lay,ngs25+ig) = 0._rb
4395 taur(lay,ngs25+ig) = colmol(lay) * rayl(ig)
4399 end subroutine taumol26
4401 !----------------------------------------------------------------------------
4403 !----------------------------------------------------------------------------
4405 ! band 27: 29000-38000 cm-1 (low - o3; high - o3)
4407 !----------------------------------------------------------------------------
4409 ! ------- Modules -------
4411 use parrrsw, only : ng27, ngs26
4412 use rrsw_kg27, only : absa, ka, absb, kb, &
4413 sfluxref, rayl, layreffr, scalekur
4415 ! ------- Declarations -------
4419 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
4420 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
4421 fac110, fac111, fs, speccomb, specmult, specparm, &
4424 ! Compute the optical depth by interpolating in ln(pressure),
4425 ! temperature, and appropriate species. Below LAYTROP, the water
4426 ! vapor self-continuum is interpolated (in temperature) separately.
4428 ! Lower atmosphere loop
4430 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(27) + 1
4431 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(27) + 1
4434 tauray = colmol(lay) * rayl(ig)
4435 taug(lay,ngs26+ig) = colo3(lay) * &
4436 (fac00(lay) * absa(ind0,ig) + &
4437 fac10(lay) * absa(ind0+1,ig) + &
4438 fac01(lay) * absa(ind1,ig) + &
4439 fac11(lay) * absa(ind1+1,ig))
4440 ! ssa(lay,ngs26+ig) = tauray/taug(lay,ngs26+ig)
4441 taur(lay,ngs26+ig) = tauray
4447 ! Upper atmosphere loop
4448 do lay = laytrop+1, nlayers
4449 if (jp(lay-1) .lt. layreffr .and. jp(lay) .ge. layreffr) &
4451 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(27) + 1
4452 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(27) + 1
4455 tauray = colmol(lay) * rayl(ig)
4456 taug(lay,ngs26+ig) = colo3(lay) * &
4457 (fac00(lay) * absb(ind0,ig) + &
4458 fac10(lay) * absb(ind0+1,ig) + &
4459 fac01(lay) * absb(ind1,ig) + &
4460 fac11(lay) * absb(ind1+1,ig))
4461 ! ssa(lay,ngs26+ig) = tauray/taug(lay,ngs26+ig)
4462 if (lay.eq.laysolfr) sfluxzen(ngs26+ig) = scalekur * sfluxref(ig)
4463 taur(lay,ngs26+ig) = tauray
4467 end subroutine taumol27
4469 !----------------------------------------------------------------------------
4471 !----------------------------------------------------------------------------
4473 ! band 28: 38000-50000 cm-1 (low - o3,o2; high - o3,o2)
4475 !----------------------------------------------------------------------------
4477 ! ------- Modules -------
4479 use parrrsw, only : ng28, ngs27
4480 use rrsw_kg28, only : absa, ka, absb, kb, &
4481 sfluxref, rayl, layreffr, strrat
4483 ! ------- Declarations -------
4487 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
4488 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
4489 fac110, fac111, fs, speccomb, specmult, specparm, &
4492 ! Compute the optical depth by interpolating in ln(pressure),
4493 ! temperature, and appropriate species. Below LAYTROP, the water
4494 ! vapor self-continuum is interpolated (in temperature) separately.
4496 ! Lower atmosphere loop
4498 speccomb = colo3(lay) + strrat*colo2(lay)
4499 specparm = colo3(lay)/speccomb
4500 if (specparm .ge. oneminus) specparm = oneminus
4501 specmult = 8._rb*(specparm)
4502 js = 1 + int(specmult)
4503 fs = mod(specmult, 1._rb )
4504 fac000 = (1._rb - fs) * fac00(lay)
4505 fac010 = (1._rb - fs) * fac10(lay)
4506 fac100 = fs * fac00(lay)
4507 fac110 = fs * fac10(lay)
4508 fac001 = (1._rb - fs) * fac01(lay)
4509 fac011 = (1._rb - fs) * fac11(lay)
4510 fac101 = fs * fac01(lay)
4511 fac111 = fs * fac11(lay)
4512 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(28) + js
4513 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(28) + js
4514 tauray = colmol(lay) * rayl
4517 taug(lay,ngs27+ig) = speccomb * &
4518 (fac000 * absa(ind0,ig) + &
4519 fac100 * absa(ind0+1,ig) + &
4520 fac010 * absa(ind0+9,ig) + &
4521 fac110 * absa(ind0+10,ig) + &
4522 fac001 * absa(ind1,ig) + &
4523 fac101 * absa(ind1+1,ig) + &
4524 fac011 * absa(ind1+9,ig) + &
4525 fac111 * absa(ind1+10,ig))
4526 ! ssa(lay,ngs27+ig) = tauray/taug(lay,ngs27+ig)
4527 taur(lay,ngs27+ig) = tauray
4533 ! Upper atmosphere loop
4534 do lay = laytrop+1, nlayers
4535 if (jp(lay-1) .lt. layreffr .and. jp(lay) .ge. layreffr) &
4537 speccomb = colo3(lay) + strrat*colo2(lay)
4538 specparm = colo3(lay)/speccomb
4539 if (specparm .ge. oneminus) specparm = oneminus
4540 specmult = 4._rb*(specparm)
4541 js = 1 + int(specmult)
4542 fs = mod(specmult, 1._rb )
4543 fac000 = (1._rb - fs) * fac00(lay)
4544 fac010 = (1._rb - fs) * fac10(lay)
4545 fac100 = fs * fac00(lay)
4546 fac110 = fs * fac10(lay)
4547 fac001 = (1._rb - fs) * fac01(lay)
4548 fac011 = (1._rb - fs) * fac11(lay)
4549 fac101 = fs * fac01(lay)
4550 fac111 = fs * fac11(lay)
4551 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(28) + js
4552 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(28) + js
4553 tauray = colmol(lay) * rayl
4556 taug(lay,ngs27+ig) = speccomb * &
4557 (fac000 * absb(ind0,ig) + &
4558 fac100 * absb(ind0+1,ig) + &
4559 fac010 * absb(ind0+5,ig) + &
4560 fac110 * absb(ind0+6,ig) + &
4561 fac001 * absb(ind1,ig) + &
4562 fac101 * absb(ind1+1,ig) + &
4563 fac011 * absb(ind1+5,ig) + &
4564 fac111 * absb(ind1+6,ig))
4565 ! ssa(lay,ngs27+ig) = tauray/taug(lay,ngs27+ig)
4566 if (lay .eq. laysolfr) sfluxzen(ngs27+ig) = sfluxref(ig,js) &
4567 + fs * (sfluxref(ig,js+1) - sfluxref(ig,js))
4568 taur(lay,ngs27+ig) = tauray
4572 end subroutine taumol28
4574 !----------------------------------------------------------------------------
4576 !----------------------------------------------------------------------------
4578 ! band 29: 820-2600 cm-1 (low - h2o; high - co2)
4580 !----------------------------------------------------------------------------
4582 ! ------- Modules -------
4584 use parrrsw, only : ng29, ngs28
4585 use rrsw_kg29, only : absa, ka, absb, kb, forref, selfref, &
4586 sfluxref, absh2o, absco2, rayl, layreffr
4588 ! ------- Declarations -------
4592 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
4593 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
4594 fac110, fac111, fs, speccomb, specmult, specparm, &
4597 ! Compute the optical depth by interpolating in ln(pressure),
4598 ! temperature, and appropriate species. Below LAYTROP, the water
4599 ! vapor self-continuum is interpolated (in temperature) separately.
4601 ! Lower atmosphere loop
4603 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(29) + 1
4604 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(29) + 1
4607 tauray = colmol(lay) * rayl
4610 taug(lay,ngs28+ig) = colh2o(lay) * &
4611 ((fac00(lay) * absa(ind0,ig) + &
4612 fac10(lay) * absa(ind0+1,ig) + &
4613 fac01(lay) * absa(ind1,ig) + &
4614 fac11(lay) * absa(ind1+1,ig)) + &
4615 selffac(lay) * (selfref(inds,ig) + &
4617 (selfref(inds+1,ig) - selfref(inds,ig))) + &
4618 forfac(lay) * (forref(indf,ig) + &
4620 (forref(indf+1,ig) - forref(indf,ig)))) &
4621 + colco2(lay) * absco2(ig)
4622 ! ssa(lay,ngs28+ig) = tauray/taug(lay,ngs28+ig)
4623 taur(lay,ngs28+ig) = tauray
4629 ! Upper atmosphere loop
4630 do lay = laytrop+1, nlayers
4631 if (jp(lay-1) .lt. layreffr .and. jp(lay) .ge. layreffr) &
4633 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(29) + 1
4634 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(29) + 1
4635 tauray = colmol(lay) * rayl
4638 taug(lay,ngs28+ig) = colco2(lay) * &
4639 (fac00(lay) * absb(ind0,ig) + &
4640 fac10(lay) * absb(ind0+1,ig) + &
4641 fac01(lay) * absb(ind1,ig) + &
4642 fac11(lay) * absb(ind1+1,ig)) &
4643 + colh2o(lay) * absh2o(ig)
4644 ! ssa(lay,ngs28+ig) = tauray/taug(lay,ngs28+ig)
4645 if (lay .eq. laysolfr) sfluxzen(ngs28+ig) = sfluxref(ig)
4646 taur(lay,ngs28+ig) = tauray
4650 end subroutine taumol29
4652 end subroutine taumol_sw
4654 end module rrtmg_sw_taumol
4656 ! path: $Source: /cvsroot/NWP/WRFV3/phys/module_ra_rrtmg_sw.F,v $
4657 ! author: $Author: trn $
4658 ! revision: $Revision: 1.3 $
4659 ! created: $Date: 2009/04/16 19:54:22 $
4661 module rrtmg_sw_init
4663 ! --------------------------------------------------------------------------
4665 ! | Copyright 2002-2008, Atmospheric & Environmental Research, Inc. (AER). |
4666 ! | This software may be used, copied, or redistributed as long as it is |
4667 ! | not sold and this copyright notice is reproduced on each copy made. |
4668 ! | This model is provided as is without any express or implied warranties. |
4669 ! | (http://www.rtweb.aer.com/) |
4671 ! --------------------------------------------------------------------------
4673 ! ------- Modules -------
4674 use parkind, only : im => kind_im, rb => kind_rb
4676 use rrtmg_sw_setcoef, only: swatmref
4682 ! **************************************************************************
4683 subroutine rrtmg_sw_ini(cpdair)
4684 ! **************************************************************************
4686 ! Original version: Michael J. Iacono; February, 2004
4687 ! Revision for F90 formatting: M. J. Iacono, July, 2006
4689 ! This subroutine performs calculations necessary for the initialization
4690 ! of the shortwave model. Lookup tables are computed for use in the SW
4691 ! radiative transfer, and input absorption coefficient data for each
4692 ! spectral band are reduced from 224 g-point intervals to 112.
4693 ! **************************************************************************
4695 use parrrsw, only : mg, nbndsw, ngptsw
4696 use rrsw_tbl, only: ntbl, tblint, pade, bpade, tau_tbl, exp_tbl
4697 use rrsw_vsn, only: hvrini, hnamini
4699 real(kind=rb), intent(in) :: cpdair ! Specific heat capacity of dry air
4700 ! at constant pressure at 273 K
4703 ! ------- Local -------
4705 integer(kind=im) :: ibnd, igc, ig, ind, ipr
4706 integer(kind=im) :: igcsm, iprsm
4707 integer(kind=im) :: itr
4709 real(kind=rb) :: wtsum, wtsm(mg)
4710 real(kind=rb) :: tfn
4712 real(kind=rb), parameter :: expeps = 1.e-20 ! Smallest value for exponential table
4714 ! ------- Definitions -------
4715 ! Arrays for 10000-point look-up tables:
4716 ! TAU_TBL Clear-sky optical depth
4717 ! EXP_TBL Exponential lookup table for transmittance
4718 ! PADE Pade approximation constant (= 0.278)
4719 ! BPADE Inverse of the Pade approximation constant
4722 !jm not thread safe hvrini = '$Revision: 1.3 $'
4724 ! Initialize model data
4725 call swdatinit(cpdair)
4726 call swcmbdat ! g-point interval reduction data
4727 call swaerpr ! aerosol optical properties
4728 call swcldpr ! cloud optical properties
4729 call swatmref ! reference MLS profile
4730 ! Moved to module_ra_rrtmg_sw for WRF
4731 ! call sw_kgb16 ! molecular absorption coefficients
4746 ! Define exponential lookup tables for transmittance. Tau is
4747 ! computed as a function of the tau transition function, and transmittance
4748 ! is calculated as a function of tau. All tables are computed at intervals
4749 ! of 0.0001. The inverse of the constant used in the Pade approximation to
4750 ! the tau transition function is set to bpade.
4753 exp_tbl(ntbl) = expeps
4754 bpade = 1.0_rb / pade
4756 tfn = float(itr) / float(ntbl)
4757 tau_tbl = bpade * tfn / (1._rb - tfn)
4758 exp_tbl(itr) = exp(-tau_tbl)
4759 if (exp_tbl(itr) .le. expeps) exp_tbl(itr) = expeps
4762 ! Perform g-point reduction from 16 per band (224 total points) to
4763 ! a band dependent number (112 total points) for all absorption
4764 ! coefficient input data and Planck fraction input data.
4765 ! Compute relative weighting for new g-point combinations.
4770 if (ngc(ibnd).lt.mg) then
4771 do igc = 1,ngc(ibnd)
4774 do ipr = 1, ngn(igcsm)
4776 wtsum = wtsum + wt(iprsm)
4780 do ig = 1, ng(ibnd+15)
4781 ind = (ibnd-1)*mg + ig
4782 rwgt(ind) = wt(ig)/wtsm(ngm(ind))
4785 do ig = 1, ng(ibnd+15)
4787 ind = (ibnd-1)*mg + ig
4793 ! Reduce g-points for absorption coefficient data in each LW spectral band.
4810 end subroutine rrtmg_sw_ini
4812 !***************************************************************************
4813 subroutine swdatinit(cpdair)
4814 !***************************************************************************
4816 ! --------- Modules ----------
4818 use rrsw_con, only: heatfac, grav, planck, boltz, &
4819 clight, avogad, alosmt, gascon, radcn1, radcn2, &
4820 sbcnst, secdy, oneminus, pi
4825 real(kind=rb), intent(in) :: cpdair ! Specific heat capacity of dry air
4826 ! at constant pressure at 273 K
4829 ! Shortwave spectral band limits (wavenumbers)
4830 wavenum1(:) = (/2600._rb, 3250._rb, 4000._rb, 4650._rb, 5150._rb, 6150._rb, 7700._rb, &
4831 8050._rb,12850._rb,16000._rb,22650._rb,29000._rb,38000._rb, 820._rb/)
4832 wavenum2(:) = (/3250._rb, 4000._rb, 4650._rb, 5150._rb, 6150._rb, 7700._rb, 8050._rb, &
4833 12850._rb,16000._rb,22650._rb,29000._rb,38000._rb,50000._rb, 2600._rb/)
4834 delwave(:) = (/ 650._rb, 750._rb, 650._rb, 500._rb, 1000._rb, 1550._rb, 350._rb, &
4835 4800._rb, 3150._rb, 6650._rb, 6350._rb, 9000._rb,12000._rb, 1780._rb/)
4837 ! Spectral band information
4838 ng(:) = (/16,16,16,16,16,16,16,16,16,16,16,16,16,16/)
4839 nspa(:) = (/9,9,9,9,1,9,9,1,9,1,0,1,9,1/)
4840 nspb(:) = (/1,5,1,1,1,5,1,0,1,0,0,1,5,1/)
4842 ! Fundamental physical constants from NIST 2002
4844 grav = 9.8066_rb ! Acceleration of gravity
4846 planck = 6.62606876e-27_rb ! Planck constant
4847 ! (ergs s; g cm2 s-1)
4848 boltz = 1.3806503e-16_rb ! Boltzmann constant
4849 ! (ergs K-1; g cm2 s-2 K-1)
4850 clight = 2.99792458e+10_rb ! Speed of light in a vacuum
4852 avogad = 6.02214199e+23_rb ! Avogadro constant
4854 alosmt = 2.6867775e+19_rb ! Loschmidt constant
4856 gascon = 8.31447200e+07_rb ! Molar gas constant
4858 radcn1 = 1.191042772e-12_rb ! First radiation constant
4860 radcn2 = 1.4387752_rb ! Second radiation constant
4862 sbcnst = 5.670400e-04_rb ! Stefan-Boltzmann constant
4864 secdy = 8.6400e4_rb ! Number of seconds per day
4867 !jm 20141107 moved here for thread safety
4868 oneminus = 1.0_rb - 1.e-06_rb ! zepsec
4869 pi = 2._rb * asin(1._rb)
4872 ! units are generally cgs
4874 ! The first and second radiation constants are taken from NIST.
4875 ! They were previously obtained from the relations:
4876 ! radcn1 = 2.*planck*clight*clight*1.e-07
4877 ! radcn2 = planck*clight/boltz
4879 ! Heatfac is the factor by which delta-flux / delta-pressure is
4880 ! multiplied, with flux in W/m-2 and pressure in mbar, to get
4881 ! the heating rate in units of degrees/day. It is equal to:
4883 ! (g)x(#sec/day)x(1e-5)/(specific heat of air at const. p)
4884 ! Here, cpdair (1.004) is in units of J g-1 K-1, and the
4885 ! constant (1.e-5) converts mb to Pa and g-1 to kg-1.
4886 ! = (9.8066)(86400)(1e-5)/(1.004)
4887 ! heatfac = 8.4391_rb
4889 ! Modified value for consistency with CAM3:
4890 ! (g)x(#sec/day)x(1e-5)/(specific heat of air at const. p)
4891 ! Here, cpdair (1.00464) is in units of J g-1 K-1, and the
4892 ! constant (1.e-5) converts mb to Pa and g-1 to kg-1.
4893 ! = (9.80616)(86400)(1e-5)/(1.00464)
4894 ! heatfac = 8.43339130434_rb
4896 ! Calculated value (from constants above and input cpdair)
4897 ! (grav) x (#sec/day) / (specific heat of dry air at const. p x 1.e2)
4898 ! Here, cpdair is in units of J kg-1 K-1, and the constant (1.e2)
4899 ! converts mb to Pa when heatfac is multiplied by W m-2 mb-1.
4900 heatfac = grav * secdy / (cpdair * 1.e2_rb)
4902 end subroutine swdatinit
4904 !***************************************************************************
4906 !***************************************************************************
4910 ! ------- Definitions -------
4911 ! Arrays for the g-point reduction from 224 to 112 for the 16 LW bands:
4912 ! This mapping from 224 to 112 points has been carefully selected to
4913 ! minimize the effect on the resulting fluxes and cooling rates, and
4914 ! caution should be used if the mapping is modified. The full 224
4915 ! g-point set can be restored with ngpt=224, ngc=16*16, ngn=224*1., etc.
4916 ! ngpt The total number of new g-points
4917 ! ngc The number of new g-points in each band
4918 ! ngs The cumulative sum of new g-points for each band
4919 ! ngm The index of each new g-point relative to the original
4920 ! 16 g-points for each band.
4921 ! ngn The number of original g-points that are combined to make
4922 ! each new g-point in each band.
4923 ! ngb The band index for each new g-point.
4924 ! wt RRTM weights for 16 g-points.
4926 ! Use this set for 112 quadrature point (g-point) model
4927 ! ------- Data statements -------
4928 ngc(:) = (/ 6,12, 8, 8,10,10, 2,10, 8, 6, 6, 8, 6,12 /)
4929 ngs(:) = (/ 6,18,26,34,44,54,56,66,74,80,86,94,100,112 /)
4930 ngm(:) = (/ 1,1,2,2,3,3,4,4,5,5,5,5,6,6,6,6, & ! band 16
4931 1,2,3,4,5,6,6,7,8,8,9,10,10,11,12,12, & ! band 17
4932 1,2,3,4,5,5,6,6,7,7,7,7,8,8,8,8, & ! band 18
4933 1,2,3,4,5,5,6,6,7,7,7,7,8,8,8,8, & ! band 19
4934 1,2,3,4,5,6,7,8,9,9,10,10,10,10,10,10, & ! band 20
4935 1,2,3,4,5,6,7,8,9,9,10,10,10,10,10,10, & ! band 21
4936 1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2, & ! band 22
4937 1,1,2,2,3,4,5,6,7,8,9,9,10,10,10,10, & ! band 23
4938 1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8, & ! band 24
4939 1,2,3,3,4,4,5,5,5,5,6,6,6,6,6,6, & ! band 25
4940 1,2,3,3,4,4,5,5,5,5,6,6,6,6,6,6, & ! band 26
4941 1,2,3,4,5,6,7,7,7,7,8,8,8,8,8,8, & ! band 27
4942 1,2,3,3,4,4,5,5,5,5,6,6,6,6,6,6, & ! band 28
4943 1,2,3,4,5,5,6,6,7,7,8,8,9,10,11,12 /) ! band 29
4944 ngn(:) = (/ 2,2,2,2,4,4, & ! band 16
4945 1,1,1,1,1,2,1,2,1,2,1,2, & ! band 17
4946 1,1,1,1,2,2,4,4, & ! band 18
4947 1,1,1,1,2,2,4,4, & ! band 19
4948 1,1,1,1,1,1,1,1,2,6, & ! band 20
4949 1,1,1,1,1,1,1,1,2,6, & ! band 21
4951 2,2,1,1,1,1,1,1,2,4, & ! band 23
4952 2,2,2,2,2,2,2,2, & ! band 24
4953 1,1,2,2,4,6, & ! band 25
4954 1,1,2,2,4,6, & ! band 26
4955 1,1,1,1,1,1,4,6, & ! band 27
4956 1,1,2,2,4,6, & ! band 28
4957 1,1,1,1,2,2,2,2,1,1,1,1 /) ! band 29
4958 ngb(:) = (/ 16,16,16,16,16,16, & ! band 16
4959 17,17,17,17,17,17,17,17,17,17,17,17, & ! band 17
4960 18,18,18,18,18,18,18,18, & ! band 18
4961 19,19,19,19,19,19,19,19, & ! band 19
4962 20,20,20,20,20,20,20,20,20,20, & ! band 20
4963 21,21,21,21,21,21,21,21,21,21, & ! band 21
4965 23,23,23,23,23,23,23,23,23,23, & ! band 23
4966 24,24,24,24,24,24,24,24, & ! band 24
4967 25,25,25,25,25,25, & ! band 25
4968 26,26,26,26,26,26, & ! band 26
4969 27,27,27,27,27,27,27,27, & ! band 27
4970 28,28,28,28,28,28, & ! band 28
4971 29,29,29,29,29,29,29,29,29,29,29,29 /) ! band 29
4973 ! Use this set for full 224 quadrature point (g-point) model
4974 ! ------- Data statements -------
4975 ! ngc(:) = (/ 16,16,16,16,16,16,16,16,16,16,16,16,16,16 /)
4976 ! ngs(:) = (/ 16,32,48,64,80,96,112,128,144,160,176,192,208,224 /)
4977 ! ngm(:) = (/ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 16
4978 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 17
4979 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 18
4980 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 19
4981 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 20
4982 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 21
4983 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 22
4984 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 23
4985 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 24
4986 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 25
4987 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 26
4988 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 27
4989 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 28
4990 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 /) ! band 29
4991 ! ngn(:) = (/ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 16
4992 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 17
4993 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 18
4994 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 19
4995 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 20
4996 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 21
4997 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 22
4998 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 23
4999 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 24
5000 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 25
5001 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 26
5002 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 27
5003 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 28
5004 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /) ! band 29
5005 ! ngb(:) = (/ 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, & ! band 16
5006 ! 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, & ! band 17
5007 ! 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, & ! band 18
5008 ! 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19, & ! band 19
5009 ! 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, & ! band 20
5010 ! 21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21, & ! band 21
5011 ! 22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, & ! band 22
5012 ! 23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, & ! band 23
5013 ! 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, & ! band 24
5014 ! 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, & ! band 25
5015 ! 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, & ! band 26
5016 ! 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27, & ! band 27
5017 ! 28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28, & ! band 28
5018 ! 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 /) ! band 29
5021 wt(:) = (/ 0.1527534276_rb, 0.1491729617_rb, 0.1420961469_rb, &
5022 0.1316886544_rb, 0.1181945205_rb, 0.1019300893_rb, &
5023 0.0832767040_rb, 0.0626720116_rb, 0.0424925000_rb, &
5024 0.0046269894_rb, 0.0038279891_rb, 0.0030260086_rb, &
5025 0.0022199750_rb, 0.0014140010_rb, 0.0005330000_rb, &
5028 end subroutine swcmbdat
5030 !***************************************************************************
5032 !***************************************************************************
5034 ! Purpose: Define spectral aerosol properties for six ECMWF aerosol types
5035 ! as used in the ECMWF IFS model (see module rrsw_aer.F90 for details)
5037 ! Original: Defined for rrtmg_sw 14 spectral bands, JJMorcrette, ECMWF Feb 2003
5038 ! Revision: Reformatted for consistency with rrtmg_lw, MJIacono, AER, Jul 2006
5040 use rrsw_aer, only : rsrtaua, rsrpiza, rsrasya
5044 rsrtaua( 1, :) = (/ &
5045 0.10849_rb, 0.66699_rb, 0.65255_rb, 0.11600_rb, 0.06529_rb, 0.04468_rb/)
5046 rsrtaua( 2, :) = (/ &
5047 0.10849_rb, 0.66699_rb, 0.65255_rb, 0.11600_rb, 0.06529_rb, 0.04468_rb/)
5048 rsrtaua( 3, :) = (/ &
5049 0.20543_rb, 0.84642_rb, 0.84958_rb, 0.21673_rb, 0.28270_rb, 0.10915_rb/)
5050 rsrtaua( 4, :) = (/ &
5051 0.20543_rb, 0.84642_rb, 0.84958_rb, 0.21673_rb, 0.28270_rb, 0.10915_rb/)
5052 rsrtaua( 5, :) = (/ &
5053 0.20543_rb, 0.84642_rb, 0.84958_rb, 0.21673_rb, 0.28270_rb, 0.10915_rb/)
5054 rsrtaua( 6, :) = (/ &
5055 0.20543_rb, 0.84642_rb, 0.84958_rb, 0.21673_rb, 0.28270_rb, 0.10915_rb/)
5056 rsrtaua( 7, :) = (/ &
5057 0.20543_rb, 0.84642_rb, 0.84958_rb, 0.21673_rb, 0.28270_rb, 0.10915_rb/)
5058 rsrtaua( 8, :) = (/ &
5059 0.52838_rb, 0.93285_rb, 0.93449_rb, 0.53078_rb, 0.67148_rb, 0.46608_rb/)
5060 rsrtaua( 9, :) = (/ &
5061 0.52838_rb, 0.93285_rb, 0.93449_rb, 0.53078_rb, 0.67148_rb, 0.46608_rb/)
5062 rsrtaua(10, :) = (/ &
5063 1.69446_rb, 1.11855_rb, 1.09212_rb, 1.72145_rb, 1.03858_rb, 1.12044_rb/)
5064 rsrtaua(11, :) = (/ &
5065 1.69446_rb, 1.11855_rb, 1.09212_rb, 1.72145_rb, 1.03858_rb, 1.12044_rb/)
5066 rsrtaua(12, :) = (/ &
5067 1.69446_rb, 1.11855_rb, 1.09212_rb, 1.72145_rb, 1.03858_rb, 1.12044_rb/)
5068 rsrtaua(13, :) = (/ &
5069 1.69446_rb, 1.11855_rb, 1.09212_rb, 1.72145_rb, 1.03858_rb, 1.12044_rb/)
5070 rsrtaua(14, :) = (/ &
5071 0.10849_rb, 0.66699_rb, 0.65255_rb, 0.11600_rb, 0.06529_rb, 0.04468_rb/)
5073 rsrpiza( 1, :) = (/ &
5074 .5230504_rb, .7868518_rb, .8531531_rb, .4048149_rb, .8748231_rb, .2355667_rb/)
5075 rsrpiza( 2, :) = (/ &
5076 .5230504_rb, .7868518_rb, .8531531_rb, .4048149_rb, .8748231_rb, .2355667_rb/)
5077 rsrpiza( 3, :) = (/ &
5078 .8287144_rb, .9949396_rb, .9279543_rb, .6765051_rb, .9467578_rb, .9955938_rb/)
5079 rsrpiza( 4, :) = (/ &
5080 .8287144_rb, .9949396_rb, .9279543_rb, .6765051_rb, .9467578_rb, .9955938_rb/)
5081 rsrpiza( 5, :) = (/ &
5082 .8287144_rb, .9949396_rb, .9279543_rb, .6765051_rb, .9467578_rb, .9955938_rb/)
5083 rsrpiza( 6, :) = (/ &
5084 .8287144_rb, .9949396_rb, .9279543_rb, .6765051_rb, .9467578_rb, .9955938_rb/)
5085 rsrpiza( 7, :) = (/ &
5086 .8287144_rb, .9949396_rb, .9279543_rb, .6765051_rb, .9467578_rb, .9955938_rb/)
5087 rsrpiza( 8, :) = (/ &
5088 .8970131_rb, .9984940_rb, .9245594_rb, .7768385_rb, .9532763_rb, .9999999_rb/)
5089 rsrpiza( 9, :) = (/ &
5090 .8970131_rb, .9984940_rb, .9245594_rb, .7768385_rb, .9532763_rb, .9999999_rb/)
5091 rsrpiza(10, :) = (/ &
5092 .9148907_rb, .9956173_rb, .7504584_rb, .8131335_rb, .9401905_rb, .9999999_rb/)
5093 rsrpiza(11, :) = (/ &
5094 .9148907_rb, .9956173_rb, .7504584_rb, .8131335_rb, .9401905_rb, .9999999_rb/)
5095 rsrpiza(12, :) = (/ &
5096 .9148907_rb, .9956173_rb, .7504584_rb, .8131335_rb, .9401905_rb, .9999999_rb/)
5097 rsrpiza(13, :) = (/ &
5098 .9148907_rb, .9956173_rb, .7504584_rb, .8131335_rb, .9401905_rb, .9999999_rb/)
5099 rsrpiza(14, :) = (/ &
5100 .5230504_rb, .7868518_rb, .8531531_rb, .4048149_rb, .8748231_rb, .2355667_rb/)
5102 rsrasya( 1, :) = (/ &
5103 0.700610_rb, 0.818871_rb, 0.702399_rb, 0.689886_rb, .4629866_rb, .1907639_rb/)
5104 rsrasya( 2, :) = (/ &
5105 0.700610_rb, 0.818871_rb, 0.702399_rb, 0.689886_rb, .4629866_rb, .1907639_rb/)
5106 rsrasya( 3, :) = (/ &
5107 0.636342_rb, 0.802467_rb, 0.691305_rb, 0.627497_rb, .6105750_rb, .4760794_rb/)
5108 rsrasya( 4, :) = (/ &
5109 0.636342_rb, 0.802467_rb, 0.691305_rb, 0.627497_rb, .6105750_rb, .4760794_rb/)
5110 rsrasya( 5, :) = (/ &
5111 0.636342_rb, 0.802467_rb, 0.691305_rb, 0.627497_rb, .6105750_rb, .4760794_rb/)
5112 rsrasya( 6, :) = (/ &
5113 0.636342_rb, 0.802467_rb, 0.691305_rb, 0.627497_rb, .6105750_rb, .4760794_rb/)
5114 rsrasya( 7, :) = (/ &
5115 0.636342_rb, 0.802467_rb, 0.691305_rb, 0.627497_rb, .6105750_rb, .4760794_rb/)
5116 rsrasya( 8, :) = (/ &
5117 0.668431_rb, 0.788530_rb, 0.698682_rb, 0.657422_rb, .6735182_rb, .6519706_rb/)
5118 rsrasya( 9, :) = (/ &
5119 0.668431_rb, 0.788530_rb, 0.698682_rb, 0.657422_rb, .6735182_rb, .6519706_rb/)
5120 rsrasya(10, :) = (/ &
5121 0.729019_rb, 0.803129_rb, 0.784592_rb, 0.712208_rb, .7008249_rb, .7270548_rb/)
5122 rsrasya(11, :) = (/ &
5123 0.729019_rb, 0.803129_rb, 0.784592_rb, 0.712208_rb, .7008249_rb, .7270548_rb/)
5124 rsrasya(12, :) = (/ &
5125 0.729019_rb, 0.803129_rb, 0.784592_rb, 0.712208_rb, .7008249_rb, .7270548_rb/)
5126 rsrasya(13, :) = (/ &
5127 0.729019_rb, 0.803129_rb, 0.784592_rb, 0.712208_rb, .7008249_rb, .7270548_rb/)
5128 rsrasya(14, :) = (/ &
5129 0.700610_rb, 0.818871_rb, 0.702399_rb, 0.689886_rb, .4629866_rb, .1907639_rb/)
5131 end subroutine swaerpr
5133 !***************************************************************************
5135 !***************************************************************************
5137 ! Original version: MJIacono; July 1998
5138 ! Revision for RRTM_SW: MJIacono; November 2002
5139 ! Revision for RRTMG_SW: MJIacono; December 2003
5140 ! Revision for F90 reformatting: MJIacono; July 2006
5142 ! The subroutines CMBGB16->CMBGB29 input the absorption coefficient
5143 ! data for each band, which are defined for 16 g-points and 14 spectral
5144 ! bands. The data are combined with appropriate weighting following the
5145 ! g-point mapping arrays specified in RRTMG_SW_INIT. Solar source
5146 ! function data in array SFLUXREF are combined without weighting. All
5147 ! g-point reduced data are put into new arrays for use in RRTMG_SW.
5149 ! band 16: 2600-3250 cm-1 (low key- h2o,ch4; high key - ch4)
5151 !-----------------------------------------------------------------------
5153 use rrsw_kg16, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
5154 absa, ka, absb, kb, selfref, forref, sfluxref
5156 ! ------- Local -------
5157 integer(kind=im) :: jn, jt, jp, igc, ipr, iprsm
5158 real(kind=rb) :: sumk, sumf
5167 do ipr = 1, ngn(igc)
5169 sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm)
5171 ka(jn,jt,jp,igc) = sumk
5182 do ipr = 1, ngn(igc)
5184 sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm)
5186 kb(jt,jp,igc) = sumk
5195 do ipr = 1, ngn(igc)
5197 sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm)
5199 selfref(jt,igc) = sumk
5207 do ipr = 1, ngn(igc)
5209 sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm)
5211 forref(jt,igc) = sumk
5218 do ipr = 1, ngn(igc)
5220 sumf = sumf + sfluxrefo(iprsm)
5222 sfluxref(igc) = sumf
5225 end subroutine cmbgb16s
5227 !***************************************************************************
5229 !***************************************************************************
5231 ! band 17: 3250-4000 cm-1 (low - h2o,co2; high - h2o,co2)
5232 !-----------------------------------------------------------------------
5234 use rrsw_kg17, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
5235 absa, ka, absb, kb, selfref, forref, sfluxref
5237 ! ------- Local -------
5238 integer(kind=im) :: jn, jt, jp, igc, ipr, iprsm
5239 real(kind=rb) :: sumk, sumf
5248 do ipr = 1, ngn(ngs(1)+igc)
5250 sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+16)
5252 ka(jn,jt,jp,igc) = sumk
5264 do ipr = 1, ngn(ngs(1)+igc)
5266 sumk = sumk + kbo(jn,jt,jp,iprsm)*rwgt(iprsm+16)
5268 kb(jn,jt,jp,igc) = sumk
5278 do ipr = 1, ngn(ngs(1)+igc)
5280 sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+16)
5282 selfref(jt,igc) = sumk
5290 do ipr = 1, ngn(ngs(1)+igc)
5292 sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+16)
5294 forref(jt,igc) = sumk
5302 do ipr = 1, ngn(ngs(1)+igc)
5304 sumf = sumf + sfluxrefo(iprsm,jp)
5306 sfluxref(igc,jp) = sumf
5310 end subroutine cmbgb17
5312 !***************************************************************************
5314 !***************************************************************************
5316 ! band 18: 4000-4650 cm-1 (low - h2o,ch4; high - ch4)
5317 !-----------------------------------------------------------------------
5319 use rrsw_kg18, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
5320 absa, ka, absb, kb, selfref, forref, sfluxref
5322 ! ------- Local -------
5323 integer(kind=im) :: jn, jt, jp, igc, ipr, iprsm
5324 real(kind=rb) :: sumk, sumf
5333 do ipr = 1, ngn(ngs(2)+igc)
5335 sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+32)
5337 ka(jn,jt,jp,igc) = sumk
5348 do ipr = 1, ngn(ngs(2)+igc)
5350 sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+32)
5352 kb(jt,jp,igc) = sumk
5361 do ipr = 1, ngn(ngs(2)+igc)
5363 sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+32)
5365 selfref(jt,igc) = sumk
5373 do ipr = 1, ngn(ngs(2)+igc)
5375 sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+32)
5377 forref(jt,igc) = sumk
5385 do ipr = 1, ngn(ngs(2)+igc)
5387 sumf = sumf + sfluxrefo(iprsm,jp)
5389 sfluxref(igc,jp) = sumf
5393 end subroutine cmbgb18
5395 !***************************************************************************
5397 !***************************************************************************
5399 ! band 19: 4650-5150 cm-1 (low - h2o,co2; high - co2)
5400 !-----------------------------------------------------------------------
5402 use rrsw_kg19, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
5403 absa, ka, absb, kb, selfref, forref, sfluxref
5405 ! ------- Local -------
5406 integer(kind=im) :: jn, jt, jp, igc, ipr, iprsm
5407 real(kind=rb) :: sumk, sumf
5416 do ipr = 1, ngn(ngs(3)+igc)
5418 sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+48)
5420 ka(jn,jt,jp,igc) = sumk
5431 do ipr = 1, ngn(ngs(3)+igc)
5433 sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+48)
5435 kb(jt,jp,igc) = sumk
5444 do ipr = 1, ngn(ngs(3)+igc)
5446 sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+48)
5448 selfref(jt,igc) = sumk
5456 do ipr = 1, ngn(ngs(3)+igc)
5458 sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+48)
5460 forref(jt,igc) = sumk
5468 do ipr = 1, ngn(ngs(3)+igc)
5470 sumf = sumf + sfluxrefo(iprsm,jp)
5472 sfluxref(igc,jp) = sumf
5476 end subroutine cmbgb19
5478 !***************************************************************************
5480 !***************************************************************************
5482 ! band 20: 5150-6150 cm-1 (low - h2o; high - h2o)
5483 !-----------------------------------------------------------------------
5485 use rrsw_kg20, only : kao, kbo, selfrefo, forrefo, sfluxrefo, absch4o, &
5486 absa, ka, absb, kb, selfref, forref, sfluxref, absch4
5488 ! ------- Local -------
5489 integer(kind=im) :: jt, jp, igc, ipr, iprsm
5490 real(kind=rb) :: sumk, sumf1, sumf2
5498 do ipr = 1, ngn(ngs(4)+igc)
5500 sumk = sumk + kao(jt,jp,iprsm)*rwgt(iprsm+64)
5502 ka(jt,jp,igc) = sumk
5509 do ipr = 1, ngn(ngs(4)+igc)
5511 sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+64)
5513 kb(jt,jp,igc) = sumk
5522 do ipr = 1, ngn(ngs(4)+igc)
5524 sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+64)
5526 selfref(jt,igc) = sumk
5534 do ipr = 1, ngn(ngs(4)+igc)
5536 sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+64)
5538 forref(jt,igc) = sumk
5546 do ipr = 1, ngn(ngs(4)+igc)
5548 sumf1 = sumf1 + sfluxrefo(iprsm)
5549 sumf2 = sumf2 + absch4o(iprsm)*rwgt(iprsm+64)
5551 sfluxref(igc) = sumf1
5555 end subroutine cmbgb20
5557 !***************************************************************************
5559 !***************************************************************************
5561 ! band 21: 6150-7700 cm-1 (low - h2o,co2; high - h2o,co2)
5562 !-----------------------------------------------------------------------
5564 use rrsw_kg21, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
5565 absa, ka, absb, kb, selfref, forref, sfluxref
5567 ! ------- Local -------
5568 integer(kind=im) :: jn, jt, jp, igc, ipr, iprsm
5569 real(kind=rb) :: sumk, sumf
5578 do ipr = 1, ngn(ngs(5)+igc)
5580 sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+80)
5582 ka(jn,jt,jp,igc) = sumk
5594 do ipr = 1, ngn(ngs(5)+igc)
5596 sumk = sumk + kbo(jn,jt,jp,iprsm)*rwgt(iprsm+80)
5598 kb(jn,jt,jp,igc) = sumk
5608 do ipr = 1, ngn(ngs(5)+igc)
5610 sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+80)
5612 selfref(jt,igc) = sumk
5620 do ipr = 1, ngn(ngs(5)+igc)
5622 sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+80)
5624 forref(jt,igc) = sumk
5632 do ipr = 1, ngn(ngs(5)+igc)
5634 sumf = sumf + sfluxrefo(iprsm,jp)
5636 sfluxref(igc,jp) = sumf
5640 end subroutine cmbgb21
5642 !***************************************************************************
5644 !***************************************************************************
5646 ! band 22: 7700-8050 cm-1 (low - h2o,o2; high - o2)
5647 !-----------------------------------------------------------------------
5649 use rrsw_kg22, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
5650 absa, ka, absb, kb, selfref, forref, sfluxref
5652 ! ------- Local -------
5653 integer(kind=im) :: jn, jt, jp, igc, ipr, iprsm
5654 real(kind=rb) :: sumk, sumf
5663 do ipr = 1, ngn(ngs(6)+igc)
5665 sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+96)
5667 ka(jn,jt,jp,igc) = sumk
5678 do ipr = 1, ngn(ngs(6)+igc)
5680 sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+96)
5682 kb(jt,jp,igc) = sumk
5691 do ipr = 1, ngn(ngs(6)+igc)
5693 sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+96)
5695 selfref(jt,igc) = sumk
5703 do ipr = 1, ngn(ngs(6)+igc)
5705 sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+96)
5707 forref(jt,igc) = sumk
5715 do ipr = 1, ngn(ngs(6)+igc)
5717 sumf = sumf + sfluxrefo(iprsm,jp)
5719 sfluxref(igc,jp) = sumf
5723 end subroutine cmbgb22
5725 !***************************************************************************
5727 !***************************************************************************
5729 ! band 23: 8050-12850 cm-1 (low - h2o; high - nothing)
5730 !-----------------------------------------------------------------------
5732 use rrsw_kg23, only : kao, selfrefo, forrefo, sfluxrefo, raylo, &
5733 absa, ka, selfref, forref, sfluxref, rayl
5735 ! ------- Local -------
5736 integer(kind=im) :: jt, jp, igc, ipr, iprsm
5737 real(kind=rb) :: sumk, sumf1, sumf2
5745 do ipr = 1, ngn(ngs(7)+igc)
5747 sumk = sumk + kao(jt,jp,iprsm)*rwgt(iprsm+112)
5749 ka(jt,jp,igc) = sumk
5758 do ipr = 1, ngn(ngs(7)+igc)
5760 sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+112)
5762 selfref(jt,igc) = sumk
5770 do ipr = 1, ngn(ngs(7)+igc)
5772 sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+112)
5774 forref(jt,igc) = sumk
5782 do ipr = 1, ngn(ngs(7)+igc)
5784 sumf1 = sumf1 + sfluxrefo(iprsm)
5785 sumf2 = sumf2 + raylo(iprsm)*rwgt(iprsm+112)
5787 sfluxref(igc) = sumf1
5791 end subroutine cmbgb23
5793 !***************************************************************************
5795 !***************************************************************************
5797 ! band 24: 12850-16000 cm-1 (low - h2o,o2; high - o2)
5798 !-----------------------------------------------------------------------
5800 use rrsw_kg24, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
5801 abso3ao, abso3bo, raylao, raylbo, &
5802 absa, ka, absb, kb, selfref, forref, sfluxref, &
5803 abso3a, abso3b, rayla, raylb
5805 ! ------- Local -------
5806 integer(kind=im) :: jn, jt, jp, igc, ipr, iprsm
5807 real(kind=rb) :: sumk, sumf1, sumf2, sumf3
5816 do ipr = 1, ngn(ngs(8)+igc)
5818 sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+128)
5820 ka(jn,jt,jp,igc) = sumk
5831 do ipr = 1, ngn(ngs(8)+igc)
5833 sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+128)
5835 kb(jt,jp,igc) = sumk
5844 do ipr = 1, ngn(ngs(8)+igc)
5846 sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+128)
5848 selfref(jt,igc) = sumk
5856 do ipr = 1, ngn(ngs(8)+igc)
5858 sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+128)
5860 forref(jt,igc) = sumk
5869 do ipr = 1, ngn(ngs(8)+igc)
5871 sumf1 = sumf1 + raylbo(iprsm)*rwgt(iprsm+128)
5872 sumf2 = sumf2 + abso3ao(iprsm)*rwgt(iprsm+128)
5873 sumf3 = sumf3 + abso3bo(iprsm)*rwgt(iprsm+128)
5885 do ipr = 1, ngn(ngs(8)+igc)
5887 sumf1 = sumf1 + sfluxrefo(iprsm,jp)
5888 sumf2 = sumf2 + raylao(iprsm,jp)*rwgt(iprsm+128)
5890 sfluxref(igc,jp) = sumf1
5891 rayla(igc,jp) = sumf2
5895 end subroutine cmbgb24
5897 !***************************************************************************
5899 !***************************************************************************
5901 ! band 25: 16000-22650 cm-1 (low - h2o; high - nothing)
5902 !-----------------------------------------------------------------------
5904 use rrsw_kg25, only : kao, sfluxrefo, &
5905 abso3ao, abso3bo, raylo, &
5906 absa, ka, sfluxref, &
5907 abso3a, abso3b, rayl
5909 ! ------- Local -------
5910 integer(kind=im) :: jt, jp, igc, ipr, iprsm
5911 real(kind=rb) :: sumk, sumf1, sumf2, sumf3, sumf4
5919 do ipr = 1, ngn(ngs(9)+igc)
5921 sumk = sumk + kao(jt,jp,iprsm)*rwgt(iprsm+144)
5923 ka(jt,jp,igc) = sumk
5934 do ipr = 1, ngn(ngs(9)+igc)
5936 sumf1 = sumf1 + sfluxrefo(iprsm)
5937 sumf2 = sumf2 + abso3ao(iprsm)*rwgt(iprsm+144)
5938 sumf3 = sumf3 + abso3bo(iprsm)*rwgt(iprsm+144)
5939 sumf4 = sumf4 + raylo(iprsm)*rwgt(iprsm+144)
5941 sfluxref(igc) = sumf1
5947 end subroutine cmbgb25
5949 !***************************************************************************
5951 !***************************************************************************
5953 ! band 26: 22650-29000 cm-1 (low - nothing; high - nothing)
5954 !-----------------------------------------------------------------------
5956 use rrsw_kg26, only : sfluxrefo, raylo, &
5959 ! ------- Local -------
5960 integer(kind=im) :: igc, ipr, iprsm
5961 real(kind=rb) :: sumf1, sumf2
5968 do ipr = 1, ngn(ngs(10)+igc)
5970 sumf1 = sumf1 + raylo(iprsm)*rwgt(iprsm+160)
5971 sumf2 = sumf2 + sfluxrefo(iprsm)
5974 sfluxref(igc) = sumf2
5977 end subroutine cmbgb26
5979 !***************************************************************************
5981 !***************************************************************************
5983 ! band 27: 29000-38000 cm-1 (low - o3; high - o3)
5984 !-----------------------------------------------------------------------
5986 use rrsw_kg27, only : kao, kbo, sfluxrefo, raylo, &
5987 absa, ka, absb, kb, sfluxref, rayl
5989 ! ------- Local -------
5990 integer(kind=im) :: jt, jp, igc, ipr, iprsm
5991 real(kind=rb) :: sumk, sumf1, sumf2
5999 do ipr = 1, ngn(ngs(11)+igc)
6001 sumk = sumk + kao(jt,jp,iprsm)*rwgt(iprsm+176)
6003 ka(jt,jp,igc) = sumk
6010 do ipr = 1, ngn(ngs(11)+igc)
6012 sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+176)
6014 kb(jt,jp,igc) = sumk
6023 do ipr = 1, ngn(ngs(11)+igc)
6025 sumf1 = sumf1 + sfluxrefo(iprsm)
6026 sumf2 = sumf2 + raylo(iprsm)*rwgt(iprsm+176)
6028 sfluxref(igc) = sumf1
6032 end subroutine cmbgb27
6034 !***************************************************************************
6036 !***************************************************************************
6038 ! band 28: 38000-50000 cm-1 (low - o3,o2; high - o3,o2)
6039 !-----------------------------------------------------------------------
6041 use rrsw_kg28, only : kao, kbo, sfluxrefo, &
6042 absa, ka, absb, kb, sfluxref
6044 ! ------- Local -------
6045 integer(kind=im) :: jn, jt, jp, igc, ipr, iprsm
6046 real(kind=rb) :: sumk, sumf
6055 do ipr = 1, ngn(ngs(12)+igc)
6057 sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+192)
6059 ka(jn,jt,jp,igc) = sumk
6071 do ipr = 1, ngn(ngs(12)+igc)
6073 sumk = sumk + kbo(jn,jt,jp,iprsm)*rwgt(iprsm+192)
6075 kb(jn,jt,jp,igc) = sumk
6085 do ipr = 1, ngn(ngs(12)+igc)
6087 sumf = sumf + sfluxrefo(iprsm,jp)
6089 sfluxref(igc,jp) = sumf
6093 end subroutine cmbgb28
6095 !***************************************************************************
6097 !***************************************************************************
6099 ! band 29: 820-2600 cm-1 (low - h2o; high - co2)
6100 !-----------------------------------------------------------------------
6102 use rrsw_kg29, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
6104 absa, ka, absb, kb, selfref, forref, sfluxref, &
6107 ! ------- Local -------
6108 integer(kind=im) :: jt, jp, igc, ipr, iprsm
6109 real(kind=rb) :: sumk, sumf1, sumf2, sumf3
6117 do ipr = 1, ngn(ngs(13)+igc)
6119 sumk = sumk + kao(jt,jp,iprsm)*rwgt(iprsm+208)
6121 ka(jt,jp,igc) = sumk
6128 do ipr = 1, ngn(ngs(13)+igc)
6130 sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+208)
6132 kb(jt,jp,igc) = sumk
6141 do ipr = 1, ngn(ngs(13)+igc)
6143 sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+208)
6145 selfref(jt,igc) = sumk
6153 do ipr = 1, ngn(ngs(13)+igc)
6155 sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+208)
6157 forref(jt,igc) = sumk
6166 do ipr = 1, ngn(ngs(13)+igc)
6168 sumf1 = sumf1 + sfluxrefo(iprsm)
6169 sumf2 = sumf2 + absco2o(iprsm)*rwgt(iprsm+208)
6170 sumf3 = sumf3 + absh2oo(iprsm)*rwgt(iprsm+208)
6172 sfluxref(igc) = sumf1
6177 end subroutine cmbgb29
6179 !***********************************************************************
6182 ! Purpose: Define cloud extinction coefficient, single scattering albedo
6183 ! and asymmetry parameter data.
6186 ! ------- Modules -------
6188 use rrsw_cld, only : extliq1, ssaliq1, asyliq1, &
6189 extice2, ssaice2, asyice2, &
6190 extice3, ssaice3, asyice3, fdlice3, &
6191 abari, bbari, cbari, dbari, ebari, fbari
6195 !-----------------------------------------------------------------------
6197 ! Explanation of the method for each value of INFLAG. A value of
6198 ! 0 for INFLAG do not distingish being liquid and ice clouds.
6199 ! INFLAG = 2 does distinguish between liquid and ice clouds, and
6200 ! requires further user input to specify the method to be used to
6201 ! compute the aborption due to each.
6202 ! INFLAG = 0: For each cloudy layer, the cloud fraction, the cloud optical
6203 ! depth, the cloud single-scattering albedo, and the
6204 ! moments of the phase function (0:NSTREAM). Note
6205 ! that these values are delta-m scaled within this
6208 ! INFLAG = 2: For each cloudy layer, the cloud fraction, cloud
6209 ! water path (g/m2), and cloud ice fraction are input.
6210 ! ICEFLAG = 2: The ice effective radius (microns) is input and the
6211 ! optical properties due to ice clouds are computed from
6212 ! the optical properties stored in the RT code, STREAMER v3.0
6213 ! (Reference: Key. J., Streamer User's Guide, Cooperative
6214 ! Institute for Meteorological Satellite Studies, 2001, 96 pp.).
6215 ! Valid range of values for re are between 5.0 and
6217 ! This version uses Ebert and Curry, JGR, (1992) method for
6218 ! ice particles larger than 131.0 microns.
6219 ! ICEFLAG = 3: The ice generalized effective size (dge) is input
6220 ! and the optical depths, single-scattering albedo,
6221 ! and phase function moments are calculated as in
6222 ! Q. Fu, J. Climate, (1996). Q. Fu provided high resolution
6223 ! tables which were appropriately averaged for the
6224 ! bands in RRTM_SW. Linear interpolation is used to
6225 ! get the coefficients from the stored tables.
6226 ! Valid range of values for dge are between 5.0 and
6228 ! This version uses Ebert and Curry, JGR, (1992) method for
6229 ! ice particles larger than 140.0 microns.
6230 ! LIQFLAG = 1: The water droplet effective radius (microns) is input
6231 ! and the optical depths due to water clouds are computed
6232 ! as in Hu and Stamnes, J., Clim., 6, 728-742, (1993) with
6233 ! modified coefficients derived from Mie scattering calculations.
6234 ! The values for absorption coefficients appropriate for
6235 ! the spectral bands in RRTM/RRTMG have been obtained for a
6236 ! range of effective radii by an averaging procedure
6237 ! based on the work of J. Pinto (private communication).
6238 ! Linear interpolation is used to get the absorption
6239 ! coefficients for the input effective radius.
6241 !..Updated tables suggested by Peter Blossey (Univ. Washington) that came from RRTM v3.9 from AER, Inc.
6243 ! ------------------------------------------------------------------
6245 ! Everything below is for INFLAG = 2.
6247 ! Coefficients for Ebert and Curry method
6249 & 3.448e-03_rb,3.448e-03_rb,3.448e-03_rb,3.448e-03_rb,3.448e-03_rb /)
6251 & 2.431e+00_rb,2.431e+00_rb,2.431e+00_rb,2.431e+00_rb,2.431e+00_rb /)
6253 & 1.000e-05_rb,1.100e-04_rb,1.240e-02_rb,3.779e-02_rb,4.666e-01_rb /)
6255 & 0.000e+00_rb,1.405e-05_rb,6.867e-04_rb,1.284e-03_rb,2.050e-05_rb /)
6257 & 7.661e-01_rb,7.730e-01_rb,7.865e-01_rb,8.172e-01_rb,9.595e-01_rb /)
6259 & 5.851e-04_rb,5.665e-04_rb,7.204e-04_rb,7.463e-04_rb,1.076e-04_rb /)
6261 ! LIQFLAG==1 extinction coefficients, single scattering albedos, and asymmetry parameters
6262 ! Derived from on Mie scattering computations; based on Hu & Stamnes coefficients
6264 extliq1(:, 16) = (/ &
6265 & 9.004493E-01_rb,6.366723E-01_rb,4.542354E-01_rb,3.468253E-01_rb,2.816431E-01_rb,&
6266 & 2.383415E-01_rb,2.070854E-01_rb,1.831854E-01_rb,1.642115E-01_rb,1.487539E-01_rb,&
6267 & 1.359169E-01_rb,1.250900E-01_rb,1.158354E-01_rb,1.078400E-01_rb,1.008646E-01_rb,&
6268 & 9.472307E-02_rb,8.928000E-02_rb,8.442308E-02_rb,8.005924E-02_rb,7.612231E-02_rb,&
6269 & 7.255153E-02_rb,6.929539E-02_rb,6.631769E-02_rb,6.358153E-02_rb,6.106231E-02_rb,&
6270 & 5.873077E-02_rb,5.656924E-02_rb,5.455769E-02_rb,5.267846E-02_rb,5.091923E-02_rb,&
6271 & 4.926692E-02_rb,4.771154E-02_rb,4.623923E-02_rb,4.484385E-02_rb,4.351539E-02_rb,&
6272 & 4.224615E-02_rb,4.103385E-02_rb,3.986538E-02_rb,3.874077E-02_rb,3.765462E-02_rb,&
6273 & 3.660077E-02_rb,3.557384E-02_rb,3.457615E-02_rb,3.360308E-02_rb,3.265000E-02_rb,&
6274 & 3.171770E-02_rb,3.080538E-02_rb,2.990846E-02_rb,2.903000E-02_rb,2.816461E-02_rb,&
6275 & 2.731539E-02_rb,2.648231E-02_rb,2.566308E-02_rb,2.485923E-02_rb,2.407000E-02_rb,&
6276 & 2.329615E-02_rb,2.253769E-02_rb,2.179615E-02_rb /)
6278 extliq1(:, 17) = (/ &
6279 & 6.741200e-01_rb,5.390739e-01_rb,4.198767e-01_rb,3.332553e-01_rb,2.735633e-01_rb,&
6280 & 2.317727e-01_rb,2.012760e-01_rb,1.780400e-01_rb,1.596927e-01_rb,1.447980e-01_rb,&
6281 & 1.324480e-01_rb,1.220347e-01_rb,1.131327e-01_rb,1.054313e-01_rb,9.870534e-02_rb,&
6282 & 9.278200e-02_rb,8.752599e-02_rb,8.282933e-02_rb,7.860600e-02_rb,7.479133e-02_rb,&
6283 & 7.132800e-02_rb,6.816733e-02_rb,6.527401e-02_rb,6.261266e-02_rb,6.015934e-02_rb,&
6284 & 5.788867e-02_rb,5.578134e-02_rb,5.381667e-02_rb,5.198133e-02_rb,5.026067e-02_rb,&
6285 & 4.864466e-02_rb,4.712267e-02_rb,4.568066e-02_rb,4.431200e-02_rb,4.300867e-02_rb,&
6286 & 4.176600e-02_rb,4.057400e-02_rb,3.942534e-02_rb,3.832066e-02_rb,3.725068e-02_rb,&
6287 & 3.621400e-02_rb,3.520533e-02_rb,3.422333e-02_rb,3.326400e-02_rb,3.232467e-02_rb,&
6288 & 3.140535e-02_rb,3.050400e-02_rb,2.962000e-02_rb,2.875267e-02_rb,2.789800e-02_rb,&
6289 & 2.705934e-02_rb,2.623667e-02_rb,2.542667e-02_rb,2.463200e-02_rb,2.385267e-02_rb,&
6290 & 2.308667e-02_rb,2.233667e-02_rb,2.160067e-02_rb /)
6292 extliq1(:, 18) = (/ &
6293 & 9.250861e-01_rb,6.245692e-01_rb,4.347038e-01_rb,3.320208e-01_rb,2.714869e-01_rb,&
6294 & 2.309516e-01_rb,2.012592e-01_rb,1.783315e-01_rb,1.600369e-01_rb,1.451000e-01_rb,&
6295 & 1.326838e-01_rb,1.222069e-01_rb,1.132554e-01_rb,1.055146e-01_rb,9.876000e-02_rb,&
6296 & 9.281386e-02_rb,8.754000e-02_rb,8.283078e-02_rb,7.860077e-02_rb,7.477769e-02_rb,&
6297 & 7.130847e-02_rb,6.814461e-02_rb,6.524615e-02_rb,6.258462e-02_rb,6.012847e-02_rb,&
6298 & 5.785462e-02_rb,5.574231e-02_rb,5.378000e-02_rb,5.194461e-02_rb,5.022462e-02_rb,&
6299 & 4.860846e-02_rb,4.708462e-02_rb,4.564154e-02_rb,4.427462e-02_rb,4.297231e-02_rb,&
6300 & 4.172769e-02_rb,4.053693e-02_rb,3.939000e-02_rb,3.828462e-02_rb,3.721692e-02_rb,&
6301 & 3.618000e-02_rb,3.517077e-02_rb,3.418923e-02_rb,3.323077e-02_rb,3.229154e-02_rb,&
6302 & 3.137154e-02_rb,3.047154e-02_rb,2.959077e-02_rb,2.872308e-02_rb,2.786846e-02_rb,&
6303 & 2.703077e-02_rb,2.620923e-02_rb,2.540077e-02_rb,2.460615e-02_rb,2.382693e-02_rb,&
6304 & 2.306231e-02_rb,2.231231e-02_rb,2.157923e-02_rb /)
6306 extliq1(:, 19) = (/ &
6307 & 9.298960e-01_rb,5.776460e-01_rb,4.083450e-01_rb,3.211160e-01_rb,2.666390e-01_rb,&
6308 & 2.281990e-01_rb,1.993250e-01_rb,1.768080e-01_rb,1.587810e-01_rb,1.440390e-01_rb,&
6309 & 1.317720e-01_rb,1.214150e-01_rb,1.125540e-01_rb,1.048890e-01_rb,9.819600e-02_rb,&
6310 & 9.230201e-02_rb,8.706900e-02_rb,8.239698e-02_rb,7.819500e-02_rb,7.439899e-02_rb,&
6311 & 7.095300e-02_rb,6.780700e-02_rb,6.492900e-02_rb,6.228600e-02_rb,5.984600e-02_rb,&
6312 & 5.758599e-02_rb,5.549099e-02_rb,5.353801e-02_rb,5.171400e-02_rb,5.000500e-02_rb,&
6313 & 4.840000e-02_rb,4.688500e-02_rb,4.545100e-02_rb,4.409300e-02_rb,4.279700e-02_rb,&
6314 & 4.156100e-02_rb,4.037700e-02_rb,3.923800e-02_rb,3.813800e-02_rb,3.707600e-02_rb,&
6315 & 3.604500e-02_rb,3.504300e-02_rb,3.406500e-02_rb,3.310800e-02_rb,3.217700e-02_rb,&
6316 & 3.126600e-02_rb,3.036800e-02_rb,2.948900e-02_rb,2.862400e-02_rb,2.777500e-02_rb,&
6317 & 2.694200e-02_rb,2.612300e-02_rb,2.531700e-02_rb,2.452800e-02_rb,2.375100e-02_rb,&
6318 & 2.299100e-02_rb,2.224300e-02_rb,2.151201e-02_rb /)
6320 extliq1(:, 20) = (/ &
6321 & 8.780964e-01_rb,5.407031e-01_rb,3.961100e-01_rb,3.166645e-01_rb,2.640455e-01_rb,&
6322 & 2.261070e-01_rb,1.974820e-01_rb,1.751775e-01_rb,1.573415e-01_rb,1.427725e-01_rb,&
6323 & 1.306535e-01_rb,1.204195e-01_rb,1.116650e-01_rb,1.040915e-01_rb,9.747550e-02_rb,&
6324 & 9.164800e-02_rb,8.647649e-02_rb,8.185501e-02_rb,7.770200e-02_rb,7.394749e-02_rb,&
6325 & 7.053800e-02_rb,6.742700e-02_rb,6.457999e-02_rb,6.196149e-02_rb,5.954450e-02_rb,&
6326 & 5.730650e-02_rb,5.522949e-02_rb,5.329450e-02_rb,5.148500e-02_rb,4.979000e-02_rb,&
6327 & 4.819600e-02_rb,4.669301e-02_rb,4.527050e-02_rb,4.391899e-02_rb,4.263500e-02_rb,&
6328 & 4.140500e-02_rb,4.022850e-02_rb,3.909500e-02_rb,3.800199e-02_rb,3.694600e-02_rb,&
6329 & 3.592000e-02_rb,3.492250e-02_rb,3.395050e-02_rb,3.300150e-02_rb,3.207250e-02_rb,&
6330 & 3.116250e-02_rb,3.027100e-02_rb,2.939500e-02_rb,2.853500e-02_rb,2.768900e-02_rb,&
6331 & 2.686000e-02_rb,2.604350e-02_rb,2.524150e-02_rb,2.445350e-02_rb,2.368049e-02_rb,&
6332 & 2.292150e-02_rb,2.217800e-02_rb,2.144800e-02_rb /)
6334 extliq1(:, 21) = (/ &
6335 & 7.937480e-01_rb,5.123036e-01_rb,3.858181e-01_rb,3.099622e-01_rb,2.586829e-01_rb,&
6336 & 2.217587e-01_rb,1.939755e-01_rb,1.723397e-01_rb,1.550258e-01_rb,1.408600e-01_rb,&
6337 & 1.290545e-01_rb,1.190661e-01_rb,1.105039e-01_rb,1.030848e-01_rb,9.659387e-02_rb,&
6338 & 9.086775e-02_rb,8.577807e-02_rb,8.122452e-02_rb,7.712711e-02_rb,7.342193e-02_rb,&
6339 & 7.005387e-02_rb,6.697840e-02_rb,6.416000e-02_rb,6.156903e-02_rb,5.917484e-02_rb,&
6340 & 5.695807e-02_rb,5.489968e-02_rb,5.298097e-02_rb,5.118806e-02_rb,4.950645e-02_rb,&
6341 & 4.792710e-02_rb,4.643581e-02_rb,4.502484e-02_rb,4.368547e-02_rb,4.241001e-02_rb,&
6342 & 4.118936e-02_rb,4.002193e-02_rb,3.889711e-02_rb,3.781322e-02_rb,3.676387e-02_rb,&
6343 & 3.574549e-02_rb,3.475548e-02_rb,3.379033e-02_rb,3.284678e-02_rb,3.192420e-02_rb,&
6344 & 3.102032e-02_rb,3.013484e-02_rb,2.926258e-02_rb,2.840839e-02_rb,2.756742e-02_rb,&
6345 & 2.674258e-02_rb,2.593064e-02_rb,2.513258e-02_rb,2.435000e-02_rb,2.358064e-02_rb,&
6346 & 2.282581e-02_rb,2.208548e-02_rb,2.135936e-02_rb /)
6348 extliq1(:, 22) = (/ &
6349 & 7.533129e-01_rb,5.033129e-01_rb,3.811271e-01_rb,3.062757e-01_rb,2.558729e-01_rb,&
6350 & 2.196828e-01_rb,1.924372e-01_rb,1.711714e-01_rb,1.541086e-01_rb,1.401114e-01_rb,&
6351 & 1.284257e-01_rb,1.185200e-01_rb,1.100243e-01_rb,1.026529e-01_rb,9.620142e-02_rb,&
6352 & 9.050714e-02_rb,8.544428e-02_rb,8.091714e-02_rb,7.684000e-02_rb,7.315429e-02_rb,&
6353 & 6.980143e-02_rb,6.673999e-02_rb,6.394000e-02_rb,6.136000e-02_rb,5.897715e-02_rb,&
6354 & 5.677000e-02_rb,5.472285e-02_rb,5.281286e-02_rb,5.102858e-02_rb,4.935429e-02_rb,&
6355 & 4.778000e-02_rb,4.629714e-02_rb,4.489142e-02_rb,4.355857e-02_rb,4.228715e-02_rb,&
6356 & 4.107285e-02_rb,3.990857e-02_rb,3.879000e-02_rb,3.770999e-02_rb,3.666429e-02_rb,&
6357 & 3.565000e-02_rb,3.466286e-02_rb,3.370143e-02_rb,3.276143e-02_rb,3.184143e-02_rb,&
6358 & 3.094000e-02_rb,3.005714e-02_rb,2.919000e-02_rb,2.833714e-02_rb,2.750000e-02_rb,&
6359 & 2.667714e-02_rb,2.586714e-02_rb,2.507143e-02_rb,2.429143e-02_rb,2.352428e-02_rb,&
6360 & 2.277143e-02_rb,2.203429e-02_rb,2.130857e-02_rb /)
6362 extliq1(:, 23) = (/ &
6363 & 7.079894e-01_rb,4.878198e-01_rb,3.719852e-01_rb,3.001873e-01_rb,2.514795e-01_rb,&
6364 & 2.163013e-01_rb,1.897100e-01_rb,1.689033e-01_rb,1.521793e-01_rb,1.384449e-01_rb,&
6365 & 1.269666e-01_rb,1.172326e-01_rb,1.088745e-01_rb,1.016224e-01_rb,9.527085e-02_rb,&
6366 & 8.966240e-02_rb,8.467543e-02_rb,8.021144e-02_rb,7.619344e-02_rb,7.255676e-02_rb,&
6367 & 6.924996e-02_rb,6.623030e-02_rb,6.346261e-02_rb,6.091499e-02_rb,5.856325e-02_rb,&
6368 & 5.638385e-02_rb,5.435930e-02_rb,5.247156e-02_rb,5.070699e-02_rb,4.905230e-02_rb,&
6369 & 4.749499e-02_rb,4.602611e-02_rb,4.463581e-02_rb,4.331543e-02_rb,4.205647e-02_rb,&
6370 & 4.085241e-02_rb,3.969978e-02_rb,3.859033e-02_rb,3.751877e-02_rb,3.648168e-02_rb,&
6371 & 3.547468e-02_rb,3.449553e-02_rb,3.354072e-02_rb,3.260732e-02_rb,3.169438e-02_rb,&
6372 & 3.079969e-02_rb,2.992146e-02_rb,2.905875e-02_rb,2.821201e-02_rb,2.737873e-02_rb,&
6373 & 2.656052e-02_rb,2.575586e-02_rb,2.496511e-02_rb,2.418783e-02_rb,2.342500e-02_rb,&
6374 & 2.267646e-02_rb,2.194177e-02_rb,2.122146e-02_rb /)
6376 extliq1(:, 24) = (/ &
6377 & 6.850164e-01_rb,4.762468e-01_rb,3.642001e-01_rb,2.946012e-01_rb,2.472001e-01_rb,&
6378 & 2.128588e-01_rb,1.868537e-01_rb,1.664893e-01_rb,1.501142e-01_rb,1.366620e-01_rb,&
6379 & 1.254147e-01_rb,1.158721e-01_rb,1.076732e-01_rb,1.005530e-01_rb,9.431306e-02_rb,&
6380 & 8.879891e-02_rb,8.389232e-02_rb,7.949714e-02_rb,7.553857e-02_rb,7.195474e-02_rb,&
6381 & 6.869413e-02_rb,6.571444e-02_rb,6.298286e-02_rb,6.046779e-02_rb,5.814474e-02_rb,&
6382 & 5.599141e-02_rb,5.399114e-02_rb,5.212443e-02_rb,5.037870e-02_rb,4.874321e-02_rb,&
6383 & 4.720219e-02_rb,4.574813e-02_rb,4.437160e-02_rb,4.306460e-02_rb,4.181810e-02_rb,&
6384 & 4.062603e-02_rb,3.948252e-02_rb,3.838256e-02_rb,3.732049e-02_rb,3.629192e-02_rb,&
6385 & 3.529301e-02_rb,3.432190e-02_rb,3.337412e-02_rb,3.244842e-02_rb,3.154175e-02_rb,&
6386 & 3.065253e-02_rb,2.978063e-02_rb,2.892367e-02_rb,2.808221e-02_rb,2.725478e-02_rb,&
6387 & 2.644174e-02_rb,2.564175e-02_rb,2.485508e-02_rb,2.408303e-02_rb,2.332365e-02_rb,&
6388 & 2.257890e-02_rb,2.184824e-02_rb,2.113224e-02_rb /)
6390 extliq1(:, 25) = (/ &
6391 & 6.673017e-01_rb,4.664520e-01_rb,3.579398e-01_rb,2.902234e-01_rb,2.439904e-01_rb,&
6392 & 2.104149e-01_rb,1.849277e-01_rb,1.649234e-01_rb,1.488087e-01_rb,1.355515e-01_rb,&
6393 & 1.244562e-01_rb,1.150329e-01_rb,1.069321e-01_rb,9.989310e-02_rb,9.372070e-02_rb,&
6394 & 8.826450e-02_rb,8.340622e-02_rb,7.905378e-02_rb,7.513109e-02_rb,7.157859e-02_rb,&
6395 & 6.834588e-02_rb,6.539114e-02_rb,6.268150e-02_rb,6.018621e-02_rb,5.788098e-02_rb,&
6396 & 5.574351e-02_rb,5.375699e-02_rb,5.190412e-02_rb,5.017099e-02_rb,4.854497e-02_rb,&
6397 & 4.701490e-02_rb,4.557030e-02_rb,4.420249e-02_rb,4.290304e-02_rb,4.166427e-02_rb,&
6398 & 4.047820e-02_rb,3.934232e-02_rb,3.824778e-02_rb,3.719236e-02_rb,3.616931e-02_rb,&
6399 & 3.517597e-02_rb,3.420856e-02_rb,3.326566e-02_rb,3.234346e-02_rb,3.144122e-02_rb,&
6400 & 3.055684e-02_rb,2.968798e-02_rb,2.883519e-02_rb,2.799635e-02_rb,2.717228e-02_rb,&
6401 & 2.636182e-02_rb,2.556424e-02_rb,2.478114e-02_rb,2.401086e-02_rb,2.325657e-02_rb,&
6402 & 2.251506e-02_rb,2.178594e-02_rb,2.107301e-02_rb /)
6404 extliq1(:, 26) = (/ &
6405 & 6.552414e-01_rb,4.599454e-01_rb,3.538626e-01_rb,2.873547e-01_rb,2.418033e-01_rb,&
6406 & 2.086660e-01_rb,1.834885e-01_rb,1.637142e-01_rb,1.477767e-01_rb,1.346583e-01_rb,&
6407 & 1.236734e-01_rb,1.143412e-01_rb,1.063148e-01_rb,9.933905e-02_rb,9.322026e-02_rb,&
6408 & 8.780979e-02_rb,8.299230e-02_rb,7.867554e-02_rb,7.478450e-02_rb,7.126053e-02_rb,&
6409 & 6.805276e-02_rb,6.512143e-02_rb,6.243211e-02_rb,5.995541e-02_rb,5.766712e-02_rb,&
6410 & 5.554484e-02_rb,5.357246e-02_rb,5.173222e-02_rb,5.001069e-02_rb,4.839505e-02_rb,&
6411 & 4.687471e-02_rb,4.543861e-02_rb,4.407857e-02_rb,4.278577e-02_rb,4.155331e-02_rb,&
6412 & 4.037322e-02_rb,3.924302e-02_rb,3.815376e-02_rb,3.710172e-02_rb,3.608296e-02_rb,&
6413 & 3.509330e-02_rb,3.412980e-02_rb,3.319009e-02_rb,3.227106e-02_rb,3.137157e-02_rb,&
6414 & 3.048950e-02_rb,2.962365e-02_rb,2.877297e-02_rb,2.793726e-02_rb,2.711500e-02_rb,&
6415 & 2.630666e-02_rb,2.551206e-02_rb,2.473052e-02_rb,2.396287e-02_rb,2.320861e-02_rb,&
6416 & 2.246810e-02_rb,2.174162e-02_rb,2.102927e-02_rb /)
6418 extliq1(:, 27) = (/ &
6419 & 6.430901e-01_rb,4.532134e-01_rb,3.496132e-01_rb,2.844655e-01_rb,2.397347e-01_rb,&
6420 & 2.071236e-01_rb,1.822976e-01_rb,1.627640e-01_rb,1.469961e-01_rb,1.340006e-01_rb,&
6421 & 1.231069e-01_rb,1.138441e-01_rb,1.058706e-01_rb,9.893678e-02_rb,9.285166e-02_rb,&
6422 & 8.746871e-02_rb,8.267411e-02_rb,7.837656e-02_rb,7.450257e-02_rb,7.099318e-02_rb,&
6423 & 6.779929e-02_rb,6.487987e-02_rb,6.220168e-02_rb,5.973530e-02_rb,5.745636e-02_rb,&
6424 & 5.534344e-02_rb,5.337986e-02_rb,5.154797e-02_rb,4.983404e-02_rb,4.822582e-02_rb,&
6425 & 4.671228e-02_rb,4.528321e-02_rb,4.392997e-02_rb,4.264325e-02_rb,4.141647e-02_rb,&
6426 & 4.024259e-02_rb,3.911767e-02_rb,3.803309e-02_rb,3.698782e-02_rb,3.597140e-02_rb,&
6427 & 3.498774e-02_rb,3.402852e-02_rb,3.309340e-02_rb,3.217818e-02_rb,3.128292e-02_rb,&
6428 & 3.040486e-02_rb,2.954230e-02_rb,2.869545e-02_rb,2.786261e-02_rb,2.704372e-02_rb,&
6429 & 2.623813e-02_rb,2.544668e-02_rb,2.466788e-02_rb,2.390313e-02_rb,2.315136e-02_rb,&
6430 & 2.241391e-02_rb,2.168921e-02_rb,2.097903e-02_rb /)
6432 extliq1(:, 28) = (/ &
6433 & 6.367074e-01_rb,4.495768e-01_rb,3.471263e-01_rb,2.826149e-01_rb,2.382868e-01_rb,&
6434 & 2.059640e-01_rb,1.813562e-01_rb,1.619881e-01_rb,1.463436e-01_rb,1.334402e-01_rb,&
6435 & 1.226166e-01_rb,1.134096e-01_rb,1.054829e-01_rb,9.858838e-02_rb,9.253790e-02_rb,&
6436 & 8.718582e-02_rb,8.241830e-02_rb,7.814482e-02_rb,7.429212e-02_rb,7.080165e-02_rb,&
6437 & 6.762385e-02_rb,6.471838e-02_rb,6.205388e-02_rb,5.959726e-02_rb,5.732871e-02_rb,&
6438 & 5.522402e-02_rb,5.326793e-02_rb,5.144230e-02_rb,4.973440e-02_rb,4.813188e-02_rb,&
6439 & 4.662283e-02_rb,4.519798e-02_rb,4.384833e-02_rb,4.256541e-02_rb,4.134253e-02_rb,&
6440 & 4.017136e-02_rb,3.904911e-02_rb,3.796779e-02_rb,3.692364e-02_rb,3.591182e-02_rb,&
6441 & 3.492930e-02_rb,3.397230e-02_rb,3.303920e-02_rb,3.212572e-02_rb,3.123278e-02_rb,&
6442 & 3.035519e-02_rb,2.949493e-02_rb,2.864985e-02_rb,2.781840e-02_rb,2.700197e-02_rb,&
6443 & 2.619682e-02_rb,2.540674e-02_rb,2.462966e-02_rb,2.386613e-02_rb,2.311602e-02_rb,&
6444 & 2.237846e-02_rb,2.165660e-02_rb,2.094756e-02_rb /)
6446 extliq1(:, 29) = (/ &
6447 & 4.298416e-01_rb,4.391639e-01_rb,3.975030e-01_rb,3.443028e-01_rb,2.957345e-01_rb,&
6448 & 2.556461e-01_rb,2.234755e-01_rb,1.976636e-01_rb,1.767428e-01_rb,1.595611e-01_rb,&
6449 & 1.452636e-01_rb,1.332156e-01_rb,1.229481e-01_rb,1.141059e-01_rb,1.064208e-01_rb,&
6450 & 9.968527e-02_rb,9.373833e-02_rb,8.845221e-02_rb,8.372112e-02_rb,7.946667e-02_rb,&
6451 & 7.561807e-02_rb,7.212029e-02_rb,6.893166e-02_rb,6.600944e-02_rb,6.332277e-02_rb,&
6452 & 6.084277e-02_rb,5.854721e-02_rb,5.641361e-02_rb,5.442639e-02_rb,5.256750e-02_rb,&
6453 & 5.082499e-02_rb,4.918556e-02_rb,4.763694e-02_rb,4.617222e-02_rb,4.477861e-02_rb,&
6454 & 4.344861e-02_rb,4.217999e-02_rb,4.096111e-02_rb,3.978638e-02_rb,3.865361e-02_rb,&
6455 & 3.755473e-02_rb,3.649028e-02_rb,3.545361e-02_rb,3.444361e-02_rb,3.345666e-02_rb,&
6456 & 3.249167e-02_rb,3.154722e-02_rb,3.062083e-02_rb,2.971250e-02_rb,2.882083e-02_rb,&
6457 & 2.794611e-02_rb,2.708778e-02_rb,2.624500e-02_rb,2.541750e-02_rb,2.460528e-02_rb,&
6458 & 2.381194e-02_rb,2.303250e-02_rb,2.226833e-02_rb /)
6460 ssaliq1(:, 16) = (/ &
6461 & 8.362119e-01_rb,8.098460e-01_rb,7.762291e-01_rb,7.486042e-01_rb,7.294172e-01_rb,&
6462 & 7.161000e-01_rb,7.060656e-01_rb,6.978387e-01_rb,6.907193e-01_rb,6.843551e-01_rb,&
6463 & 6.785668e-01_rb,6.732450e-01_rb,6.683191e-01_rb,6.637264e-01_rb,6.594307e-01_rb,&
6464 & 6.554033e-01_rb,6.516115e-01_rb,6.480295e-01_rb,6.446429e-01_rb,6.414306e-01_rb,&
6465 & 6.383783e-01_rb,6.354750e-01_rb,6.327068e-01_rb,6.300665e-01_rb,6.275376e-01_rb,&
6466 & 6.251245e-01_rb,6.228136e-01_rb,6.205944e-01_rb,6.184720e-01_rb,6.164330e-01_rb,&
6467 & 6.144742e-01_rb,6.125962e-01_rb,6.108004e-01_rb,6.090740e-01_rb,6.074200e-01_rb,&
6468 & 6.058381e-01_rb,6.043209e-01_rb,6.028681e-01_rb,6.014836e-01_rb,6.001626e-01_rb,&
6469 & 5.988957e-01_rb,5.976864e-01_rb,5.965390e-01_rb,5.954379e-01_rb,5.943972e-01_rb,&
6470 & 5.934019e-01_rb,5.924624e-01_rb,5.915579e-01_rb,5.907025e-01_rb,5.898913e-01_rb,&
6471 & 5.891213e-01_rb,5.883815e-01_rb,5.876851e-01_rb,5.870158e-01_rb,5.863868e-01_rb,&
6472 & 5.857821e-01_rb,5.852111e-01_rb,5.846579e-01_rb /)
6474 ssaliq1(:, 17) = (/ &
6475 & 6.995459e-01_rb,7.158012e-01_rb,7.076001e-01_rb,6.927244e-01_rb,6.786434e-01_rb,&
6476 & 6.673545e-01_rb,6.585859e-01_rb,6.516314e-01_rb,6.459010e-01_rb,6.410225e-01_rb,&
6477 & 6.367574e-01_rb,6.329554e-01_rb,6.295119e-01_rb,6.263595e-01_rb,6.234462e-01_rb,&
6478 & 6.207274e-01_rb,6.181755e-01_rb,6.157678e-01_rb,6.134880e-01_rb,6.113173e-01_rb,&
6479 & 6.092495e-01_rb,6.072689e-01_rb,6.053717e-01_rb,6.035507e-01_rb,6.018001e-01_rb,&
6480 & 6.001134e-01_rb,5.984951e-01_rb,5.969294e-01_rb,5.954256e-01_rb,5.939698e-01_rb,&
6481 & 5.925716e-01_rb,5.912265e-01_rb,5.899270e-01_rb,5.886771e-01_rb,5.874746e-01_rb,&
6482 & 5.863185e-01_rb,5.852077e-01_rb,5.841460e-01_rb,5.831249e-01_rb,5.821474e-01_rb,&
6483 & 5.812078e-01_rb,5.803173e-01_rb,5.794616e-01_rb,5.786443e-01_rb,5.778617e-01_rb,&
6484 & 5.771236e-01_rb,5.764191e-01_rb,5.757400e-01_rb,5.750971e-01_rb,5.744842e-01_rb,&
6485 & 5.739012e-01_rb,5.733482e-01_rb,5.728175e-01_rb,5.723214e-01_rb,5.718383e-01_rb,&
6486 & 5.713827e-01_rb,5.709471e-01_rb,5.705330e-01_rb /)
6488 ssaliq1(:, 18) = (/ &
6489 & 9.929711e-01_rb,9.896942e-01_rb,9.852408e-01_rb,9.806820e-01_rb,9.764512e-01_rb,&
6490 & 9.725375e-01_rb,9.688677e-01_rb,9.653832e-01_rb,9.620552e-01_rb,9.588522e-01_rb,&
6491 & 9.557475e-01_rb,9.527265e-01_rb,9.497731e-01_rb,9.468756e-01_rb,9.440270e-01_rb,&
6492 & 9.412230e-01_rb,9.384592e-01_rb,9.357287e-01_rb,9.330369e-01_rb,9.303778e-01_rb,&
6493 & 9.277502e-01_rb,9.251546e-01_rb,9.225907e-01_rb,9.200553e-01_rb,9.175521e-01_rb,&
6494 & 9.150773e-01_rb,9.126352e-01_rb,9.102260e-01_rb,9.078485e-01_rb,9.055057e-01_rb,&
6495 & 9.031978e-01_rb,9.009306e-01_rb,8.987010e-01_rb,8.965177e-01_rb,8.943774e-01_rb,&
6496 & 8.922869e-01_rb,8.902430e-01_rb,8.882551e-01_rb,8.863182e-01_rb,8.844373e-01_rb,&
6497 & 8.826143e-01_rb,8.808499e-01_rb,8.791413e-01_rb,8.774940e-01_rb,8.759019e-01_rb,&
6498 & 8.743650e-01_rb,8.728941e-01_rb,8.714712e-01_rb,8.701065e-01_rb,8.688008e-01_rb,&
6499 & 8.675409e-01_rb,8.663295e-01_rb,8.651714e-01_rb,8.640637e-01_rb,8.629943e-01_rb,&
6500 & 8.619762e-01_rb,8.609995e-01_rb,8.600581e-01_rb /)
6502 ssaliq1(:, 19) = (/ &
6503 & 9.910612e-01_rb,9.854226e-01_rb,9.795008e-01_rb,9.742920e-01_rb,9.695996e-01_rb,&
6504 & 9.652274e-01_rb,9.610648e-01_rb,9.570521e-01_rb,9.531397e-01_rb,9.493086e-01_rb,&
6505 & 9.455413e-01_rb,9.418362e-01_rb,9.381902e-01_rb,9.346016e-01_rb,9.310718e-01_rb,&
6506 & 9.275957e-01_rb,9.241757e-01_rb,9.208038e-01_rb,9.174802e-01_rb,9.142058e-01_rb,&
6507 & 9.109753e-01_rb,9.077895e-01_rb,9.046433e-01_rb,9.015409e-01_rb,8.984784e-01_rb,&
6508 & 8.954572e-01_rb,8.924748e-01_rb,8.895367e-01_rb,8.866395e-01_rb,8.837864e-01_rb,&
6509 & 8.809819e-01_rb,8.782267e-01_rb,8.755231e-01_rb,8.728712e-01_rb,8.702802e-01_rb,&
6510 & 8.677443e-01_rb,8.652733e-01_rb,8.628678e-01_rb,8.605300e-01_rb,8.582593e-01_rb,&
6511 & 8.560596e-01_rb,8.539352e-01_rb,8.518782e-01_rb,8.498915e-01_rb,8.479790e-01_rb,&
6512 & 8.461384e-01_rb,8.443645e-01_rb,8.426613e-01_rb,8.410229e-01_rb,8.394495e-01_rb,&
6513 & 8.379428e-01_rb,8.364967e-01_rb,8.351117e-01_rb,8.337820e-01_rb,8.325091e-01_rb,&
6514 & 8.312874e-01_rb,8.301169e-01_rb,8.289985e-01_rb /)
6516 ssaliq1(:, 20) = (/ &
6517 & 9.969802e-01_rb,9.950445e-01_rb,9.931448e-01_rb,9.914272e-01_rb,9.898652e-01_rb,&
6518 & 9.884250e-01_rb,9.870637e-01_rb,9.857482e-01_rb,9.844558e-01_rb,9.831755e-01_rb,&
6519 & 9.819068e-01_rb,9.806477e-01_rb,9.794000e-01_rb,9.781666e-01_rb,9.769461e-01_rb,&
6520 & 9.757386e-01_rb,9.745459e-01_rb,9.733650e-01_rb,9.721953e-01_rb,9.710398e-01_rb,&
6521 & 9.698936e-01_rb,9.687583e-01_rb,9.676334e-01_rb,9.665192e-01_rb,9.654132e-01_rb,&
6522 & 9.643208e-01_rb,9.632374e-01_rb,9.621625e-01_rb,9.611003e-01_rb,9.600518e-01_rb,&
6523 & 9.590144e-01_rb,9.579922e-01_rb,9.569864e-01_rb,9.559948e-01_rb,9.550239e-01_rb,&
6524 & 9.540698e-01_rb,9.531382e-01_rb,9.522280e-01_rb,9.513409e-01_rb,9.504772e-01_rb,&
6525 & 9.496360e-01_rb,9.488220e-01_rb,9.480327e-01_rb,9.472693e-01_rb,9.465333e-01_rb,&
6526 & 9.458211e-01_rb,9.451344e-01_rb,9.444732e-01_rb,9.438372e-01_rb,9.432268e-01_rb,&
6527 & 9.426391e-01_rb,9.420757e-01_rb,9.415308e-01_rb,9.410102e-01_rb,9.405115e-01_rb,&
6528 & 9.400326e-01_rb,9.395716e-01_rb,9.391313e-01_rb /)
6530 ssaliq1(:, 21) = (/ &
6531 & 9.980034e-01_rb,9.968572e-01_rb,9.958696e-01_rb,9.949747e-01_rb,9.941241e-01_rb,&
6532 & 9.933043e-01_rb,9.924971e-01_rb,9.916978e-01_rb,9.909023e-01_rb,9.901046e-01_rb,&
6533 & 9.893087e-01_rb,9.885146e-01_rb,9.877195e-01_rb,9.869283e-01_rb,9.861379e-01_rb,&
6534 & 9.853523e-01_rb,9.845715e-01_rb,9.837945e-01_rb,9.830217e-01_rb,9.822567e-01_rb,&
6535 & 9.814935e-01_rb,9.807356e-01_rb,9.799815e-01_rb,9.792332e-01_rb,9.784845e-01_rb,&
6536 & 9.777424e-01_rb,9.770042e-01_rb,9.762695e-01_rb,9.755416e-01_rb,9.748152e-01_rb,&
6537 & 9.740974e-01_rb,9.733873e-01_rb,9.726813e-01_rb,9.719861e-01_rb,9.713010e-01_rb,&
6538 & 9.706262e-01_rb,9.699647e-01_rb,9.693144e-01_rb,9.686794e-01_rb,9.680596e-01_rb,&
6539 & 9.674540e-01_rb,9.668657e-01_rb,9.662926e-01_rb,9.657390e-01_rb,9.652019e-01_rb,&
6540 & 9.646820e-01_rb,9.641784e-01_rb,9.636945e-01_rb,9.632260e-01_rb,9.627743e-01_rb,&
6541 & 9.623418e-01_rb,9.619227e-01_rb,9.615194e-01_rb,9.611341e-01_rb,9.607629e-01_rb,&
6542 & 9.604057e-01_rb,9.600622e-01_rb,9.597322e-01_rb /)
6544 ssaliq1(:, 22) = (/ &
6545 & 9.988219e-01_rb,9.981767e-01_rb,9.976168e-01_rb,9.971066e-01_rb,9.966195e-01_rb,&
6546 & 9.961566e-01_rb,9.956995e-01_rb,9.952481e-01_rb,9.947982e-01_rb,9.943495e-01_rb,&
6547 & 9.938955e-01_rb,9.934368e-01_rb,9.929825e-01_rb,9.925239e-01_rb,9.920653e-01_rb,&
6548 & 9.916096e-01_rb,9.911552e-01_rb,9.907067e-01_rb,9.902594e-01_rb,9.898178e-01_rb,&
6549 & 9.893791e-01_rb,9.889453e-01_rb,9.885122e-01_rb,9.880837e-01_rb,9.876567e-01_rb,&
6550 & 9.872331e-01_rb,9.868121e-01_rb,9.863938e-01_rb,9.859790e-01_rb,9.855650e-01_rb,&
6551 & 9.851548e-01_rb,9.847491e-01_rb,9.843496e-01_rb,9.839521e-01_rb,9.835606e-01_rb,&
6552 & 9.831771e-01_rb,9.827975e-01_rb,9.824292e-01_rb,9.820653e-01_rb,9.817124e-01_rb,&
6553 & 9.813644e-01_rb,9.810291e-01_rb,9.807020e-01_rb,9.803864e-01_rb,9.800782e-01_rb,&
6554 & 9.797821e-01_rb,9.794958e-01_rb,9.792179e-01_rb,9.789509e-01_rb,9.786940e-01_rb,&
6555 & 9.784460e-01_rb,9.782090e-01_rb,9.779789e-01_rb,9.777553e-01_rb,9.775425e-01_rb,&
6556 & 9.773387e-01_rb,9.771420e-01_rb,9.769529e-01_rb /)
6558 ssaliq1(:, 23) = (/ &
6559 & 9.998902e-01_rb,9.998395e-01_rb,9.997915e-01_rb,9.997442e-01_rb,9.997016e-01_rb,&
6560 & 9.996600e-01_rb,9.996200e-01_rb,9.995806e-01_rb,9.995411e-01_rb,9.995005e-01_rb,&
6561 & 9.994589e-01_rb,9.994178e-01_rb,9.993766e-01_rb,9.993359e-01_rb,9.992948e-01_rb,&
6562 & 9.992533e-01_rb,9.992120e-01_rb,9.991723e-01_rb,9.991313e-01_rb,9.990906e-01_rb,&
6563 & 9.990510e-01_rb,9.990113e-01_rb,9.989716e-01_rb,9.989323e-01_rb,9.988923e-01_rb,&
6564 & 9.988532e-01_rb,9.988140e-01_rb,9.987761e-01_rb,9.987373e-01_rb,9.986989e-01_rb,&
6565 & 9.986597e-01_rb,9.986239e-01_rb,9.985861e-01_rb,9.985485e-01_rb,9.985123e-01_rb,&
6566 & 9.984762e-01_rb,9.984415e-01_rb,9.984065e-01_rb,9.983722e-01_rb,9.983398e-01_rb,&
6567 & 9.983078e-01_rb,9.982758e-01_rb,9.982461e-01_rb,9.982157e-01_rb,9.981872e-01_rb,&
6568 & 9.981595e-01_rb,9.981324e-01_rb,9.981068e-01_rb,9.980811e-01_rb,9.980580e-01_rb,&
6569 & 9.980344e-01_rb,9.980111e-01_rb,9.979908e-01_rb,9.979690e-01_rb,9.979492e-01_rb,&
6570 & 9.979316e-01_rb,9.979116e-01_rb,9.978948e-01_rb /)
6572 ssaliq1(:, 24) = (/ &
6573 & 9.999978e-01_rb,9.999948e-01_rb,9.999915e-01_rb,9.999905e-01_rb,9.999896e-01_rb,&
6574 & 9.999887e-01_rb,9.999888e-01_rb,9.999888e-01_rb,9.999870e-01_rb,9.999854e-01_rb,&
6575 & 9.999855e-01_rb,9.999856e-01_rb,9.999839e-01_rb,9.999834e-01_rb,9.999829e-01_rb,&
6576 & 9.999809e-01_rb,9.999816e-01_rb,9.999793e-01_rb,9.999782e-01_rb,9.999779e-01_rb,&
6577 & 9.999772e-01_rb,9.999764e-01_rb,9.999756e-01_rb,9.999744e-01_rb,9.999744e-01_rb,&
6578 & 9.999736e-01_rb,9.999729e-01_rb,9.999716e-01_rb,9.999706e-01_rb,9.999692e-01_rb,&
6579 & 9.999690e-01_rb,9.999675e-01_rb,9.999673e-01_rb,9.999660e-01_rb,9.999654e-01_rb,&
6580 & 9.999647e-01_rb,9.999647e-01_rb,9.999625e-01_rb,9.999620e-01_rb,9.999614e-01_rb,&
6581 & 9.999613e-01_rb,9.999607e-01_rb,9.999604e-01_rb,9.999594e-01_rb,9.999589e-01_rb,&
6582 & 9.999586e-01_rb,9.999567e-01_rb,9.999550e-01_rb,9.999557e-01_rb,9.999542e-01_rb,&
6583 & 9.999546e-01_rb,9.999539e-01_rb,9.999536e-01_rb,9.999526e-01_rb,9.999523e-01_rb,&
6584 & 9.999508e-01_rb,9.999534e-01_rb,9.999507e-01_rb /)
6586 ssaliq1(:, 25) = (/ &
6587 & 1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,&
6588 & 1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,&
6589 & 1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,&
6590 & 1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,9.999995e-01_rb,&
6591 & 9.999995e-01_rb,9.999990e-01_rb,9.999991e-01_rb,9.999991e-01_rb,9.999990e-01_rb,&
6592 & 9.999989e-01_rb,9.999988e-01_rb,9.999988e-01_rb,9.999986e-01_rb,9.999988e-01_rb,&
6593 & 9.999986e-01_rb,9.999987e-01_rb,9.999986e-01_rb,9.999985e-01_rb,9.999985e-01_rb,&
6594 & 9.999985e-01_rb,9.999985e-01_rb,9.999983e-01_rb,9.999983e-01_rb,9.999981e-01_rb,&
6595 & 9.999981e-01_rb,9.999986e-01_rb,9.999985e-01_rb,9.999983e-01_rb,9.999984e-01_rb,&
6596 & 9.999982e-01_rb,9.999983e-01_rb,9.999982e-01_rb,9.999980e-01_rb,9.999981e-01_rb,&
6597 & 9.999978e-01_rb,9.999979e-01_rb,9.999985e-01_rb,9.999985e-01_rb,9.999983e-01_rb,&
6598 & 9.999983e-01_rb,9.999983e-01_rb,9.999983e-01_rb /)
6600 ssaliq1(:, 26) = (/ &
6601 & 1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,&
6602 & 1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,&
6603 & 1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,&
6604 & 1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,1.000000e+00_rb,9.999991e-01_rb,&
6605 & 9.999990e-01_rb,9.999992e-01_rb,9.999995e-01_rb,9.999986e-01_rb,9.999994e-01_rb,&
6606 & 9.999985e-01_rb,9.999980e-01_rb,9.999984e-01_rb,9.999983e-01_rb,9.999979e-01_rb,&
6607 & 9.999969e-01_rb,9.999977e-01_rb,9.999971e-01_rb,9.999969e-01_rb,9.999969e-01_rb,&
6608 & 9.999965e-01_rb,9.999970e-01_rb,9.999985e-01_rb,9.999973e-01_rb,9.999961e-01_rb,&
6609 & 9.999968e-01_rb,9.999952e-01_rb,9.999970e-01_rb,9.999974e-01_rb,9.999965e-01_rb,&
6610 & 9.999969e-01_rb,9.999970e-01_rb,9.999970e-01_rb,9.999960e-01_rb,9.999923e-01_rb,&
6611 & 9.999958e-01_rb,9.999937e-01_rb,9.999960e-01_rb,9.999953e-01_rb,9.999946e-01_rb,&
6612 & 9.999946e-01_rb,9.999957e-01_rb,9.999951e-01_rb /)
6614 ssaliq1(:, 27) = (/ &
6615 & 1.000000e+00_rb,1.000000e+00_rb,9.999983e-01_rb,9.999979e-01_rb,9.999965e-01_rb,&
6616 & 9.999949e-01_rb,9.999948e-01_rb,9.999918e-01_rb,9.999917e-01_rb,9.999923e-01_rb,&
6617 & 9.999908e-01_rb,9.999889e-01_rb,9.999902e-01_rb,9.999895e-01_rb,9.999881e-01_rb,&
6618 & 9.999882e-01_rb,9.999876e-01_rb,9.999866e-01_rb,9.999866e-01_rb,9.999858e-01_rb,&
6619 & 9.999860e-01_rb,9.999852e-01_rb,9.999836e-01_rb,9.999831e-01_rb,9.999818e-01_rb,&
6620 & 9.999808e-01_rb,9.999816e-01_rb,9.999800e-01_rb,9.999783e-01_rb,9.999780e-01_rb,&
6621 & 9.999763e-01_rb,9.999746e-01_rb,9.999731e-01_rb,9.999713e-01_rb,9.999762e-01_rb,&
6622 & 9.999740e-01_rb,9.999670e-01_rb,9.999703e-01_rb,9.999687e-01_rb,9.999666e-01_rb,&
6623 & 9.999683e-01_rb,9.999667e-01_rb,9.999611e-01_rb,9.999635e-01_rb,9.999600e-01_rb,&
6624 & 9.999635e-01_rb,9.999594e-01_rb,9.999601e-01_rb,9.999586e-01_rb,9.999559e-01_rb,&
6625 & 9.999569e-01_rb,9.999558e-01_rb,9.999523e-01_rb,9.999535e-01_rb,9.999529e-01_rb,&
6626 & 9.999553e-01_rb,9.999495e-01_rb,9.999490e-01_rb /)
6628 ssaliq1(:, 28) = (/ &
6629 & 9.999920e-01_rb,9.999873e-01_rb,9.999855e-01_rb,9.999832e-01_rb,9.999807e-01_rb,&
6630 & 9.999778e-01_rb,9.999754e-01_rb,9.999721e-01_rb,9.999692e-01_rb,9.999651e-01_rb,&
6631 & 9.999621e-01_rb,9.999607e-01_rb,9.999567e-01_rb,9.999546e-01_rb,9.999521e-01_rb,&
6632 & 9.999491e-01_rb,9.999457e-01_rb,9.999439e-01_rb,9.999403e-01_rb,9.999374e-01_rb,&
6633 & 9.999353e-01_rb,9.999315e-01_rb,9.999282e-01_rb,9.999244e-01_rb,9.999234e-01_rb,&
6634 & 9.999189e-01_rb,9.999130e-01_rb,9.999117e-01_rb,9.999073e-01_rb,9.999020e-01_rb,&
6635 & 9.998993e-01_rb,9.998987e-01_rb,9.998922e-01_rb,9.998893e-01_rb,9.998869e-01_rb,&
6636 & 9.998805e-01_rb,9.998778e-01_rb,9.998751e-01_rb,9.998708e-01_rb,9.998676e-01_rb,&
6637 & 9.998624e-01_rb,9.998642e-01_rb,9.998582e-01_rb,9.998547e-01_rb,9.998546e-01_rb,&
6638 & 9.998477e-01_rb,9.998487e-01_rb,9.998466e-01_rb,9.998403e-01_rb,9.998412e-01_rb,&
6639 & 9.998406e-01_rb,9.998342e-01_rb,9.998326e-01_rb,9.998333e-01_rb,9.998328e-01_rb,&
6640 & 9.998290e-01_rb,9.998276e-01_rb,9.998249e-01_rb /)
6642 ssaliq1(:, 29) = (/ &
6643 & 8.383753e-01_rb,8.461471e-01_rb,8.373325e-01_rb,8.212889e-01_rb,8.023834e-01_rb,&
6644 & 7.829501e-01_rb,7.641777e-01_rb,7.466000e-01_rb,7.304023e-01_rb,7.155998e-01_rb,&
6645 & 7.021259e-01_rb,6.898840e-01_rb,6.787615e-01_rb,6.686479e-01_rb,6.594414e-01_rb,&
6646 & 6.510417e-01_rb,6.433668e-01_rb,6.363335e-01_rb,6.298788e-01_rb,6.239398e-01_rb,&
6647 & 6.184633e-01_rb,6.134055e-01_rb,6.087228e-01_rb,6.043786e-01_rb,6.003439e-01_rb,&
6648 & 5.965910e-01_rb,5.930917e-01_rb,5.898280e-01_rb,5.867798e-01_rb,5.839264e-01_rb,&
6649 & 5.812576e-01_rb,5.787592e-01_rb,5.764163e-01_rb,5.742189e-01_rb,5.721598e-01_rb,&
6650 & 5.702286e-01_rb,5.684182e-01_rb,5.667176e-01_rb,5.651237e-01_rb,5.636253e-01_rb,&
6651 & 5.622228e-01_rb,5.609074e-01_rb,5.596713e-01_rb,5.585089e-01_rb,5.574223e-01_rb,&
6652 & 5.564002e-01_rb,5.554411e-01_rb,5.545397e-01_rb,5.536914e-01_rb,5.528967e-01_rb,&
6653 & 5.521495e-01_rb,5.514457e-01_rb,5.507818e-01_rb,5.501623e-01_rb,5.495750e-01_rb,&
6654 & 5.490192e-01_rb,5.484980e-01_rb,5.480046e-01_rb /)
6656 asyliq1(:, 16) = (/ &
6657 & 8.038165e-01_rb,8.014154e-01_rb,7.942381e-01_rb,7.970521e-01_rb,8.086621e-01_rb,&
6658 & 8.233392e-01_rb,8.374127e-01_rb,8.495742e-01_rb,8.596945e-01_rb,8.680497e-01_rb,&
6659 & 8.750005e-01_rb,8.808589e-01_rb,8.858749e-01_rb,8.902403e-01_rb,8.940939e-01_rb,&
6660 & 8.975379e-01_rb,9.006450e-01_rb,9.034741e-01_rb,9.060659e-01_rb,9.084561e-01_rb,&
6661 & 9.106675e-01_rb,9.127198e-01_rb,9.146332e-01_rb,9.164194e-01_rb,9.180970e-01_rb,&
6662 & 9.196658e-01_rb,9.211421e-01_rb,9.225352e-01_rb,9.238443e-01_rb,9.250841e-01_rb,&
6663 & 9.262541e-01_rb,9.273620e-01_rb,9.284081e-01_rb,9.294002e-01_rb,9.303395e-01_rb,&
6664 & 9.312285e-01_rb,9.320715e-01_rb,9.328716e-01_rb,9.336271e-01_rb,9.343427e-01_rb,&
6665 & 9.350219e-01_rb,9.356647e-01_rb,9.362728e-01_rb,9.368495e-01_rb,9.373956e-01_rb,&
6666 & 9.379113e-01_rb,9.383987e-01_rb,9.388608e-01_rb,9.392986e-01_rb,9.397132e-01_rb,&
6667 & 9.401063e-01_rb,9.404776e-01_rb,9.408299e-01_rb,9.411641e-01_rb,9.414800e-01_rb,&
6668 & 9.417787e-01_rb,9.420633e-01_rb,9.423364e-01_rb /)
6670 asyliq1(:, 17) = (/ &
6671 & 8.941000e-01_rb,9.054049e-01_rb,9.049510e-01_rb,9.027216e-01_rb,9.021636e-01_rb,&
6672 & 9.037878e-01_rb,9.069852e-01_rb,9.109817e-01_rb,9.152013e-01_rb,9.193040e-01_rb,&
6673 & 9.231177e-01_rb,9.265712e-01_rb,9.296606e-01_rb,9.324048e-01_rb,9.348419e-01_rb,&
6674 & 9.370131e-01_rb,9.389529e-01_rb,9.406954e-01_rb,9.422727e-01_rb,9.437088e-01_rb,&
6675 & 9.450221e-01_rb,9.462308e-01_rb,9.473488e-01_rb,9.483830e-01_rb,9.493492e-01_rb,&
6676 & 9.502541e-01_rb,9.510999e-01_rb,9.518971e-01_rb,9.526455e-01_rb,9.533554e-01_rb,&
6677 & 9.540249e-01_rb,9.546571e-01_rb,9.552551e-01_rb,9.558258e-01_rb,9.563603e-01_rb,&
6678 & 9.568713e-01_rb,9.573569e-01_rb,9.578141e-01_rb,9.582485e-01_rb,9.586604e-01_rb,&
6679 & 9.590525e-01_rb,9.594218e-01_rb,9.597710e-01_rb,9.601052e-01_rb,9.604181e-01_rb,&
6680 & 9.607159e-01_rb,9.609979e-01_rb,9.612655e-01_rb,9.615184e-01_rb,9.617564e-01_rb,&
6681 & 9.619860e-01_rb,9.622009e-01_rb,9.624031e-01_rb,9.625957e-01_rb,9.627792e-01_rb,&
6682 & 9.629530e-01_rb,9.631171e-01_rb,9.632746e-01_rb /)
6684 asyliq1(:, 18) = (/ &
6685 & 8.574638e-01_rb,8.351383e-01_rb,8.142977e-01_rb,8.083068e-01_rb,8.129284e-01_rb,&
6686 & 8.215827e-01_rb,8.307238e-01_rb,8.389963e-01_rb,8.460481e-01_rb,8.519273e-01_rb,&
6687 & 8.568153e-01_rb,8.609116e-01_rb,8.643892e-01_rb,8.673941e-01_rb,8.700248e-01_rb,&
6688 & 8.723707e-01_rb,8.744902e-01_rb,8.764240e-01_rb,8.782057e-01_rb,8.798593e-01_rb,&
6689 & 8.814063e-01_rb,8.828573e-01_rb,8.842261e-01_rb,8.855196e-01_rb,8.867497e-01_rb,&
6690 & 8.879164e-01_rb,8.890316e-01_rb,8.900941e-01_rb,8.911118e-01_rb,8.920832e-01_rb,&
6691 & 8.930156e-01_rb,8.939091e-01_rb,8.947663e-01_rb,8.955888e-01_rb,8.963786e-01_rb,&
6692 & 8.971350e-01_rb,8.978617e-01_rb,8.985590e-01_rb,8.992243e-01_rb,8.998631e-01_rb,&
6693 & 9.004753e-01_rb,9.010602e-01_rb,9.016192e-01_rb,9.021542e-01_rb,9.026644e-01_rb,&
6694 & 9.031535e-01_rb,9.036194e-01_rb,9.040656e-01_rb,9.044894e-01_rb,9.048933e-01_rb,&
6695 & 9.052789e-01_rb,9.056481e-01_rb,9.060004e-01_rb,9.063343e-01_rb,9.066544e-01_rb,&
6696 & 9.069604e-01_rb,9.072512e-01_rb,9.075290e-01_rb /)
6698 asyliq1(:, 19) = (/ &
6699 & 8.349569e-01_rb,8.034579e-01_rb,7.932136e-01_rb,8.010156e-01_rb,8.137083e-01_rb,&
6700 & 8.255339e-01_rb,8.351938e-01_rb,8.428286e-01_rb,8.488944e-01_rb,8.538187e-01_rb,&
6701 & 8.579255e-01_rb,8.614473e-01_rb,8.645338e-01_rb,8.672908e-01_rb,8.697947e-01_rb,&
6702 & 8.720843e-01_rb,8.742015e-01_rb,8.761718e-01_rb,8.780160e-01_rb,8.797479e-01_rb,&
6703 & 8.813810e-01_rb,8.829250e-01_rb,8.843907e-01_rb,8.857822e-01_rb,8.871059e-01_rb,&
6704 & 8.883724e-01_rb,8.895810e-01_rb,8.907384e-01_rb,8.918456e-01_rb,8.929083e-01_rb,&
6705 & 8.939284e-01_rb,8.949060e-01_rb,8.958463e-01_rb,8.967486e-01_rb,8.976129e-01_rb,&
6706 & 8.984463e-01_rb,8.992439e-01_rb,9.000094e-01_rb,9.007438e-01_rb,9.014496e-01_rb,&
6707 & 9.021235e-01_rb,9.027699e-01_rb,9.033859e-01_rb,9.039772e-01_rb,9.045419e-01_rb,&
6708 & 9.050819e-01_rb,9.055975e-01_rb,9.060907e-01_rb,9.065607e-01_rb,9.070093e-01_rb,&
6709 & 9.074389e-01_rb,9.078475e-01_rb,9.082388e-01_rb,9.086117e-01_rb,9.089678e-01_rb,&
6710 & 9.093081e-01_rb,9.096307e-01_rb,9.099410e-01_rb /)
6712 asyliq1(:, 20) = (/ &
6713 & 8.109692e-01_rb,7.846657e-01_rb,7.881928e-01_rb,8.009509e-01_rb,8.131208e-01_rb,&
6714 & 8.230400e-01_rb,8.309448e-01_rb,8.372920e-01_rb,8.424837e-01_rb,8.468166e-01_rb,&
6715 & 8.504947e-01_rb,8.536642e-01_rb,8.564256e-01_rb,8.588513e-01_rb,8.610011e-01_rb,&
6716 & 8.629122e-01_rb,8.646262e-01_rb,8.661720e-01_rb,8.675752e-01_rb,8.688582e-01_rb,&
6717 & 8.700379e-01_rb,8.711300e-01_rb,8.721485e-01_rb,8.731027e-01_rb,8.740010e-01_rb,&
6718 & 8.748499e-01_rb,8.756564e-01_rb,8.764239e-01_rb,8.771542e-01_rb,8.778523e-01_rb,&
6719 & 8.785211e-01_rb,8.791601e-01_rb,8.797725e-01_rb,8.803589e-01_rb,8.809173e-01_rb,&
6720 & 8.814552e-01_rb,8.819705e-01_rb,8.824611e-01_rb,8.829311e-01_rb,8.833791e-01_rb,&
6721 & 8.838078e-01_rb,8.842148e-01_rb,8.846044e-01_rb,8.849756e-01_rb,8.853291e-01_rb,&
6722 & 8.856645e-01_rb,8.859841e-01_rb,8.862904e-01_rb,8.865801e-01_rb,8.868551e-01_rb,&
6723 & 8.871182e-01_rb,8.873673e-01_rb,8.876059e-01_rb,8.878307e-01_rb,8.880462e-01_rb,&
6724 & 8.882501e-01_rb,8.884453e-01_rb,8.886339e-01_rb /)
6726 asyliq1(:, 21) = (/ &
6727 & 7.838510e-01_rb,7.803151e-01_rb,7.980477e-01_rb,8.144160e-01_rb,8.261784e-01_rb,&
6728 & 8.344240e-01_rb,8.404278e-01_rb,8.450391e-01_rb,8.487593e-01_rb,8.518741e-01_rb,&
6729 & 8.545484e-01_rb,8.568890e-01_rb,8.589560e-01_rb,8.607983e-01_rb,8.624504e-01_rb,&
6730 & 8.639408e-01_rb,8.652945e-01_rb,8.665301e-01_rb,8.676634e-01_rb,8.687121e-01_rb,&
6731 & 8.696855e-01_rb,8.705933e-01_rb,8.714448e-01_rb,8.722454e-01_rb,8.730014e-01_rb,&
6732 & 8.737180e-01_rb,8.743982e-01_rb,8.750436e-01_rb,8.756598e-01_rb,8.762481e-01_rb,&
6733 & 8.768089e-01_rb,8.773427e-01_rb,8.778532e-01_rb,8.783434e-01_rb,8.788089e-01_rb,&
6734 & 8.792530e-01_rb,8.796784e-01_rb,8.800845e-01_rb,8.804716e-01_rb,8.808411e-01_rb,&
6735 & 8.811923e-01_rb,8.815276e-01_rb,8.818472e-01_rb,8.821504e-01_rb,8.824408e-01_rb,&
6736 & 8.827155e-01_rb,8.829777e-01_rb,8.832269e-01_rb,8.834631e-01_rb,8.836892e-01_rb,&
6737 & 8.839034e-01_rb,8.841075e-01_rb,8.843021e-01_rb,8.844866e-01_rb,8.846631e-01_rb,&
6738 & 8.848304e-01_rb,8.849910e-01_rb,8.851425e-01_rb /)
6740 asyliq1(:, 22) = (/ &
6741 & 7.760783e-01_rb,7.890215e-01_rb,8.090192e-01_rb,8.230252e-01_rb,8.321369e-01_rb,&
6742 & 8.384258e-01_rb,8.431529e-01_rb,8.469558e-01_rb,8.501499e-01_rb,8.528899e-01_rb,&
6743 & 8.552899e-01_rb,8.573956e-01_rb,8.592570e-01_rb,8.609098e-01_rb,8.623897e-01_rb,&
6744 & 8.637169e-01_rb,8.649184e-01_rb,8.660097e-01_rb,8.670096e-01_rb,8.679338e-01_rb,&
6745 & 8.687896e-01_rb,8.695880e-01_rb,8.703365e-01_rb,8.710422e-01_rb,8.717092e-01_rb,&
6746 & 8.723378e-01_rb,8.729363e-01_rb,8.735063e-01_rb,8.740475e-01_rb,8.745661e-01_rb,&
6747 & 8.750560e-01_rb,8.755275e-01_rb,8.759731e-01_rb,8.764000e-01_rb,8.768071e-01_rb,&
6748 & 8.771942e-01_rb,8.775628e-01_rb,8.779126e-01_rb,8.782483e-01_rb,8.785626e-01_rb,&
6749 & 8.788610e-01_rb,8.791482e-01_rb,8.794180e-01_rb,8.796765e-01_rb,8.799207e-01_rb,&
6750 & 8.801522e-01_rb,8.803707e-01_rb,8.805777e-01_rb,8.807749e-01_rb,8.809605e-01_rb,&
6751 & 8.811362e-01_rb,8.813047e-01_rb,8.814647e-01_rb,8.816131e-01_rb,8.817588e-01_rb,&
6752 & 8.818930e-01_rb,8.820230e-01_rb,8.821445e-01_rb /)
6754 asyliq1(:, 23) = (/ &
6755 & 7.847907e-01_rb,8.099917e-01_rb,8.257428e-01_rb,8.350423e-01_rb,8.411971e-01_rb,&
6756 & 8.457241e-01_rb,8.493010e-01_rb,8.522565e-01_rb,8.547660e-01_rb,8.569311e-01_rb,&
6757 & 8.588181e-01_rb,8.604729e-01_rb,8.619296e-01_rb,8.632208e-01_rb,8.643725e-01_rb,&
6758 & 8.654050e-01_rb,8.663363e-01_rb,8.671835e-01_rb,8.679590e-01_rb,8.686707e-01_rb,&
6759 & 8.693308e-01_rb,8.699433e-01_rb,8.705147e-01_rb,8.710490e-01_rb,8.715497e-01_rb,&
6760 & 8.720219e-01_rb,8.724669e-01_rb,8.728849e-01_rb,8.732806e-01_rb,8.736550e-01_rb,&
6761 & 8.740099e-01_rb,8.743435e-01_rb,8.746601e-01_rb,8.749610e-01_rb,8.752449e-01_rb,&
6762 & 8.755143e-01_rb,8.757688e-01_rb,8.760095e-01_rb,8.762375e-01_rb,8.764532e-01_rb,&
6763 & 8.766579e-01_rb,8.768506e-01_rb,8.770323e-01_rb,8.772049e-01_rb,8.773690e-01_rb,&
6764 & 8.775226e-01_rb,8.776679e-01_rb,8.778062e-01_rb,8.779360e-01_rb,8.780587e-01_rb,&
6765 & 8.781747e-01_rb,8.782852e-01_rb,8.783892e-01_rb,8.784891e-01_rb,8.785824e-01_rb,&
6766 & 8.786705e-01_rb,8.787546e-01_rb,8.788336e-01_rb /)
6768 asyliq1(:, 24) = (/ &
6769 & 8.054324e-01_rb,8.266282e-01_rb,8.378075e-01_rb,8.449848e-01_rb,8.502166e-01_rb,&
6770 & 8.542268e-01_rb,8.573477e-01_rb,8.598022e-01_rb,8.617689e-01_rb,8.633859e-01_rb,&
6771 & 8.647536e-01_rb,8.659354e-01_rb,8.669807e-01_rb,8.679143e-01_rb,8.687577e-01_rb,&
6772 & 8.695222e-01_rb,8.702207e-01_rb,8.708591e-01_rb,8.714446e-01_rb,8.719836e-01_rb,&
6773 & 8.724812e-01_rb,8.729426e-01_rb,8.733689e-01_rb,8.737665e-01_rb,8.741373e-01_rb,&
6774 & 8.744834e-01_rb,8.748070e-01_rb,8.751131e-01_rb,8.754011e-01_rb,8.756676e-01_rb,&
6775 & 8.759219e-01_rb,8.761599e-01_rb,8.763857e-01_rb,8.765984e-01_rb,8.767999e-01_rb,&
6776 & 8.769889e-01_rb,8.771669e-01_rb,8.773373e-01_rb,8.774969e-01_rb,8.776469e-01_rb,&
6777 & 8.777894e-01_rb,8.779237e-01_rb,8.780505e-01_rb,8.781703e-01_rb,8.782820e-01_rb,&
6778 & 8.783886e-01_rb,8.784894e-01_rb,8.785844e-01_rb,8.786736e-01_rb,8.787584e-01_rb,&
6779 & 8.788379e-01_rb,8.789130e-01_rb,8.789849e-01_rb,8.790506e-01_rb,8.791141e-01_rb,&
6780 & 8.791750e-01_rb,8.792324e-01_rb,8.792867e-01_rb /)
6782 asyliq1(:, 25) = (/ &
6783 & 8.249534e-01_rb,8.391988e-01_rb,8.474107e-01_rb,8.526860e-01_rb,8.563983e-01_rb,&
6784 & 8.592389e-01_rb,8.615144e-01_rb,8.633790e-01_rb,8.649325e-01_rb,8.662504e-01_rb,&
6785 & 8.673841e-01_rb,8.683741e-01_rb,8.692495e-01_rb,8.700309e-01_rb,8.707328e-01_rb,&
6786 & 8.713650e-01_rb,8.719432e-01_rb,8.724676e-01_rb,8.729498e-01_rb,8.733922e-01_rb,&
6787 & 8.737981e-01_rb,8.741745e-01_rb,8.745225e-01_rb,8.748467e-01_rb,8.751512e-01_rb,&
6788 & 8.754315e-01_rb,8.756962e-01_rb,8.759450e-01_rb,8.761774e-01_rb,8.763945e-01_rb,&
6789 & 8.766021e-01_rb,8.767970e-01_rb,8.769803e-01_rb,8.771511e-01_rb,8.773151e-01_rb,&
6790 & 8.774689e-01_rb,8.776147e-01_rb,8.777533e-01_rb,8.778831e-01_rb,8.780050e-01_rb,&
6791 & 8.781197e-01_rb,8.782301e-01_rb,8.783323e-01_rb,8.784312e-01_rb,8.785222e-01_rb,&
6792 & 8.786096e-01_rb,8.786916e-01_rb,8.787688e-01_rb,8.788411e-01_rb,8.789122e-01_rb,&
6793 & 8.789762e-01_rb,8.790373e-01_rb,8.790954e-01_rb,8.791514e-01_rb,8.792018e-01_rb,&
6794 & 8.792517e-01_rb,8.792990e-01_rb,8.793429e-01_rb /)
6796 asyliq1(:, 26) = (/ &
6797 & 8.323091e-01_rb,8.429776e-01_rb,8.498123e-01_rb,8.546929e-01_rb,8.584295e-01_rb,&
6798 & 8.613489e-01_rb,8.636324e-01_rb,8.654303e-01_rb,8.668675e-01_rb,8.680404e-01_rb,&
6799 & 8.690174e-01_rb,8.698495e-01_rb,8.705666e-01_rb,8.711961e-01_rb,8.717556e-01_rb,&
6800 & 8.722546e-01_rb,8.727063e-01_rb,8.731170e-01_rb,8.734933e-01_rb,8.738382e-01_rb,&
6801 & 8.741590e-01_rb,8.744525e-01_rb,8.747295e-01_rb,8.749843e-01_rb,8.752210e-01_rb,&
6802 & 8.754437e-01_rb,8.756524e-01_rb,8.758472e-01_rb,8.760288e-01_rb,8.762030e-01_rb,&
6803 & 8.763603e-01_rb,8.765122e-01_rb,8.766539e-01_rb,8.767894e-01_rb,8.769130e-01_rb,&
6804 & 8.770310e-01_rb,8.771422e-01_rb,8.772437e-01_rb,8.773419e-01_rb,8.774355e-01_rb,&
6805 & 8.775221e-01_rb,8.776047e-01_rb,8.776802e-01_rb,8.777539e-01_rb,8.778216e-01_rb,&
6806 & 8.778859e-01_rb,8.779473e-01_rb,8.780031e-01_rb,8.780562e-01_rb,8.781097e-01_rb,&
6807 & 8.781570e-01_rb,8.782021e-01_rb,8.782463e-01_rb,8.782845e-01_rb,8.783235e-01_rb,&
6808 & 8.783610e-01_rb,8.783953e-01_rb,8.784273e-01_rb /)
6810 asyliq1(:, 27) = (/ &
6811 & 8.396448e-01_rb,8.480172e-01_rb,8.535934e-01_rb,8.574145e-01_rb,8.600835e-01_rb,&
6812 & 8.620347e-01_rb,8.635500e-01_rb,8.648003e-01_rb,8.658758e-01_rb,8.668248e-01_rb,&
6813 & 8.676697e-01_rb,8.684220e-01_rb,8.690893e-01_rb,8.696807e-01_rb,8.702046e-01_rb,&
6814 & 8.706676e-01_rb,8.710798e-01_rb,8.714478e-01_rb,8.717778e-01_rb,8.720747e-01_rb,&
6815 & 8.723431e-01_rb,8.725889e-01_rb,8.728144e-01_rb,8.730201e-01_rb,8.732129e-01_rb,&
6816 & 8.733907e-01_rb,8.735541e-01_rb,8.737100e-01_rb,8.738533e-01_rb,8.739882e-01_rb,&
6817 & 8.741164e-01_rb,8.742362e-01_rb,8.743485e-01_rb,8.744530e-01_rb,8.745512e-01_rb,&
6818 & 8.746471e-01_rb,8.747373e-01_rb,8.748186e-01_rb,8.748973e-01_rb,8.749732e-01_rb,&
6819 & 8.750443e-01_rb,8.751105e-01_rb,8.751747e-01_rb,8.752344e-01_rb,8.752902e-01_rb,&
6820 & 8.753412e-01_rb,8.753917e-01_rb,8.754393e-01_rb,8.754843e-01_rb,8.755282e-01_rb,&
6821 & 8.755662e-01_rb,8.756039e-01_rb,8.756408e-01_rb,8.756722e-01_rb,8.757072e-01_rb,&
6822 & 8.757352e-01_rb,8.757653e-01_rb,8.757932e-01_rb /)
6824 asyliq1(:, 28) = (/ &
6825 & 8.374590e-01_rb,8.465669e-01_rb,8.518701e-01_rb,8.547627e-01_rb,8.565745e-01_rb,&
6826 & 8.579065e-01_rb,8.589717e-01_rb,8.598632e-01_rb,8.606363e-01_rb,8.613268e-01_rb,&
6827 & 8.619560e-01_rb,8.625340e-01_rb,8.630689e-01_rb,8.635601e-01_rb,8.640084e-01_rb,&
6828 & 8.644180e-01_rb,8.647885e-01_rb,8.651220e-01_rb,8.654218e-01_rb,8.656908e-01_rb,&
6829 & 8.659294e-01_rb,8.661422e-01_rb,8.663334e-01_rb,8.665037e-01_rb,8.666543e-01_rb,&
6830 & 8.667913e-01_rb,8.669156e-01_rb,8.670242e-01_rb,8.671249e-01_rb,8.672161e-01_rb,&
6831 & 8.672993e-01_rb,8.673733e-01_rb,8.674457e-01_rb,8.675103e-01_rb,8.675713e-01_rb,&
6832 & 8.676267e-01_rb,8.676798e-01_rb,8.677286e-01_rb,8.677745e-01_rb,8.678178e-01_rb,&
6833 & 8.678601e-01_rb,8.678986e-01_rb,8.679351e-01_rb,8.679693e-01_rb,8.680013e-01_rb,&
6834 & 8.680334e-01_rb,8.680624e-01_rb,8.680915e-01_rb,8.681178e-01_rb,8.681428e-01_rb,&
6835 & 8.681654e-01_rb,8.681899e-01_rb,8.682103e-01_rb,8.682317e-01_rb,8.682498e-01_rb,&
6836 & 8.682677e-01_rb,8.682861e-01_rb,8.683041e-01_rb /)
6838 asyliq1(:, 29) = (/ &
6839 & 7.877069e-01_rb,8.244281e-01_rb,8.367971e-01_rb,8.409074e-01_rb,8.429859e-01_rb,&
6840 & 8.454386e-01_rb,8.489350e-01_rb,8.534141e-01_rb,8.585814e-01_rb,8.641267e-01_rb,&
6841 & 8.697999e-01_rb,8.754223e-01_rb,8.808785e-01_rb,8.860944e-01_rb,8.910354e-01_rb,&
6842 & 8.956837e-01_rb,9.000392e-01_rb,9.041091e-01_rb,9.079071e-01_rb,9.114479e-01_rb,&
6843 & 9.147462e-01_rb,9.178234e-01_rb,9.206903e-01_rb,9.233663e-01_rb,9.258668e-01_rb,&
6844 & 9.282006e-01_rb,9.303847e-01_rb,9.324288e-01_rb,9.343418e-01_rb,9.361356e-01_rb,&
6845 & 9.378176e-01_rb,9.393939e-01_rb,9.408736e-01_rb,9.422622e-01_rb,9.435670e-01_rb,&
6846 & 9.447900e-01_rb,9.459395e-01_rb,9.470199e-01_rb,9.480335e-01_rb,9.489852e-01_rb,&
6847 & 9.498782e-01_rb,9.507168e-01_rb,9.515044e-01_rb,9.522470e-01_rb,9.529409e-01_rb,&
6848 & 9.535946e-01_rb,9.542071e-01_rb,9.547838e-01_rb,9.553256e-01_rb,9.558351e-01_rb,&
6849 & 9.563139e-01_rb,9.567660e-01_rb,9.571915e-01_rb,9.575901e-01_rb,9.579685e-01_rb,&
6850 & 9.583239e-01_rb,9.586602e-01_rb,9.589766e-01_rb /)
6853 ! Spherical Ice Particle Parameterization
6854 ! extinction units (ext coef/iwc): [(m^-1)/(g m^-3)]
6855 extice2(:, 16) = (/ &
6857 & 4.101824e-01_rb,2.435514e-01_rb,1.713697e-01_rb,1.314865e-01_rb,1.063406e-01_rb,&
6858 & 8.910701e-02_rb,7.659480e-02_rb,6.711784e-02_rb,5.970353e-02_rb,5.375249e-02_rb,&
6859 & 4.887577e-02_rb,4.481025e-02_rb,4.137171e-02_rb,3.842744e-02_rb,3.587948e-02_rb,&
6860 & 3.365396e-02_rb,3.169419e-02_rb,2.995593e-02_rb,2.840419e-02_rb,2.701091e-02_rb,&
6861 & 2.575336e-02_rb,2.461293e-02_rb,2.357423e-02_rb,2.262443e-02_rb,2.175276e-02_rb,&
6862 & 2.095012e-02_rb,2.020875e-02_rb,1.952199e-02_rb,1.888412e-02_rb,1.829018e-02_rb,&
6863 & 1.773586e-02_rb,1.721738e-02_rb,1.673144e-02_rb,1.627510e-02_rb,1.584579e-02_rb,&
6864 & 1.544122e-02_rb,1.505934e-02_rb,1.469833e-02_rb,1.435654e-02_rb,1.403251e-02_rb,&
6865 & 1.372492e-02_rb,1.343255e-02_rb,1.315433e-02_rb /)
6866 extice2(:, 17) = (/ &
6868 & 3.836650e-01_rb,2.304055e-01_rb,1.637265e-01_rb,1.266681e-01_rb,1.031602e-01_rb,&
6869 & 8.695191e-02_rb,7.511544e-02_rb,6.610009e-02_rb,5.900909e-02_rb,5.328833e-02_rb,&
6870 & 4.857728e-02_rb,4.463133e-02_rb,4.127880e-02_rb,3.839567e-02_rb,3.589013e-02_rb,&
6871 & 3.369280e-02_rb,3.175027e-02_rb,3.002079e-02_rb,2.847121e-02_rb,2.707493e-02_rb,&
6872 & 2.581031e-02_rb,2.465962e-02_rb,2.360815e-02_rb,2.264363e-02_rb,2.175571e-02_rb,&
6873 & 2.093563e-02_rb,2.017592e-02_rb,1.947015e-02_rb,1.881278e-02_rb,1.819901e-02_rb,&
6874 & 1.762463e-02_rb,1.708598e-02_rb,1.657982e-02_rb,1.610330e-02_rb,1.565390e-02_rb,&
6875 & 1.522937e-02_rb,1.482768e-02_rb,1.444706e-02_rb,1.408588e-02_rb,1.374270e-02_rb,&
6876 & 1.341619e-02_rb,1.310517e-02_rb,1.280857e-02_rb /)
6877 extice2(:, 18) = (/ &
6879 & 4.152673e-01_rb,2.436816e-01_rb,1.702243e-01_rb,1.299704e-01_rb,1.047528e-01_rb,&
6880 & 8.756039e-02_rb,7.513327e-02_rb,6.575690e-02_rb,5.844616e-02_rb,5.259609e-02_rb,&
6881 & 4.781531e-02_rb,4.383980e-02_rb,4.048517e-02_rb,3.761891e-02_rb,3.514342e-02_rb,&
6882 & 3.298525e-02_rb,3.108814e-02_rb,2.940825e-02_rb,2.791096e-02_rb,2.656858e-02_rb,&
6883 & 2.535869e-02_rb,2.426297e-02_rb,2.326627e-02_rb,2.235602e-02_rb,2.152164e-02_rb,&
6884 & 2.075420e-02_rb,2.004613e-02_rb,1.939091e-02_rb,1.878296e-02_rb,1.821744e-02_rb,&
6885 & 1.769015e-02_rb,1.719741e-02_rb,1.673600e-02_rb,1.630308e-02_rb,1.589615e-02_rb,&
6886 & 1.551298e-02_rb,1.515159e-02_rb,1.481021e-02_rb,1.448726e-02_rb,1.418131e-02_rb,&
6887 & 1.389109e-02_rb,1.361544e-02_rb,1.335330e-02_rb /)
6888 extice2(:, 19) = (/ &
6890 & 3.873250e-01_rb,2.331609e-01_rb,1.655002e-01_rb,1.277753e-01_rb,1.038247e-01_rb,&
6891 & 8.731780e-02_rb,7.527638e-02_rb,6.611873e-02_rb,5.892850e-02_rb,5.313885e-02_rb,&
6892 & 4.838068e-02_rb,4.440356e-02_rb,4.103167e-02_rb,3.813804e-02_rb,3.562870e-02_rb,&
6893 & 3.343269e-02_rb,3.149539e-02_rb,2.977414e-02_rb,2.823510e-02_rb,2.685112e-02_rb,&
6894 & 2.560015e-02_rb,2.446411e-02_rb,2.342805e-02_rb,2.247948e-02_rb,2.160789e-02_rb,&
6895 & 2.080438e-02_rb,2.006139e-02_rb,1.937238e-02_rb,1.873177e-02_rb,1.813469e-02_rb,&
6896 & 1.757689e-02_rb,1.705468e-02_rb,1.656479e-02_rb,1.610435e-02_rb,1.567081e-02_rb,&
6897 & 1.526192e-02_rb,1.487565e-02_rb,1.451020e-02_rb,1.416396e-02_rb,1.383546e-02_rb,&
6898 & 1.352339e-02_rb,1.322657e-02_rb,1.294392e-02_rb /)
6899 extice2(:, 20) = (/ &
6901 & 3.784280e-01_rb,2.291396e-01_rb,1.632551e-01_rb,1.263775e-01_rb,1.028944e-01_rb,&
6902 & 8.666975e-02_rb,7.480952e-02_rb,6.577335e-02_rb,5.866714e-02_rb,5.293694e-02_rb,&
6903 & 4.822153e-02_rb,4.427547e-02_rb,4.092626e-02_rb,3.804918e-02_rb,3.555184e-02_rb,&
6904 & 3.336440e-02_rb,3.143307e-02_rb,2.971577e-02_rb,2.817912e-02_rb,2.679632e-02_rb,&
6905 & 2.554558e-02_rb,2.440903e-02_rb,2.337187e-02_rb,2.242173e-02_rb,2.154821e-02_rb,&
6906 & 2.074249e-02_rb,1.999706e-02_rb,1.930546e-02_rb,1.866212e-02_rb,1.806221e-02_rb,&
6907 & 1.750152e-02_rb,1.697637e-02_rb,1.648352e-02_rb,1.602010e-02_rb,1.558358e-02_rb,&
6908 & 1.517172e-02_rb,1.478250e-02_rb,1.441413e-02_rb,1.406498e-02_rb,1.373362e-02_rb,&
6909 & 1.341872e-02_rb,1.311911e-02_rb,1.283371e-02_rb /)
6910 extice2(:, 21) = (/ &
6912 & 3.719909e-01_rb,2.259490e-01_rb,1.613144e-01_rb,1.250648e-01_rb,1.019462e-01_rb,&
6913 & 8.595358e-02_rb,7.425064e-02_rb,6.532618e-02_rb,5.830218e-02_rb,5.263421e-02_rb,&
6914 & 4.796697e-02_rb,4.405891e-02_rb,4.074013e-02_rb,3.788776e-02_rb,3.541071e-02_rb,&
6915 & 3.324008e-02_rb,3.132280e-02_rb,2.961733e-02_rb,2.809071e-02_rb,2.671645e-02_rb,&
6916 & 2.547302e-02_rb,2.434276e-02_rb,2.331102e-02_rb,2.236558e-02_rb,2.149614e-02_rb,&
6917 & 2.069397e-02_rb,1.995163e-02_rb,1.926272e-02_rb,1.862174e-02_rb,1.802389e-02_rb,&
6918 & 1.746500e-02_rb,1.694142e-02_rb,1.644994e-02_rb,1.598772e-02_rb,1.555225e-02_rb,&
6919 & 1.514129e-02_rb,1.475286e-02_rb,1.438515e-02_rb,1.403659e-02_rb,1.370572e-02_rb,&
6920 & 1.339124e-02_rb,1.309197e-02_rb,1.280685e-02_rb /)
6921 extice2(:, 22) = (/ &
6923 & 3.713158e-01_rb,2.253816e-01_rb,1.608461e-01_rb,1.246718e-01_rb,1.016109e-01_rb,&
6924 & 8.566332e-02_rb,7.399666e-02_rb,6.510199e-02_rb,5.810290e-02_rb,5.245608e-02_rb,&
6925 & 4.780702e-02_rb,4.391478e-02_rb,4.060989e-02_rb,3.776982e-02_rb,3.530374e-02_rb,&
6926 & 3.314296e-02_rb,3.123458e-02_rb,2.953719e-02_rb,2.801794e-02_rb,2.665043e-02_rb,&
6927 & 2.541321e-02_rb,2.428868e-02_rb,2.326224e-02_rb,2.232173e-02_rb,2.145688e-02_rb,&
6928 & 2.065899e-02_rb,1.992067e-02_rb,1.923552e-02_rb,1.859808e-02_rb,1.800356e-02_rb,&
6929 & 1.744782e-02_rb,1.692721e-02_rb,1.643855e-02_rb,1.597900e-02_rb,1.554606e-02_rb,&
6930 & 1.513751e-02_rb,1.475137e-02_rb,1.438586e-02_rb,1.403938e-02_rb,1.371050e-02_rb,&
6931 & 1.339793e-02_rb,1.310050e-02_rb,1.281713e-02_rb /)
6932 extice2(:, 23) = (/ &
6934 & 3.605883e-01_rb,2.204388e-01_rb,1.580431e-01_rb,1.229033e-01_rb,1.004203e-01_rb,&
6935 & 8.482616e-02_rb,7.338941e-02_rb,6.465105e-02_rb,5.776176e-02_rb,5.219398e-02_rb,&
6936 & 4.760288e-02_rb,4.375369e-02_rb,4.048111e-02_rb,3.766539e-02_rb,3.521771e-02_rb,&
6937 & 3.307079e-02_rb,3.117277e-02_rb,2.948303e-02_rb,2.796929e-02_rb,2.660560e-02_rb,&
6938 & 2.537086e-02_rb,2.424772e-02_rb,2.322182e-02_rb,2.228114e-02_rb,2.141556e-02_rb,&
6939 & 2.061649e-02_rb,1.987661e-02_rb,1.918962e-02_rb,1.855009e-02_rb,1.795330e-02_rb,&
6940 & 1.739514e-02_rb,1.687199e-02_rb,1.638069e-02_rb,1.591845e-02_rb,1.548276e-02_rb,&
6941 & 1.507143e-02_rb,1.468249e-02_rb,1.431416e-02_rb,1.396486e-02_rb,1.363318e-02_rb,&
6942 & 1.331781e-02_rb,1.301759e-02_rb,1.273147e-02_rb /)
6943 extice2(:, 24) = (/ &
6945 & 3.527890e-01_rb,2.168469e-01_rb,1.560090e-01_rb,1.216216e-01_rb,9.955787e-02_rb,&
6946 & 8.421942e-02_rb,7.294827e-02_rb,6.432192e-02_rb,5.751081e-02_rb,5.199888e-02_rb,&
6947 & 4.744835e-02_rb,4.362899e-02_rb,4.037847e-02_rb,3.757910e-02_rb,3.514351e-02_rb,&
6948 & 3.300546e-02_rb,3.111382e-02_rb,2.942853e-02_rb,2.791775e-02_rb,2.655584e-02_rb,&
6949 & 2.532195e-02_rb,2.419892e-02_rb,2.317255e-02_rb,2.223092e-02_rb,2.136402e-02_rb,&
6950 & 2.056334e-02_rb,1.982160e-02_rb,1.913258e-02_rb,1.849087e-02_rb,1.789178e-02_rb,&
6951 & 1.733124e-02_rb,1.680565e-02_rb,1.631187e-02_rb,1.584711e-02_rb,1.540889e-02_rb,&
6952 & 1.499502e-02_rb,1.460354e-02_rb,1.423269e-02_rb,1.388088e-02_rb,1.354670e-02_rb,&
6953 & 1.322887e-02_rb,1.292620e-02_rb,1.263767e-02_rb /)
6954 extice2(:, 25) = (/ &
6956 & 3.477874e-01_rb,2.143515e-01_rb,1.544887e-01_rb,1.205942e-01_rb,9.881779e-02_rb,&
6957 & 8.366261e-02_rb,7.251586e-02_rb,6.397790e-02_rb,5.723183e-02_rb,5.176908e-02_rb,&
6958 & 4.725658e-02_rb,4.346715e-02_rb,4.024055e-02_rb,3.746055e-02_rb,3.504080e-02_rb,&
6959 & 3.291583e-02_rb,3.103507e-02_rb,2.935891e-02_rb,2.785582e-02_rb,2.650042e-02_rb,&
6960 & 2.527206e-02_rb,2.415376e-02_rb,2.313142e-02_rb,2.219326e-02_rb,2.132934e-02_rb,&
6961 & 2.053122e-02_rb,1.979169e-02_rb,1.910456e-02_rb,1.846448e-02_rb,1.786680e-02_rb,&
6962 & 1.730745e-02_rb,1.678289e-02_rb,1.628998e-02_rb,1.582595e-02_rb,1.538835e-02_rb,&
6963 & 1.497499e-02_rb,1.458393e-02_rb,1.421341e-02_rb,1.386187e-02_rb,1.352788e-02_rb,&
6964 & 1.321019e-02_rb,1.290762e-02_rb,1.261913e-02_rb /)
6965 extice2(:, 26) = (/ &
6967 & 3.453721e-01_rb,2.130744e-01_rb,1.536698e-01_rb,1.200140e-01_rb,9.838078e-02_rb,&
6968 & 8.331940e-02_rb,7.223803e-02_rb,6.374775e-02_rb,5.703770e-02_rb,5.160290e-02_rb,&
6969 & 4.711259e-02_rb,4.334110e-02_rb,4.012923e-02_rb,3.736150e-02_rb,3.495208e-02_rb,&
6970 & 3.283589e-02_rb,3.096267e-02_rb,2.929302e-02_rb,2.779560e-02_rb,2.644517e-02_rb,&
6971 & 2.522119e-02_rb,2.410677e-02_rb,2.308788e-02_rb,2.215281e-02_rb,2.129165e-02_rb,&
6972 & 2.049602e-02_rb,1.975874e-02_rb,1.907365e-02_rb,1.843542e-02_rb,1.783943e-02_rb,&
6973 & 1.728162e-02_rb,1.675847e-02_rb,1.626685e-02_rb,1.580401e-02_rb,1.536750e-02_rb,&
6974 & 1.495515e-02_rb,1.456502e-02_rb,1.419537e-02_rb,1.384463e-02_rb,1.351139e-02_rb,&
6975 & 1.319438e-02_rb,1.289246e-02_rb,1.260456e-02_rb /)
6976 extice2(:, 27) = (/ &
6978 & 3.417883e-01_rb,2.113379e-01_rb,1.526395e-01_rb,1.193347e-01_rb,9.790253e-02_rb,&
6979 & 8.296715e-02_rb,7.196979e-02_rb,6.353806e-02_rb,5.687024e-02_rb,5.146670e-02_rb,&
6980 & 4.700001e-02_rb,4.324667e-02_rb,4.004894e-02_rb,3.729233e-02_rb,3.489172e-02_rb,&
6981 & 3.278257e-02_rb,3.091499e-02_rb,2.924987e-02_rb,2.775609e-02_rb,2.640859e-02_rb,&
6982 & 2.518695e-02_rb,2.407439e-02_rb,2.305697e-02_rb,2.212303e-02_rb,2.126273e-02_rb,&
6983 & 2.046774e-02_rb,1.973090e-02_rb,1.904610e-02_rb,1.840801e-02_rb,1.781204e-02_rb,&
6984 & 1.725417e-02_rb,1.673086e-02_rb,1.623902e-02_rb,1.577590e-02_rb,1.533906e-02_rb,&
6985 & 1.492634e-02_rb,1.453580e-02_rb,1.416571e-02_rb,1.381450e-02_rb,1.348078e-02_rb,&
6986 & 1.316327e-02_rb,1.286082e-02_rb,1.257240e-02_rb /)
6987 extice2(:, 28) = (/ &
6989 & 3.416111e-01_rb,2.114124e-01_rb,1.527734e-01_rb,1.194809e-01_rb,9.804612e-02_rb,&
6990 & 8.310287e-02_rb,7.209595e-02_rb,6.365442e-02_rb,5.697710e-02_rb,5.156460e-02_rb,&
6991 & 4.708957e-02_rb,4.332850e-02_rb,4.012361e-02_rb,3.736037e-02_rb,3.495364e-02_rb,&
6992 & 3.283879e-02_rb,3.096593e-02_rb,2.929589e-02_rb,2.779751e-02_rb,2.644571e-02_rb,&
6993 & 2.522004e-02_rb,2.410369e-02_rb,2.308271e-02_rb,2.214542e-02_rb,2.128195e-02_rb,&
6994 & 2.048396e-02_rb,1.974429e-02_rb,1.905679e-02_rb,1.841614e-02_rb,1.781774e-02_rb,&
6995 & 1.725754e-02_rb,1.673203e-02_rb,1.623807e-02_rb,1.577293e-02_rb,1.533416e-02_rb,&
6996 & 1.491958e-02_rb,1.452727e-02_rb,1.415547e-02_rb,1.380262e-02_rb,1.346732e-02_rb,&
6997 & 1.314830e-02_rb,1.284439e-02_rb,1.255456e-02_rb /)
6998 extice2(:, 29) = (/ &
7000 & 4.196611e-01_rb,2.493642e-01_rb,1.761261e-01_rb,1.357197e-01_rb,1.102161e-01_rb,&
7001 & 9.269376e-02_rb,7.992985e-02_rb,7.022538e-02_rb,6.260168e-02_rb,5.645603e-02_rb,&
7002 & 5.139732e-02_rb,4.716088e-02_rb,4.356133e-02_rb,4.046498e-02_rb,3.777303e-02_rb,&
7003 & 3.541094e-02_rb,3.332137e-02_rb,3.145954e-02_rb,2.978998e-02_rb,2.828419e-02_rb,&
7004 & 2.691905e-02_rb,2.567559e-02_rb,2.453811e-02_rb,2.349350e-02_rb,2.253072e-02_rb,&
7005 & 2.164042e-02_rb,2.081464e-02_rb,2.004652e-02_rb,1.933015e-02_rb,1.866041e-02_rb,&
7006 & 1.803283e-02_rb,1.744348e-02_rb,1.688894e-02_rb,1.636616e-02_rb,1.587244e-02_rb,&
7007 & 1.540539e-02_rb,1.496287e-02_rb,1.454295e-02_rb,1.414392e-02_rb,1.376423e-02_rb,&
7008 & 1.340247e-02_rb,1.305739e-02_rb,1.272784e-02_rb /)
7010 ! single-scattering albedo: unitless
7011 ssaice2(:, 16) = (/ &
7013 & 6.630615e-01_rb,6.451169e-01_rb,6.333696e-01_rb,6.246927e-01_rb,6.178420e-01_rb,&
7014 & 6.121976e-01_rb,6.074069e-01_rb,6.032505e-01_rb,5.995830e-01_rb,5.963030e-01_rb,&
7015 & 5.933372e-01_rb,5.906311e-01_rb,5.881427e-01_rb,5.858395e-01_rb,5.836955e-01_rb,&
7016 & 5.816896e-01_rb,5.798046e-01_rb,5.780264e-01_rb,5.763429e-01_rb,5.747441e-01_rb,&
7017 & 5.732213e-01_rb,5.717672e-01_rb,5.703754e-01_rb,5.690403e-01_rb,5.677571e-01_rb,&
7018 & 5.665215e-01_rb,5.653297e-01_rb,5.641782e-01_rb,5.630643e-01_rb,5.619850e-01_rb,&
7019 & 5.609381e-01_rb,5.599214e-01_rb,5.589328e-01_rb,5.579707e-01_rb,5.570333e-01_rb,&
7020 & 5.561193e-01_rb,5.552272e-01_rb,5.543558e-01_rb,5.535041e-01_rb,5.526708e-01_rb,&
7021 & 5.518551e-01_rb,5.510561e-01_rb,5.502729e-01_rb /)
7022 ssaice2(:, 17) = (/ &
7024 & 7.689749e-01_rb,7.398171e-01_rb,7.205819e-01_rb,7.065690e-01_rb,6.956928e-01_rb,&
7025 & 6.868989e-01_rb,6.795813e-01_rb,6.733606e-01_rb,6.679838e-01_rb,6.632742e-01_rb,&
7026 & 6.591036e-01_rb,6.553766e-01_rb,6.520197e-01_rb,6.489757e-01_rb,6.461991e-01_rb,&
7027 & 6.436531e-01_rb,6.413075e-01_rb,6.391375e-01_rb,6.371221e-01_rb,6.352438e-01_rb,&
7028 & 6.334876e-01_rb,6.318406e-01_rb,6.302918e-01_rb,6.288315e-01_rb,6.274512e-01_rb,&
7029 & 6.261436e-01_rb,6.249022e-01_rb,6.237211e-01_rb,6.225953e-01_rb,6.215201e-01_rb,&
7030 & 6.204914e-01_rb,6.195055e-01_rb,6.185592e-01_rb,6.176492e-01_rb,6.167730e-01_rb,&
7031 & 6.159280e-01_rb,6.151120e-01_rb,6.143228e-01_rb,6.135587e-01_rb,6.128177e-01_rb,&
7032 & 6.120984e-01_rb,6.113993e-01_rb,6.107189e-01_rb /)
7033 ssaice2(:, 18) = (/ &
7035 & 9.956167e-01_rb,9.814770e-01_rb,9.716104e-01_rb,9.639746e-01_rb,9.577179e-01_rb,&
7036 & 9.524010e-01_rb,9.477672e-01_rb,9.436527e-01_rb,9.399467e-01_rb,9.365708e-01_rb,&
7037 & 9.334672e-01_rb,9.305921e-01_rb,9.279118e-01_rb,9.253993e-01_rb,9.230330e-01_rb,&
7038 & 9.207954e-01_rb,9.186719e-01_rb,9.166501e-01_rb,9.147199e-01_rb,9.128722e-01_rb,&
7039 & 9.110997e-01_rb,9.093956e-01_rb,9.077544e-01_rb,9.061708e-01_rb,9.046406e-01_rb,&
7040 & 9.031598e-01_rb,9.017248e-01_rb,9.003326e-01_rb,8.989804e-01_rb,8.976655e-01_rb,&
7041 & 8.963857e-01_rb,8.951389e-01_rb,8.939233e-01_rb,8.927370e-01_rb,8.915785e-01_rb,&
7042 & 8.904464e-01_rb,8.893392e-01_rb,8.882559e-01_rb,8.871951e-01_rb,8.861559e-01_rb,&
7043 & 8.851373e-01_rb,8.841383e-01_rb,8.831581e-01_rb /)
7044 ssaice2(:, 19) = (/ &
7046 & 9.723177e-01_rb,9.452119e-01_rb,9.267592e-01_rb,9.127393e-01_rb,9.014238e-01_rb,&
7047 & 8.919334e-01_rb,8.837584e-01_rb,8.765773e-01_rb,8.701736e-01_rb,8.643950e-01_rb,&
7048 & 8.591299e-01_rb,8.542942e-01_rb,8.498230e-01_rb,8.456651e-01_rb,8.417794e-01_rb,&
7049 & 8.381324e-01_rb,8.346964e-01_rb,8.314484e-01_rb,8.283687e-01_rb,8.254408e-01_rb,&
7050 & 8.226505e-01_rb,8.199854e-01_rb,8.174348e-01_rb,8.149891e-01_rb,8.126403e-01_rb,&
7051 & 8.103808e-01_rb,8.082041e-01_rb,8.061044e-01_rb,8.040765e-01_rb,8.021156e-01_rb,&
7052 & 8.002174e-01_rb,7.983781e-01_rb,7.965941e-01_rb,7.948622e-01_rb,7.931795e-01_rb,&
7053 & 7.915432e-01_rb,7.899508e-01_rb,7.884002e-01_rb,7.868891e-01_rb,7.854156e-01_rb,&
7054 & 7.839779e-01_rb,7.825742e-01_rb,7.812031e-01_rb /)
7055 ssaice2(:, 20) = (/ &
7057 & 9.933294e-01_rb,9.860917e-01_rb,9.811564e-01_rb,9.774008e-01_rb,9.743652e-01_rb,&
7058 & 9.718155e-01_rb,9.696159e-01_rb,9.676810e-01_rb,9.659531e-01_rb,9.643915e-01_rb,&
7059 & 9.629667e-01_rb,9.616561e-01_rb,9.604426e-01_rb,9.593125e-01_rb,9.582548e-01_rb,&
7060 & 9.572607e-01_rb,9.563227e-01_rb,9.554347e-01_rb,9.545915e-01_rb,9.537888e-01_rb,&
7061 & 9.530226e-01_rb,9.522898e-01_rb,9.515874e-01_rb,9.509130e-01_rb,9.502643e-01_rb,&
7062 & 9.496394e-01_rb,9.490366e-01_rb,9.484542e-01_rb,9.478910e-01_rb,9.473456e-01_rb,&
7063 & 9.468169e-01_rb,9.463039e-01_rb,9.458056e-01_rb,9.453212e-01_rb,9.448499e-01_rb,&
7064 & 9.443910e-01_rb,9.439438e-01_rb,9.435077e-01_rb,9.430821e-01_rb,9.426666e-01_rb,&
7065 & 9.422607e-01_rb,9.418638e-01_rb,9.414756e-01_rb /)
7066 ssaice2(:, 21) = (/ &
7068 & 9.900787e-01_rb,9.828880e-01_rb,9.779258e-01_rb,9.741173e-01_rb,9.710184e-01_rb,&
7069 & 9.684012e-01_rb,9.661332e-01_rb,9.641301e-01_rb,9.623352e-01_rb,9.607083e-01_rb,&
7070 & 9.592198e-01_rb,9.578474e-01_rb,9.565739e-01_rb,9.553856e-01_rb,9.542715e-01_rb,&
7071 & 9.532226e-01_rb,9.522314e-01_rb,9.512919e-01_rb,9.503986e-01_rb,9.495472e-01_rb,&
7072 & 9.487337e-01_rb,9.479549e-01_rb,9.472077e-01_rb,9.464897e-01_rb,9.457985e-01_rb,&
7073 & 9.451322e-01_rb,9.444890e-01_rb,9.438673e-01_rb,9.432656e-01_rb,9.426826e-01_rb,&
7074 & 9.421173e-01_rb,9.415684e-01_rb,9.410351e-01_rb,9.405164e-01_rb,9.400115e-01_rb,&
7075 & 9.395198e-01_rb,9.390404e-01_rb,9.385728e-01_rb,9.381164e-01_rb,9.376707e-01_rb,&
7076 & 9.372350e-01_rb,9.368091e-01_rb,9.363923e-01_rb /)
7077 ssaice2(:, 22) = (/ &
7079 & 9.986793e-01_rb,9.985239e-01_rb,9.983911e-01_rb,9.982715e-01_rb,9.981606e-01_rb,&
7080 & 9.980562e-01_rb,9.979567e-01_rb,9.978613e-01_rb,9.977691e-01_rb,9.976798e-01_rb,&
7081 & 9.975929e-01_rb,9.975081e-01_rb,9.974251e-01_rb,9.973438e-01_rb,9.972640e-01_rb,&
7082 & 9.971855e-01_rb,9.971083e-01_rb,9.970322e-01_rb,9.969571e-01_rb,9.968830e-01_rb,&
7083 & 9.968099e-01_rb,9.967375e-01_rb,9.966660e-01_rb,9.965951e-01_rb,9.965250e-01_rb,&
7084 & 9.964555e-01_rb,9.963867e-01_rb,9.963185e-01_rb,9.962508e-01_rb,9.961836e-01_rb,&
7085 & 9.961170e-01_rb,9.960508e-01_rb,9.959851e-01_rb,9.959198e-01_rb,9.958550e-01_rb,&
7086 & 9.957906e-01_rb,9.957266e-01_rb,9.956629e-01_rb,9.955997e-01_rb,9.955367e-01_rb,&
7087 & 9.954742e-01_rb,9.954119e-01_rb,9.953500e-01_rb /)
7088 ssaice2(:, 23) = (/ &
7090 & 9.997944e-01_rb,9.997791e-01_rb,9.997664e-01_rb,9.997547e-01_rb,9.997436e-01_rb,&
7091 & 9.997327e-01_rb,9.997219e-01_rb,9.997110e-01_rb,9.996999e-01_rb,9.996886e-01_rb,&
7092 & 9.996771e-01_rb,9.996653e-01_rb,9.996533e-01_rb,9.996409e-01_rb,9.996282e-01_rb,&
7093 & 9.996152e-01_rb,9.996019e-01_rb,9.995883e-01_rb,9.995743e-01_rb,9.995599e-01_rb,&
7094 & 9.995453e-01_rb,9.995302e-01_rb,9.995149e-01_rb,9.994992e-01_rb,9.994831e-01_rb,&
7095 & 9.994667e-01_rb,9.994500e-01_rb,9.994329e-01_rb,9.994154e-01_rb,9.993976e-01_rb,&
7096 & 9.993795e-01_rb,9.993610e-01_rb,9.993422e-01_rb,9.993230e-01_rb,9.993035e-01_rb,&
7097 & 9.992837e-01_rb,9.992635e-01_rb,9.992429e-01_rb,9.992221e-01_rb,9.992008e-01_rb,&
7098 & 9.991793e-01_rb,9.991574e-01_rb,9.991352e-01_rb /)
7099 ssaice2(:, 24) = (/ &
7101 & 9.999949e-01_rb,9.999947e-01_rb,9.999943e-01_rb,9.999939e-01_rb,9.999934e-01_rb,&
7102 & 9.999927e-01_rb,9.999920e-01_rb,9.999913e-01_rb,9.999904e-01_rb,9.999895e-01_rb,&
7103 & 9.999885e-01_rb,9.999874e-01_rb,9.999863e-01_rb,9.999851e-01_rb,9.999838e-01_rb,&
7104 & 9.999824e-01_rb,9.999810e-01_rb,9.999795e-01_rb,9.999780e-01_rb,9.999764e-01_rb,&
7105 & 9.999747e-01_rb,9.999729e-01_rb,9.999711e-01_rb,9.999692e-01_rb,9.999673e-01_rb,&
7106 & 9.999653e-01_rb,9.999632e-01_rb,9.999611e-01_rb,9.999589e-01_rb,9.999566e-01_rb,&
7107 & 9.999543e-01_rb,9.999519e-01_rb,9.999495e-01_rb,9.999470e-01_rb,9.999444e-01_rb,&
7108 & 9.999418e-01_rb,9.999392e-01_rb,9.999364e-01_rb,9.999336e-01_rb,9.999308e-01_rb,&
7109 & 9.999279e-01_rb,9.999249e-01_rb,9.999219e-01_rb /)
7110 ssaice2(:, 25) = (/ &
7112 & 9.999997e-01_rb,9.999997e-01_rb,9.999997e-01_rb,9.999996e-01_rb,9.999996e-01_rb,&
7113 & 9.999995e-01_rb,9.999994e-01_rb,9.999993e-01_rb,9.999993e-01_rb,9.999992e-01_rb,&
7114 & 9.999991e-01_rb,9.999989e-01_rb,9.999988e-01_rb,9.999987e-01_rb,9.999986e-01_rb,&
7115 & 9.999984e-01_rb,9.999983e-01_rb,9.999981e-01_rb,9.999980e-01_rb,9.999978e-01_rb,&
7116 & 9.999976e-01_rb,9.999974e-01_rb,9.999972e-01_rb,9.999971e-01_rb,9.999969e-01_rb,&
7117 & 9.999966e-01_rb,9.999964e-01_rb,9.999962e-01_rb,9.999960e-01_rb,9.999957e-01_rb,&
7118 & 9.999955e-01_rb,9.999953e-01_rb,9.999950e-01_rb,9.999947e-01_rb,9.999945e-01_rb,&
7119 & 9.999942e-01_rb,9.999939e-01_rb,9.999936e-01_rb,9.999934e-01_rb,9.999931e-01_rb,&
7120 & 9.999928e-01_rb,9.999925e-01_rb,9.999921e-01_rb /)
7121 ssaice2(:, 26) = (/ &
7123 & 9.999997e-01_rb,9.999996e-01_rb,9.999996e-01_rb,9.999995e-01_rb,9.999994e-01_rb,&
7124 & 9.999993e-01_rb,9.999992e-01_rb,9.999991e-01_rb,9.999990e-01_rb,9.999989e-01_rb,&
7125 & 9.999987e-01_rb,9.999986e-01_rb,9.999984e-01_rb,9.999982e-01_rb,9.999980e-01_rb,&
7126 & 9.999978e-01_rb,9.999976e-01_rb,9.999974e-01_rb,9.999972e-01_rb,9.999970e-01_rb,&
7127 & 9.999967e-01_rb,9.999965e-01_rb,9.999962e-01_rb,9.999959e-01_rb,9.999956e-01_rb,&
7128 & 9.999954e-01_rb,9.999951e-01_rb,9.999947e-01_rb,9.999944e-01_rb,9.999941e-01_rb,&
7129 & 9.999938e-01_rb,9.999934e-01_rb,9.999931e-01_rb,9.999927e-01_rb,9.999923e-01_rb,&
7130 & 9.999920e-01_rb,9.999916e-01_rb,9.999912e-01_rb,9.999908e-01_rb,9.999904e-01_rb,&
7131 & 9.999899e-01_rb,9.999895e-01_rb,9.999891e-01_rb /)
7132 ssaice2(:, 27) = (/ &
7134 & 9.999987e-01_rb,9.999987e-01_rb,9.999985e-01_rb,9.999984e-01_rb,9.999982e-01_rb,&
7135 & 9.999980e-01_rb,9.999978e-01_rb,9.999976e-01_rb,9.999973e-01_rb,9.999970e-01_rb,&
7136 & 9.999967e-01_rb,9.999964e-01_rb,9.999960e-01_rb,9.999956e-01_rb,9.999952e-01_rb,&
7137 & 9.999948e-01_rb,9.999944e-01_rb,9.999939e-01_rb,9.999934e-01_rb,9.999929e-01_rb,&
7138 & 9.999924e-01_rb,9.999918e-01_rb,9.999913e-01_rb,9.999907e-01_rb,9.999901e-01_rb,&
7139 & 9.999894e-01_rb,9.999888e-01_rb,9.999881e-01_rb,9.999874e-01_rb,9.999867e-01_rb,&
7140 & 9.999860e-01_rb,9.999853e-01_rb,9.999845e-01_rb,9.999837e-01_rb,9.999829e-01_rb,&
7141 & 9.999821e-01_rb,9.999813e-01_rb,9.999804e-01_rb,9.999796e-01_rb,9.999787e-01_rb,&
7142 & 9.999778e-01_rb,9.999768e-01_rb,9.999759e-01_rb /)
7143 ssaice2(:, 28) = (/ &
7145 & 9.999989e-01_rb,9.999989e-01_rb,9.999987e-01_rb,9.999986e-01_rb,9.999984e-01_rb,&
7146 & 9.999982e-01_rb,9.999980e-01_rb,9.999978e-01_rb,9.999975e-01_rb,9.999972e-01_rb,&
7147 & 9.999969e-01_rb,9.999966e-01_rb,9.999962e-01_rb,9.999958e-01_rb,9.999954e-01_rb,&
7148 & 9.999950e-01_rb,9.999945e-01_rb,9.999941e-01_rb,9.999936e-01_rb,9.999931e-01_rb,&
7149 & 9.999925e-01_rb,9.999920e-01_rb,9.999914e-01_rb,9.999908e-01_rb,9.999902e-01_rb,&
7150 & 9.999896e-01_rb,9.999889e-01_rb,9.999883e-01_rb,9.999876e-01_rb,9.999869e-01_rb,&
7151 & 9.999861e-01_rb,9.999854e-01_rb,9.999846e-01_rb,9.999838e-01_rb,9.999830e-01_rb,&
7152 & 9.999822e-01_rb,9.999814e-01_rb,9.999805e-01_rb,9.999796e-01_rb,9.999787e-01_rb,&
7153 & 9.999778e-01_rb,9.999769e-01_rb,9.999759e-01_rb /)
7154 ssaice2(:, 29) = (/ &
7156 & 7.042143e-01_rb,6.691161e-01_rb,6.463240e-01_rb,6.296590e-01_rb,6.166381e-01_rb,&
7157 & 6.060183e-01_rb,5.970908e-01_rb,5.894144e-01_rb,5.826968e-01_rb,5.767343e-01_rb,&
7158 & 5.713804e-01_rb,5.665256e-01_rb,5.620867e-01_rb,5.579987e-01_rb,5.542101e-01_rb,&
7159 & 5.506794e-01_rb,5.473727e-01_rb,5.442620e-01_rb,5.413239e-01_rb,5.385389e-01_rb,&
7160 & 5.358901e-01_rb,5.333633e-01_rb,5.309460e-01_rb,5.286277e-01_rb,5.263988e-01_rb,&
7161 & 5.242512e-01_rb,5.221777e-01_rb,5.201719e-01_rb,5.182280e-01_rb,5.163410e-01_rb,&
7162 & 5.145062e-01_rb,5.127197e-01_rb,5.109776e-01_rb,5.092766e-01_rb,5.076137e-01_rb,&
7163 & 5.059860e-01_rb,5.043911e-01_rb,5.028266e-01_rb,5.012904e-01_rb,4.997805e-01_rb,&
7164 & 4.982951e-01_rb,4.968326e-01_rb,4.953913e-01_rb /)
7166 ! asymmetry factor: unitless
7167 asyice2(:, 16) = (/ &
7169 & 7.946655e-01_rb,8.547685e-01_rb,8.806016e-01_rb,8.949880e-01_rb,9.041676e-01_rb,&
7170 & 9.105399e-01_rb,9.152249e-01_rb,9.188160e-01_rb,9.216573e-01_rb,9.239620e-01_rb,&
7171 & 9.258695e-01_rb,9.274745e-01_rb,9.288441e-01_rb,9.300267e-01_rb,9.310584e-01_rb,&
7172 & 9.319665e-01_rb,9.327721e-01_rb,9.334918e-01_rb,9.341387e-01_rb,9.347236e-01_rb,&
7173 & 9.352551e-01_rb,9.357402e-01_rb,9.361850e-01_rb,9.365942e-01_rb,9.369722e-01_rb,&
7174 & 9.373225e-01_rb,9.376481e-01_rb,9.379516e-01_rb,9.382352e-01_rb,9.385010e-01_rb,&
7175 & 9.387505e-01_rb,9.389854e-01_rb,9.392070e-01_rb,9.394163e-01_rb,9.396145e-01_rb,&
7176 & 9.398024e-01_rb,9.399809e-01_rb,9.401508e-01_rb,9.403126e-01_rb,9.404670e-01_rb,&
7177 & 9.406144e-01_rb,9.407555e-01_rb,9.408906e-01_rb /)
7178 asyice2(:, 17) = (/ &
7180 & 9.078091e-01_rb,9.195850e-01_rb,9.267250e-01_rb,9.317083e-01_rb,9.354632e-01_rb,&
7181 & 9.384323e-01_rb,9.408597e-01_rb,9.428935e-01_rb,9.446301e-01_rb,9.461351e-01_rb,&
7182 & 9.474555e-01_rb,9.486259e-01_rb,9.496722e-01_rb,9.506146e-01_rb,9.514688e-01_rb,&
7183 & 9.522476e-01_rb,9.529612e-01_rb,9.536181e-01_rb,9.542251e-01_rb,9.547883e-01_rb,&
7184 & 9.553124e-01_rb,9.558019e-01_rb,9.562601e-01_rb,9.566904e-01_rb,9.570953e-01_rb,&
7185 & 9.574773e-01_rb,9.578385e-01_rb,9.581806e-01_rb,9.585054e-01_rb,9.588142e-01_rb,&
7186 & 9.591083e-01_rb,9.593888e-01_rb,9.596569e-01_rb,9.599135e-01_rb,9.601593e-01_rb,&
7187 & 9.603952e-01_rb,9.606219e-01_rb,9.608399e-01_rb,9.610499e-01_rb,9.612523e-01_rb,&
7188 & 9.614477e-01_rb,9.616365e-01_rb,9.618192e-01_rb /)
7189 asyice2(:, 18) = (/ &
7191 & 8.322045e-01_rb,8.528693e-01_rb,8.648167e-01_rb,8.729163e-01_rb,8.789054e-01_rb,&
7192 & 8.835845e-01_rb,8.873819e-01_rb,8.905511e-01_rb,8.932532e-01_rb,8.955965e-01_rb,&
7193 & 8.976567e-01_rb,8.994887e-01_rb,9.011334e-01_rb,9.026221e-01_rb,9.039791e-01_rb,&
7194 & 9.052237e-01_rb,9.063715e-01_rb,9.074349e-01_rb,9.084245e-01_rb,9.093489e-01_rb,&
7195 & 9.102154e-01_rb,9.110303e-01_rb,9.117987e-01_rb,9.125253e-01_rb,9.132140e-01_rb,&
7196 & 9.138682e-01_rb,9.144910e-01_rb,9.150850e-01_rb,9.156524e-01_rb,9.161955e-01_rb,&
7197 & 9.167160e-01_rb,9.172157e-01_rb,9.176959e-01_rb,9.181581e-01_rb,9.186034e-01_rb,&
7198 & 9.190330e-01_rb,9.194478e-01_rb,9.198488e-01_rb,9.202368e-01_rb,9.206126e-01_rb,&
7199 & 9.209768e-01_rb,9.213301e-01_rb,9.216731e-01_rb /)
7200 asyice2(:, 19) = (/ &
7202 & 8.116560e-01_rb,8.488278e-01_rb,8.674331e-01_rb,8.788148e-01_rb,8.865810e-01_rb,&
7203 & 8.922595e-01_rb,8.966149e-01_rb,9.000747e-01_rb,9.028980e-01_rb,9.052513e-01_rb,&
7204 & 9.072468e-01_rb,9.089632e-01_rb,9.104574e-01_rb,9.117713e-01_rb,9.129371e-01_rb,&
7205 & 9.139793e-01_rb,9.149174e-01_rb,9.157668e-01_rb,9.165400e-01_rb,9.172473e-01_rb,&
7206 & 9.178970e-01_rb,9.184962e-01_rb,9.190508e-01_rb,9.195658e-01_rb,9.200455e-01_rb,&
7207 & 9.204935e-01_rb,9.209130e-01_rb,9.213067e-01_rb,9.216771e-01_rb,9.220262e-01_rb,&
7208 & 9.223560e-01_rb,9.226680e-01_rb,9.229636e-01_rb,9.232443e-01_rb,9.235112e-01_rb,&
7209 & 9.237652e-01_rb,9.240074e-01_rb,9.242385e-01_rb,9.244594e-01_rb,9.246708e-01_rb,&
7210 & 9.248733e-01_rb,9.250674e-01_rb,9.252536e-01_rb /)
7211 asyice2(:, 20) = (/ &
7213 & 8.047113e-01_rb,8.402864e-01_rb,8.570332e-01_rb,8.668455e-01_rb,8.733206e-01_rb,&
7214 & 8.779272e-01_rb,8.813796e-01_rb,8.840676e-01_rb,8.862225e-01_rb,8.879904e-01_rb,&
7215 & 8.894682e-01_rb,8.907228e-01_rb,8.918019e-01_rb,8.927404e-01_rb,8.935645e-01_rb,&
7216 & 8.942943e-01_rb,8.949452e-01_rb,8.955296e-01_rb,8.960574e-01_rb,8.965366e-01_rb,&
7217 & 8.969736e-01_rb,8.973740e-01_rb,8.977422e-01_rb,8.980820e-01_rb,8.983966e-01_rb,&
7218 & 8.986889e-01_rb,8.989611e-01_rb,8.992153e-01_rb,8.994533e-01_rb,8.996766e-01_rb,&
7219 & 8.998865e-01_rb,9.000843e-01_rb,9.002709e-01_rb,9.004474e-01_rb,9.006146e-01_rb,&
7220 & 9.007731e-01_rb,9.009237e-01_rb,9.010670e-01_rb,9.012034e-01_rb,9.013336e-01_rb,&
7221 & 9.014579e-01_rb,9.015767e-01_rb,9.016904e-01_rb /)
7222 asyice2(:, 21) = (/ &
7224 & 8.179122e-01_rb,8.480726e-01_rb,8.621945e-01_rb,8.704354e-01_rb,8.758555e-01_rb,&
7225 & 8.797007e-01_rb,8.825750e-01_rb,8.848078e-01_rb,8.865939e-01_rb,8.880564e-01_rb,&
7226 & 8.892765e-01_rb,8.903105e-01_rb,8.911982e-01_rb,8.919689e-01_rb,8.926446e-01_rb,&
7227 & 8.932419e-01_rb,8.937738e-01_rb,8.942506e-01_rb,8.946806e-01_rb,8.950702e-01_rb,&
7228 & 8.954251e-01_rb,8.957497e-01_rb,8.960477e-01_rb,8.963223e-01_rb,8.965762e-01_rb,&
7229 & 8.968116e-01_rb,8.970306e-01_rb,8.972347e-01_rb,8.974255e-01_rb,8.976042e-01_rb,&
7230 & 8.977720e-01_rb,8.979298e-01_rb,8.980784e-01_rb,8.982188e-01_rb,8.983515e-01_rb,&
7231 & 8.984771e-01_rb,8.985963e-01_rb,8.987095e-01_rb,8.988171e-01_rb,8.989195e-01_rb,&
7232 & 8.990172e-01_rb,8.991104e-01_rb,8.991994e-01_rb /)
7233 asyice2(:, 22) = (/ &
7235 & 8.169789e-01_rb,8.455024e-01_rb,8.586925e-01_rb,8.663283e-01_rb,8.713217e-01_rb,&
7236 & 8.748488e-01_rb,8.774765e-01_rb,8.795122e-01_rb,8.811370e-01_rb,8.824649e-01_rb,&
7237 & 8.835711e-01_rb,8.845073e-01_rb,8.853103e-01_rb,8.860068e-01_rb,8.866170e-01_rb,&
7238 & 8.871560e-01_rb,8.876358e-01_rb,8.880658e-01_rb,8.884533e-01_rb,8.888044e-01_rb,&
7239 & 8.891242e-01_rb,8.894166e-01_rb,8.896851e-01_rb,8.899324e-01_rb,8.901612e-01_rb,&
7240 & 8.903733e-01_rb,8.905706e-01_rb,8.907545e-01_rb,8.909265e-01_rb,8.910876e-01_rb,&
7241 & 8.912388e-01_rb,8.913812e-01_rb,8.915153e-01_rb,8.916419e-01_rb,8.917617e-01_rb,&
7242 & 8.918752e-01_rb,8.919829e-01_rb,8.920851e-01_rb,8.921824e-01_rb,8.922751e-01_rb,&
7243 & 8.923635e-01_rb,8.924478e-01_rb,8.925284e-01_rb /)
7244 asyice2(:, 23) = (/ &
7246 & 8.387642e-01_rb,8.569979e-01_rb,8.658630e-01_rb,8.711825e-01_rb,8.747605e-01_rb,&
7247 & 8.773472e-01_rb,8.793129e-01_rb,8.808621e-01_rb,8.821179e-01_rb,8.831583e-01_rb,&
7248 & 8.840361e-01_rb,8.847875e-01_rb,8.854388e-01_rb,8.860094e-01_rb,8.865138e-01_rb,&
7249 & 8.869634e-01_rb,8.873668e-01_rb,8.877310e-01_rb,8.880617e-01_rb,8.883635e-01_rb,&
7250 & 8.886401e-01_rb,8.888947e-01_rb,8.891298e-01_rb,8.893477e-01_rb,8.895504e-01_rb,&
7251 & 8.897393e-01_rb,8.899159e-01_rb,8.900815e-01_rb,8.902370e-01_rb,8.903833e-01_rb,&
7252 & 8.905214e-01_rb,8.906518e-01_rb,8.907753e-01_rb,8.908924e-01_rb,8.910036e-01_rb,&
7253 & 8.911094e-01_rb,8.912101e-01_rb,8.913062e-01_rb,8.913979e-01_rb,8.914856e-01_rb,&
7254 & 8.915695e-01_rb,8.916498e-01_rb,8.917269e-01_rb /)
7255 asyice2(:, 24) = (/ &
7257 & 8.522208e-01_rb,8.648132e-01_rb,8.711224e-01_rb,8.749901e-01_rb,8.776354e-01_rb,&
7258 & 8.795743e-01_rb,8.810649e-01_rb,8.822518e-01_rb,8.832225e-01_rb,8.840333e-01_rb,&
7259 & 8.847224e-01_rb,8.853162e-01_rb,8.858342e-01_rb,8.862906e-01_rb,8.866962e-01_rb,&
7260 & 8.870595e-01_rb,8.873871e-01_rb,8.876842e-01_rb,8.879551e-01_rb,8.882032e-01_rb,&
7261 & 8.884316e-01_rb,8.886425e-01_rb,8.888380e-01_rb,8.890199e-01_rb,8.891895e-01_rb,&
7262 & 8.893481e-01_rb,8.894968e-01_rb,8.896366e-01_rb,8.897683e-01_rb,8.898926e-01_rb,&
7263 & 8.900102e-01_rb,8.901215e-01_rb,8.902272e-01_rb,8.903276e-01_rb,8.904232e-01_rb,&
7264 & 8.905144e-01_rb,8.906014e-01_rb,8.906845e-01_rb,8.907640e-01_rb,8.908402e-01_rb,&
7265 & 8.909132e-01_rb,8.909834e-01_rb,8.910507e-01_rb /)
7266 asyice2(:, 25) = (/ &
7268 & 8.578202e-01_rb,8.683033e-01_rb,8.735431e-01_rb,8.767488e-01_rb,8.789378e-01_rb,&
7269 & 8.805399e-01_rb,8.817701e-01_rb,8.827485e-01_rb,8.835480e-01_rb,8.842152e-01_rb,&
7270 & 8.847817e-01_rb,8.852696e-01_rb,8.856949e-01_rb,8.860694e-01_rb,8.864020e-01_rb,&
7271 & 8.866997e-01_rb,8.869681e-01_rb,8.872113e-01_rb,8.874330e-01_rb,8.876360e-01_rb,&
7272 & 8.878227e-01_rb,8.879951e-01_rb,8.881548e-01_rb,8.883033e-01_rb,8.884418e-01_rb,&
7273 & 8.885712e-01_rb,8.886926e-01_rb,8.888066e-01_rb,8.889139e-01_rb,8.890152e-01_rb,&
7274 & 8.891110e-01_rb,8.892017e-01_rb,8.892877e-01_rb,8.893695e-01_rb,8.894473e-01_rb,&
7275 & 8.895214e-01_rb,8.895921e-01_rb,8.896597e-01_rb,8.897243e-01_rb,8.897862e-01_rb,&
7276 & 8.898456e-01_rb,8.899025e-01_rb,8.899572e-01_rb /)
7277 asyice2(:, 26) = (/ &
7279 & 8.625615e-01_rb,8.713831e-01_rb,8.755799e-01_rb,8.780560e-01_rb,8.796983e-01_rb,&
7280 & 8.808714e-01_rb,8.817534e-01_rb,8.824420e-01_rb,8.829953e-01_rb,8.834501e-01_rb,&
7281 & 8.838310e-01_rb,8.841549e-01_rb,8.844338e-01_rb,8.846767e-01_rb,8.848902e-01_rb,&
7282 & 8.850795e-01_rb,8.852484e-01_rb,8.854002e-01_rb,8.855374e-01_rb,8.856620e-01_rb,&
7283 & 8.857758e-01_rb,8.858800e-01_rb,8.859759e-01_rb,8.860644e-01_rb,8.861464e-01_rb,&
7284 & 8.862225e-01_rb,8.862935e-01_rb,8.863598e-01_rb,8.864218e-01_rb,8.864800e-01_rb,&
7285 & 8.865347e-01_rb,8.865863e-01_rb,8.866349e-01_rb,8.866809e-01_rb,8.867245e-01_rb,&
7286 & 8.867658e-01_rb,8.868050e-01_rb,8.868423e-01_rb,8.868778e-01_rb,8.869117e-01_rb,&
7287 & 8.869440e-01_rb,8.869749e-01_rb,8.870044e-01_rb /)
7288 asyice2(:, 27) = (/ &
7290 & 8.587495e-01_rb,8.684764e-01_rb,8.728189e-01_rb,8.752872e-01_rb,8.768846e-01_rb,&
7291 & 8.780060e-01_rb,8.788386e-01_rb,8.794824e-01_rb,8.799960e-01_rb,8.804159e-01_rb,&
7292 & 8.807660e-01_rb,8.810626e-01_rb,8.813175e-01_rb,8.815390e-01_rb,8.817335e-01_rb,&
7293 & 8.819057e-01_rb,8.820593e-01_rb,8.821973e-01_rb,8.823220e-01_rb,8.824353e-01_rb,&
7294 & 8.825387e-01_rb,8.826336e-01_rb,8.827209e-01_rb,8.828016e-01_rb,8.828764e-01_rb,&
7295 & 8.829459e-01_rb,8.830108e-01_rb,8.830715e-01_rb,8.831283e-01_rb,8.831817e-01_rb,&
7296 & 8.832320e-01_rb,8.832795e-01_rb,8.833244e-01_rb,8.833668e-01_rb,8.834071e-01_rb,&
7297 & 8.834454e-01_rb,8.834817e-01_rb,8.835164e-01_rb,8.835495e-01_rb,8.835811e-01_rb,&
7298 & 8.836113e-01_rb,8.836402e-01_rb,8.836679e-01_rb /)
7299 asyice2(:, 28) = (/ &
7301 & 8.561110e-01_rb,8.678583e-01_rb,8.727554e-01_rb,8.753892e-01_rb,8.770154e-01_rb,&
7302 & 8.781109e-01_rb,8.788949e-01_rb,8.794812e-01_rb,8.799348e-01_rb,8.802952e-01_rb,&
7303 & 8.805880e-01_rb,8.808300e-01_rb,8.810331e-01_rb,8.812058e-01_rb,8.813543e-01_rb,&
7304 & 8.814832e-01_rb,8.815960e-01_rb,8.816956e-01_rb,8.817839e-01_rb,8.818629e-01_rb,&
7305 & 8.819339e-01_rb,8.819979e-01_rb,8.820560e-01_rb,8.821089e-01_rb,8.821573e-01_rb,&
7306 & 8.822016e-01_rb,8.822425e-01_rb,8.822801e-01_rb,8.823150e-01_rb,8.823474e-01_rb,&
7307 & 8.823775e-01_rb,8.824056e-01_rb,8.824318e-01_rb,8.824564e-01_rb,8.824795e-01_rb,&
7308 & 8.825011e-01_rb,8.825215e-01_rb,8.825408e-01_rb,8.825589e-01_rb,8.825761e-01_rb,&
7309 & 8.825924e-01_rb,8.826078e-01_rb,8.826224e-01_rb /)
7310 asyice2(:, 29) = (/ &
7312 & 8.311124e-01_rb,8.688197e-01_rb,8.900274e-01_rb,9.040696e-01_rb,9.142334e-01_rb,&
7313 & 9.220181e-01_rb,9.282195e-01_rb,9.333048e-01_rb,9.375689e-01_rb,9.412085e-01_rb,&
7314 & 9.443604e-01_rb,9.471230e-01_rb,9.495694e-01_rb,9.517549e-01_rb,9.537224e-01_rb,&
7315 & 9.555057e-01_rb,9.571316e-01_rb,9.586222e-01_rb,9.599952e-01_rb,9.612656e-01_rb,&
7316 & 9.624458e-01_rb,9.635461e-01_rb,9.645756e-01_rb,9.655418e-01_rb,9.664513e-01_rb,&
7317 & 9.673098e-01_rb,9.681222e-01_rb,9.688928e-01_rb,9.696256e-01_rb,9.703237e-01_rb,&
7318 & 9.709903e-01_rb,9.716280e-01_rb,9.722391e-01_rb,9.728258e-01_rb,9.733901e-01_rb,&
7319 & 9.739336e-01_rb,9.744579e-01_rb,9.749645e-01_rb,9.754546e-01_rb,9.759294e-01_rb,&
7320 & 9.763901e-01_rb,9.768376e-01_rb,9.772727e-01_rb /)
7322 ! Hexagonal Ice Particle Parameterization
7323 ! extinction units (ext coef/iwc): [(m^-1)/(g m^-3)]
7324 extice3(:, 16) = (/ &
7326 & 5.194013e-01_rb,3.215089e-01_rb,2.327917e-01_rb,1.824424e-01_rb,1.499977e-01_rb,&
7327 & 1.273492e-01_rb,1.106421e-01_rb,9.780982e-02_rb,8.764435e-02_rb,7.939266e-02_rb,&
7328 & 7.256081e-02_rb,6.681137e-02_rb,6.190600e-02_rb,5.767154e-02_rb,5.397915e-02_rb,&
7329 & 5.073102e-02_rb,4.785151e-02_rb,4.528125e-02_rb,4.297296e-02_rb,4.088853e-02_rb,&
7330 & 3.899690e-02_rb,3.727251e-02_rb,3.569411e-02_rb,3.424393e-02_rb,3.290694e-02_rb,&
7331 & 3.167040e-02_rb,3.052340e-02_rb,2.945654e-02_rb,2.846172e-02_rb,2.753188e-02_rb,&
7332 & 2.666085e-02_rb,2.584322e-02_rb,2.507423e-02_rb,2.434967e-02_rb,2.366579e-02_rb,&
7333 & 2.301926e-02_rb,2.240711e-02_rb,2.182666e-02_rb,2.127551e-02_rb,2.075150e-02_rb,&
7334 & 2.025267e-02_rb,1.977725e-02_rb,1.932364e-02_rb,1.889035e-02_rb,1.847607e-02_rb,&
7335 & 1.807956e-02_rb /)
7336 extice3(:, 17) = (/ &
7338 & 4.901155e-01_rb,3.065286e-01_rb,2.230800e-01_rb,1.753951e-01_rb,1.445402e-01_rb,&
7339 & 1.229417e-01_rb,1.069777e-01_rb,9.469760e-02_rb,8.495824e-02_rb,7.704501e-02_rb,&
7340 & 7.048834e-02_rb,6.496693e-02_rb,6.025353e-02_rb,5.618286e-02_rb,5.263186e-02_rb,&
7341 & 4.950698e-02_rb,4.673585e-02_rb,4.426164e-02_rb,4.203904e-02_rb,4.003153e-02_rb,&
7342 & 3.820932e-02_rb,3.654790e-02_rb,3.502688e-02_rb,3.362919e-02_rb,3.234041e-02_rb,&
7343 & 3.114829e-02_rb,3.004234e-02_rb,2.901356e-02_rb,2.805413e-02_rb,2.715727e-02_rb,&
7344 & 2.631705e-02_rb,2.552828e-02_rb,2.478637e-02_rb,2.408725e-02_rb,2.342734e-02_rb,&
7345 & 2.280343e-02_rb,2.221264e-02_rb,2.165242e-02_rb,2.112043e-02_rb,2.061461e-02_rb,&
7346 & 2.013308e-02_rb,1.967411e-02_rb,1.923616e-02_rb,1.881783e-02_rb,1.841781e-02_rb,&
7347 & 1.803494e-02_rb /)
7348 extice3(:, 18) = (/ &
7350 & 5.056264e-01_rb,3.160261e-01_rb,2.298442e-01_rb,1.805973e-01_rb,1.487318e-01_rb,&
7351 & 1.264258e-01_rb,1.099389e-01_rb,9.725656e-02_rb,8.719819e-02_rb,7.902576e-02_rb,&
7352 & 7.225433e-02_rb,6.655206e-02_rb,6.168427e-02_rb,5.748028e-02_rb,5.381296e-02_rb,&
7353 & 5.058572e-02_rb,4.772383e-02_rb,4.516857e-02_rb,4.287317e-02_rb,4.079990e-02_rb,&
7354 & 3.891801e-02_rb,3.720217e-02_rb,3.563133e-02_rb,3.418786e-02_rb,3.285686e-02_rb,&
7355 & 3.162569e-02_rb,3.048352e-02_rb,2.942104e-02_rb,2.843018e-02_rb,2.750395e-02_rb,&
7356 & 2.663621e-02_rb,2.582160e-02_rb,2.505539e-02_rb,2.433337e-02_rb,2.365185e-02_rb,&
7357 & 2.300750e-02_rb,2.239736e-02_rb,2.181878e-02_rb,2.126937e-02_rb,2.074699e-02_rb,&
7358 & 2.024968e-02_rb,1.977567e-02_rb,1.932338e-02_rb,1.889134e-02_rb,1.847823e-02_rb,&
7359 & 1.808281e-02_rb /)
7360 extice3(:, 19) = (/ &
7362 & 4.881605e-01_rb,3.055237e-01_rb,2.225070e-01_rb,1.750688e-01_rb,1.443736e-01_rb,&
7363 & 1.228869e-01_rb,1.070054e-01_rb,9.478893e-02_rb,8.509997e-02_rb,7.722769e-02_rb,&
7364 & 7.070495e-02_rb,6.521211e-02_rb,6.052311e-02_rb,5.647351e-02_rb,5.294088e-02_rb,&
7365 & 4.983217e-02_rb,4.707539e-02_rb,4.461398e-02_rb,4.240288e-02_rb,4.040575e-02_rb,&
7366 & 3.859298e-02_rb,3.694016e-02_rb,3.542701e-02_rb,3.403655e-02_rb,3.275444e-02_rb,&
7367 & 3.156849e-02_rb,3.046827e-02_rb,2.944481e-02_rb,2.849034e-02_rb,2.759812e-02_rb,&
7368 & 2.676226e-02_rb,2.597757e-02_rb,2.523949e-02_rb,2.454400e-02_rb,2.388750e-02_rb,&
7369 & 2.326682e-02_rb,2.267909e-02_rb,2.212176e-02_rb,2.159253e-02_rb,2.108933e-02_rb,&
7370 & 2.061028e-02_rb,2.015369e-02_rb,1.971801e-02_rb,1.930184e-02_rb,1.890389e-02_rb,&
7371 & 1.852300e-02_rb /)
7372 extice3(:, 20) = (/ &
7374 & 5.103703e-01_rb,3.188144e-01_rb,2.317435e-01_rb,1.819887e-01_rb,1.497944e-01_rb,&
7375 & 1.272584e-01_rb,1.106013e-01_rb,9.778822e-02_rb,8.762610e-02_rb,7.936938e-02_rb,&
7376 & 7.252809e-02_rb,6.676701e-02_rb,6.184901e-02_rb,5.760165e-02_rb,5.389651e-02_rb,&
7377 & 5.063598e-02_rb,4.774457e-02_rb,4.516295e-02_rb,4.284387e-02_rb,4.074922e-02_rb,&
7378 & 3.884792e-02_rb,3.711438e-02_rb,3.552734e-02_rb,3.406898e-02_rb,3.272425e-02_rb,&
7379 & 3.148038e-02_rb,3.032643e-02_rb,2.925299e-02_rb,2.825191e-02_rb,2.731612e-02_rb,&
7380 & 2.643943e-02_rb,2.561642e-02_rb,2.484230e-02_rb,2.411284e-02_rb,2.342429e-02_rb,&
7381 & 2.277329e-02_rb,2.215686e-02_rb,2.157231e-02_rb,2.101724e-02_rb,2.048946e-02_rb,&
7382 & 1.998702e-02_rb,1.950813e-02_rb,1.905118e-02_rb,1.861468e-02_rb,1.819730e-02_rb,&
7383 & 1.779781e-02_rb /)
7384 extice3(:, 21) = (/ &
7386 & 5.031161e-01_rb,3.144511e-01_rb,2.286942e-01_rb,1.796903e-01_rb,1.479819e-01_rb,&
7387 & 1.257860e-01_rb,1.093803e-01_rb,9.676059e-02_rb,8.675183e-02_rb,7.861971e-02_rb,&
7388 & 7.188168e-02_rb,6.620754e-02_rb,6.136376e-02_rb,5.718050e-02_rb,5.353127e-02_rb,&
7389 & 5.031995e-02_rb,4.747218e-02_rb,4.492952e-02_rb,4.264544e-02_rb,4.058240e-02_rb,&
7390 & 3.870979e-02_rb,3.700242e-02_rb,3.543933e-02_rb,3.400297e-02_rb,3.267854e-02_rb,&
7391 & 3.145345e-02_rb,3.031691e-02_rb,2.925967e-02_rb,2.827370e-02_rb,2.735203e-02_rb,&
7392 & 2.648858e-02_rb,2.567798e-02_rb,2.491555e-02_rb,2.419710e-02_rb,2.351893e-02_rb,&
7393 & 2.287776e-02_rb,2.227063e-02_rb,2.169491e-02_rb,2.114821e-02_rb,2.062840e-02_rb,&
7394 & 2.013354e-02_rb,1.966188e-02_rb,1.921182e-02_rb,1.878191e-02_rb,1.837083e-02_rb,&
7395 & 1.797737e-02_rb /)
7396 extice3(:, 22) = (/ &
7398 & 4.949453e-01_rb,3.095918e-01_rb,2.253402e-01_rb,1.771964e-01_rb,1.460446e-01_rb,&
7399 & 1.242383e-01_rb,1.081206e-01_rb,9.572235e-02_rb,8.588928e-02_rb,7.789990e-02_rb,&
7400 & 7.128013e-02_rb,6.570559e-02_rb,6.094684e-02_rb,5.683701e-02_rb,5.325183e-02_rb,&
7401 & 5.009688e-02_rb,4.729909e-02_rb,4.480106e-02_rb,4.255708e-02_rb,4.053025e-02_rb,&
7402 & 3.869051e-02_rb,3.701310e-02_rb,3.547745e-02_rb,3.406631e-02_rb,3.276512e-02_rb,&
7403 & 3.156153e-02_rb,3.044494e-02_rb,2.940626e-02_rb,2.843759e-02_rb,2.753211e-02_rb,&
7404 & 2.668381e-02_rb,2.588744e-02_rb,2.513839e-02_rb,2.443255e-02_rb,2.376629e-02_rb,&
7405 & 2.313637e-02_rb,2.253990e-02_rb,2.197428e-02_rb,2.143718e-02_rb,2.092649e-02_rb,&
7406 & 2.044032e-02_rb,1.997694e-02_rb,1.953478e-02_rb,1.911241e-02_rb,1.870855e-02_rb,&
7407 & 1.832199e-02_rb /)
7408 extice3(:, 23) = (/ &
7410 & 5.052816e-01_rb,3.157665e-01_rb,2.296233e-01_rb,1.803986e-01_rb,1.485473e-01_rb,&
7411 & 1.262514e-01_rb,1.097718e-01_rb,9.709524e-02_rb,8.704139e-02_rb,7.887264e-02_rb,&
7412 & 7.210424e-02_rb,6.640454e-02_rb,6.153894e-02_rb,5.733683e-02_rb,5.367116e-02_rb,&
7413 & 5.044537e-02_rb,4.758477e-02_rb,4.503066e-02_rb,4.273629e-02_rb,4.066395e-02_rb,&
7414 & 3.878291e-02_rb,3.706784e-02_rb,3.549771e-02_rb,3.405488e-02_rb,3.272448e-02_rb,&
7415 & 3.149387e-02_rb,3.035221e-02_rb,2.929020e-02_rb,2.829979e-02_rb,2.737397e-02_rb,&
7416 & 2.650663e-02_rb,2.569238e-02_rb,2.492651e-02_rb,2.420482e-02_rb,2.352361e-02_rb,&
7417 & 2.287954e-02_rb,2.226968e-02_rb,2.169136e-02_rb,2.114220e-02_rb,2.062005e-02_rb,&
7418 & 2.012296e-02_rb,1.964917e-02_rb,1.919709e-02_rb,1.876524e-02_rb,1.835231e-02_rb,&
7419 & 1.795707e-02_rb /)
7420 extice3(:, 24) = (/ &
7422 & 5.042067e-01_rb,3.151195e-01_rb,2.291708e-01_rb,1.800573e-01_rb,1.482779e-01_rb,&
7423 & 1.260324e-01_rb,1.095900e-01_rb,9.694202e-02_rb,8.691087e-02_rb,7.876056e-02_rb,&
7424 & 7.200745e-02_rb,6.632062e-02_rb,6.146600e-02_rb,5.727338e-02_rb,5.361599e-02_rb,&
7425 & 5.039749e-02_rb,4.754334e-02_rb,4.499500e-02_rb,4.270580e-02_rb,4.063815e-02_rb,&
7426 & 3.876135e-02_rb,3.705016e-02_rb,3.548357e-02_rb,3.404400e-02_rb,3.271661e-02_rb,&
7427 & 3.148877e-02_rb,3.034969e-02_rb,2.929008e-02_rb,2.830191e-02_rb,2.737818e-02_rb,&
7428 & 2.651279e-02_rb,2.570039e-02_rb,2.493624e-02_rb,2.421618e-02_rb,2.353650e-02_rb,&
7429 & 2.289390e-02_rb,2.228541e-02_rb,2.170840e-02_rb,2.116048e-02_rb,2.063950e-02_rb,&
7430 & 2.014354e-02_rb,1.967082e-02_rb,1.921975e-02_rb,1.878888e-02_rb,1.837688e-02_rb,&
7431 & 1.798254e-02_rb /)
7432 extice3(:, 25) = (/ &
7434 & 5.022507e-01_rb,3.139246e-01_rb,2.283218e-01_rb,1.794059e-01_rb,1.477544e-01_rb,&
7435 & 1.255984e-01_rb,1.092222e-01_rb,9.662516e-02_rb,8.663439e-02_rb,7.851688e-02_rb,&
7436 & 7.179095e-02_rb,6.612700e-02_rb,6.129193e-02_rb,5.711618e-02_rb,5.347351e-02_rb,&
7437 & 5.026796e-02_rb,4.742530e-02_rb,4.488721e-02_rb,4.260724e-02_rb,4.054790e-02_rb,&
7438 & 3.867866e-02_rb,3.697435e-02_rb,3.541407e-02_rb,3.398029e-02_rb,3.265824e-02_rb,&
7439 & 3.143535e-02_rb,3.030085e-02_rb,2.924551e-02_rb,2.826131e-02_rb,2.734130e-02_rb,&
7440 & 2.647939e-02_rb,2.567026e-02_rb,2.490919e-02_rb,2.419203e-02_rb,2.351509e-02_rb,&
7441 & 2.287507e-02_rb,2.226903e-02_rb,2.169434e-02_rb,2.114862e-02_rb,2.062975e-02_rb,&
7442 & 2.013578e-02_rb,1.966496e-02_rb,1.921571e-02_rb,1.878658e-02_rb,1.837623e-02_rb,&
7443 & 1.798348e-02_rb /)
7444 extice3(:, 26) = (/ &
7446 & 5.068316e-01_rb,3.166869e-01_rb,2.302576e-01_rb,1.808693e-01_rb,1.489122e-01_rb,&
7447 & 1.265423e-01_rb,1.100080e-01_rb,9.728926e-02_rb,8.720201e-02_rb,7.900612e-02_rb,&
7448 & 7.221524e-02_rb,6.649660e-02_rb,6.161484e-02_rb,5.739877e-02_rb,5.372093e-02_rb,&
7449 & 5.048442e-02_rb,4.761431e-02_rb,4.505172e-02_rb,4.274972e-02_rb,4.067050e-02_rb,&
7450 & 3.878321e-02_rb,3.706244e-02_rb,3.548710e-02_rb,3.403948e-02_rb,3.270466e-02_rb,&
7451 & 3.146995e-02_rb,3.032450e-02_rb,2.925897e-02_rb,2.826527e-02_rb,2.733638e-02_rb,&
7452 & 2.646615e-02_rb,2.564920e-02_rb,2.488078e-02_rb,2.415670e-02_rb,2.347322e-02_rb,&
7453 & 2.282702e-02_rb,2.221513e-02_rb,2.163489e-02_rb,2.108390e-02_rb,2.056002e-02_rb,&
7454 & 2.006128e-02_rb,1.958591e-02_rb,1.913232e-02_rb,1.869904e-02_rb,1.828474e-02_rb,&
7455 & 1.788819e-02_rb /)
7456 extice3(:, 27) = (/ &
7458 & 5.077707e-01_rb,3.172636e-01_rb,2.306695e-01_rb,1.811871e-01_rb,1.491691e-01_rb,&
7459 & 1.267565e-01_rb,1.101907e-01_rb,9.744773e-02_rb,8.734125e-02_rb,7.912973e-02_rb,&
7460 & 7.232591e-02_rb,6.659637e-02_rb,6.170530e-02_rb,5.748120e-02_rb,5.379634e-02_rb,&
7461 & 5.055367e-02_rb,4.767809e-02_rb,4.511061e-02_rb,4.280423e-02_rb,4.072104e-02_rb,&
7462 & 3.883015e-02_rb,3.710611e-02_rb,3.552776e-02_rb,3.407738e-02_rb,3.274002e-02_rb,&
7463 & 3.150296e-02_rb,3.035532e-02_rb,2.928776e-02_rb,2.829216e-02_rb,2.736150e-02_rb,&
7464 & 2.648961e-02_rb,2.567111e-02_rb,2.490123e-02_rb,2.417576e-02_rb,2.349098e-02_rb,&
7465 & 2.284354e-02_rb,2.223049e-02_rb,2.164914e-02_rb,2.109711e-02_rb,2.057222e-02_rb,&
7466 & 2.007253e-02_rb,1.959626e-02_rb,1.914181e-02_rb,1.870770e-02_rb,1.829261e-02_rb,&
7467 & 1.789531e-02_rb /)
7468 extice3(:, 28) = (/ &
7470 & 5.062281e-01_rb,3.163402e-01_rb,2.300275e-01_rb,1.807060e-01_rb,1.487921e-01_rb,&
7471 & 1.264523e-01_rb,1.099403e-01_rb,9.723879e-02_rb,8.716516e-02_rb,7.898034e-02_rb,&
7472 & 7.219863e-02_rb,6.648771e-02_rb,6.161254e-02_rb,5.740217e-02_rb,5.372929e-02_rb,&
7473 & 5.049716e-02_rb,4.763092e-02_rb,4.507179e-02_rb,4.277290e-02_rb,4.069649e-02_rb,&
7474 & 3.881175e-02_rb,3.709331e-02_rb,3.552008e-02_rb,3.407442e-02_rb,3.274141e-02_rb,&
7475 & 3.150837e-02_rb,3.036447e-02_rb,2.930037e-02_rb,2.830801e-02_rb,2.738037e-02_rb,&
7476 & 2.651132e-02_rb,2.569547e-02_rb,2.492810e-02_rb,2.420499e-02_rb,2.352243e-02_rb,&
7477 & 2.287710e-02_rb,2.226604e-02_rb,2.168658e-02_rb,2.113634e-02_rb,2.061316e-02_rb,&
7478 & 2.011510e-02_rb,1.964038e-02_rb,1.918740e-02_rb,1.875471e-02_rb,1.834096e-02_rb,&
7479 & 1.794495e-02_rb /)
7480 extice3(:, 29) = (/ &
7482 & 1.338834e-01_rb,1.924912e-01_rb,1.755523e-01_rb,1.534793e-01_rb,1.343937e-01_rb,&
7483 & 1.187883e-01_rb,1.060654e-01_rb,9.559106e-02_rb,8.685880e-02_rb,7.948698e-02_rb,&
7484 & 7.319086e-02_rb,6.775669e-02_rb,6.302215e-02_rb,5.886236e-02_rb,5.517996e-02_rb,&
7485 & 5.189810e-02_rb,4.895539e-02_rb,4.630225e-02_rb,4.389823e-02_rb,4.171002e-02_rb,&
7486 & 3.970998e-02_rb,3.787493e-02_rb,3.618537e-02_rb,3.462471e-02_rb,3.317880e-02_rb,&
7487 & 3.183547e-02_rb,3.058421e-02_rb,2.941590e-02_rb,2.832256e-02_rb,2.729724e-02_rb,&
7488 & 2.633377e-02_rb,2.542675e-02_rb,2.457136e-02_rb,2.376332e-02_rb,2.299882e-02_rb,&
7489 & 2.227443e-02_rb,2.158707e-02_rb,2.093400e-02_rb,2.031270e-02_rb,1.972091e-02_rb,&
7490 & 1.915659e-02_rb,1.861787e-02_rb,1.810304e-02_rb,1.761055e-02_rb,1.713899e-02_rb,&
7491 & 1.668704e-02_rb /)
7493 ! single-scattering albedo: unitless
7494 ssaice3(:, 16) = (/ &
7496 & 6.749442e-01_rb,6.649947e-01_rb,6.565828e-01_rb,6.489928e-01_rb,6.420046e-01_rb,&
7497 & 6.355231e-01_rb,6.294964e-01_rb,6.238901e-01_rb,6.186783e-01_rb,6.138395e-01_rb,&
7498 & 6.093543e-01_rb,6.052049e-01_rb,6.013742e-01_rb,5.978457e-01_rb,5.946030e-01_rb,&
7499 & 5.916302e-01_rb,5.889115e-01_rb,5.864310e-01_rb,5.841731e-01_rb,5.821221e-01_rb,&
7500 & 5.802624e-01_rb,5.785785e-01_rb,5.770549e-01_rb,5.756759e-01_rb,5.744262e-01_rb,&
7501 & 5.732901e-01_rb,5.722524e-01_rb,5.712974e-01_rb,5.704097e-01_rb,5.695739e-01_rb,&
7502 & 5.687747e-01_rb,5.679964e-01_rb,5.672238e-01_rb,5.664415e-01_rb,5.656340e-01_rb,&
7503 & 5.647860e-01_rb,5.638821e-01_rb,5.629070e-01_rb,5.618452e-01_rb,5.606815e-01_rb,&
7504 & 5.594006e-01_rb,5.579870e-01_rb,5.564255e-01_rb,5.547008e-01_rb,5.527976e-01_rb,&
7505 & 5.507005e-01_rb /)
7506 ssaice3(:, 17) = (/ &
7508 & 7.628550e-01_rb,7.567297e-01_rb,7.508463e-01_rb,7.451972e-01_rb,7.397745e-01_rb,&
7509 & 7.345705e-01_rb,7.295775e-01_rb,7.247881e-01_rb,7.201945e-01_rb,7.157894e-01_rb,&
7510 & 7.115652e-01_rb,7.075145e-01_rb,7.036300e-01_rb,6.999044e-01_rb,6.963304e-01_rb,&
7511 & 6.929007e-01_rb,6.896083e-01_rb,6.864460e-01_rb,6.834067e-01_rb,6.804833e-01_rb,&
7512 & 6.776690e-01_rb,6.749567e-01_rb,6.723397e-01_rb,6.698109e-01_rb,6.673637e-01_rb,&
7513 & 6.649913e-01_rb,6.626870e-01_rb,6.604441e-01_rb,6.582561e-01_rb,6.561163e-01_rb,&
7514 & 6.540182e-01_rb,6.519554e-01_rb,6.499215e-01_rb,6.479099e-01_rb,6.459145e-01_rb,&
7515 & 6.439289e-01_rb,6.419468e-01_rb,6.399621e-01_rb,6.379686e-01_rb,6.359601e-01_rb,&
7516 & 6.339306e-01_rb,6.318740e-01_rb,6.297845e-01_rb,6.276559e-01_rb,6.254825e-01_rb,&
7517 & 6.232583e-01_rb /)
7518 ssaice3(:, 18) = (/ &
7520 & 9.924147e-01_rb,9.882792e-01_rb,9.842257e-01_rb,9.802522e-01_rb,9.763566e-01_rb,&
7521 & 9.725367e-01_rb,9.687905e-01_rb,9.651157e-01_rb,9.615104e-01_rb,9.579725e-01_rb,&
7522 & 9.544997e-01_rb,9.510901e-01_rb,9.477416e-01_rb,9.444520e-01_rb,9.412194e-01_rb,&
7523 & 9.380415e-01_rb,9.349165e-01_rb,9.318421e-01_rb,9.288164e-01_rb,9.258373e-01_rb,&
7524 & 9.229027e-01_rb,9.200106e-01_rb,9.171589e-01_rb,9.143457e-01_rb,9.115688e-01_rb,&
7525 & 9.088263e-01_rb,9.061161e-01_rb,9.034362e-01_rb,9.007846e-01_rb,8.981592e-01_rb,&
7526 & 8.955581e-01_rb,8.929792e-01_rb,8.904206e-01_rb,8.878803e-01_rb,8.853562e-01_rb,&
7527 & 8.828464e-01_rb,8.803488e-01_rb,8.778616e-01_rb,8.753827e-01_rb,8.729102e-01_rb,&
7528 & 8.704421e-01_rb,8.679764e-01_rb,8.655112e-01_rb,8.630445e-01_rb,8.605744e-01_rb,&
7529 & 8.580989e-01_rb /)
7530 ssaice3(:, 19) = (/ &
7532 & 9.629413e-01_rb,9.517182e-01_rb,9.409209e-01_rb,9.305366e-01_rb,9.205529e-01_rb,&
7533 & 9.109569e-01_rb,9.017362e-01_rb,8.928780e-01_rb,8.843699e-01_rb,8.761992e-01_rb,&
7534 & 8.683536e-01_rb,8.608204e-01_rb,8.535873e-01_rb,8.466417e-01_rb,8.399712e-01_rb,&
7535 & 8.335635e-01_rb,8.274062e-01_rb,8.214868e-01_rb,8.157932e-01_rb,8.103129e-01_rb,&
7536 & 8.050336e-01_rb,7.999432e-01_rb,7.950294e-01_rb,7.902798e-01_rb,7.856825e-01_rb,&
7537 & 7.812250e-01_rb,7.768954e-01_rb,7.726815e-01_rb,7.685711e-01_rb,7.645522e-01_rb,&
7538 & 7.606126e-01_rb,7.567404e-01_rb,7.529234e-01_rb,7.491498e-01_rb,7.454074e-01_rb,&
7539 & 7.416844e-01_rb,7.379688e-01_rb,7.342485e-01_rb,7.305118e-01_rb,7.267468e-01_rb,&
7540 & 7.229415e-01_rb,7.190841e-01_rb,7.151628e-01_rb,7.111657e-01_rb,7.070811e-01_rb,&
7541 & 7.028972e-01_rb /)
7542 ssaice3(:, 20) = (/ &
7544 & 9.942270e-01_rb,9.909206e-01_rb,9.876775e-01_rb,9.844960e-01_rb,9.813746e-01_rb,&
7545 & 9.783114e-01_rb,9.753049e-01_rb,9.723535e-01_rb,9.694553e-01_rb,9.666088e-01_rb,&
7546 & 9.638123e-01_rb,9.610641e-01_rb,9.583626e-01_rb,9.557060e-01_rb,9.530928e-01_rb,&
7547 & 9.505211e-01_rb,9.479895e-01_rb,9.454961e-01_rb,9.430393e-01_rb,9.406174e-01_rb,&
7548 & 9.382288e-01_rb,9.358717e-01_rb,9.335446e-01_rb,9.312456e-01_rb,9.289731e-01_rb,&
7549 & 9.267255e-01_rb,9.245010e-01_rb,9.222980e-01_rb,9.201147e-01_rb,9.179496e-01_rb,&
7550 & 9.158008e-01_rb,9.136667e-01_rb,9.115457e-01_rb,9.094359e-01_rb,9.073358e-01_rb,&
7551 & 9.052436e-01_rb,9.031577e-01_rb,9.010763e-01_rb,8.989977e-01_rb,8.969203e-01_rb,&
7552 & 8.948423e-01_rb,8.927620e-01_rb,8.906778e-01_rb,8.885879e-01_rb,8.864907e-01_rb,&
7553 & 8.843843e-01_rb /)
7554 ssaice3(:, 21) = (/ &
7556 & 9.934014e-01_rb,9.899331e-01_rb,9.865537e-01_rb,9.832610e-01_rb,9.800523e-01_rb,&
7557 & 9.769254e-01_rb,9.738777e-01_rb,9.709069e-01_rb,9.680106e-01_rb,9.651862e-01_rb,&
7558 & 9.624315e-01_rb,9.597439e-01_rb,9.571212e-01_rb,9.545608e-01_rb,9.520605e-01_rb,&
7559 & 9.496177e-01_rb,9.472301e-01_rb,9.448954e-01_rb,9.426111e-01_rb,9.403749e-01_rb,&
7560 & 9.381843e-01_rb,9.360370e-01_rb,9.339307e-01_rb,9.318629e-01_rb,9.298313e-01_rb,&
7561 & 9.278336e-01_rb,9.258673e-01_rb,9.239302e-01_rb,9.220198e-01_rb,9.201338e-01_rb,&
7562 & 9.182700e-01_rb,9.164258e-01_rb,9.145991e-01_rb,9.127874e-01_rb,9.109884e-01_rb,&
7563 & 9.091999e-01_rb,9.074194e-01_rb,9.056447e-01_rb,9.038735e-01_rb,9.021033e-01_rb,&
7564 & 9.003320e-01_rb,8.985572e-01_rb,8.967766e-01_rb,8.949879e-01_rb,8.931888e-01_rb,&
7565 & 8.913770e-01_rb /)
7566 ssaice3(:, 22) = (/ &
7568 & 9.994833e-01_rb,9.992055e-01_rb,9.989278e-01_rb,9.986500e-01_rb,9.983724e-01_rb,&
7569 & 9.980947e-01_rb,9.978172e-01_rb,9.975397e-01_rb,9.972623e-01_rb,9.969849e-01_rb,&
7570 & 9.967077e-01_rb,9.964305e-01_rb,9.961535e-01_rb,9.958765e-01_rb,9.955997e-01_rb,&
7571 & 9.953230e-01_rb,9.950464e-01_rb,9.947699e-01_rb,9.944936e-01_rb,9.942174e-01_rb,&
7572 & 9.939414e-01_rb,9.936656e-01_rb,9.933899e-01_rb,9.931144e-01_rb,9.928390e-01_rb,&
7573 & 9.925639e-01_rb,9.922889e-01_rb,9.920141e-01_rb,9.917396e-01_rb,9.914652e-01_rb,&
7574 & 9.911911e-01_rb,9.909171e-01_rb,9.906434e-01_rb,9.903700e-01_rb,9.900967e-01_rb,&
7575 & 9.898237e-01_rb,9.895510e-01_rb,9.892784e-01_rb,9.890062e-01_rb,9.887342e-01_rb,&
7576 & 9.884625e-01_rb,9.881911e-01_rb,9.879199e-01_rb,9.876490e-01_rb,9.873784e-01_rb,&
7577 & 9.871081e-01_rb /)
7578 ssaice3(:, 23) = (/ &
7580 & 9.999343e-01_rb,9.998917e-01_rb,9.998492e-01_rb,9.998067e-01_rb,9.997642e-01_rb,&
7581 & 9.997218e-01_rb,9.996795e-01_rb,9.996372e-01_rb,9.995949e-01_rb,9.995528e-01_rb,&
7582 & 9.995106e-01_rb,9.994686e-01_rb,9.994265e-01_rb,9.993845e-01_rb,9.993426e-01_rb,&
7583 & 9.993007e-01_rb,9.992589e-01_rb,9.992171e-01_rb,9.991754e-01_rb,9.991337e-01_rb,&
7584 & 9.990921e-01_rb,9.990505e-01_rb,9.990089e-01_rb,9.989674e-01_rb,9.989260e-01_rb,&
7585 & 9.988846e-01_rb,9.988432e-01_rb,9.988019e-01_rb,9.987606e-01_rb,9.987194e-01_rb,&
7586 & 9.986782e-01_rb,9.986370e-01_rb,9.985959e-01_rb,9.985549e-01_rb,9.985139e-01_rb,&
7587 & 9.984729e-01_rb,9.984319e-01_rb,9.983910e-01_rb,9.983502e-01_rb,9.983094e-01_rb,&
7588 & 9.982686e-01_rb,9.982279e-01_rb,9.981872e-01_rb,9.981465e-01_rb,9.981059e-01_rb,&
7589 & 9.980653e-01_rb /)
7590 ssaice3(:, 24) = (/ &
7592 & 9.999978e-01_rb,9.999965e-01_rb,9.999952e-01_rb,9.999939e-01_rb,9.999926e-01_rb,&
7593 & 9.999913e-01_rb,9.999900e-01_rb,9.999887e-01_rb,9.999873e-01_rb,9.999860e-01_rb,&
7594 & 9.999847e-01_rb,9.999834e-01_rb,9.999821e-01_rb,9.999808e-01_rb,9.999795e-01_rb,&
7595 & 9.999782e-01_rb,9.999769e-01_rb,9.999756e-01_rb,9.999743e-01_rb,9.999730e-01_rb,&
7596 & 9.999717e-01_rb,9.999704e-01_rb,9.999691e-01_rb,9.999678e-01_rb,9.999665e-01_rb,&
7597 & 9.999652e-01_rb,9.999639e-01_rb,9.999626e-01_rb,9.999613e-01_rb,9.999600e-01_rb,&
7598 & 9.999587e-01_rb,9.999574e-01_rb,9.999561e-01_rb,9.999548e-01_rb,9.999535e-01_rb,&
7599 & 9.999522e-01_rb,9.999509e-01_rb,9.999496e-01_rb,9.999483e-01_rb,9.999470e-01_rb,&
7600 & 9.999457e-01_rb,9.999444e-01_rb,9.999431e-01_rb,9.999418e-01_rb,9.999405e-01_rb,&
7601 & 9.999392e-01_rb /)
7602 ssaice3(:, 25) = (/ &
7604 & 9.999994e-01_rb,9.999993e-01_rb,9.999991e-01_rb,9.999990e-01_rb,9.999989e-01_rb,&
7605 & 9.999987e-01_rb,9.999986e-01_rb,9.999984e-01_rb,9.999983e-01_rb,9.999982e-01_rb,&
7606 & 9.999980e-01_rb,9.999979e-01_rb,9.999977e-01_rb,9.999976e-01_rb,9.999975e-01_rb,&
7607 & 9.999973e-01_rb,9.999972e-01_rb,9.999970e-01_rb,9.999969e-01_rb,9.999967e-01_rb,&
7608 & 9.999966e-01_rb,9.999965e-01_rb,9.999963e-01_rb,9.999962e-01_rb,9.999960e-01_rb,&
7609 & 9.999959e-01_rb,9.999957e-01_rb,9.999956e-01_rb,9.999954e-01_rb,9.999953e-01_rb,&
7610 & 9.999952e-01_rb,9.999950e-01_rb,9.999949e-01_rb,9.999947e-01_rb,9.999946e-01_rb,&
7611 & 9.999944e-01_rb,9.999943e-01_rb,9.999941e-01_rb,9.999940e-01_rb,9.999939e-01_rb,&
7612 & 9.999937e-01_rb,9.999936e-01_rb,9.999934e-01_rb,9.999933e-01_rb,9.999931e-01_rb,&
7613 & 9.999930e-01_rb /)
7614 ssaice3(:, 26) = (/ &
7616 & 9.999997e-01_rb,9.999995e-01_rb,9.999992e-01_rb,9.999990e-01_rb,9.999987e-01_rb,&
7617 & 9.999985e-01_rb,9.999983e-01_rb,9.999980e-01_rb,9.999978e-01_rb,9.999976e-01_rb,&
7618 & 9.999973e-01_rb,9.999971e-01_rb,9.999969e-01_rb,9.999967e-01_rb,9.999965e-01_rb,&
7619 & 9.999963e-01_rb,9.999960e-01_rb,9.999958e-01_rb,9.999956e-01_rb,9.999954e-01_rb,&
7620 & 9.999952e-01_rb,9.999950e-01_rb,9.999948e-01_rb,9.999946e-01_rb,9.999944e-01_rb,&
7621 & 9.999942e-01_rb,9.999939e-01_rb,9.999937e-01_rb,9.999935e-01_rb,9.999933e-01_rb,&
7622 & 9.999931e-01_rb,9.999929e-01_rb,9.999927e-01_rb,9.999925e-01_rb,9.999923e-01_rb,&
7623 & 9.999920e-01_rb,9.999918e-01_rb,9.999916e-01_rb,9.999914e-01_rb,9.999911e-01_rb,&
7624 & 9.999909e-01_rb,9.999907e-01_rb,9.999905e-01_rb,9.999902e-01_rb,9.999900e-01_rb,&
7625 & 9.999897e-01_rb /)
7626 ssaice3(:, 27) = (/ &
7628 & 9.999991e-01_rb,9.999985e-01_rb,9.999980e-01_rb,9.999974e-01_rb,9.999968e-01_rb,&
7629 & 9.999963e-01_rb,9.999957e-01_rb,9.999951e-01_rb,9.999946e-01_rb,9.999940e-01_rb,&
7630 & 9.999934e-01_rb,9.999929e-01_rb,9.999923e-01_rb,9.999918e-01_rb,9.999912e-01_rb,&
7631 & 9.999907e-01_rb,9.999901e-01_rb,9.999896e-01_rb,9.999891e-01_rb,9.999885e-01_rb,&
7632 & 9.999880e-01_rb,9.999874e-01_rb,9.999869e-01_rb,9.999863e-01_rb,9.999858e-01_rb,&
7633 & 9.999853e-01_rb,9.999847e-01_rb,9.999842e-01_rb,9.999836e-01_rb,9.999831e-01_rb,&
7634 & 9.999826e-01_rb,9.999820e-01_rb,9.999815e-01_rb,9.999809e-01_rb,9.999804e-01_rb,&
7635 & 9.999798e-01_rb,9.999793e-01_rb,9.999787e-01_rb,9.999782e-01_rb,9.999776e-01_rb,&
7636 & 9.999770e-01_rb,9.999765e-01_rb,9.999759e-01_rb,9.999754e-01_rb,9.999748e-01_rb,&
7637 & 9.999742e-01_rb /)
7638 ssaice3(:, 28) = (/ &
7640 & 9.999975e-01_rb,9.999961e-01_rb,9.999946e-01_rb,9.999931e-01_rb,9.999917e-01_rb,&
7641 & 9.999903e-01_rb,9.999888e-01_rb,9.999874e-01_rb,9.999859e-01_rb,9.999845e-01_rb,&
7642 & 9.999831e-01_rb,9.999816e-01_rb,9.999802e-01_rb,9.999788e-01_rb,9.999774e-01_rb,&
7643 & 9.999759e-01_rb,9.999745e-01_rb,9.999731e-01_rb,9.999717e-01_rb,9.999702e-01_rb,&
7644 & 9.999688e-01_rb,9.999674e-01_rb,9.999660e-01_rb,9.999646e-01_rb,9.999631e-01_rb,&
7645 & 9.999617e-01_rb,9.999603e-01_rb,9.999589e-01_rb,9.999574e-01_rb,9.999560e-01_rb,&
7646 & 9.999546e-01_rb,9.999532e-01_rb,9.999517e-01_rb,9.999503e-01_rb,9.999489e-01_rb,&
7647 & 9.999474e-01_rb,9.999460e-01_rb,9.999446e-01_rb,9.999431e-01_rb,9.999417e-01_rb,&
7648 & 9.999403e-01_rb,9.999388e-01_rb,9.999374e-01_rb,9.999359e-01_rb,9.999345e-01_rb,&
7649 & 9.999330e-01_rb /)
7650 ssaice3(:, 29) = (/ &
7652 & 4.526500e-01_rb,5.287890e-01_rb,5.410487e-01_rb,5.459865e-01_rb,5.485149e-01_rb,&
7653 & 5.498914e-01_rb,5.505895e-01_rb,5.508310e-01_rb,5.507364e-01_rb,5.503793e-01_rb,&
7654 & 5.498090e-01_rb,5.490612e-01_rb,5.481637e-01_rb,5.471395e-01_rb,5.460083e-01_rb,&
7655 & 5.447878e-01_rb,5.434946e-01_rb,5.421442e-01_rb,5.407514e-01_rb,5.393309e-01_rb,&
7656 & 5.378970e-01_rb,5.364641e-01_rb,5.350464e-01_rb,5.336582e-01_rb,5.323140e-01_rb,&
7657 & 5.310283e-01_rb,5.298158e-01_rb,5.286914e-01_rb,5.276704e-01_rb,5.267680e-01_rb,&
7658 & 5.260000e-01_rb,5.253823e-01_rb,5.249311e-01_rb,5.246629e-01_rb,5.245946e-01_rb,&
7659 & 5.247434e-01_rb,5.251268e-01_rb,5.257626e-01_rb,5.266693e-01_rb,5.278653e-01_rb,&
7660 & 5.293698e-01_rb,5.312022e-01_rb,5.333823e-01_rb,5.359305e-01_rb,5.388676e-01_rb,&
7661 & 5.422146e-01_rb /)
7663 ! asymmetry factor: unitless
7664 asyice3(:, 16) = (/ &
7666 & 8.340752e-01_rb,8.435170e-01_rb,8.517487e-01_rb,8.592064e-01_rb,8.660387e-01_rb,&
7667 & 8.723204e-01_rb,8.780997e-01_rb,8.834137e-01_rb,8.882934e-01_rb,8.927662e-01_rb,&
7668 & 8.968577e-01_rb,9.005914e-01_rb,9.039899e-01_rb,9.070745e-01_rb,9.098659e-01_rb,&
7669 & 9.123836e-01_rb,9.146466e-01_rb,9.166734e-01_rb,9.184817e-01_rb,9.200886e-01_rb,&
7670 & 9.215109e-01_rb,9.227648e-01_rb,9.238661e-01_rb,9.248304e-01_rb,9.256727e-01_rb,&
7671 & 9.264078e-01_rb,9.270505e-01_rb,9.276150e-01_rb,9.281156e-01_rb,9.285662e-01_rb,&
7672 & 9.289806e-01_rb,9.293726e-01_rb,9.297557e-01_rb,9.301435e-01_rb,9.305491e-01_rb,&
7673 & 9.309859e-01_rb,9.314671e-01_rb,9.320055e-01_rb,9.326140e-01_rb,9.333053e-01_rb,&
7674 & 9.340919e-01_rb,9.349861e-01_rb,9.360000e-01_rb,9.371451e-01_rb,9.384329e-01_rb,&
7675 & 9.398744e-01_rb /)
7676 asyice3(:, 17) = (/ &
7678 & 8.728160e-01_rb,8.777333e-01_rb,8.823754e-01_rb,8.867535e-01_rb,8.908785e-01_rb,&
7679 & 8.947611e-01_rb,8.984118e-01_rb,9.018408e-01_rb,9.050582e-01_rb,9.080739e-01_rb,&
7680 & 9.108976e-01_rb,9.135388e-01_rb,9.160068e-01_rb,9.183106e-01_rb,9.204595e-01_rb,&
7681 & 9.224620e-01_rb,9.243271e-01_rb,9.260632e-01_rb,9.276788e-01_rb,9.291822e-01_rb,&
7682 & 9.305817e-01_rb,9.318853e-01_rb,9.331012e-01_rb,9.342372e-01_rb,9.353013e-01_rb,&
7683 & 9.363013e-01_rb,9.372450e-01_rb,9.381400e-01_rb,9.389939e-01_rb,9.398145e-01_rb,&
7684 & 9.406092e-01_rb,9.413856e-01_rb,9.421511e-01_rb,9.429131e-01_rb,9.436790e-01_rb,&
7685 & 9.444561e-01_rb,9.452517e-01_rb,9.460729e-01_rb,9.469270e-01_rb,9.478209e-01_rb,&
7686 & 9.487617e-01_rb,9.497562e-01_rb,9.508112e-01_rb,9.519335e-01_rb,9.531294e-01_rb,&
7687 & 9.544055e-01_rb /)
7688 asyice3(:, 18) = (/ &
7690 & 7.897566e-01_rb,7.948704e-01_rb,7.998041e-01_rb,8.045623e-01_rb,8.091495e-01_rb,&
7691 & 8.135702e-01_rb,8.178290e-01_rb,8.219305e-01_rb,8.258790e-01_rb,8.296792e-01_rb,&
7692 & 8.333355e-01_rb,8.368524e-01_rb,8.402343e-01_rb,8.434856e-01_rb,8.466108e-01_rb,&
7693 & 8.496143e-01_rb,8.525004e-01_rb,8.552737e-01_rb,8.579384e-01_rb,8.604990e-01_rb,&
7694 & 8.629597e-01_rb,8.653250e-01_rb,8.675992e-01_rb,8.697867e-01_rb,8.718916e-01_rb,&
7695 & 8.739185e-01_rb,8.758715e-01_rb,8.777551e-01_rb,8.795734e-01_rb,8.813308e-01_rb,&
7696 & 8.830315e-01_rb,8.846799e-01_rb,8.862802e-01_rb,8.878366e-01_rb,8.893534e-01_rb,&
7697 & 8.908350e-01_rb,8.922854e-01_rb,8.937090e-01_rb,8.951099e-01_rb,8.964925e-01_rb,&
7698 & 8.978609e-01_rb,8.992192e-01_rb,9.005718e-01_rb,9.019229e-01_rb,9.032765e-01_rb,&
7699 & 9.046369e-01_rb /)
7700 asyice3(:, 19) = (/ &
7702 & 7.812615e-01_rb,7.887764e-01_rb,7.959664e-01_rb,8.028413e-01_rb,8.094109e-01_rb,&
7703 & 8.156849e-01_rb,8.216730e-01_rb,8.273846e-01_rb,8.328294e-01_rb,8.380166e-01_rb,&
7704 & 8.429556e-01_rb,8.476556e-01_rb,8.521258e-01_rb,8.563753e-01_rb,8.604131e-01_rb,&
7705 & 8.642481e-01_rb,8.678893e-01_rb,8.713455e-01_rb,8.746254e-01_rb,8.777378e-01_rb,&
7706 & 8.806914e-01_rb,8.834948e-01_rb,8.861566e-01_rb,8.886854e-01_rb,8.910897e-01_rb,&
7707 & 8.933779e-01_rb,8.955586e-01_rb,8.976402e-01_rb,8.996311e-01_rb,9.015398e-01_rb,&
7708 & 9.033745e-01_rb,9.051436e-01_rb,9.068555e-01_rb,9.085185e-01_rb,9.101410e-01_rb,&
7709 & 9.117311e-01_rb,9.132972e-01_rb,9.148476e-01_rb,9.163905e-01_rb,9.179340e-01_rb,&
7710 & 9.194864e-01_rb,9.210559e-01_rb,9.226505e-01_rb,9.242784e-01_rb,9.259476e-01_rb,&
7711 & 9.276661e-01_rb /)
7712 asyice3(:, 20) = (/ &
7714 & 7.640720e-01_rb,7.691119e-01_rb,7.739941e-01_rb,7.787222e-01_rb,7.832998e-01_rb,&
7715 & 7.877304e-01_rb,7.920177e-01_rb,7.961652e-01_rb,8.001765e-01_rb,8.040551e-01_rb,&
7716 & 8.078044e-01_rb,8.114280e-01_rb,8.149294e-01_rb,8.183119e-01_rb,8.215791e-01_rb,&
7717 & 8.247344e-01_rb,8.277812e-01_rb,8.307229e-01_rb,8.335629e-01_rb,8.363046e-01_rb,&
7718 & 8.389514e-01_rb,8.415067e-01_rb,8.439738e-01_rb,8.463560e-01_rb,8.486568e-01_rb,&
7719 & 8.508795e-01_rb,8.530274e-01_rb,8.551039e-01_rb,8.571122e-01_rb,8.590558e-01_rb,&
7720 & 8.609378e-01_rb,8.627618e-01_rb,8.645309e-01_rb,8.662485e-01_rb,8.679178e-01_rb,&
7721 & 8.695423e-01_rb,8.711251e-01_rb,8.726697e-01_rb,8.741792e-01_rb,8.756571e-01_rb,&
7722 & 8.771065e-01_rb,8.785307e-01_rb,8.799331e-01_rb,8.813169e-01_rb,8.826854e-01_rb,&
7723 & 8.840419e-01_rb /)
7724 asyice3(:, 21) = (/ &
7726 & 7.602598e-01_rb,7.651572e-01_rb,7.699014e-01_rb,7.744962e-01_rb,7.789452e-01_rb,&
7727 & 7.832522e-01_rb,7.874205e-01_rb,7.914538e-01_rb,7.953555e-01_rb,7.991290e-01_rb,&
7728 & 8.027777e-01_rb,8.063049e-01_rb,8.097140e-01_rb,8.130081e-01_rb,8.161906e-01_rb,&
7729 & 8.192645e-01_rb,8.222331e-01_rb,8.250993e-01_rb,8.278664e-01_rb,8.305374e-01_rb,&
7730 & 8.331153e-01_rb,8.356030e-01_rb,8.380037e-01_rb,8.403201e-01_rb,8.425553e-01_rb,&
7731 & 8.447121e-01_rb,8.467935e-01_rb,8.488022e-01_rb,8.507412e-01_rb,8.526132e-01_rb,&
7732 & 8.544210e-01_rb,8.561675e-01_rb,8.578554e-01_rb,8.594875e-01_rb,8.610665e-01_rb,&
7733 & 8.625951e-01_rb,8.640760e-01_rb,8.655119e-01_rb,8.669055e-01_rb,8.682594e-01_rb,&
7734 & 8.695763e-01_rb,8.708587e-01_rb,8.721094e-01_rb,8.733308e-01_rb,8.745255e-01_rb,&
7735 & 8.756961e-01_rb /)
7736 asyice3(:, 22) = (/ &
7738 & 7.568957e-01_rb,7.606995e-01_rb,7.644072e-01_rb,7.680204e-01_rb,7.715402e-01_rb,&
7739 & 7.749682e-01_rb,7.783057e-01_rb,7.815541e-01_rb,7.847148e-01_rb,7.877892e-01_rb,&
7740 & 7.907786e-01_rb,7.936846e-01_rb,7.965084e-01_rb,7.992515e-01_rb,8.019153e-01_rb,&
7741 & 8.045011e-01_rb,8.070103e-01_rb,8.094444e-01_rb,8.118048e-01_rb,8.140927e-01_rb,&
7742 & 8.163097e-01_rb,8.184571e-01_rb,8.205364e-01_rb,8.225488e-01_rb,8.244958e-01_rb,&
7743 & 8.263789e-01_rb,8.281993e-01_rb,8.299586e-01_rb,8.316580e-01_rb,8.332991e-01_rb,&
7744 & 8.348831e-01_rb,8.364115e-01_rb,8.378857e-01_rb,8.393071e-01_rb,8.406770e-01_rb,&
7745 & 8.419969e-01_rb,8.432682e-01_rb,8.444923e-01_rb,8.456706e-01_rb,8.468044e-01_rb,&
7746 & 8.478952e-01_rb,8.489444e-01_rb,8.499533e-01_rb,8.509234e-01_rb,8.518561e-01_rb,&
7747 & 8.527528e-01_rb /)
7748 asyice3(:, 23) = (/ &
7750 & 7.575066e-01_rb,7.606912e-01_rb,7.638236e-01_rb,7.669035e-01_rb,7.699306e-01_rb,&
7751 & 7.729046e-01_rb,7.758254e-01_rb,7.786926e-01_rb,7.815060e-01_rb,7.842654e-01_rb,&
7752 & 7.869705e-01_rb,7.896211e-01_rb,7.922168e-01_rb,7.947574e-01_rb,7.972428e-01_rb,&
7753 & 7.996726e-01_rb,8.020466e-01_rb,8.043646e-01_rb,8.066262e-01_rb,8.088313e-01_rb,&
7754 & 8.109796e-01_rb,8.130709e-01_rb,8.151049e-01_rb,8.170814e-01_rb,8.190001e-01_rb,&
7755 & 8.208608e-01_rb,8.226632e-01_rb,8.244071e-01_rb,8.260924e-01_rb,8.277186e-01_rb,&
7756 & 8.292856e-01_rb,8.307932e-01_rb,8.322411e-01_rb,8.336291e-01_rb,8.349570e-01_rb,&
7757 & 8.362244e-01_rb,8.374312e-01_rb,8.385772e-01_rb,8.396621e-01_rb,8.406856e-01_rb,&
7758 & 8.416476e-01_rb,8.425479e-01_rb,8.433861e-01_rb,8.441620e-01_rb,8.448755e-01_rb,&
7759 & 8.455263e-01_rb /)
7760 asyice3(:, 24) = (/ &
7762 & 7.568829e-01_rb,7.597947e-01_rb,7.626745e-01_rb,7.655212e-01_rb,7.683337e-01_rb,&
7763 & 7.711111e-01_rb,7.738523e-01_rb,7.765565e-01_rb,7.792225e-01_rb,7.818494e-01_rb,&
7764 & 7.844362e-01_rb,7.869819e-01_rb,7.894854e-01_rb,7.919459e-01_rb,7.943623e-01_rb,&
7765 & 7.967337e-01_rb,7.990590e-01_rb,8.013373e-01_rb,8.035676e-01_rb,8.057488e-01_rb,&
7766 & 8.078802e-01_rb,8.099605e-01_rb,8.119890e-01_rb,8.139645e-01_rb,8.158862e-01_rb,&
7767 & 8.177530e-01_rb,8.195641e-01_rb,8.213183e-01_rb,8.230149e-01_rb,8.246527e-01_rb,&
7768 & 8.262308e-01_rb,8.277483e-01_rb,8.292042e-01_rb,8.305976e-01_rb,8.319275e-01_rb,&
7769 & 8.331929e-01_rb,8.343929e-01_rb,8.355265e-01_rb,8.365928e-01_rb,8.375909e-01_rb,&
7770 & 8.385197e-01_rb,8.393784e-01_rb,8.401659e-01_rb,8.408815e-01_rb,8.415240e-01_rb,&
7771 & 8.420926e-01_rb /)
7772 asyice3(:, 25) = (/ &
7774 & 7.548616e-01_rb,7.575454e-01_rb,7.602153e-01_rb,7.628696e-01_rb,7.655067e-01_rb,&
7775 & 7.681249e-01_rb,7.707225e-01_rb,7.732978e-01_rb,7.758492e-01_rb,7.783750e-01_rb,&
7776 & 7.808735e-01_rb,7.833430e-01_rb,7.857819e-01_rb,7.881886e-01_rb,7.905612e-01_rb,&
7777 & 7.928983e-01_rb,7.951980e-01_rb,7.974588e-01_rb,7.996789e-01_rb,8.018567e-01_rb,&
7778 & 8.039905e-01_rb,8.060787e-01_rb,8.081196e-01_rb,8.101115e-01_rb,8.120527e-01_rb,&
7779 & 8.139416e-01_rb,8.157764e-01_rb,8.175557e-01_rb,8.192776e-01_rb,8.209405e-01_rb,&
7780 & 8.225427e-01_rb,8.240826e-01_rb,8.255585e-01_rb,8.269688e-01_rb,8.283117e-01_rb,&
7781 & 8.295856e-01_rb,8.307889e-01_rb,8.319198e-01_rb,8.329767e-01_rb,8.339579e-01_rb,&
7782 & 8.348619e-01_rb,8.356868e-01_rb,8.364311e-01_rb,8.370930e-01_rb,8.376710e-01_rb,&
7783 & 8.381633e-01_rb /)
7784 asyice3(:, 26) = (/ &
7786 & 7.491854e-01_rb,7.518523e-01_rb,7.545089e-01_rb,7.571534e-01_rb,7.597839e-01_rb,&
7787 & 7.623987e-01_rb,7.649959e-01_rb,7.675737e-01_rb,7.701303e-01_rb,7.726639e-01_rb,&
7788 & 7.751727e-01_rb,7.776548e-01_rb,7.801084e-01_rb,7.825318e-01_rb,7.849230e-01_rb,&
7789 & 7.872804e-01_rb,7.896020e-01_rb,7.918862e-01_rb,7.941309e-01_rb,7.963345e-01_rb,&
7790 & 7.984951e-01_rb,8.006109e-01_rb,8.026802e-01_rb,8.047009e-01_rb,8.066715e-01_rb,&
7791 & 8.085900e-01_rb,8.104546e-01_rb,8.122636e-01_rb,8.140150e-01_rb,8.157072e-01_rb,&
7792 & 8.173382e-01_rb,8.189063e-01_rb,8.204096e-01_rb,8.218464e-01_rb,8.232148e-01_rb,&
7793 & 8.245130e-01_rb,8.257391e-01_rb,8.268915e-01_rb,8.279682e-01_rb,8.289675e-01_rb,&
7794 & 8.298875e-01_rb,8.307264e-01_rb,8.314824e-01_rb,8.321537e-01_rb,8.327385e-01_rb,&
7795 & 8.332350e-01_rb /)
7796 asyice3(:, 27) = (/ &
7798 & 7.397086e-01_rb,7.424069e-01_rb,7.450955e-01_rb,7.477725e-01_rb,7.504362e-01_rb,&
7799 & 7.530846e-01_rb,7.557159e-01_rb,7.583283e-01_rb,7.609199e-01_rb,7.634888e-01_rb,&
7800 & 7.660332e-01_rb,7.685512e-01_rb,7.710411e-01_rb,7.735009e-01_rb,7.759288e-01_rb,&
7801 & 7.783229e-01_rb,7.806814e-01_rb,7.830024e-01_rb,7.852841e-01_rb,7.875246e-01_rb,&
7802 & 7.897221e-01_rb,7.918748e-01_rb,7.939807e-01_rb,7.960380e-01_rb,7.980449e-01_rb,&
7803 & 7.999995e-01_rb,8.019000e-01_rb,8.037445e-01_rb,8.055311e-01_rb,8.072581e-01_rb,&
7804 & 8.089235e-01_rb,8.105255e-01_rb,8.120623e-01_rb,8.135319e-01_rb,8.149326e-01_rb,&
7805 & 8.162626e-01_rb,8.175198e-01_rb,8.187025e-01_rb,8.198089e-01_rb,8.208371e-01_rb,&
7806 & 8.217852e-01_rb,8.226514e-01_rb,8.234338e-01_rb,8.241306e-01_rb,8.247399e-01_rb,&
7807 & 8.252599e-01_rb /)
7808 asyice3(:, 28) = (/ &
7810 & 7.224533e-01_rb,7.251681e-01_rb,7.278728e-01_rb,7.305654e-01_rb,7.332444e-01_rb,&
7811 & 7.359078e-01_rb,7.385539e-01_rb,7.411808e-01_rb,7.437869e-01_rb,7.463702e-01_rb,&
7812 & 7.489291e-01_rb,7.514616e-01_rb,7.539661e-01_rb,7.564408e-01_rb,7.588837e-01_rb,&
7813 & 7.612933e-01_rb,7.636676e-01_rb,7.660049e-01_rb,7.683034e-01_rb,7.705612e-01_rb,&
7814 & 7.727767e-01_rb,7.749480e-01_rb,7.770733e-01_rb,7.791509e-01_rb,7.811789e-01_rb,&
7815 & 7.831556e-01_rb,7.850791e-01_rb,7.869478e-01_rb,7.887597e-01_rb,7.905131e-01_rb,&
7816 & 7.922062e-01_rb,7.938372e-01_rb,7.954044e-01_rb,7.969059e-01_rb,7.983399e-01_rb,&
7817 & 7.997047e-01_rb,8.009985e-01_rb,8.022195e-01_rb,8.033658e-01_rb,8.044357e-01_rb,&
7818 & 8.054275e-01_rb,8.063392e-01_rb,8.071692e-01_rb,8.079157e-01_rb,8.085768e-01_rb,&
7819 & 8.091507e-01_rb /)
7820 asyice3(:, 29) = (/ &
7822 & 8.850026e-01_rb,9.005489e-01_rb,9.069242e-01_rb,9.121799e-01_rb,9.168987e-01_rb,&
7823 & 9.212259e-01_rb,9.252176e-01_rb,9.289028e-01_rb,9.323000e-01_rb,9.354235e-01_rb,&
7824 & 9.382858e-01_rb,9.408985e-01_rb,9.432734e-01_rb,9.454218e-01_rb,9.473557e-01_rb,&
7825 & 9.490871e-01_rb,9.506282e-01_rb,9.519917e-01_rb,9.531904e-01_rb,9.542374e-01_rb,&
7826 & 9.551461e-01_rb,9.559298e-01_rb,9.566023e-01_rb,9.571775e-01_rb,9.576692e-01_rb,&
7827 & 9.580916e-01_rb,9.584589e-01_rb,9.587853e-01_rb,9.590851e-01_rb,9.593729e-01_rb,&
7828 & 9.596632e-01_rb,9.599705e-01_rb,9.603096e-01_rb,9.606954e-01_rb,9.611427e-01_rb,&
7829 & 9.616667e-01_rb,9.622826e-01_rb,9.630060e-01_rb,9.638524e-01_rb,9.648379e-01_rb,&
7830 & 9.659788e-01_rb,9.672916e-01_rb,9.687933e-01_rb,9.705014e-01_rb,9.724337e-01_rb,&
7831 & 9.746084e-01_rb /)
7834 fdlice3(:, 16) = (/ &
7836 & 4.959277e-02_rb,4.685292e-02_rb,4.426104e-02_rb,4.181231e-02_rb,3.950191e-02_rb,&
7837 & 3.732500e-02_rb,3.527675e-02_rb,3.335235e-02_rb,3.154697e-02_rb,2.985578e-02_rb,&
7838 & 2.827395e-02_rb,2.679666e-02_rb,2.541909e-02_rb,2.413640e-02_rb,2.294378e-02_rb,&
7839 & 2.183639e-02_rb,2.080940e-02_rb,1.985801e-02_rb,1.897736e-02_rb,1.816265e-02_rb,&
7840 & 1.740905e-02_rb,1.671172e-02_rb,1.606585e-02_rb,1.546661e-02_rb,1.490917e-02_rb,&
7841 & 1.438870e-02_rb,1.390038e-02_rb,1.343939e-02_rb,1.300089e-02_rb,1.258006e-02_rb,&
7842 & 1.217208e-02_rb,1.177212e-02_rb,1.137536e-02_rb,1.097696e-02_rb,1.057210e-02_rb,&
7843 & 1.015596e-02_rb,9.723704e-03_rb,9.270516e-03_rb,8.791565e-03_rb,8.282026e-03_rb,&
7844 & 7.737072e-03_rb,7.151879e-03_rb,6.521619e-03_rb,5.841467e-03_rb,5.106597e-03_rb,&
7845 & 4.312183e-03_rb /)
7846 fdlice3(:, 17) = (/ &
7848 & 5.071224e-02_rb,5.000217e-02_rb,4.933872e-02_rb,4.871992e-02_rb,4.814380e-02_rb,&
7849 & 4.760839e-02_rb,4.711170e-02_rb,4.665177e-02_rb,4.622662e-02_rb,4.583426e-02_rb,&
7850 & 4.547274e-02_rb,4.514007e-02_rb,4.483428e-02_rb,4.455340e-02_rb,4.429544e-02_rb,&
7851 & 4.405844e-02_rb,4.384041e-02_rb,4.363939e-02_rb,4.345340e-02_rb,4.328047e-02_rb,&
7852 & 4.311861e-02_rb,4.296586e-02_rb,4.282024e-02_rb,4.267977e-02_rb,4.254248e-02_rb,&
7853 & 4.240640e-02_rb,4.226955e-02_rb,4.212995e-02_rb,4.198564e-02_rb,4.183462e-02_rb,&
7854 & 4.167494e-02_rb,4.150462e-02_rb,4.132167e-02_rb,4.112413e-02_rb,4.091003e-02_rb,&
7855 & 4.067737e-02_rb,4.042420e-02_rb,4.014854e-02_rb,3.984840e-02_rb,3.952183e-02_rb,&
7856 & 3.916683e-02_rb,3.878144e-02_rb,3.836368e-02_rb,3.791158e-02_rb,3.742316e-02_rb,&
7857 & 3.689645e-02_rb /)
7858 fdlice3(:, 18) = (/ &
7860 & 1.062938e-01_rb,1.065234e-01_rb,1.067822e-01_rb,1.070682e-01_rb,1.073793e-01_rb,&
7861 & 1.077137e-01_rb,1.080693e-01_rb,1.084442e-01_rb,1.088364e-01_rb,1.092439e-01_rb,&
7862 & 1.096647e-01_rb,1.100970e-01_rb,1.105387e-01_rb,1.109878e-01_rb,1.114423e-01_rb,&
7863 & 1.119004e-01_rb,1.123599e-01_rb,1.128190e-01_rb,1.132757e-01_rb,1.137279e-01_rb,&
7864 & 1.141738e-01_rb,1.146113e-01_rb,1.150385e-01_rb,1.154534e-01_rb,1.158540e-01_rb,&
7865 & 1.162383e-01_rb,1.166045e-01_rb,1.169504e-01_rb,1.172741e-01_rb,1.175738e-01_rb,&
7866 & 1.178472e-01_rb,1.180926e-01_rb,1.183080e-01_rb,1.184913e-01_rb,1.186405e-01_rb,&
7867 & 1.187538e-01_rb,1.188291e-01_rb,1.188645e-01_rb,1.188580e-01_rb,1.188076e-01_rb,&
7868 & 1.187113e-01_rb,1.185672e-01_rb,1.183733e-01_rb,1.181277e-01_rb,1.178282e-01_rb,&
7869 & 1.174731e-01_rb /)
7870 fdlice3(:, 19) = (/ &
7872 & 1.076195e-01_rb,1.065195e-01_rb,1.054696e-01_rb,1.044673e-01_rb,1.035099e-01_rb,&
7873 & 1.025951e-01_rb,1.017203e-01_rb,1.008831e-01_rb,1.000808e-01_rb,9.931116e-02_rb,&
7874 & 9.857151e-02_rb,9.785939e-02_rb,9.717230e-02_rb,9.650774e-02_rb,9.586322e-02_rb,&
7875 & 9.523623e-02_rb,9.462427e-02_rb,9.402484e-02_rb,9.343544e-02_rb,9.285358e-02_rb,&
7876 & 9.227675e-02_rb,9.170245e-02_rb,9.112818e-02_rb,9.055144e-02_rb,8.996974e-02_rb,&
7877 & 8.938056e-02_rb,8.878142e-02_rb,8.816981e-02_rb,8.754323e-02_rb,8.689919e-02_rb,&
7878 & 8.623517e-02_rb,8.554869e-02_rb,8.483724e-02_rb,8.409832e-02_rb,8.332943e-02_rb,&
7879 & 8.252807e-02_rb,8.169175e-02_rb,8.081795e-02_rb,7.990419e-02_rb,7.894796e-02_rb,&
7880 & 7.794676e-02_rb,7.689809e-02_rb,7.579945e-02_rb,7.464834e-02_rb,7.344227e-02_rb,&
7881 & 7.217872e-02_rb /)
7882 fdlice3(:, 20) = (/ &
7884 & 1.119014e-01_rb,1.122706e-01_rb,1.126690e-01_rb,1.130947e-01_rb,1.135456e-01_rb,&
7885 & 1.140199e-01_rb,1.145154e-01_rb,1.150302e-01_rb,1.155623e-01_rb,1.161096e-01_rb,&
7886 & 1.166703e-01_rb,1.172422e-01_rb,1.178233e-01_rb,1.184118e-01_rb,1.190055e-01_rb,&
7887 & 1.196025e-01_rb,1.202008e-01_rb,1.207983e-01_rb,1.213931e-01_rb,1.219832e-01_rb,&
7888 & 1.225665e-01_rb,1.231411e-01_rb,1.237050e-01_rb,1.242561e-01_rb,1.247926e-01_rb,&
7889 & 1.253122e-01_rb,1.258132e-01_rb,1.262934e-01_rb,1.267509e-01_rb,1.271836e-01_rb,&
7890 & 1.275896e-01_rb,1.279669e-01_rb,1.283134e-01_rb,1.286272e-01_rb,1.289063e-01_rb,&
7891 & 1.291486e-01_rb,1.293522e-01_rb,1.295150e-01_rb,1.296351e-01_rb,1.297104e-01_rb,&
7892 & 1.297390e-01_rb,1.297189e-01_rb,1.296480e-01_rb,1.295244e-01_rb,1.293460e-01_rb,&
7893 & 1.291109e-01_rb /)
7894 fdlice3(:, 21) = (/ &
7896 & 1.133298e-01_rb,1.136777e-01_rb,1.140556e-01_rb,1.144615e-01_rb,1.148934e-01_rb,&
7897 & 1.153492e-01_rb,1.158269e-01_rb,1.163243e-01_rb,1.168396e-01_rb,1.173706e-01_rb,&
7898 & 1.179152e-01_rb,1.184715e-01_rb,1.190374e-01_rb,1.196108e-01_rb,1.201897e-01_rb,&
7899 & 1.207720e-01_rb,1.213558e-01_rb,1.219389e-01_rb,1.225194e-01_rb,1.230951e-01_rb,&
7900 & 1.236640e-01_rb,1.242241e-01_rb,1.247733e-01_rb,1.253096e-01_rb,1.258309e-01_rb,&
7901 & 1.263352e-01_rb,1.268205e-01_rb,1.272847e-01_rb,1.277257e-01_rb,1.281415e-01_rb,&
7902 & 1.285300e-01_rb,1.288893e-01_rb,1.292173e-01_rb,1.295118e-01_rb,1.297710e-01_rb,&
7903 & 1.299927e-01_rb,1.301748e-01_rb,1.303154e-01_rb,1.304124e-01_rb,1.304637e-01_rb,&
7904 & 1.304673e-01_rb,1.304212e-01_rb,1.303233e-01_rb,1.301715e-01_rb,1.299638e-01_rb,&
7905 & 1.296983e-01_rb /)
7906 fdlice3(:, 22) = (/ &
7908 & 1.145360e-01_rb,1.153256e-01_rb,1.161453e-01_rb,1.169929e-01_rb,1.178666e-01_rb,&
7909 & 1.187641e-01_rb,1.196835e-01_rb,1.206227e-01_rb,1.215796e-01_rb,1.225522e-01_rb,&
7910 & 1.235383e-01_rb,1.245361e-01_rb,1.255433e-01_rb,1.265579e-01_rb,1.275779e-01_rb,&
7911 & 1.286011e-01_rb,1.296257e-01_rb,1.306494e-01_rb,1.316703e-01_rb,1.326862e-01_rb,&
7912 & 1.336951e-01_rb,1.346950e-01_rb,1.356838e-01_rb,1.366594e-01_rb,1.376198e-01_rb,&
7913 & 1.385629e-01_rb,1.394866e-01_rb,1.403889e-01_rb,1.412678e-01_rb,1.421212e-01_rb,&
7914 & 1.429469e-01_rb,1.437430e-01_rb,1.445074e-01_rb,1.452381e-01_rb,1.459329e-01_rb,&
7915 & 1.465899e-01_rb,1.472069e-01_rb,1.477819e-01_rb,1.483128e-01_rb,1.487976e-01_rb,&
7916 & 1.492343e-01_rb,1.496207e-01_rb,1.499548e-01_rb,1.502346e-01_rb,1.504579e-01_rb,&
7917 & 1.506227e-01_rb /)
7918 fdlice3(:, 23) = (/ &
7920 & 1.153263e-01_rb,1.161445e-01_rb,1.169932e-01_rb,1.178703e-01_rb,1.187738e-01_rb,&
7921 & 1.197016e-01_rb,1.206516e-01_rb,1.216217e-01_rb,1.226099e-01_rb,1.236141e-01_rb,&
7922 & 1.246322e-01_rb,1.256621e-01_rb,1.267017e-01_rb,1.277491e-01_rb,1.288020e-01_rb,&
7923 & 1.298584e-01_rb,1.309163e-01_rb,1.319736e-01_rb,1.330281e-01_rb,1.340778e-01_rb,&
7924 & 1.351207e-01_rb,1.361546e-01_rb,1.371775e-01_rb,1.381873e-01_rb,1.391820e-01_rb,&
7925 & 1.401593e-01_rb,1.411174e-01_rb,1.420540e-01_rb,1.429671e-01_rb,1.438547e-01_rb,&
7926 & 1.447146e-01_rb,1.455449e-01_rb,1.463433e-01_rb,1.471078e-01_rb,1.478364e-01_rb,&
7927 & 1.485270e-01_rb,1.491774e-01_rb,1.497857e-01_rb,1.503497e-01_rb,1.508674e-01_rb,&
7928 & 1.513367e-01_rb,1.517554e-01_rb,1.521216e-01_rb,1.524332e-01_rb,1.526880e-01_rb,&
7929 & 1.528840e-01_rb /)
7930 fdlice3(:, 24) = (/ &
7932 & 1.160842e-01_rb,1.169118e-01_rb,1.177697e-01_rb,1.186556e-01_rb,1.195676e-01_rb,&
7933 & 1.205036e-01_rb,1.214616e-01_rb,1.224394e-01_rb,1.234349e-01_rb,1.244463e-01_rb,&
7934 & 1.254712e-01_rb,1.265078e-01_rb,1.275539e-01_rb,1.286075e-01_rb,1.296664e-01_rb,&
7935 & 1.307287e-01_rb,1.317923e-01_rb,1.328550e-01_rb,1.339149e-01_rb,1.349699e-01_rb,&
7936 & 1.360179e-01_rb,1.370567e-01_rb,1.380845e-01_rb,1.390991e-01_rb,1.400984e-01_rb,&
7937 & 1.410803e-01_rb,1.420429e-01_rb,1.429840e-01_rb,1.439016e-01_rb,1.447936e-01_rb,&
7938 & 1.456579e-01_rb,1.464925e-01_rb,1.472953e-01_rb,1.480642e-01_rb,1.487972e-01_rb,&
7939 & 1.494923e-01_rb,1.501472e-01_rb,1.507601e-01_rb,1.513287e-01_rb,1.518511e-01_rb,&
7940 & 1.523252e-01_rb,1.527489e-01_rb,1.531201e-01_rb,1.534368e-01_rb,1.536969e-01_rb,&
7941 & 1.538984e-01_rb /)
7942 fdlice3(:, 25) = (/ &
7944 & 1.168725e-01_rb,1.177088e-01_rb,1.185747e-01_rb,1.194680e-01_rb,1.203867e-01_rb,&
7945 & 1.213288e-01_rb,1.222923e-01_rb,1.232750e-01_rb,1.242750e-01_rb,1.252903e-01_rb,&
7946 & 1.263187e-01_rb,1.273583e-01_rb,1.284069e-01_rb,1.294626e-01_rb,1.305233e-01_rb,&
7947 & 1.315870e-01_rb,1.326517e-01_rb,1.337152e-01_rb,1.347756e-01_rb,1.358308e-01_rb,&
7948 & 1.368788e-01_rb,1.379175e-01_rb,1.389449e-01_rb,1.399590e-01_rb,1.409577e-01_rb,&
7949 & 1.419389e-01_rb,1.429007e-01_rb,1.438410e-01_rb,1.447577e-01_rb,1.456488e-01_rb,&
7950 & 1.465123e-01_rb,1.473461e-01_rb,1.481483e-01_rb,1.489166e-01_rb,1.496492e-01_rb,&
7951 & 1.503439e-01_rb,1.509988e-01_rb,1.516118e-01_rb,1.521808e-01_rb,1.527038e-01_rb,&
7952 & 1.531788e-01_rb,1.536037e-01_rb,1.539764e-01_rb,1.542951e-01_rb,1.545575e-01_rb,&
7953 & 1.547617e-01_rb /)
7954 fdlice3(:, 26) = (/ &
7956 & 1.180509e-01_rb,1.189025e-01_rb,1.197820e-01_rb,1.206875e-01_rb,1.216171e-01_rb,&
7957 & 1.225687e-01_rb,1.235404e-01_rb,1.245303e-01_rb,1.255363e-01_rb,1.265564e-01_rb,&
7958 & 1.275888e-01_rb,1.286313e-01_rb,1.296821e-01_rb,1.307392e-01_rb,1.318006e-01_rb,&
7959 & 1.328643e-01_rb,1.339284e-01_rb,1.349908e-01_rb,1.360497e-01_rb,1.371029e-01_rb,&
7960 & 1.381486e-01_rb,1.391848e-01_rb,1.402095e-01_rb,1.412208e-01_rb,1.422165e-01_rb,&
7961 & 1.431949e-01_rb,1.441539e-01_rb,1.450915e-01_rb,1.460058e-01_rb,1.468947e-01_rb,&
7962 & 1.477564e-01_rb,1.485888e-01_rb,1.493900e-01_rb,1.501580e-01_rb,1.508907e-01_rb,&
7963 & 1.515864e-01_rb,1.522428e-01_rb,1.528582e-01_rb,1.534305e-01_rb,1.539578e-01_rb,&
7964 & 1.544380e-01_rb,1.548692e-01_rb,1.552494e-01_rb,1.555767e-01_rb,1.558490e-01_rb,&
7965 & 1.560645e-01_rb /)
7966 fdlice3(:, 27) = (/ &
7968 & 1.200480e-01_rb,1.209267e-01_rb,1.218304e-01_rb,1.227575e-01_rb,1.237059e-01_rb,&
7969 & 1.246739e-01_rb,1.256595e-01_rb,1.266610e-01_rb,1.276765e-01_rb,1.287041e-01_rb,&
7970 & 1.297420e-01_rb,1.307883e-01_rb,1.318412e-01_rb,1.328988e-01_rb,1.339593e-01_rb,&
7971 & 1.350207e-01_rb,1.360813e-01_rb,1.371393e-01_rb,1.381926e-01_rb,1.392396e-01_rb,&
7972 & 1.402783e-01_rb,1.413069e-01_rb,1.423235e-01_rb,1.433263e-01_rb,1.443134e-01_rb,&
7973 & 1.452830e-01_rb,1.462332e-01_rb,1.471622e-01_rb,1.480681e-01_rb,1.489490e-01_rb,&
7974 & 1.498032e-01_rb,1.506286e-01_rb,1.514236e-01_rb,1.521863e-01_rb,1.529147e-01_rb,&
7975 & 1.536070e-01_rb,1.542614e-01_rb,1.548761e-01_rb,1.554491e-01_rb,1.559787e-01_rb,&
7976 & 1.564629e-01_rb,1.568999e-01_rb,1.572879e-01_rb,1.576249e-01_rb,1.579093e-01_rb,&
7977 & 1.581390e-01_rb /)
7978 fdlice3(:, 28) = (/ &
7980 & 1.247813e-01_rb,1.256496e-01_rb,1.265417e-01_rb,1.274560e-01_rb,1.283905e-01_rb,&
7981 & 1.293436e-01_rb,1.303135e-01_rb,1.312983e-01_rb,1.322964e-01_rb,1.333060e-01_rb,&
7982 & 1.343252e-01_rb,1.353523e-01_rb,1.363855e-01_rb,1.374231e-01_rb,1.384632e-01_rb,&
7983 & 1.395042e-01_rb,1.405441e-01_rb,1.415813e-01_rb,1.426140e-01_rb,1.436404e-01_rb,&
7984 & 1.446587e-01_rb,1.456672e-01_rb,1.466640e-01_rb,1.476475e-01_rb,1.486157e-01_rb,&
7985 & 1.495671e-01_rb,1.504997e-01_rb,1.514117e-01_rb,1.523016e-01_rb,1.531673e-01_rb,&
7986 & 1.540073e-01_rb,1.548197e-01_rb,1.556026e-01_rb,1.563545e-01_rb,1.570734e-01_rb,&
7987 & 1.577576e-01_rb,1.584054e-01_rb,1.590149e-01_rb,1.595843e-01_rb,1.601120e-01_rb,&
7988 & 1.605962e-01_rb,1.610349e-01_rb,1.614266e-01_rb,1.617693e-01_rb,1.620614e-01_rb,&
7989 & 1.623011e-01_rb /)
7990 fdlice3(:, 29) = (/ &
7992 & 1.006055e-01_rb,9.549582e-02_rb,9.063960e-02_rb,8.602900e-02_rb,8.165612e-02_rb,&
7993 & 7.751308e-02_rb,7.359199e-02_rb,6.988496e-02_rb,6.638412e-02_rb,6.308156e-02_rb,&
7994 & 5.996942e-02_rb,5.703979e-02_rb,5.428481e-02_rb,5.169657e-02_rb,4.926719e-02_rb,&
7995 & 4.698880e-02_rb,4.485349e-02_rb,4.285339e-02_rb,4.098061e-02_rb,3.922727e-02_rb,&
7996 & 3.758547e-02_rb,3.604733e-02_rb,3.460497e-02_rb,3.325051e-02_rb,3.197604e-02_rb,&
7997 & 3.077369e-02_rb,2.963558e-02_rb,2.855381e-02_rb,2.752050e-02_rb,2.652776e-02_rb,&
7998 & 2.556772e-02_rb,2.463247e-02_rb,2.371415e-02_rb,2.280485e-02_rb,2.189670e-02_rb,&
7999 & 2.098180e-02_rb,2.005228e-02_rb,1.910024e-02_rb,1.811781e-02_rb,1.709709e-02_rb,&
8000 & 1.603020e-02_rb,1.490925e-02_rb,1.372635e-02_rb,1.247363e-02_rb,1.114319e-02_rb,&
8001 & 9.727157e-03_rb /)
8003 end subroutine swcldpr
8005 end module rrtmg_sw_init
8007 ! path: $Source: /cvsroot/NWP/WRFV3/phys/module_ra_rrtmg_sw.F,v $
8008 ! author: $Author: trn $
8009 ! revision: $Revision: 1.3 $
8010 ! created: $Date: 2009/04/16 19:54:22 $
8012 module rrtmg_sw_vrtqdr
8014 ! --------------------------------------------------------------------------
8016 ! | Copyright 2002-2008, Atmospheric & Environmental Research, Inc. (AER). |
8017 ! | This software may be used, copied, or redistributed as long as it is |
8018 ! | not sold and this copyright notice is reproduced on each copy made. |
8019 ! | This model is provided as is without any express or implied warranties. |
8020 ! | (http://www.rtweb.aer.com/) |
8022 ! --------------------------------------------------------------------------
8024 ! ------- Modules -------
8026 use parkind, only: im => kind_im, rb => kind_rb
8027 ! use parrrsw, only: ngptsw
8033 ! --------------------------------------------------------------------------
8034 subroutine vrtqdr_sw(klev, kw, &
8035 pref, prefd, ptra, ptrad, &
8036 pdbt, prdnd, prup, prupd, ptdbt, &
8038 ! --------------------------------------------------------------------------
8040 ! Purpose: This routine performs the vertical quadrature integration
8042 ! Interface: *vrtqdr_sw* is called from *spcvrt_sw* and *spcvmc_sw*
8046 ! Original: H. Barker
8047 ! Revision: Integrated with rrtmg_sw, J.-J. Morcrette, ECMWF, Oct 2002
8048 ! Revision: Reformatted for consistency with rrtmg_lw: MJIacono, AER, Jul 2006
8050 !-----------------------------------------------------------------------
8052 ! ------- Declarations -------
8056 integer(kind=im), intent (in) :: klev ! number of model layers
8057 integer(kind=im), intent (in) :: kw ! g-point index
8059 real(kind=rb), intent(in) :: pref(:) ! direct beam reflectivity
8060 ! Dimensions: (nlayers+1)
8061 real(kind=rb), intent(in) :: prefd(:) ! diffuse beam reflectivity
8062 ! Dimensions: (nlayers+1)
8063 real(kind=rb), intent(in) :: ptra(:) ! direct beam transmissivity
8064 ! Dimensions: (nlayers+1)
8065 real(kind=rb), intent(in) :: ptrad(:) ! diffuse beam transmissivity
8066 ! Dimensions: (nlayers+1)
8068 real(kind=rb), intent(in) :: pdbt(:)
8069 ! Dimensions: (nlayers+1)
8070 real(kind=rb), intent(in) :: ptdbt(:)
8071 ! Dimensions: (nlayers+1)
8073 real(kind=rb), intent(inout) :: prdnd(:)
8074 ! Dimensions: (nlayers+1)
8075 real(kind=rb), intent(inout) :: prup(:)
8076 ! Dimensions: (nlayers+1)
8077 real(kind=rb), intent(inout) :: prupd(:)
8078 ! Dimensions: (nlayers+1)
8081 real(kind=rb), intent(out) :: pfd(:,:) ! downwelling flux (W/m2)
8082 ! Dimensions: (nlayers+1,ngptsw)
8083 ! unadjusted for earth/sun distance or zenith angle
8084 real(kind=rb), intent(out) :: pfu(:,:) ! upwelling flux (W/m2)
8085 ! Dimensions: (nlayers+1,ngptsw)
8086 ! unadjusted for earth/sun distance or zenith angle
8090 integer(kind=im) :: ikp, ikx, jk
8092 real(kind=rb) :: zreflect
8093 real(kind=rb) :: ztdn(klev+1)
8097 ! pref(jk) direct reflectance
8098 ! prefd(jk) diffuse reflectance
8099 ! ptra(jk) direct transmittance
8100 ! ptrad(jk) diffuse transmittance
8102 ! pdbt(jk) layer mean direct beam transmittance
8103 ! ptdbt(jk) total direct beam transmittance at levels
8105 !-----------------------------------------------------------------------------
8107 ! Link lowest layer with surface
8109 zreflect = 1._rb / (1._rb - prefd(klev+1) * prefd(klev))
8110 prup(klev) = pref(klev) + (ptrad(klev) * &
8111 ((ptra(klev) - pdbt(klev)) * prefd(klev+1) + &
8112 pdbt(klev) * pref(klev+1))) * zreflect
8113 prupd(klev) = prefd(klev) + ptrad(klev) * ptrad(klev) * &
8114 prefd(klev+1) * zreflect
8116 ! Pass from bottom to top
8121 zreflect = 1._rb / (1._rb -prupd(ikp) * prefd(ikx))
8122 prup(ikx) = pref(ikx) + (ptrad(ikx) * &
8123 ((ptra(ikx) - pdbt(ikx)) * prupd(ikp) + &
8124 pdbt(ikx) * prup(ikp))) * zreflect
8125 prupd(ikx) = prefd(ikx) + ptrad(ikx) * ptrad(ikx) * &
8126 prupd(ikp) * zreflect
8129 ! Upper boundary conditions
8136 ! Pass from top to bottom
8140 zreflect = 1._rb / (1._rb - prefd(jk) * prdnd(jk))
8141 ztdn(ikp) = ptdbt(jk) * ptra(jk) + &
8142 (ptrad(jk) * ((ztdn(jk) - ptdbt(jk)) + &
8143 ptdbt(jk) * pref(jk) * prdnd(jk))) * zreflect
8144 prdnd(ikp) = prefd(jk) + ptrad(jk) * ptrad(jk) * &
8145 prdnd(jk) * zreflect
8148 ! Up and down-welling fluxes at levels
8151 zreflect = 1._rb / (1._rb - prdnd(jk) * prupd(jk))
8152 pfu(jk,kw) = (ptdbt(jk) * prup(jk) + &
8153 (ztdn(jk) - ptdbt(jk)) * prupd(jk)) * zreflect
8154 pfd(jk,kw) = ptdbt(jk) + (ztdn(jk) - ptdbt(jk)+ &
8155 ptdbt(jk) * prup(jk) * prdnd(jk)) * zreflect
8158 end subroutine vrtqdr_sw
8160 end module rrtmg_sw_vrtqdr
8162 ! path: $Source: /cvsroot/NWP/WRFV3/phys/module_ra_rrtmg_sw.F,v $
8163 ! author: $Author: trn $
8164 ! revision: $Revision: 1.3 $
8165 ! created: $Date: 2009/04/16 19:54:22 $
8167 module rrtmg_sw_spcvmc
8169 ! --------------------------------------------------------------------------
8171 ! | Copyright 2002-2008, Atmospheric & Environmental Research, Inc. (AER). |
8172 ! | This software may be used, copied, or redistributed as long as it is |
8173 ! | not sold and this copyright notice is reproduced on each copy made. |
8174 ! | This model is provided as is without any express or implied warranties. |
8175 ! | (http://www.rtweb.aer.com/) |
8177 ! --------------------------------------------------------------------------
8179 ! ------- Modules -------
8181 use parkind, only : im => kind_im, rb => kind_rb
8182 use parrrsw, only : nbndsw, ngptsw, mxmol, jpband
8183 use rrsw_tbl, only : tblint, bpade, od_lo, exp_tbl
8184 use rrsw_vsn, only : hvrspc, hnamspc
8185 use rrsw_wvn, only : ngc, ngs
8186 use rrtmg_sw_reftra, only: reftra_sw
8187 use rrtmg_sw_taumol, only: taumol_sw
8188 use rrtmg_sw_vrtqdr, only: vrtqdr_sw
8194 ! ---------------------------------------------------------------------------
8195 subroutine spcvmc_sw &
8196 (nlayers, istart, iend, icpr, iout, &
8197 pavel, tavel, pz, tz, tbound, palbd, palbp, &
8198 pcldfmc, ptaucmc, pasycmc, pomgcmc, ptaormc, &
8199 ptaua, pasya, pomga, prmu0, coldry, wkl, adjflux, &
8200 laytrop, layswtch, laylow, jp, jt, jt1, &
8201 co2mult, colch4, colco2, colh2o, colmol, coln2o, colo2, colo3, &
8202 fac00, fac01, fac10, fac11, &
8203 selffac, selffrac, indself, forfac, forfrac, indfor, &
8204 pbbfd, pbbfu, pbbcd, pbbcu, puvfd, puvcd, pnifd, pnicd, &
8205 pbbfddir, pbbcddir, puvfddir, puvcddir, pnifddir, pnicddir)
8206 ! ---------------------------------------------------------------------------
8208 ! Purpose: Contains spectral loop to compute the shortwave radiative fluxes,
8209 ! using the two-stream method of H. Barker and McICA, the Monte-Carlo
8210 ! Independent Column Approximation, for the representation of
8211 ! sub-grid cloud variability (i.e. cloud overlap).
8213 ! Interface: *spcvmc_sw* is called from *rrtmg_sw.F90* or rrtmg_sw.1col.F90*
8216 ! Adapted from two-stream model of H. Barker;
8217 ! Two-stream model options (selected with kmodts in rrtmg_sw_reftra.F90):
8218 ! 1: Eddington, 2: PIFM, Zdunkowski et al., 3: discret ordinates
8222 ! Original: H. Barker
8223 ! Revision: Merge with RRTMG_SW: J.-J.Morcrette, ECMWF, Feb 2003
8224 ! Revision: Add adjustment for Earth/Sun distance : MJIacono, AER, Oct 2003
8225 ! Revision: Bug fix for use of PALBP and PALBD: MJIacono, AER, Nov 2003
8226 ! Revision: Bug fix to apply delta scaling to clear sky: AER, Dec 2004
8227 ! Revision: Code modified so that delta scaling is not done in cloudy profiles
8228 ! if routine cldprop is used; delta scaling can be applied by swithcing
8229 ! code below if cldprop is not used to get cloud properties.
8231 ! Revision: Modified to use McICA: MJIacono, AER, Nov 2005
8232 ! Revision: Uniform formatting for RRTMG: MJIacono, AER, Jul 2006
8233 ! Revision: Use exponential lookup table for transmittance: MJIacono, AER,
8236 ! ------------------------------------------------------------------
8238 ! ------- Declarations ------
8240 ! ------- Input -------
8242 integer(kind=im), intent(in) :: nlayers
8243 integer(kind=im), intent(in) :: istart
8244 integer(kind=im), intent(in) :: iend
8245 integer(kind=im), intent(in) :: icpr
8246 integer(kind=im), intent(in) :: iout
8247 integer(kind=im), intent(in) :: laytrop
8248 integer(kind=im), intent(in) :: layswtch
8249 integer(kind=im), intent(in) :: laylow
8251 integer(kind=im), intent(in) :: indfor(:)
8252 ! Dimensions: (nlayers)
8253 integer(kind=im), intent(in) :: indself(:)
8254 ! Dimensions: (nlayers)
8255 integer(kind=im), intent(in) :: jp(:)
8256 ! Dimensions: (nlayers)
8257 integer(kind=im), intent(in) :: jt(:)
8258 ! Dimensions: (nlayers)
8259 integer(kind=im), intent(in) :: jt1(:)
8260 ! Dimensions: (nlayers)
8262 real(kind=rb), intent(in) :: pavel(:) ! layer pressure (hPa, mb)
8263 ! Dimensions: (nlayers)
8264 real(kind=rb), intent(in) :: tavel(:) ! layer temperature (K)
8265 ! Dimensions: (nlayers)
8266 real(kind=rb), intent(in) :: pz(0:) ! level (interface) pressure (hPa, mb)
8267 ! Dimensions: (0:nlayers)
8268 real(kind=rb), intent(in) :: tz(0:) ! level temperatures (hPa, mb)
8269 ! Dimensions: (0:nlayers)
8270 real(kind=rb), intent(in) :: tbound ! surface temperature (K)
8271 real(kind=rb), intent(in) :: wkl(:,:) ! molecular amounts (mol/cm2)
8272 ! Dimensions: (mxmol,nlayers)
8273 real(kind=rb), intent(in) :: coldry(:) ! dry air column density (mol/cm2)
8274 ! Dimensions: (nlayers)
8275 real(kind=rb), intent(in) :: colmol(:)
8276 ! Dimensions: (nlayers)
8277 real(kind=rb), intent(in) :: adjflux(:) ! Earth/Sun distance adjustment
8278 ! Dimensions: (jpband)
8280 real(kind=rb), intent(in) :: palbd(:) ! surface albedo (diffuse)
8281 ! Dimensions: (nbndsw)
8282 real(kind=rb), intent(in) :: palbp(:) ! surface albedo (direct)
8283 ! Dimensions: (nbndsw)
8284 real(kind=rb), intent(in) :: prmu0 ! cosine of solar zenith angle
8285 real(kind=rb), intent(in) :: pcldfmc(:,:) ! cloud fraction [mcica]
8286 ! Dimensions: (nlayers,ngptsw)
8287 real(kind=rb), intent(in) :: ptaucmc(:,:) ! cloud optical depth [mcica]
8288 ! Dimensions: (nlayers,ngptsw)
8289 real(kind=rb), intent(in) :: pasycmc(:,:) ! cloud asymmetry parameter [mcica]
8290 ! Dimensions: (nlayers,ngptsw)
8291 real(kind=rb), intent(in) :: pomgcmc(:,:) ! cloud single scattering albedo [mcica]
8292 ! Dimensions: (nlayers,ngptsw)
8293 real(kind=rb), intent(in) :: ptaormc(:,:) ! cloud optical depth, non-delta scaled [mcica]
8294 ! Dimensions: (nlayers,ngptsw)
8295 real(kind=rb), intent(in) :: ptaua(:,:) ! aerosol optical depth
8296 ! Dimensions: (nlayers,nbndsw)
8297 real(kind=rb), intent(in) :: pasya(:,:) ! aerosol asymmetry parameter
8298 ! Dimensions: (nlayers,nbndsw)
8299 real(kind=rb), intent(in) :: pomga(:,:) ! aerosol single scattering albedo
8300 ! Dimensions: (nlayers,nbndsw)
8302 real(kind=rb), intent(in) :: colh2o(:)
8303 ! Dimensions: (nlayers)
8304 real(kind=rb), intent(in) :: colco2(:)
8305 ! Dimensions: (nlayers)
8306 real(kind=rb), intent(in) :: colch4(:)
8307 ! Dimensions: (nlayers)
8308 real(kind=rb), intent(in) :: co2mult(:)
8309 ! Dimensions: (nlayers)
8310 real(kind=rb), intent(in) :: colo3(:)
8311 ! Dimensions: (nlayers)
8312 real(kind=rb), intent(in) :: colo2(:)
8313 ! Dimensions: (nlayers)
8314 real(kind=rb), intent(in) :: coln2o(:)
8315 ! Dimensions: (nlayers)
8317 real(kind=rb), intent(in) :: forfac(:)
8318 ! Dimensions: (nlayers)
8319 real(kind=rb), intent(in) :: forfrac(:)
8320 ! Dimensions: (nlayers)
8321 real(kind=rb), intent(in) :: selffac(:)
8322 ! Dimensions: (nlayers)
8323 real(kind=rb), intent(in) :: selffrac(:)
8324 ! Dimensions: (nlayers)
8325 real(kind=rb), intent(in) :: fac00(:)
8326 ! Dimensions: (nlayers)
8327 real(kind=rb), intent(in) :: fac01(:)
8328 ! Dimensions: (nlayers)
8329 real(kind=rb), intent(in) :: fac10(:)
8330 ! Dimensions: (nlayers)
8331 real(kind=rb), intent(in) :: fac11(:)
8332 ! Dimensions: (nlayers)
8334 ! ------- Output -------
8335 ! All Dimensions: (nlayers+1)
8336 real(kind=rb), intent(out) :: pbbcd(:)
8337 real(kind=rb), intent(out) :: pbbcu(:)
8338 real(kind=rb), intent(out) :: pbbfd(:)
8339 real(kind=rb), intent(out) :: pbbfu(:)
8340 real(kind=rb), intent(out) :: pbbfddir(:)
8341 real(kind=rb), intent(out) :: pbbcddir(:)
8343 real(kind=rb), intent(out) :: puvcd(:)
8344 real(kind=rb), intent(out) :: puvfd(:)
8345 real(kind=rb), intent(out) :: puvcddir(:)
8346 real(kind=rb), intent(out) :: puvfddir(:)
8348 real(kind=rb), intent(out) :: pnicd(:)
8349 real(kind=rb), intent(out) :: pnifd(:)
8350 real(kind=rb), intent(out) :: pnicddir(:)
8351 real(kind=rb), intent(out) :: pnifddir(:)
8353 ! Output - inactive ! All Dimensions: (nlayers+1)
8354 ! real(kind=rb), intent(out) :: puvcu(:)
8355 ! real(kind=rb), intent(out) :: puvfu(:)
8356 ! real(kind=rb), intent(out) :: pnicu(:)
8357 ! real(kind=rb), intent(out) :: pnifu(:)
8358 ! real(kind=rb), intent(out) :: pvscd(:)
8359 ! real(kind=rb), intent(out) :: pvscu(:)
8360 ! real(kind=rb), intent(out) :: pvsfd(:)
8361 ! real(kind=rb), intent(out) :: pvsfu(:)
8363 ! ------- Local -------
8365 logical :: lrtchkclr(nlayers),lrtchkcld(nlayers)
8367 integer(kind=im) :: klev
8368 integer(kind=im) :: ib1, ib2, ibm, igt, ikl, ikp, ikx
8369 integer(kind=im) :: iw, jb, jg, jl, jk
8370 ! integer(kind=im), parameter :: nuv = ??
8371 ! integer(kind=im), parameter :: nvs = ??
8372 integer(kind=im) :: itind
8374 real(kind=rb) :: tblind, ze1
8375 real(kind=rb) :: zclear, zcloud
8376 real(kind=rb) :: zdbt(nlayers+1), zdbt_nodel(nlayers+1)
8377 real(kind=rb) :: zgc(nlayers), zgcc(nlayers), zgco(nlayers)
8378 real(kind=rb) :: zomc(nlayers), zomcc(nlayers), zomco(nlayers)
8379 real(kind=rb) :: zrdnd(nlayers+1), zrdndc(nlayers+1)
8380 real(kind=rb) :: zref(nlayers+1), zrefc(nlayers+1), zrefo(nlayers+1)
8381 real(kind=rb) :: zrefd(nlayers+1), zrefdc(nlayers+1), zrefdo(nlayers+1)
8382 real(kind=rb) :: zrup(nlayers+1), zrupd(nlayers+1)
8383 real(kind=rb) :: zrupc(nlayers+1), zrupdc(nlayers+1)
8384 real(kind=rb) :: zs1(nlayers+1)
8385 real(kind=rb) :: ztauc(nlayers), ztauo(nlayers)
8386 real(kind=rb) :: ztdn(nlayers+1), ztdnd(nlayers+1), ztdbt(nlayers+1)
8387 real(kind=rb) :: ztoc(nlayers), ztor(nlayers)
8388 real(kind=rb) :: ztra(nlayers+1), ztrac(nlayers+1), ztrao(nlayers+1)
8389 real(kind=rb) :: ztrad(nlayers+1), ztradc(nlayers+1), ztrado(nlayers+1)
8390 real(kind=rb) :: zdbtc(nlayers+1), ztdbtc(nlayers+1)
8391 real(kind=rb) :: zincflx(ngptsw), zdbtc_nodel(nlayers+1)
8392 real(kind=rb) :: ztdbt_nodel(nlayers+1), ztdbtc_nodel(nlayers+1)
8394 real(kind=rb) :: zdbtmc, zdbtmo, zf, zgw, zreflect
8395 real(kind=rb) :: zwf, tauorig, repclc
8396 ! real(kind=rb) :: zincflux ! inactive
8398 ! Arrays from rrtmg_sw_taumoln routines
8400 ! real(kind=rb) :: ztaug(nlayers,16), ztaur(nlayers,16)
8401 ! real(kind=rb) :: zsflxzen(16)
8402 real(kind=rb) :: ztaug(nlayers,ngptsw), ztaur(nlayers,ngptsw)
8403 real(kind=rb) :: zsflxzen(ngptsw)
8405 ! Arrays from rrtmg_sw_vrtqdr routine
8407 real(kind=rb) :: zcd(nlayers+1,ngptsw), zcu(nlayers+1,ngptsw)
8408 real(kind=rb) :: zfd(nlayers+1,ngptsw), zfu(nlayers+1,ngptsw)
8411 ! real(kind=rb) :: zbbcd(nlayers+1), zbbcu(nlayers+1)
8412 ! real(kind=rb) :: zbbfd(nlayers+1), zbbfu(nlayers+1)
8413 ! real(kind=rb) :: zbbfddir(nlayers+1), zbbcddir(nlayers+1)
8415 ! ------------------------------------------------------------------
8444 ! Calculate the optical depths for gaseous absorption and Rayleigh scattering
8446 call taumol_sw(klev, &
8447 colh2o, colco2, colch4, colo2, colo3, colmol, &
8448 laytrop, jp, jt, jt1, &
8449 fac00, fac01, fac10, fac11, &
8450 selffac, selffrac, indself, forfac, forfrac, indfor, &
8451 zsflxzen, ztaug, ztaur)
8453 ! Top of shortwave spectral band loop, jb = 16 -> 29; ibm = 1 -> 14
8459 ! Reinitialize g-point counter for each band if output for each band is requested.
8460 if (iout.gt.0.and.ibm.ge.2) iw = ngs(ibm-1)
8469 ! Top of g-point interval loop within each band (iw is cumulative counter)
8473 ! Apply adjustment for correct Earth/Sun distance and zenith angle to incoming solar flux
8474 zincflx(iw) = adjflux(jb) * zsflxzen(iw) * prmu0
8475 ! zincflux = zincflux + adjflux(jb) * zsflxzen(iw) * prmu0 ! inactive
8477 ! Compute layer reflectances and transmittances for direct and diffuse sources,
8478 ! first clear then cloudy
8480 ! zrefc(jk) direct albedo for clear
8481 ! zrefo(jk) direct albedo for cloud
8482 ! zrefdc(jk) diffuse albedo for clear
8483 ! zrefdo(jk) diffuse albedo for cloud
8484 ! ztrac(jk) direct transmittance for clear
8485 ! ztrao(jk) direct transmittance for cloudy
8486 ! ztradc(jk) diffuse transmittance for clear
8487 ! ztrado(jk) diffuse transmittance for cloudy
8489 ! zref(jk) direct reflectance
8490 ! zrefd(jk) diffuse reflectance
8491 ! ztra(jk) direct transmittance
8492 ! ztrad(jk) diffuse transmittance
8494 ! zdbtc(jk) clear direct beam transmittance
8495 ! zdbto(jk) cloudy direct beam transmittance
8496 ! zdbt(jk) layer mean direct beam transmittance
8497 ! ztdbt(jk) total direct beam transmittance at levels
8502 ztdbtc_nodel(1)=1.0_rb
8504 zdbtc(klev+1) =0.0_rb
8505 ztrac(klev+1) =0.0_rb
8506 ztradc(klev+1)=0.0_rb
8507 zrefc(klev+1) =palbp(ibm)
8508 zrefdc(klev+1)=palbd(ibm)
8509 zrupc(klev+1) =palbp(ibm)
8510 zrupdc(klev+1)=palbd(ibm)
8515 ztdbt_nodel(1)=1.0_rb
8517 zdbt(klev+1) =0.0_rb
8518 ztra(klev+1) =0.0_rb
8519 ztrad(klev+1)=0.0_rb
8520 zref(klev+1) =palbp(ibm)
8521 zrefd(klev+1)=palbd(ibm)
8522 zrup(klev+1) =palbp(ibm)
8523 zrupd(klev+1)=palbd(ibm)
8528 ! Note: two-stream calculations proceed from top to bottom;
8529 ! RRTMG_SW quantities are given bottom to top and are reversed here
8533 ! Set logical flag to do REFTRA calculation
8534 ! Do REFTRA for all clear layers
8535 lrtchkclr(jk)=.true.
8537 ! Do REFTRA only for cloudy layers in profile, since already done for clear layers
8538 lrtchkcld(jk)=.false.
8539 lrtchkcld(jk)=(pcldfmc(ikl,iw) > repclc)
8541 ! Clear-sky optical parameters - this section inactive
8543 ! ztauc(jk) = ztaur(ikl,iw) + ztaug(ikl,iw)
8544 ! zomcc(jk) = ztaur(ikl,iw) / ztauc(jk)
8545 ! zgcc(jk) = 0.0001_rb
8546 ! Total sky optical parameters
8547 ! ztauo(jk) = ztaur(ikl,iw) + ztaug(ikl,iw) + ptaucmc(ikl,iw)
8548 ! zomco(jk) = ptaucmc(ikl,iw) * pomgcmc(ikl,iw) + ztaur(ikl,iw)
8549 ! zgco (jk) = (ptaucmc(ikl,iw) * pomgcmc(ikl,iw) * pasycmc(ikl,iw) + &
8550 ! ztaur(ikl,iw) * 0.0001_rb) / zomco(jk)
8551 ! zomco(jk) = zomco(jk) / ztauo(jk)
8553 ! Clear-sky optical parameters including aerosols
8554 ztauc(jk) = ztaur(ikl,iw) + ztaug(ikl,iw) + ptaua(ikl,ibm)
8555 zomcc(jk) = ztaur(ikl,iw) * 1.0_rb + ptaua(ikl,ibm) * pomga(ikl,ibm)
8556 zgcc(jk) = pasya(ikl,ibm) * pomga(ikl,ibm) * ptaua(ikl,ibm) / zomcc(jk)
8557 zomcc(jk) = zomcc(jk) / ztauc(jk)
8559 ! Pre-delta-scaling clear and cloudy direct beam transmittance (must use 'orig', unscaled cloud OD)
8560 ! \/\/\/ This block of code is only needed for direct beam calculation
8562 zclear = 1.0_rb - pcldfmc(ikl,iw)
8563 zcloud = pcldfmc(ikl,iw)
8566 ! zdbtmc = exp(-ztauc(jk) / prmu0)
8568 ! Use exponential lookup table for transmittance, or expansion of
8569 ! exponential for low tau
8570 ze1 = ztauc(jk) / prmu0
8571 if (ze1 .le. od_lo) then
8572 zdbtmc = 1._rb - ze1 + 0.5_rb * ze1 * ze1
8574 tblind = ze1 / (bpade + ze1)
8575 itind = tblint * tblind + 0.5_rb
8576 zdbtmc = exp_tbl(itind)
8579 zdbtc_nodel(jk) = zdbtmc
8580 ztdbtc_nodel(jk+1) = zdbtc_nodel(jk) * ztdbtc_nodel(jk)
8583 tauorig = ztauc(jk) + ptaormc(ikl,iw)
8584 ! zdbtmo = exp(-tauorig / prmu0)
8586 ! Use exponential lookup table for transmittance, or expansion of
8587 ! exponential for low tau
8588 ze1 = tauorig / prmu0
8589 if (ze1 .le. od_lo) then
8590 zdbtmo = 1._rb - ze1 + 0.5_rb * ze1 * ze1
8592 tblind = ze1 / (bpade + ze1)
8593 itind = tblint * tblind + 0.5_rb
8594 zdbtmo = exp_tbl(itind)
8597 zdbt_nodel(jk) = zclear*zdbtmc + zcloud*zdbtmo
8598 ztdbt_nodel(jk+1) = zdbt_nodel(jk) * ztdbt_nodel(jk)
8599 ! /\/\/\ Above code only needed for direct beam calculation
8602 ! Delta scaling - clear
8603 zf = zgcc(jk) * zgcc(jk)
8604 zwf = zomcc(jk) * zf
8605 ztauc(jk) = (1.0_rb - zwf) * ztauc(jk)
8606 zomcc(jk) = (zomcc(jk) - zwf) / (1.0_rb - zwf)
8607 zgcc (jk) = (zgcc(jk) - zf) / (1.0_rb - zf)
8610 ! Total sky optical parameters (cloud properties already delta-scaled)
8611 ! Use this code if cloud properties are derived in rrtmg_sw_cldprop
8612 if (icpr .ge. 1) then
8613 ztauo(jk) = ztauc(jk) + ptaucmc(ikl,iw)
8614 zomco(jk) = ztauc(jk) * zomcc(jk) + ptaucmc(ikl,iw) * pomgcmc(ikl,iw)
8615 zgco (jk) = (ptaucmc(ikl,iw) * pomgcmc(ikl,iw) * pasycmc(ikl,iw) + &
8616 ztauc(jk) * zomcc(jk) * zgcc(jk)) / zomco(jk)
8617 zomco(jk) = zomco(jk) / ztauo(jk)
8619 ! Total sky optical parameters (if cloud properties not delta scaled)
8620 ! Use this code if cloud properties are not derived in rrtmg_sw_cldprop
8621 elseif (icpr .eq. 0) then
8622 ztauo(jk) = ztaur(ikl,iw) + ztaug(ikl,iw) + ptaua(ikl,ibm) + ptaucmc(ikl,iw)
8623 zomco(jk) = ptaua(ikl,ibm) * pomga(ikl,ibm) + ptaucmc(ikl,iw) * pomgcmc(ikl,iw) + &
8624 ztaur(ikl,iw) * 1.0_rb
8625 zgco (jk) = (ptaucmc(ikl,iw) * pomgcmc(ikl,iw) * pasycmc(ikl,iw) + &
8626 ptaua(ikl,ibm)*pomga(ikl,ibm)*pasya(ikl,ibm)) / zomco(jk)
8627 zomco(jk) = zomco(jk) / ztauo(jk)
8629 ! Delta scaling - clouds
8630 ! Use only if subroutine rrtmg_sw_cldprop is not used to get cloud properties and to apply delta scaling
8631 zf = zgco(jk) * zgco(jk)
8632 zwf = zomco(jk) * zf
8633 ztauo(jk) = (1._rb - zwf) * ztauo(jk)
8634 zomco(jk) = (zomco(jk) - zwf) / (1.0_rb - zwf)
8635 zgco (jk) = (zgco(jk) - zf) / (1.0_rb - zf)
8641 ! Clear sky reflectivities
8642 call reftra_sw (klev, &
8643 lrtchkclr, zgcc, prmu0, ztauc, zomcc, &
8644 zrefc, zrefdc, ztrac, ztradc)
8646 ! Total sky reflectivities
8647 call reftra_sw (klev, &
8648 lrtchkcld, zgco, prmu0, ztauo, zomco, &
8649 zrefo, zrefdo, ztrao, ztrado)
8653 ! Combine clear and cloudy contributions for total sky
8655 zclear = 1.0_rb - pcldfmc(ikl,iw)
8656 zcloud = pcldfmc(ikl,iw)
8658 zref(jk) = zclear*zrefc(jk) + zcloud*zrefo(jk)
8659 zrefd(jk)= zclear*zrefdc(jk) + zcloud*zrefdo(jk)
8660 ztra(jk) = zclear*ztrac(jk) + zcloud*ztrao(jk)
8661 ztrad(jk)= zclear*ztradc(jk) + zcloud*ztrado(jk)
8663 ! Direct beam transmittance
8666 ! zdbtmc = exp(-ztauc(jk) / prmu0)
8668 ! Use exponential lookup table for transmittance, or expansion of
8669 ! exponential for low tau
8670 ze1 = ztauc(jk) / prmu0
8671 if (ze1 .le. od_lo) then
8672 zdbtmc = 1._rb - ze1 + 0.5_rb * ze1 * ze1
8674 tblind = ze1 / (bpade + ze1)
8675 itind = tblint * tblind + 0.5_rb
8676 zdbtmc = exp_tbl(itind)
8680 ztdbtc(jk+1) = zdbtc(jk)*ztdbtc(jk)
8683 ! zdbtmo = exp(-ztauo(jk) / prmu0)
8685 ! Use exponential lookup table for transmittance, or expansion of
8686 ! exponential for low tau
8687 ze1 = ztauo(jk) / prmu0
8688 if (ze1 .le. od_lo) then
8689 zdbtmo = 1._rb - ze1 + 0.5_rb * ze1 * ze1
8691 tblind = ze1 / (bpade + ze1)
8692 itind = tblint * tblind + 0.5_rb
8693 zdbtmo = exp_tbl(itind)
8696 zdbt(jk) = zclear*zdbtmc + zcloud*zdbtmo
8697 ztdbt(jk+1) = zdbt(jk)*ztdbt(jk)
8701 ! Vertical quadrature for clear-sky fluxes
8703 call vrtqdr_sw(klev, iw, &
8704 zrefc, zrefdc, ztrac, ztradc, &
8705 zdbtc, zrdndc, zrupc, zrupdc, ztdbtc, &
8708 ! Vertical quadrature for cloudy fluxes
8710 call vrtqdr_sw(klev, iw, &
8711 zref, zrefd, ztra, ztrad, &
8712 zdbt, zrdnd, zrup, zrupd, ztdbt, &
8715 ! Upwelling and downwelling fluxes at levels
8716 ! Two-stream calculations go from top to bottom;
8717 ! layer indexing is reversed to go bottom to top for output arrays
8722 ! Accumulate spectral fluxes over bands - inactive
8723 ! zbbfu(ikl) = zbbfu(ikl) + zincflx(iw)*zfu(jk,iw)
8724 ! zbbfd(ikl) = zbbfd(ikl) + zincflx(iw)*zfd(jk,iw)
8725 ! zbbcu(ikl) = zbbcu(ikl) + zincflx(iw)*zcu(jk,iw)
8726 ! zbbcd(ikl) = zbbcd(ikl) + zincflx(iw)*zcd(jk,iw)
8727 ! zbbfddir(ikl) = zbbfddir(ikl) + zincflx(iw)*ztdbt_nodel(jk)
8728 ! zbbcddir(ikl) = zbbcddir(ikl) + zincflx(iw)*ztdbtc_nodel(jk)
8730 ! Accumulate spectral fluxes over whole spectrum
8731 pbbfu(ikl) = pbbfu(ikl) + zincflx(iw)*zfu(jk,iw)
8732 pbbfd(ikl) = pbbfd(ikl) + zincflx(iw)*zfd(jk,iw)
8733 pbbcu(ikl) = pbbcu(ikl) + zincflx(iw)*zcu(jk,iw)
8734 pbbcd(ikl) = pbbcd(ikl) + zincflx(iw)*zcd(jk,iw)
8735 pbbfddir(ikl) = pbbfddir(ikl) + zincflx(iw)*ztdbt_nodel(jk)
8736 pbbcddir(ikl) = pbbcddir(ikl) + zincflx(iw)*ztdbtc_nodel(jk)
8738 ! Accumulate direct fluxes for UV/visible bands
8739 if (ibm >= 10 .and. ibm <= 13) then
8740 puvcd(ikl) = puvcd(ikl) + zincflx(iw)*zcd(jk,iw)
8741 puvfd(ikl) = puvfd(ikl) + zincflx(iw)*zfd(jk,iw)
8742 puvcddir(ikl) = puvcddir(ikl) + zincflx(iw)*ztdbtc_nodel(jk)
8743 puvfddir(ikl) = puvfddir(ikl) + zincflx(iw)*ztdbt_nodel(jk)
8744 ! Accumulate direct fluxes for near-IR bands
8745 else if (ibm == 14 .or. ibm <= 9) then
8746 pnicd(ikl) = pnicd(ikl) + zincflx(iw)*zcd(jk,iw)
8747 pnifd(ikl) = pnifd(ikl) + zincflx(iw)*zfd(jk,iw)
8748 pnicddir(ikl) = pnicddir(ikl) + zincflx(iw)*ztdbtc_nodel(jk)
8749 pnifddir(ikl) = pnifddir(ikl) + zincflx(iw)*ztdbt_nodel(jk)
8754 ! End loop on jg, g-point interval
8757 ! End loop on jb, spectral band
8760 end subroutine spcvmc_sw
8762 end module rrtmg_sw_spcvmc
8764 ! path: $Source: /cvsroot/NWP/WRFV3/phys/module_ra_rrtmg_sw.F,v $
8765 ! author: $Author: trn $
8766 ! revision: $Revision: 1.3 $
8767 ! created: $Date: 2009/04/16 19:54:22 $
8771 ! --------------------------------------------------------------------------
8773 ! | Copyright 2002-2008, Atmospheric & Environmental Research, Inc. (AER). |
8774 ! | This software may be used, copied, or redistributed as long as it is |
8775 ! | not sold and this copyright notice is reproduced on each copy made. |
8776 ! | This model is provided as is without any express or implied warranties. |
8777 ! | (http://www.rtweb.aer.com/) |
8779 ! --------------------------------------------------------------------------
8781 ! ****************************************************************************
8787 ! * a rapid radiative transfer model *
8788 ! * for the solar spectral region *
8789 ! * for application to general circulation models *
8792 ! * Atmospheric and Environmental Research, Inc. *
8793 ! * 131 Hartwell Avenue *
8794 ! * Lexington, MA 02421 *
8798 ! * Jennifer S. Delamere *
8799 ! * Michael J. Iacono *
8800 ! * Shepard A. Clough *
8807 ! * email: miacono@aer.com *
8808 ! * email: emlawer@aer.com *
8809 ! * email: jdelamer@aer.com *
8811 ! * The authors wish to acknowledge the contributions of the *
8812 ! * following people: Steven J. Taubman, Patrick D. Brown, *
8813 ! * Ronald E. Farren, Luke Chen, Robert Bergstrom. *
8815 ! ****************************************************************************
8817 ! --------- Modules ---------
8819 use parkind, only : im => kind_im, rb => kind_rb
8821 use mcica_subcol_gen_sw, only: mcica_subcol_sw
8822 use rrtmg_sw_cldprmc, only: cldprmc_sw
8823 ! *** Move the required call to rrtmg_sw_ini below and the following
8824 ! use association to GCM initialization area ***
8825 ! use rrtmg_sw_init, only: rrtmg_sw_ini
8826 use rrtmg_sw_setcoef, only: setcoef_sw
8827 use rrtmg_sw_spcvmc, only: spcvmc_sw
8831 ! public interfaces/functions/subroutines
8832 public :: rrtmg_sw, inatm_sw, earth_sun
8834 !------------------------------------------------------------------
8836 !------------------------------------------------------------------
8838 !------------------------------------------------------------------
8839 ! Public subroutines
8840 !------------------------------------------------------------------
8842 subroutine rrtmg_sw &
8843 (ncol ,nlay ,icld , &
8844 play ,plev ,tlay ,tlev ,tsfc , &
8845 h2ovmr , o3vmr ,co2vmr ,ch4vmr ,n2ovmr ,o2vmr , &
8846 asdir ,asdif ,aldir ,aldif , &
8847 coszen ,adjes ,dyofyr ,scon , &
8848 inflgsw ,iceflgsw,liqflgsw,cldfmcl , &
8849 taucmcl ,ssacmcl ,asmcmcl ,fsfcmcl , &
8850 ciwpmcl ,clwpmcl ,cswpmcl ,reicmcl ,relqmcl ,resnmcl, &
8851 tauaer ,ssaaer ,asmaer ,ecaer , &
8852 swuflx ,swdflx ,swhr ,swuflxc ,swdflxc ,swhrc, swuflxcln ,swdflxcln , aer_opt, &
8853 ! --------- Add the following four compenants for ssib shortwave down radiation ---!
8854 ! ------------------- by Zhenxin 2011-06-20 --------------------------------!
8855 sibvisdir, sibvisdif, sibnirdir, sibnirdif, &
8856 ! ---------------------- End, Zhenxin 2011-06-20 --------------------------------!
8857 swdkdir,swdkdif, & ! jararias, 2013/08/10
8859 calc_clean_atm_diag, &
8860 sw_zbbcddir, sw_dirdflux, sw_difdflux & ! WRF-CMAQ twoway coupled model
8864 ! ------- Description -------
8866 ! This program is the driver for RRTMG_SW, the AER SW radiation model for
8867 ! application to GCMs, that has been adapted from RRTM_SW for improved
8868 ! efficiency and to provide fractional cloudiness and cloud overlap
8869 ! capability using McICA.
8871 ! Note: The call to RRTMG_SW_INI should be moved to the GCM initialization
8872 ! area, since this has to be called only once.
8875 ! b) calls INATM_SW to read in the atmospheric profile;
8876 ! all layering in RRTMG is ordered from surface to toa.
8877 ! c) calls CLDPRMC_SW to set cloud optical depth for McICA based
8878 ! on input cloud properties
8879 ! d) calls SETCOEF_SW to calculate various quantities needed for
8880 ! the radiative transfer algorithm
8881 ! e) calls SPCVMC to call the two-stream model that in turn
8882 ! calls TAUMOL to calculate gaseous optical depths for each
8883 ! of the 16 spectral bands and to perform the radiative transfer
8884 ! using McICA, the Monte-Carlo Independent Column Approximation,
8885 ! to represent sub-grid scale cloud variability
8886 ! f) passes the calculated fluxes and cooling rates back to GCM
8888 ! Two modes of operation are possible:
8889 ! The mode is chosen by using either rrtmg_sw.nomcica.f90 (to not use
8890 ! McICA) or rrtmg_sw.f90 (to use McICA) to interface with a GCM.
8892 ! 1) Standard, single forward model calculation (imca = 0); this is
8893 ! valid only for clear sky or fully overcast clouds
8894 ! 2) Monte Carlo Independent Column Approximation (McICA, Pincus et al.,
8895 ! JC, 2003) method is applied to the forward model calculation (imca = 1)
8896 ! This method is valid for clear sky or partial cloud conditions.
8898 ! This call to RRTMG_SW must be preceeded by a call to the module
8899 ! mcica_subcol_gen_sw.f90 to run the McICA sub-column cloud generator,
8900 ! which will provide the cloud physical or cloud optical properties
8901 ! on the RRTMG quadrature point (ngptsw) dimension.
8903 ! Two methods of cloud property input are possible:
8904 ! Cloud properties can be input in one of two ways (controlled by input
8905 ! flags inflag, iceflag and liqflag; see text file rrtmg_sw_instructions
8906 ! and subroutine rrtmg_sw_cldprop.f90 for further details):
8908 ! 1) Input cloud fraction, cloud optical depth, single scattering albedo
8909 ! and asymmetry parameter directly (inflgsw = 0)
8910 ! 2) Input cloud fraction and cloud physical properties: ice fracion,
8911 ! ice and liquid particle sizes (inflgsw = 1 or 2);
8912 ! cloud optical properties are calculated by cldprop or cldprmc based
8913 ! on input settings of iceflgsw and liqflgsw
8915 ! Two methods of aerosol property input are possible:
8916 ! Aerosol properties can be input in one of two ways (controlled by input
8917 ! flag iaer, see text file rrtmg_sw_instructions for further details):
8919 ! 1) Input aerosol optical depth, single scattering albedo and asymmetry
8920 ! parameter directly by layer and spectral band (iaer=10)
8921 ! 2) Input aerosol optical depth and 0.55 micron directly by layer and use
8922 ! one or more of six ECMWF aerosol types (iaer=6)
8925 ! ------- Modifications -------
8927 ! This version of RRTMG_SW has been modified from RRTM_SW to use a reduced
8928 ! set of g-point intervals and a two-stream model for application to GCMs.
8930 !-- Original version (derived from RRTM_SW)
8932 !-- Conversion to F90 formatting; addition of 2-stream radiative transfer
8933 ! Feb 2003: J.-J. Morcrette, ECMWF
8934 !-- Additional modifications for GCM application
8935 ! Aug 2003: M. J. Iacono, AER Inc.
8936 !-- Total number of g-points reduced from 224 to 112. Original
8937 ! set of 224 can be restored by exchanging code in module parrrsw.f90
8938 ! and in file rrtmg_sw_init.f90.
8939 ! Apr 2004: M. J. Iacono, AER, Inc.
8940 !-- Modifications to include output for direct and diffuse
8941 ! downward fluxes. There are output as "true" fluxes without
8942 ! any delta scaling applied. Code can be commented to exclude
8943 ! this calculation in source file rrtmg_sw_spcvrt.f90.
8944 ! Jan 2005: E. J. Mlawer, M. J. Iacono, AER, Inc.
8945 !-- Revised to add McICA capability.
8946 ! Nov 2005: M. J. Iacono, AER, Inc.
8947 !-- Reformatted for consistency with rrtmg_lw.
8948 ! Feb 2007: M. J. Iacono, AER, Inc.
8949 !-- Modifications to formatting to use assumed-shape arrays.
8950 ! Aug 2007: M. J. Iacono, AER, Inc.
8952 ! --------- Modules ---------
8954 use parrrsw, only : nbndsw, ngptsw, naerec, nstr, nmol, mxmol, &
8956 use rrsw_aer, only : rsrtaua, rsrpiza, rsrasya
8957 use rrsw_con, only : heatfac, oneminus, pi
8958 use rrsw_wvn, only : wavenum1, wavenum2
8960 ! ------- Declarations
8964 integer(kind=im), intent(in) :: ncol ! Number of horizontal columns
8965 integer(kind=im), intent(in) :: nlay ! Number of model layers
8966 integer(kind=im), intent(inout) :: icld ! Cloud overlap method
8972 ! 5: Exponential/random
8973 real(kind=rb), intent(in) :: play(:,:) ! Layer pressures (hPa, mb)
8974 ! Dimensions: (ncol,nlay)
8975 real(kind=rb), intent(in) :: plev(:,:) ! Interface pressures (hPa, mb)
8976 ! Dimensions: (ncol,nlay+1)
8977 real(kind=rb), intent(in) :: tlay(:,:) ! Layer temperatures (K)
8978 ! Dimensions: (ncol,nlay)
8979 real(kind=rb), intent(in) :: tlev(:,:) ! Interface temperatures (K)
8980 ! Dimensions: (ncol,nlay+1)
8981 real(kind=rb), intent(in) :: tsfc(:) ! Surface temperature (K)
8982 ! Dimensions: (ncol)
8983 real(kind=rb), intent(in) :: h2ovmr(:,:) ! H2O volume mixing ratio
8984 ! Dimensions: (ncol,nlay)
8985 real(kind=rb), intent(in) :: o3vmr(:,:) ! O3 volume mixing ratio
8986 ! Dimensions: (ncol,nlay)
8987 real(kind=rb), intent(in) :: co2vmr(:,:) ! CO2 volume mixing ratio
8988 ! Dimensions: (ncol,nlay)
8989 real(kind=rb), intent(in) :: ch4vmr(:,:) ! Methane volume mixing ratio
8990 ! Dimensions: (ncol,nlay)
8991 real(kind=rb), intent(in) :: n2ovmr(:,:) ! Nitrous oxide volume mixing ratio
8992 ! Dimensions: (ncol,nlay)
8993 real(kind=rb), intent(in) :: o2vmr(:,:) ! Oxygen volume mixing ratio
8994 ! Dimensions: (ncol,nlay)
8995 real(kind=rb), intent(in) :: asdir(:) ! UV/vis surface albedo direct rad
8996 ! Dimensions: (ncol)
8997 real(kind=rb), intent(in) :: aldir(:) ! Near-IR surface albedo direct rad
8998 ! Dimensions: (ncol)
8999 real(kind=rb), intent(in) :: asdif(:) ! UV/vis surface albedo: diffuse rad
9000 ! Dimensions: (ncol)
9001 real(kind=rb), intent(in) :: aldif(:) ! Near-IR surface albedo: diffuse rad
9002 ! Dimensions: (ncol)
9004 integer(kind=im), intent(in) :: dyofyr ! Day of the year (used to get Earth/Sun
9005 ! distance if adjflx not provided)
9006 real(kind=rb), intent(in) :: adjes ! Flux adjustment for Earth/Sun distance
9007 real(kind=rb), intent(in) :: coszen(:) ! Cosine of solar zenith angle
9008 ! Dimensions: (ncol)
9009 real(kind=rb), intent(in) :: scon ! Solar constant (W/m2)
9011 integer(kind=im), intent(in) :: inflgsw ! Flag for cloud optical properties
9012 integer(kind=im), intent(in) :: iceflgsw ! Flag for ice particle specification
9013 integer(kind=im), intent(in) :: liqflgsw ! Flag for liquid droplet specification
9015 real(kind=rb), intent(in) :: cldfmcl(:,:,:) ! Cloud fraction
9016 ! Dimensions: (ngptsw,ncol,nlay)
9017 real(kind=rb), intent(in) :: taucmcl(:,:,:) ! In-cloud optical depth
9018 ! Dimensions: (ngptsw,ncol,nlay)
9019 real(kind=rb), intent(in) :: ssacmcl(:,:,:) ! In-cloud single scattering albedo
9020 ! Dimensions: (ngptsw,ncol,nlay)
9021 real(kind=rb), intent(in) :: asmcmcl(:,:,:) ! In-cloud asymmetry parameter
9022 ! Dimensions: (ngptsw,ncol,nlay)
9023 real(kind=rb), intent(in) :: fsfcmcl(:,:,:) ! In-cloud forward scattering fraction
9024 ! Dimensions: (ngptsw,ncol,nlay)
9025 real(kind=rb), intent(in) :: ciwpmcl(:,:,:) ! In-cloud ice water path (g/m2)
9026 ! Dimensions: (ngptsw,ncol,nlay)
9027 real(kind=rb), intent(in) :: clwpmcl(:,:,:) ! In-cloud liquid water path (g/m2)
9028 ! Dimensions: (ngptsw,ncol,nlay)
9029 real(kind=rb), intent(in) :: cswpmcl(:,:,:) ! In-cloud snow water path (g/m2)
9030 ! Dimensions: (ngptsw,ncol,nlay)
9031 real(kind=rb), intent(in) :: reicmcl(:,:) ! Cloud ice effective radius (microns)
9032 ! Dimensions: (ncol,nlay)
9033 ! specific definition of reicmcl depends on setting of iceflglw:
9034 ! iceflglw = 0: ice effective radius, r_ec, (Ebert and Curry, 1992),
9035 ! r_ec must be >= 10.0 microns
9036 ! iceflglw = 1: ice effective radius, r_ec, (Ebert and Curry, 1992),
9037 ! r_ec range is limited to 13.0 to 130.0 microns
9038 ! iceflglw = 2: ice effective radius, r_k, (Key, Streamer Ref. Manual, 1996)
9039 ! r_k range is limited to 5.0 to 131.0 microns
9040 ! iceflglw = 3: generalized effective size, dge, (Fu, 1996),
9041 ! dge range is limited to 5.0 to 140.0 microns
9042 ! [dge = 1.0315 * r_ec]
9043 real(kind=rb), intent(in) :: relqmcl(:,:) ! Cloud water drop effective radius (microns)
9044 ! Dimensions: (ncol,nlay)
9045 real(kind=rb), intent(in) :: resnmcl(:,:) ! Cloud snow effective radius (microns)
9046 ! Dimensions: (ncol,nlay)
9047 real(kind=rb), intent(in) :: tauaer(:,:,:) ! Aerosol optical depth (iaer=10 only)
9048 ! Dimensions: (ncol,nlay,nbndsw)
9049 ! (non-delta scaled)
9050 real(kind=rb), intent(in) :: ssaaer(:,:,:) ! Aerosol single scattering albedo (iaer=10 only)
9051 ! Dimensions: (ncol,nlay,nbndsw)
9052 ! (non-delta scaled)
9053 real(kind=rb), intent(in) :: asmaer(:,:,:) ! Aerosol asymmetry parameter (iaer=10 only)
9054 ! Dimensions: (ncol,nlay,nbndsw)
9055 ! (non-delta scaled)
9056 real(kind=rb), intent(in) :: ecaer(:,:,:) ! Aerosol optical depth at 0.55 micron (iaer=6 only)
9057 ! Dimensions: (ncol,nlay,naerec)
9058 ! (non-delta scaled)
9059 integer, intent(in) :: calc_clean_atm_diag! Control for clean air diagnositic calls for WRF-Chem
9061 ! ----- Output -----
9063 real(kind=rb), intent(out) :: swuflx(:,:) ! Total sky shortwave upward flux (W/m2)
9064 ! Dimensions: (ncol,nlay+1)
9065 real(kind=rb), intent(out) :: swdflx(:,:) ! Total sky shortwave downward flux (W/m2)
9066 ! Dimensions: (ncol,nlay+1)
9067 real(kind=rb), intent(out) :: sibvisdir(:,:) ! visible direct downward flux (W/m2)
9068 ! Dimensions: (ncol,nlay+1) Zhenxin (2011/06/20)
9069 real(kind=rb), intent(out) :: sibvisdif(:,:) ! visible diffusion downward flux (W/m2)
9070 ! Dimensions: (ncol,nlay+1) Zhenxin (2011/06/20)
9071 real(kind=rb), intent(out) :: sibnirdir(:,:) ! Near IR direct downward flux (W/m2)
9072 ! Dimensions: (ncol,nlay+1) Zhenxin (2011/06/20)
9073 real(kind=rb), intent(out) :: sibnirdif(:,:) ! Near IR diffusion downward flux (W/m2)
9074 ! Dimensions: (ncol,nlay+1) Zhenxin (2011/06/20)
9075 real(kind=rb), intent(out) :: swhr(:,:) ! Total sky shortwave radiative heating rate (K/d)
9076 ! Dimensions: (ncol,nlay)
9077 real(kind=rb), intent(out) :: swuflxc(:,:) ! Clear sky shortwave upward flux (W/m2)
9078 ! Dimensions: (ncol,nlay+1)
9079 real(kind=rb), intent(out) :: swdflxc(:,:) ! Clear sky shortwave downward flux (W/m2)
9080 ! Dimensions: (ncol,nlay+1)
9081 real(kind=rb), intent(out) :: swhrc(:,:) ! Clear sky shortwave radiative heating rate (K/d)
9082 ! Dimensions: (ncol,nlay)
9083 real(kind=rb), intent(out) :: swuflxcln(:,:) ! Clean sky shortwave upward flux (W/m2)
9084 ! Dimensions: (ncol,nlay+1)
9085 real(kind=rb), intent(out) :: swdflxcln(:,:) ! Clean sky shortwave downward flux (W/m2)
9086 ! Dimensions: (ncol,nlay+1)
9088 integer, intent(in) :: aer_opt
9089 real(kind=rb), intent(out) :: &
9090 swdkdir(:,:), & ! Total shortwave downward direct flux (W/m2), Dimensions: (ncol,nlay) jararias, 2013/08/10
9091 swdkdif(:,:), & ! Total shortwave downward diffuse flux (W/m2), Dimensions: (ncol,nlay) jararias, 2013/08/10
9092 swdkdirc(:,:) ! Total shortwave downward direct flux clear sky (W/m2), Dimensions: (ncol,nlay)
9094 real, intent(out) :: sw_zbbcddir, & ! WRF-CMAQ twoway coupled model
9095 sw_dirdflux, & ! WRF-CMAQ twoway coupled model
9096 sw_difdflux ! WRF-CMAQ twoway coupled model
9105 integer(kind=im) :: nlayers ! total number of layers
9106 integer(kind=im) :: istart ! beginning band of calculation
9107 integer(kind=im) :: iend ! ending band of calculation
9108 integer(kind=im) :: icpr ! cldprop/cldprmc use flag
9109 integer(kind=im) :: iout ! output option flag (inactive)
9110 integer(kind=im) :: iaer ! aerosol option flag
9111 integer(kind=im) :: idelm ! delta-m scaling flag (inactive)
9112 integer(kind=im) :: isccos ! instrumental cosine response flag (inactive)
9113 integer(kind=im) :: iplon ! column loop index
9114 integer(kind=im) :: i ! layer loop index ! jk
9115 integer(kind=im) :: ib ! band loop index ! jsw
9116 integer(kind=im) :: ia, ig ! indices
9117 integer(kind=im) :: k ! layer loop index
9118 integer(kind=im) :: ims ! value for changing mcica permute seed
9119 integer(kind=im) :: imca ! flag for mcica [0=off, 1=on]
9121 real(kind=rb) :: zepsec, zepzen ! epsilon
9122 real(kind=rb) :: zdpgcp ! flux to heating conversion ratio
9125 real(kind=rb) :: pavel(nlay+1) ! layer pressures (mb)
9126 real(kind=rb) :: tavel(nlay+1) ! layer temperatures (K)
9127 real(kind=rb) :: pz(0:nlay+1) ! level (interface) pressures (hPa, mb)
9128 real(kind=rb) :: tz(0:nlay+1) ! level (interface) temperatures (K)
9129 real(kind=rb) :: tbound ! surface temperature (K)
9130 real(kind=rb) :: pdp(nlay+1) ! layer pressure thickness (hPa, mb)
9131 real(kind=rb) :: coldry(nlay+1) ! dry air column amount
9132 real(kind=rb) :: wkl(mxmol,nlay+1) ! molecular amounts (mol/cm-2)
9134 ! real(kind=rb) :: earth_sun ! function for Earth/Sun distance factor
9135 real(kind=rb) :: cossza ! Cosine of solar zenith angle
9136 real(kind=rb) :: adjflux(jpband) ! adjustment for current Earth/Sun distance
9137 real(kind=rb) :: solvar(jpband) ! solar constant scaling factor from rrtmg_sw
9138 ! default value of 1368.22 Wm-2 at 1 AU
9139 real(kind=rb) :: albdir(nbndsw) ! surface albedo, direct ! zalbp
9140 real(kind=rb) :: albdif(nbndsw) ! surface albedo, diffuse ! zalbd
9142 real(kind=rb) :: taua(nlay+1,nbndsw) ! Aerosol optical depth
9143 real(kind=rb) :: ssaa(nlay+1,nbndsw) ! Aerosol single scattering albedo
9144 real(kind=rb) :: asma(nlay+1,nbndsw) ! Aerosol asymmetry parameter
9146 ! Atmosphere - setcoef
9147 integer(kind=im) :: laytrop ! tropopause layer index
9148 integer(kind=im) :: layswtch ! tropopause layer index
9149 integer(kind=im) :: laylow ! tropopause layer index
9150 integer(kind=im) :: jp(nlay+1) !
9151 integer(kind=im) :: jt(nlay+1) !
9152 integer(kind=im) :: jt1(nlay+1) !
9154 real(kind=rb) :: colh2o(nlay+1) ! column amount (h2o)
9155 real(kind=rb) :: colco2(nlay+1) ! column amount (co2)
9156 real(kind=rb) :: colo3(nlay+1) ! column amount (o3)
9157 real(kind=rb) :: coln2o(nlay+1) ! column amount (n2o)
9158 real(kind=rb) :: colch4(nlay+1) ! column amount (ch4)
9159 real(kind=rb) :: colo2(nlay+1) ! column amount (o2)
9160 real(kind=rb) :: colmol(nlay+1) ! column amount
9161 real(kind=rb) :: co2mult(nlay+1) ! column amount
9163 integer(kind=im) :: indself(nlay+1)
9164 integer(kind=im) :: indfor(nlay+1)
9165 real(kind=rb) :: selffac(nlay+1)
9166 real(kind=rb) :: selffrac(nlay+1)
9167 real(kind=rb) :: forfac(nlay+1)
9168 real(kind=rb) :: forfrac(nlay+1)
9170 real(kind=rb) :: & !
9171 fac00(nlay+1), fac01(nlay+1), &
9172 fac10(nlay+1), fac11(nlay+1)
9174 ! Atmosphere/clouds - cldprop
9175 integer(kind=im) :: ncbands ! number of cloud spectral bands
9176 integer(kind=im) :: inflag ! flag for cloud property method
9177 integer(kind=im) :: iceflag ! flag for ice cloud properties
9178 integer(kind=im) :: liqflag ! flag for liquid cloud properties
9180 ! real(kind=rb) :: cldfrac(nlay+1) ! layer cloud fraction
9181 ! real(kind=rb) :: tauc(nlay+1) ! in-cloud optical depth (non-delta scaled)
9182 ! real(kind=rb) :: ssac(nlay+1) ! in-cloud single scattering albedo (non-delta scaled)
9183 ! real(kind=rb) :: asmc(nlay+1) ! in-cloud asymmetry parameter (non-delta scaled)
9184 ! real(kind=rb) :: fsfc(nlay+1) ! in-cloud forward scattering fraction (non-delta scaled)
9185 ! real(kind=rb) :: ciwp(nlay+1) ! in-cloud ice water path
9186 ! real(kind=rb) :: clwp(nlay+1) ! in-cloud liquid water path
9187 ! real(kind=rb) :: rei(nlay+1) ! cloud ice particle size
9188 ! real(kind=rb) :: rel(nlay+1) ! cloud liquid particle size
9190 ! real(kind=rb) :: taucloud(nlay+1,jpband) ! in-cloud optical depth
9191 ! real(kind=rb) :: taucldorig(nlay+1,jpband)! in-cloud optical depth (non-delta scaled)
9192 ! real(kind=rb) :: ssacloud(nlay+1,jpband) ! in-cloud single scattering albedo
9193 ! real(kind=rb) :: asmcloud(nlay+1,jpband) ! in-cloud asymmetry parameter
9195 ! Atmosphere/clouds - cldprmc [mcica]
9196 real(kind=rb) :: cldfmc(ngptsw,nlay+1) ! cloud fraction [mcica]
9197 real(kind=rb) :: ciwpmc(ngptsw,nlay+1) ! in-cloud ice water path [mcica]
9198 real(kind=rb) :: clwpmc(ngptsw,nlay+1) ! in-cloud liquid water path [mcica]
9199 real(kind=rb) :: cswpmc(ngptsw,nlay+1) ! in-cloud snow water path [mcica]
9200 real(kind=rb) :: relqmc(nlay+1) ! liquid particle effective radius (microns)
9201 real(kind=rb) :: reicmc(nlay+1) ! ice particle effective size (microns)
9202 real(kind=rb) :: resnmc(nlay+1) ! snow particle effective size (microns)
9203 real(kind=rb) :: taucmc(ngptsw,nlay+1) ! in-cloud optical depth [mcica]
9204 real(kind=rb) :: taormc(ngptsw,nlay+1) ! unscaled in-cloud optical depth [mcica]
9205 real(kind=rb) :: ssacmc(ngptsw,nlay+1) ! in-cloud single scattering albedo [mcica]
9206 real(kind=rb) :: asmcmc(ngptsw,nlay+1) ! in-cloud asymmetry parameter [mcica]
9207 real(kind=rb) :: fsfcmc(ngptsw,nlay+1) ! in-cloud forward scattering fraction [mcica]
9209 ! Atmosphere/clouds/aerosol - spcvrt,spcvmc
9210 real(kind=rb) :: ztauc(nlay+1,nbndsw) ! cloud optical depth
9211 real(kind=rb) :: ztaucorig(nlay+1,nbndsw) ! unscaled cloud optical depth
9212 real(kind=rb) :: zasyc(nlay+1,nbndsw) ! cloud asymmetry parameter
9213 ! (first moment of phase function)
9214 real(kind=rb) :: zomgc(nlay+1,nbndsw) ! cloud single scattering albedo
9215 real(kind=rb) :: ztaua(nlay+1,nbndsw) ! total aerosol optical depth
9216 real(kind=rb) :: ztauacln(nlay+1,nbndsw) ! dummy total aerosol optical depth for clean case (=zero)
9217 real(kind=rb) :: zasya(nlay+1,nbndsw) ! total aerosol asymmetry parameter
9218 real(kind=rb) :: zomga(nlay+1,nbndsw) ! total aerosol single scattering albedo
9220 real(kind=rb) :: zcldfmc(nlay+1,ngptsw) ! cloud fraction [mcica]
9221 real(kind=rb) :: ztaucmc(nlay+1,ngptsw) ! cloud optical depth [mcica]
9222 real(kind=rb) :: ztaormc(nlay+1,ngptsw) ! unscaled cloud optical depth [mcica]
9223 real(kind=rb) :: zasycmc(nlay+1,ngptsw) ! cloud asymmetry parameter [mcica]
9224 real(kind=rb) :: zomgcmc(nlay+1,ngptsw) ! cloud single scattering albedo [mcica]
9226 real(kind=rb) :: zbbfu(nlay+2) ! temporary upward shortwave flux (w/m2)
9227 real(kind=rb) :: zbbfd(nlay+2) ! temporary downward shortwave flux (w/m2)
9228 real(kind=rb) :: zbbcu(nlay+2) ! temporary clear sky upward shortwave flux (w/m2)
9229 real(kind=rb) :: zbbcd(nlay+2) ! temporary clear sky downward shortwave flux (w/m2)
9230 real(kind=rb) :: zbbfddir(nlay+2) ! temporary downward direct shortwave flux (w/m2)
9231 real(kind=rb) :: zbbcddir(nlay+2) ! temporary clear sky downward direct shortwave flux (w/m2)
9232 real(kind=rb) :: zuvfd(nlay+2) ! temporary UV downward shortwave flux (w/m2)
9233 real(kind=rb) :: zuvcd(nlay+2) ! temporary clear sky UV downward shortwave flux (w/m2)
9234 real(kind=rb) :: zuvfddir(nlay+2) ! temporary UV downward direct shortwave flux (w/m2)
9235 real(kind=rb) :: zuvcddir(nlay+2) ! temporary clear sky UV downward direct shortwave flux (w/m2)
9236 real(kind=rb) :: znifd(nlay+2) ! temporary near-IR downward shortwave flux (w/m2)
9237 real(kind=rb) :: znicd(nlay+2) ! temporary clear sky near-IR downward shortwave flux (w/m2)
9238 real(kind=rb) :: znifddir(nlay+2) ! temporary near-IR downward direct shortwave flux (w/m2)
9239 real(kind=rb) :: znicddir(nlay+2) ! temporary clear sky near-IR downward direct shortwave flux (w/m2)
9240 real(kind=rb) :: zbbclnu(nlay+2) ! temporary clean sky upward shortwave flux (w/m2)
9241 real(kind=rb) :: zbbclnd(nlay+2) ! temporary clean sky downward shortwave flux (w/m2)
9242 real(kind=rb) :: zbbclnddir(nlay+2) ! temporary clean sky downward direct shortwave flux (w/m2)
9243 real(kind=rb) :: zuvclnd(nlay+2) ! temporary clean sky UV downward shortwave flux (w/m2)
9244 real(kind=rb) :: zuvclnddir(nlay+2) ! temporary clean sky UV downward direct shortwave flux (w/m2)
9245 real(kind=rb) :: zniclnd(nlay+2) ! temporary clean sky near-IR downward shortwave flux (w/m2)
9246 real(kind=rb) :: zniclnddir(nlay+2) ! temporary clean sky near-IR downward direct shortwave flux (w/m2)
9248 ! Optional output fields
9249 real(kind=rb) :: swnflx(nlay+2) ! Total sky shortwave net flux (W/m2)
9250 real(kind=rb) :: swnflxc(nlay+2) ! Clear sky shortwave net flux (W/m2)
9251 real(kind=rb) :: dirdflux(nlay+2) ! Direct downward shortwave surface flux
9252 real(kind=rb) :: difdflux(nlay+2) ! Diffuse downward shortwave surface flux
9253 real(kind=rb) :: uvdflx(nlay+2) ! Total sky downward shortwave flux, UV/vis
9254 real(kind=rb) :: nidflx(nlay+2) ! Total sky downward shortwave flux, near-IR
9255 real(kind=rb) :: dirdnuv(nlay+2) ! Direct downward shortwave flux, UV/vis
9256 real(kind=rb) :: difdnuv(nlay+2) ! Diffuse downward shortwave flux, UV/vis
9257 real(kind=rb) :: dirdnir(nlay+2) ! Direct downward shortwave flux, near-IR
9258 real(kind=rb) :: difdnir(nlay+2) ! Diffuse downward shortwave flux, near-IR
9261 ! real(kind=rb) :: zuvfu(nlay+2) ! temporary upward UV shortwave flux (w/m2)
9262 ! real(kind=rb) :: zuvfd(nlay+2) ! temporary downward UV shortwave flux (w/m2)
9263 ! real(kind=rb) :: zuvcu(nlay+2) ! temporary clear sky upward UV shortwave flux (w/m2)
9264 ! real(kind=rb) :: zuvcd(nlay+2) ! temporary clear sky downward UV shortwave flux (w/m2)
9265 ! real(kind=rb) :: zvsfu(nlay+2) ! temporary upward visible shortwave flux (w/m2)
9266 ! real(kind=rb) :: zvsfd(nlay+2) ! temporary downward visible shortwave flux (w/m2)
9267 ! real(kind=rb) :: zvscu(nlay+2) ! temporary clear sky upward visible shortwave flux (w/m2)
9268 ! real(kind=rb) :: zvscd(nlay+2) ! temporary clear sky downward visible shortwave flux (w/m2)
9269 ! real(kind=rb) :: znifu(nlay+2) ! temporary upward near-IR shortwave flux (w/m2)
9270 ! real(kind=rb) :: znifd(nlay+2) ! temporary downward near-IR shortwave flux (w/m2)
9271 ! real(kind=rb) :: znicu(nlay+2) ! temporary clear sky upward near-IR shortwave flux (w/m2)
9272 ! real(kind=rb) :: znicd(nlay+2) ! temporary clear sky downward near-IR shortwave flux (w/m2)
9277 iout = 0 !BSINGH(PNNL) initializing iout to zero(Might be wrong!) as this variable is never initialized but used in spcvmc_sw
9280 !jm not thread safe oneminus = 1.0_rb - zepsec
9281 !jm not thread safe pi = 2._rb * asin(1._rb)
9288 ! In a GCM with or without McICA, set nlon to the longitude dimension
9290 ! Set imca to select calculation type:
9291 ! imca = 0, use standard forward model calculation (clear and overcast only)
9292 ! imca = 1, use McICA for Monte Carlo treatment of sub-grid cloud variability
9293 ! (clear, overcast or partial cloud conditions)
9295 ! *** This version uses McICA (imca = 1) ***
9297 ! Set icld to select of clear or cloud calculation and cloud
9298 ! overlap method (read by subroutine readprof from input file INPUT_RRTM):
9299 ! icld = 0, clear only
9300 ! icld = 1, with clouds using random cloud overlap (McICA only)
9301 ! icld = 2, with clouds using maximum/random cloud overlap (McICA only)
9302 ! icld = 3, with clouds using maximum cloud overlap (McICA only)
9303 ! icld = 4, with clouds using exponential cloud overlap (McICA only)
9304 ! icld = 5, with clouds using exponential/random cloud overlap (McICA only)
9306 ! Set iaer to select aerosol option
9307 ! iaer = 0, no aerosols
9308 ! iaer = 6, use six ECMWF aerosol types
9309 ! input aerosol optical depth at 0.55 microns for each aerosol type (ecaer)
9310 ! iaer = 10, input total aerosol optical depth, single scattering albedo
9311 ! and asymmetry parameter (tauaer, ssaaer, asmaer) directly
9312 if ( aer_opt.eq.0 .or. aer_opt.eq.2 .or. aer_opt.eq.3) then
9314 else if ( aer_opt .eq. 1 ) then
9318 ! Call model and data initialization, compute lookup tables, perform
9319 ! reduction of g-points from 224 to 112 for input absorption
9320 ! coefficient data and other arrays.
9322 ! In a GCM this call should be placed in the model initialization
9323 ! area, since this has to be called only once.
9324 ! call rrtmg_sw_ini(cpdair)
9326 ! This is the main longitude/column loop in RRTMG.
9327 ! Modify to loop over all columns (nlon) or over daylight columns
9331 ! Prepare atmosphere profile from GCM for use in RRTMG, and define
9332 ! other input parameters
9334 call inatm_sw (iplon, nlay, icld, iaer, &
9335 play, plev, tlay, tlev, tsfc, h2ovmr, &
9336 o3vmr, co2vmr, ch4vmr, n2ovmr, o2vmr, &
9337 adjes, dyofyr, scon, inflgsw, iceflgsw, liqflgsw, &
9338 cldfmcl, taucmcl, ssacmcl, asmcmcl, fsfcmcl, ciwpmcl, clwpmcl, cswpmcl, &
9339 reicmcl, relqmcl, resnmcl, tauaer, ssaaer, asmaer, &
9340 nlayers, pavel, pz, pdp, tavel, tz, tbound, coldry, wkl, &
9341 adjflux, solvar, inflag, iceflag, liqflag, cldfmc, taucmc, &
9342 ssacmc, asmcmc, fsfcmc, ciwpmc, clwpmc, cswpmc, reicmc, relqmc, resnmc, &
9345 ! For cloudy atmosphere, use cldprop to set cloud optical properties based on
9346 ! input cloud physical properties. Select method based on choices described
9347 ! in cldprop. Cloud fraction, water path, liquid droplet and ice particle
9348 ! effective radius must be passed in cldprop. Cloud fraction and cloud
9349 ! optical properties are transferred to rrtmg_sw arrays in cldprop.
9351 call cldprmc_sw(nlayers, inflag, iceflag, liqflag, cldfmc, &
9352 ciwpmc, clwpmc, cswpmc, reicmc, relqmc, resnmc, &
9353 taormc, taucmc, ssacmc, asmcmc, fsfcmc)
9356 ! Calculate coefficients for the temperature and pressure dependence of the
9357 ! molecular absorption coefficients by interpolating data from stored
9358 ! reference atmospheres.
9360 call setcoef_sw(nlayers, pavel, tavel, pz, tz, tbound, coldry, wkl, &
9361 laytrop, layswtch, laylow, jp, jt, jt1, &
9362 co2mult, colch4, colco2, colh2o, colmol, coln2o, &
9363 colo2, colo3, fac00, fac01, fac10, fac11, &
9364 selffac, selffrac, indself, forfac, forfrac, indfor)
9367 ! Cosine of the solar zenith angle
9368 ! Prevent using value of zero; ideally, SW model is not called from host model when sun
9371 cossza = coszen(iplon)
9372 if (cossza .le. zepzen) cossza = zepzen
9374 ! Transfer albedo, cloud and aerosol properties into arrays for 2-stream radiative transfer
9377 ! Near-IR bands 16-24 and 29 (1-9 and 14), 820-16000 cm-1, 0.625-12.195 microns
9379 albdir(ib) = aldir(iplon)
9380 albdif(ib) = aldif(iplon)
9382 albdir(nbndsw) = aldir(iplon)
9383 albdif(nbndsw) = aldif(iplon)
9384 ! UV/visible bands 25-28 (10-13), 16000-50000 cm-1, 0.200-0.625 micron
9386 albdir(ib) = asdir(iplon)
9387 albdif(ib) = asdif(iplon)
9394 zcldfmc(:,:) = 0._rb
9395 ztaucmc(:,:) = 0._rb
9396 ztaormc(:,:) = 0._rb
9397 zasycmc(:,:) = 0._rb
9398 zomgcmc(:,:) = 1._rb
9400 elseif (icld.ge.1) then
9403 zcldfmc(i,ig) = cldfmc(ig,i)
9404 ztaucmc(i,ig) = taucmc(ig,i)
9405 ztaormc(i,ig) = taormc(ig,i)
9406 zasycmc(i,ig) = asmcmc(ig,i)
9407 zomgcmc(i,ig) = ssacmc(ig,i)
9414 ! IAER = 0: no aerosols
9421 ! IAER = 6: Use ECMWF six aerosol types. See rrsw_aer.f90 for details.
9422 ! Input aerosol optical thickness at 0.55 micron for each aerosol type (ecaer),
9423 ! or set manually here for each aerosol and layer.
9424 elseif (iaer.eq.6) then
9428 ! ecaer(iplon,i,ia) = 1.0e-15_rb
9438 ztaua(i,ib) = ztaua(i,ib) + rsrtaua(ib,ia) * ecaer(iplon,i,ia)
9439 zomga(i,ib) = zomga(i,ib) + rsrtaua(ib,ia) * ecaer(iplon,i,ia) * &
9441 zasya(i,ib) = zasya(i,ib) + rsrtaua(ib,ia) * ecaer(iplon,i,ia) * &
9442 rsrpiza(ib,ia) * rsrasya(ib,ia)
9444 if (zomga(i,ib) /= 0._rb) then
9445 zasya(i,ib) = zasya(i,ib) / zomga(i,ib)
9447 if (ztaua(i,ib) /= 0._rb) then
9448 zomga(i,ib) = zomga(i,ib) / ztaua(i,ib)
9453 ! IAER=10: Direct specification of aerosol optical properties from GCM
9454 elseif (iaer.eq.10) then
9458 ztaua(i,ib) = taua(i,ib)
9459 ztauacln(i,ib) = 0.0
9460 zasya(i,ib) = asma(i,ib)
9461 zomga(i,ib) = ssaa(i,ib)
9468 ! Call the 2-stream radiation transfer model
9488 (nlayers, istart, iend, icpr, iout, &
9489 pavel, tavel, pz, tz, tbound, albdif, albdir, &
9490 zcldfmc, ztaucmc, zasycmc, zomgcmc, ztaormc, &
9491 ztaua, zasya, zomga, cossza, coldry, wkl, adjflux, &
9492 laytrop, layswtch, laylow, jp, jt, jt1, &
9493 co2mult, colch4, colco2, colh2o, colmol, coln2o, colo2, colo3, &
9494 fac00, fac01, fac10, fac11, &
9495 selffac, selffrac, indself, forfac, forfrac, indfor, &
9496 zbbfd, zbbfu, zbbcd, zbbcu, zuvfd, zuvcd, znifd, znicd, &
9497 zbbfddir, zbbcddir, zuvfddir, zuvcddir, znifddir, znicddir)
9499 ! Transfer up and down, clear and total sky fluxes to output arrays.
9500 ! Vertical indexing goes from bottom to top; reverse here for GCM if necessary.
9503 swuflxc(iplon,i) = zbbcu(i)
9504 swdflxc(iplon,i) = zbbcd(i)
9505 swuflx(iplon,i) = zbbfu(i)
9506 swdflx(iplon,i) = zbbfd(i)
9507 uvdflx(i) = zuvfd(i)
9508 nidflx(i) = znifd(i)
9510 ! Direct/diffuse fluxes
9511 dirdflux(i) = zbbfddir(i)
9512 difdflux(i) = swdflx(iplon,i) - dirdflux(i)
9513 swdkdir(iplon,i) = dirdflux(i) ! all-sky direct flux jararias, 2013/08/10
9514 swdkdif(iplon,i) = difdflux(i) ! all-sky diffuse flux jararias, 2013/08/10
9515 swdkdirc(iplon,i) = zbbcddir(i) ! PAJ: clear-sky direct flux
9517 ! UV/visible direct/diffuse fluxes
9518 dirdnuv(i) = zuvfddir(i)
9519 difdnuv(i) = zuvfd(i) - dirdnuv(i)
9520 ! ------- Zhenxin add vis/uv downwards dir or dif here --!
9521 sibvisdir(iplon,i) = dirdnuv(i)
9522 sibvisdif(iplon,i) = difdnuv(i)
9523 ! ----- End of Zhenxin addition ------------!
9524 ! Near-IR direct/diffuse fluxes
9525 dirdnir(i) = znifddir(i)
9526 difdnir(i) = znifd(i) - dirdnir(i)
9527 ! ---------Zhenxin add nir downwards dir and dif here --!
9528 sibnirdir(iplon,i) = dirdnir(i)
9529 sibnirdif(iplon,i) = difdnir(i)
9530 ! -------- End of Zhenxin addition 2011-05 ---------!
9533 ! Total and clear sky net fluxes
9535 swnflxc(i) = swdflxc(iplon,i) - swuflxc(iplon,i)
9536 swnflx(i) = swdflx(iplon,i) - swuflx(iplon,i)
9539 ! Total and clear sky heating rates
9541 zdpgcp = heatfac / pdp(i)
9542 swhrc(iplon,i) = (swnflxc(i+1) - swnflxc(i)) * zdpgcp
9543 swhr(iplon,i) = (swnflx(i+1) - swnflx(i)) * zdpgcp
9545 swhrc(iplon,nlayers) = 0._rb
9546 swhr(iplon,nlayers) = 0._rb
9549 ! Repeat call to 2-stream radiation model using "clean sky"
9550 ! variables and aerosol tau set to 0
9551 if(calc_clean_atm_diag .gt. 0)then
9558 zbbclnddir(i) = 0._rb
9562 zuvclnddir(i) = 0._rb
9566 zniclnddir(i) = 0._rb
9570 (nlayers, istart, iend, icpr, iout, &
9571 pavel, tavel, pz, tz, tbound, albdif, albdir, &
9572 zcldfmc, ztaucmc, zasycmc, zomgcmc, ztaormc, &
9573 ztauacln, zasya, zomga, cossza, coldry, wkl, adjflux, &
9574 laytrop, layswtch, laylow, jp, jt, jt1, &
9575 co2mult, colch4, colco2, colh2o, colmol, coln2o, colo2, colo3, &
9576 fac00, fac01, fac10, fac11, &
9577 selffac, selffrac, indself, forfac, forfrac, indfor, &
9578 zbbclnd, zbbclnu, zbbcd, zbbcu, zuvclnd, zuvcd, zniclnd, znicd, &
9579 zbbclnddir, zbbcddir, zuvclnddir, zuvcddir, zniclnddir, znicddir)
9582 swuflxcln(iplon,i) = zbbclnu(i)
9583 swdflxcln(iplon,i) = zbbclnd(i)
9587 swuflxcln(iplon,i) = 0.0
9588 swdflxcln(iplon,i) = 0.0
9594 swuflxcln(iplon,i) = 0.0
9595 swdflxcln(iplon,i) = 0.0
9599 ! End longitude loop
9602 ! begin WRF-CMAQ twoway coupled model block
9603 sw_zbbcddir = zbbcddir(1)
9604 sw_dirdflux = dirdflux(1)
9605 sw_difdflux = difdflux(1)
9606 ! end WRF-CMAQ twoway coupled model block
9608 end subroutine rrtmg_sw
9610 !*************************************************************************
9611 real(kind=rb) function earth_sun(idn)
9612 !*************************************************************************
9614 ! Purpose: Function to calculate the correction factor of Earth's orbit
9615 ! for current day of the year
9617 ! idn : Day of the year
9618 ! earth_sun : square of the ratio of mean to actual Earth-Sun distance
9620 ! ------- Modules -------
9622 use rrsw_con, only : pi
9624 integer(kind=im), intent(in) :: idn
9626 real(kind=rb) :: gamma
9628 gamma = 2._rb*pi*(idn-1)/365._rb
9630 ! Use Iqbal's equation 1.2.1
9632 earth_sun = 1.000110_rb + .034221_rb * cos(gamma) + .001289_rb * sin(gamma) + &
9633 .000719_rb * cos(2._rb*gamma) + .000077_rb * sin(2._rb*gamma)
9635 end function earth_sun
9637 !***************************************************************************
9638 subroutine inatm_sw (iplon, nlay, icld, iaer, &
9639 play, plev, tlay, tlev, tsfc, h2ovmr, &
9640 o3vmr, co2vmr, ch4vmr, n2ovmr, o2vmr, &
9641 adjes, dyofyr, scon, inflgsw, iceflgsw, liqflgsw, &
9642 cldfmcl, taucmcl, ssacmcl, asmcmcl, fsfcmcl, ciwpmcl, clwpmcl, cswpmcl, &
9643 reicmcl, relqmcl, resnmcl, tauaer, ssaaer, asmaer, &
9644 nlayers, pavel, pz, pdp, tavel, tz, tbound, coldry, wkl, &
9645 adjflux, solvar, inflag, iceflag, liqflag, cldfmc, taucmc, &
9646 ssacmc, asmcmc, fsfcmc, ciwpmc, clwpmc, cswpmc, reicmc, relqmc, resnmc, &
9648 !***************************************************************************
9650 ! Input atmospheric profile from GCM, and prepare it for use in RRTMG_SW.
9651 ! Set other RRTMG_SW input parameters.
9653 !***************************************************************************
9655 ! --------- Modules ----------
9657 use parrrsw, only : nbndsw, ngptsw, nstr, nmol, mxmol, &
9658 jpband, jpb1, jpb2, rrsw_scon
9659 use rrsw_con, only : heatfac, oneminus, pi, grav, avogad
9660 use rrsw_wvn, only : ng, nspa, nspb, wavenum1, wavenum2, delwave
9662 ! ------- Declarations -------
9665 integer(kind=im), intent(in) :: iplon ! column loop index
9666 integer(kind=im), intent(in) :: nlay ! number of model layers
9667 integer(kind=im), intent(in) :: icld ! clear/cloud and cloud overlap flag
9668 integer(kind=im), intent(in) :: iaer ! aerosol option flag
9670 real(kind=rb), intent(in) :: play(:,:) ! Layer pressures (hPa, mb)
9671 ! Dimensions: (ncol,nlay)
9672 real(kind=rb), intent(in) :: plev(:,:) ! Interface pressures (hPa, mb)
9673 ! Dimensions: (ncol,nlay+1)
9674 real(kind=rb), intent(in) :: tlay(:,:) ! Layer temperatures (K)
9675 ! Dimensions: (ncol,nlay)
9676 real(kind=rb), intent(in) :: tlev(:,:) ! Interface temperatures (K)
9677 ! Dimensions: (ncol,nlay+1)
9678 real(kind=rb), intent(in) :: tsfc(:) ! Surface temperature (K)
9679 ! Dimensions: (ncol)
9680 real(kind=rb), intent(in) :: h2ovmr(:,:) ! H2O volume mixing ratio
9681 ! Dimensions: (ncol,nlay)
9682 real(kind=rb), intent(in) :: o3vmr(:,:) ! O3 volume mixing ratio
9683 ! Dimensions: (ncol,nlay)
9684 real(kind=rb), intent(in) :: co2vmr(:,:) ! CO2 volume mixing ratio
9685 ! Dimensions: (ncol,nlay)
9686 real(kind=rb), intent(in) :: ch4vmr(:,:) ! Methane volume mixing ratio
9687 ! Dimensions: (ncol,nlay)
9688 real(kind=rb), intent(in) :: n2ovmr(:,:) ! Nitrous oxide volume mixing ratio
9689 ! Dimensions: (ncol,nlay)
9690 real(kind=rb), intent(in) :: o2vmr(:,:) ! Oxygen volume mixing ratio
9691 ! Dimensions: (ncol,nlay)
9693 integer(kind=im), intent(in) :: dyofyr ! Day of the year (used to get Earth/Sun
9694 ! distance if adjflx not provided)
9695 real(kind=rb), intent(in) :: adjes ! Flux adjustment for Earth/Sun distance
9696 real(kind=rb), intent(in) :: scon ! Solar constant (W/m2)
9698 integer(kind=im), intent(in) :: inflgsw ! Flag for cloud optical properties
9699 integer(kind=im), intent(in) :: iceflgsw ! Flag for ice particle specification
9700 integer(kind=im), intent(in) :: liqflgsw ! Flag for liquid droplet specification
9702 real(kind=rb), intent(in) :: cldfmcl(:,:,:) ! Cloud fraction
9703 ! Dimensions: (ngptsw,ncol,nlay)
9704 real(kind=rb), intent(in) :: taucmcl(:,:,:) ! In-cloud optical depth (optional)
9705 ! Dimensions: (ngptsw,ncol,nlay)
9706 real(kind=rb), intent(in) :: ssacmcl(:,:,:) ! In-cloud single scattering albedo
9707 ! Dimensions: (ngptsw,ncol,nlay)
9708 real(kind=rb), intent(in) :: asmcmcl(:,:,:) ! In-cloud asymmetry parameter
9709 ! Dimensions: (ngptsw,ncol,nlay)
9710 real(kind=rb), intent(in) :: fsfcmcl(:,:,:) ! In-cloud forward scattering fraction
9711 ! Dimensions: (ngptsw,ncol,nlay)
9712 real(kind=rb), intent(in) :: ciwpmcl(:,:,:) ! In-cloud ice water path (g/m2)
9713 ! Dimensions: (ngptsw,ncol,nlay)
9714 real(kind=rb), intent(in) :: clwpmcl(:,:,:) ! In-cloud liquid water path (g/m2)
9715 ! Dimensions: (ngptsw,ncol,nlay)
9716 real(kind=rb), intent(in) :: cswpmcl(:,:,:) ! In-cloud snow water path (g/m2)
9717 ! Dimensions: (ngptsw,ncol,nlay)
9718 real(kind=rb), intent(in) :: reicmcl(:,:) ! Cloud ice effective size (microns)
9719 ! Dimensions: (ncol,nlay)
9720 real(kind=rb), intent(in) :: relqmcl(:,:) ! Cloud water drop effective radius (microns)
9721 ! Dimensions: (ncol,nlay)
9722 real(kind=rb), intent(in) :: resnmcl(:,:) ! Cloud snow effective radius (microns)
9723 ! Dimensions: (ncol,nlay)
9725 real(kind=rb), intent(in) :: tauaer(:,:,:) ! Aerosol optical depth
9726 ! Dimensions: (ncol,nlay,nbndsw)
9727 real(kind=rb), intent(in) :: ssaaer(:,:,:) ! Aerosol single scattering albedo
9728 ! Dimensions: (ncol,nlay,nbndsw)
9729 real(kind=rb), intent(in) :: asmaer(:,:,:) ! Aerosol asymmetry parameter
9730 ! Dimensions: (ncol,nlay,nbndsw)
9733 integer(kind=im), intent(out) :: nlayers ! number of layers
9735 real(kind=rb), intent(out) :: pavel(:) ! layer pressures (mb)
9736 ! Dimensions: (nlay)
9737 real(kind=rb), intent(out) :: tavel(:) ! layer temperatures (K)
9738 ! Dimensions: (nlay)
9739 real(kind=rb), intent(out) :: pz(0:) ! level (interface) pressures (hPa, mb)
9740 ! Dimensions: (0:nlay)
9741 real(kind=rb), intent(out) :: tz(0:) ! level (interface) temperatures (K)
9742 ! Dimensions: (0:nlay)
9743 real(kind=rb), intent(out) :: tbound ! surface temperature (K)
9744 real(kind=rb), intent(out) :: pdp(:) ! layer pressure thickness (hPa, mb)
9745 ! Dimensions: (nlay)
9746 real(kind=rb), intent(out) :: coldry(:) ! dry air column density (mol/cm2)
9747 ! Dimensions: (nlay)
9748 real(kind=rb), intent(out) :: wkl(:,:) ! molecular amounts (mol/cm-2)
9749 ! Dimensions: (mxmol,nlay)
9751 real(kind=rb), intent(out) :: adjflux(:) ! adjustment for current Earth/Sun distance
9752 ! Dimensions: (jpband)
9753 real(kind=rb), intent(out) :: solvar(:) ! solar constant scaling factor from rrtmg_sw
9754 ! Dimensions: (jpband)
9755 ! default value of 1368.22 Wm-2 at 1 AU
9756 real(kind=rb), intent(out) :: taua(:,:) ! Aerosol optical depth
9757 ! Dimensions: (nlay,nbndsw)
9758 real(kind=rb), intent(out) :: ssaa(:,:) ! Aerosol single scattering albedo
9759 ! Dimensions: (nlay,nbndsw)
9760 real(kind=rb), intent(out) :: asma(:,:) ! Aerosol asymmetry parameter
9761 ! Dimensions: (nlay,nbndsw)
9763 ! Atmosphere/clouds - cldprop
9764 integer(kind=im), intent(out) :: inflag ! flag for cloud property method
9765 integer(kind=im), intent(out) :: iceflag ! flag for ice cloud properties
9766 integer(kind=im), intent(out) :: liqflag ! flag for liquid cloud properties
9768 real(kind=rb), intent(out) :: cldfmc(:,:) ! layer cloud fraction
9769 ! Dimensions: (ngptsw,nlay)
9770 real(kind=rb), intent(out) :: taucmc(:,:) ! in-cloud optical depth (non-delta scaled)
9771 ! Dimensions: (ngptsw,nlay)
9772 real(kind=rb), intent(out) :: ssacmc(:,:) ! in-cloud single scattering albedo (non-delta-scaled)
9773 ! Dimensions: (ngptsw,nlay)
9774 real(kind=rb), intent(out) :: asmcmc(:,:) ! in-cloud asymmetry parameter (non-delta scaled)
9775 ! Dimensions: (ngptsw,nlay)
9776 real(kind=rb), intent(out) :: fsfcmc(:,:) ! in-cloud forward scattering fraction (non-delta scaled)
9777 ! Dimensions: (ngptsw,nlay)
9778 real(kind=rb), intent(out) :: ciwpmc(:,:) ! in-cloud ice water path
9779 ! Dimensions: (ngptsw,nlay)
9780 real(kind=rb), intent(out) :: clwpmc(:,:) ! in-cloud liquid water path
9781 ! Dimensions: (ngptsw,nlay)
9782 real(kind=rb), intent(out) :: cswpmc(:,:) ! in-cloud snow path
9783 ! Dimensions: (ngptsw,nlay)
9784 real(kind=rb), intent(out) :: relqmc(:) ! liquid particle effective radius (microns)
9785 ! Dimensions: (nlay)
9786 real(kind=rb), intent(out) :: reicmc(:) ! ice particle effective size (microns)
9787 ! Dimensions: (nlay)
9788 real(kind=rb), intent(out) :: resnmc(:) ! snow particle effective size (microns)
9789 ! Dimensions: (nlay)
9792 real(kind=rb), parameter :: amd = 28.9660_rb ! Effective molecular weight of dry air (g/mol)
9793 real(kind=rb), parameter :: amw = 18.0160_rb ! Molecular weight of water vapor (g/mol)
9794 ! real(kind=rb), parameter :: amc = 44.0098_rb ! Molecular weight of carbon dioxide (g/mol)
9795 ! real(kind=rb), parameter :: amo = 47.9998_rb ! Molecular weight of ozone (g/mol)
9796 ! real(kind=rb), parameter :: amo2 = 31.9999_rb ! Molecular weight of oxygen (g/mol)
9797 ! real(kind=rb), parameter :: amch4 = 16.0430_rb ! Molecular weight of methane (g/mol)
9798 ! real(kind=rb), parameter :: amn2o = 44.0128_rb ! Molecular weight of nitrous oxide (g/mol)
9800 ! Set molecular weight ratios (for converting mmr to vmr)
9801 ! e.g. h2ovmr = h2ommr * amdw)
9802 real(kind=rb), parameter :: amdw = 1.607793_rb ! Molecular weight of dry air / water vapor
9803 real(kind=rb), parameter :: amdc = 0.658114_rb ! Molecular weight of dry air / carbon dioxide
9804 real(kind=rb), parameter :: amdo = 0.603428_rb ! Molecular weight of dry air / ozone
9805 real(kind=rb), parameter :: amdm = 1.805423_rb ! Molecular weight of dry air / methane
9806 real(kind=rb), parameter :: amdn = 0.658090_rb ! Molecular weight of dry air / nitrous oxide
9807 real(kind=rb), parameter :: amdo2 = 0.905140_rb ! Molecular weight of dry air / oxygen
9809 real(kind=rb), parameter :: sbc = 5.67e-08_rb ! Stefan-Boltzmann constant (W/m2K4)
9811 integer(kind=im) :: isp, l, ix, n, imol, ib, ig ! Loop indices
9812 real(kind=rb) :: amm, summol !
9813 real(kind=rb) :: adjflx ! flux adjustment for Earth/Sun distance
9814 ! real(kind=rb) :: earth_sun ! function for Earth/Sun distance adjustment
9818 ! Initialize all molecular amounts to zero here, then pass input amounts
9819 ! into RRTM array WKL below.
9822 cldfmc(:,:) = 0.0_rb
9823 taucmc(:,:) = 0.0_rb
9824 ssacmc(:,:) = 1.0_rb
9825 asmcmc(:,:) = 0.0_rb
9826 fsfcmc(:,:) = 0.0_rb
9827 ciwpmc(:,:) = 0.0_rb
9828 clwpmc(:,:) = 0.0_rb
9829 cswpmc(:,:) = 0.0_rb
9837 ! Set flux adjustment for current Earth/Sun distance (two options).
9838 ! 1) Use Earth/Sun distance flux adjustment provided by GCM (input as adjes);
9841 ! 2) Calculate Earth/Sun distance from DYOFYR, the cumulative day of the year.
9842 ! (Set adjflx to 1. to use constant Earth/Sun distance of 1 AU).
9843 if (dyofyr .gt. 0) then
9844 adjflx = earth_sun(dyofyr)
9847 ! Set incoming solar flux adjustment to include adjustment for
9848 ! current Earth/Sun distance (ADJFLX) and scaling of default internal
9849 ! solar constant (rrsw_scon = 1368.22 Wm-2) by band (SOLVAR). SOLVAR can be set
9850 ! to a single scaling factor as needed, or to a different value in each
9851 ! band, which may be necessary for paleoclimate simulations.
9854 ! solvar(ib) = 1._rb
9855 solvar(ib) = scon / rrsw_scon
9856 adjflux(ib) = adjflx * solvar(ib)
9859 ! Set surface temperature.
9860 tbound = tsfc(iplon)
9862 ! Install input GCM arrays into RRTMG_SW arrays for pressure, temperature,
9863 ! and molecular amounts.
9864 ! Pressures are input in mb, or are converted to mb here.
9865 ! Molecular amounts are input in volume mixing ratio, or are converted from
9866 ! mass mixing ratio (or specific humidity for h2o) to volume mixing ratio
9867 ! here. These are then converted to molecular amount (molec/cm2) below.
9868 ! The dry air column COLDRY (in molec/cm2) is calculated from the level
9869 ! pressures, pz (in mb), based on the hydrostatic equation and includes a
9870 ! correction to account for h2o in the layer. The molecular weight of moist
9871 ! air (amm) is calculated for each layer.
9872 ! Note: In RRTMG, layer indexing goes from bottom to top, and coding below
9873 ! assumes GCM input fields are also bottom to top. Input layer indexing
9874 ! from GCM fields should be reversed here if necessary.
9876 pz(0) = plev(iplon,1)
9877 tz(0) = tlev(iplon,1)
9879 pavel(l) = play(iplon,l)
9880 tavel(l) = tlay(iplon,l)
9881 pz(l) = plev(iplon,l+1)
9882 tz(l) = tlev(iplon,l+1)
9883 pdp(l) = pz(l-1) - pz(l)
9884 ! For h2o input in vmr:
9885 wkl(1,l) = h2ovmr(iplon,l)
9886 ! For h2o input in mmr:
9887 ! wkl(1,l) = h2o(iplon,l)*amdw
9888 ! For h2o input in specific humidity;
9889 ! wkl(1,l) = (h2o(iplon,l)/(1._rb - h2o(iplon,l)))*amdw
9890 wkl(2,l) = co2vmr(iplon,l)
9891 wkl(3,l) = o3vmr(iplon,l)
9892 wkl(4,l) = n2ovmr(iplon,l)
9893 wkl(6,l) = ch4vmr(iplon,l)
9894 wkl(7,l) = o2vmr(iplon,l)
9895 amm = (1._rb - wkl(1,l)) * amd + wkl(1,l) * amw
9896 coldry(l) = (pz(l-1)-pz(l)) * 1.e3_rb * avogad / &
9897 (1.e2_rb * grav * amm * (1._rb + wkl(1,l)))
9900 ! The following section can be used to set values for an additional layer (from
9901 ! the GCM top level to 1.e-4 mb) for improved calculation of TOA fluxes.
9902 ! Temperature and molecular amounts in the extra model layer are set to
9903 ! their values in the top GCM model layer, though these can be modified
9904 ! here if necessary.
9905 ! If this feature is utilized, increase nlayers by one above, limit the two
9906 ! loops above to (nlayers-1), and set the top most (nlayers) layer values here.
9908 ! pavel(nlayers) = 0.5_rb * pz(nlayers-1)
9909 ! tavel(nlayers) = tavel(nlayers-1)
9910 ! pz(nlayers) = 1.e-4_rb
9911 ! tz(nlayers-1) = 0.5_rb * (tavel(nlayers)+tavel(nlayers-1))
9912 ! tz(nlayers) = tz(nlayers-1)
9913 ! pdp(nlayers) = pz(nlayers-1) - pz(nlayers)
9914 ! wkl(1,nlayers) = wkl(1,nlayers-1)
9915 ! wkl(2,nlayers) = wkl(2,nlayers-1)
9916 ! wkl(3,nlayers) = wkl(3,nlayers-1)
9917 ! wkl(4,nlayers) = wkl(4,nlayers-1)
9918 ! wkl(6,nlayers) = wkl(6,nlayers-1)
9919 ! wkl(7,nlayers) = wkl(7,nlayers-1)
9920 ! amm = (1._rb - wkl(1,nlayers-1)) * amd + wkl(1,nlayers-1) * amw
9921 ! coldry(nlayers) = (pz(nlayers-1)) * 1.e3_rb * avogad / &
9922 ! (1.e2_rb * grav * amm * (1._rb + wkl(1,nlayers-1)))
9924 ! At this point all molecular amounts in wkl are in volume mixing ratio;
9925 ! convert to molec/cm2 based on coldry for use in rrtm.
9929 wkl(imol,l) = coldry(l) * wkl(imol,l)
9933 ! Transfer aerosol optical properties to RRTM variables;
9934 ! modify to reverse layer indexing here if necessary.
9936 if (iaer .ge. 1) then
9939 taua(l,ib) = tauaer(iplon,l,ib)
9940 ssaa(l,ib) = ssaaer(iplon,l,ib)
9941 asma(l,ib) = asmaer(iplon,l,ib)
9946 ! Transfer cloud fraction and cloud optical properties to RRTM variables;
9947 ! modify to reverse layer indexing here if necessary.
9949 if (icld .ge. 1) then
9954 ! Move incoming GCM cloud arrays to RRTMG cloud arrays.
9955 ! For GCM input, incoming reicmcl is defined based on selected ice parameterization (inflgsw)
9959 cldfmc(ig,l) = cldfmcl(ig,iplon,l)
9960 taucmc(ig,l) = taucmcl(ig,iplon,l)
9961 ssacmc(ig,l) = ssacmcl(ig,iplon,l)
9962 asmcmc(ig,l) = asmcmcl(ig,iplon,l)
9963 fsfcmc(ig,l) = fsfcmcl(ig,iplon,l)
9964 ciwpmc(ig,l) = ciwpmcl(ig,iplon,l)
9965 clwpmc(ig,l) = clwpmcl(ig,iplon,l)
9966 if (iceflag.eq.5) then
9967 cswpmc(ig,l)=cswpmcl(ig,iplon,l)
9970 reicmc(l) = reicmcl(iplon,l)
9971 relqmc(l) = relqmcl(iplon,l)
9972 if (iceflag.eq.5) then
9973 resnmc(l) = resnmcl(iplon,l)
9977 ! If an extra layer is being used in RRTMG, set all cloud properties to zero in the extra layer.
9979 ! cldfmc(:,nlayers) = 0.0_rb
9980 ! taucmc(:,nlayers) = 0.0_rb
9981 ! ssacmc(:,nlayers) = 1.0_rb
9982 ! asmcmc(:,nlayers) = 0.0_rb
9983 ! fsfcmc(:,nlayers) = 0.0_rb
9984 ! ciwpmc(:,nlayers) = 0.0_rb
9985 ! clwpmc(:,nlayers) = 0.0_rb
9986 ! reicmc(nlayers) = 0.0_rb
9987 ! relqmc(nlayers) = 0.0_rb
9991 end subroutine inatm_sw
9993 end module rrtmg_sw_rad
9995 !------------------------------------------------------------------
9996 MODULE module_ra_rrtmg_sw
9998 use module_model_constants, only : cp
9999 USE module_wrf_error
10001 USE module_state_description, ONLY : FER_MP_HIRES, FER_MP_HIRES_ADVECT, ETAMP_HWRF
10003 USE module_state_description, ONLY : FER_MP_HIRES, FER_MP_HIRES_ADVECT
10007 use parrrsw, only : nbndsw, ngptsw, naerec
10008 use rrtmg_sw_init, only: rrtmg_sw_ini
10009 use rrtmg_sw_rad, only: rrtmg_sw
10010 use mcica_subcol_gen_sw, only: mcica_subcol_sw
10012 use module_ra_rrtmg_lw, only : inirad, o3data, relcalc, reicalc, retab
10013 ! mcica_random_numbers, randomNumberSequence, &
10014 ! new_RandomNumberSequence, getRandomReal
10015 use module_ra_rrtmg_sw_cmaq
10019 !------------------------------------------------------------------
10020 SUBROUTINE RRTMG_SWRAD( &
10023 swupt, swuptc, swuptcln, swdnt, swdntc, swdntcln, &
10024 swupb, swupbc, swupbcln, swdnb, swdnbc, swdnbcln, &
10025 ! swupflx, swupflxc, swdnflx, swdnflxc, &
10027 xtime, gmt, xlat, xlong, &
10028 radt, degrad, declin, &
10029 coszr, julday, solcon, &
10030 albedo, t3d, t8w, tsk, &
10031 p3d, p8w, pi3d, rho3d, &
10032 dz8w, cldfra3d, lradius, iradius, &
10033 is_cammgmp_used, r, g, &
10034 re_cloud,re_ice,re_snow, &
10035 has_reqc,has_reqi,has_reqs, &
10036 icloud, warm_rain, &
10037 cldovrlp,idcor, & ! J. Henderson AER: cldovrlp namelist value
10038 f_ice_phy, f_rain_phy, &
10039 xland, xice, snow, &
10040 qv3d, qc3d, qr3d, &
10041 qi3d, qs3d, qg3d, &
10043 aer_opt, aerod, no_src, &
10044 alswvisdir, alswvisdif, & !Zhenxin ssib alb comp (06/20/2011)
10045 alswnirdir, alswnirdif, & !Zhenxin ssib alb comp (06/20/2011)
10046 swvisdir, swvisdif, & !Zhenxin ssib swr comp (06/20/2011)
10047 swnirdir, swnirdif, & !Zhenxin ssib swi comp (06/20/2011)
10048 sf_surface_physics, & !Zhenxin
10049 f_qv, f_qc, f_qr, f_qi, f_qs, f_qg, &
10050 tauaer300,tauaer400,tauaer600,tauaer999, & ! czhao
10051 gaer300,gaer400,gaer600,gaer999, & ! czhao
10052 waer300,waer400,waer600,waer999, & ! czhao
10054 !jdfcz progn,prescribe, &
10055 progn,calc_clean_atm_diag, &
10056 qndrop3d,f_qndrop, & !czhao
10057 mp_physics, & !wang 2014/12
10058 ids,ide, jds,jde, kds,kde, &
10059 ims,ime, jms,jme, kms,kme, &
10060 its,ite, jts,jte, kts,kte, &
10061 swupflx, swupflxc, &
10062 swdnflx, swdnflxc, &
10063 tauaer3d_sw,ssaaer3d_sw,asyaer3d_sw, & ! jararias 2013/11
10064 swddir, swddni, swddif, & ! jararias 2013/08
10065 swdownc, swddnic, swddirc, & ! PAJ
10066 xcoszen,yr,julian,ghg_input, & ! jararias 2013/08
10067 obscur, & ! amontornes-bcodina 2015/09 solar eclipses
10068 proceed_cmaq_sw, & ! WRF-CMAQ twoway coupled model
10069 nmode, & ! WRF-CMAQ twoway coupled model
10070 mass_ws_i, mass_ws_j, mass_ws_k, & ! WRF-CMAQ twoway coupled model
10071 mass_in_i, mass_in_j, mass_in_k, & ! WRF-CMAQ twoway coupled model
10072 mass_ec_i, mass_ec_j, mass_ec_k, & ! WRF-CMAQ twoway coupled model
10073 mass_ss_i, mass_ss_j, mass_ss_k, & ! WRF-CMAQ twoway coupled model
10074 mass_h2o_i, mass_h2o_j, mass_h2o_k, & ! WRF-CMAQ twoway coupled model
10075 dgn_i, dgn_j, dgn_k, & ! WRF-CMAQ twoway coupled model
10076 sig_i, sig_j, sig_k, & ! WRF-CMAQ twoway coupled model
10077 gtauxar_01, gtauxar_02, gtauxar_03, & ! WRF-CMAQ twoway coupled model
10078 gtauxar_04, gtauxar_05, & ! WRF-CMAQ twoway coupled model
10079 asy_fac_01, asy_fac_02, asy_fac_03, & ! WRF-CMAQ twoway coupled model
10080 asy_fac_04, asy_fac_05, & ! WRF-CMAQ twoway coupled model
10081 ssa_01, ssa_02, ssa_03, & ! WRF-CMAQ twoway coupled model
10082 ssa_04, ssa_05 & ! WRF-CMAQ twoway coupled model
10083 ,sw_zbbcddir & ! WRF-CMAQ twoway coupled model
10084 ,sw_dirdflux & ! WRF-CMAQ twoway coupled model
10085 ,sw_difdflux & ! WRF-CMAQ twoway coupled model
10087 !------------------------------------------------------------------
10088 USE MODULE_RA_CLWRF_SUPPORT, ONLY : read_CAMgases
10090 !------------------------------------------------------------------
10091 LOGICAL, INTENT(IN ) :: warm_rain
10092 LOGICAL, INTENT(IN ) :: is_CAMMGMP_used ! Added for CAM5 RRTMG<->CAMMGMP
10094 INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, &
10095 ims,ime, jms,jme, kms,kme, &
10096 its,ite, jts,jte, kts,kte
10098 INTEGER, INTENT(IN ) :: ICLOUD, GHG_INPUT
10099 INTEGER, INTENT(IN ) :: MP_PHYSICS
10101 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , &
10102 INTENT(IN ) :: dz8w, &
10110 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , &
10111 INTENT(INOUT) :: RTHRATENSW, &
10114 REAL, DIMENSION( ims:ime, jms:jme ) , &
10115 INTENT(INOUT) :: GSW, &
10119 INTEGER, INTENT(IN ) :: JULDAY
10120 REAL, INTENT(IN ) :: RADT,DEGRAD, &
10121 XTIME,DECLIN,SOLCON,GMT
10123 REAL, DIMENSION( ims:ime, jms:jme ) , &
10124 INTENT(IN ) :: XLAT, &
10132 !!! ------------------- Zhenxin (2011-06/20) ------------------
10133 REAL, DIMENSION( ims:ime, jms:jme ) , &
10135 INTENT(IN) :: ALSWVISDIR, & ! ssib albedo of sw and lw
10140 REAL, DIMENSION( ims:ime, jms:jme ) , &
10142 INTENT(OUT) :: SWVISDIR, &
10145 SWNIRDIF ! ssib sw dir and diff rad
10146 INTEGER, INTENT(IN) :: sf_surface_physics ! ssib para
10148 ! ----------------------- end Zhenxin --------------------------
10151 ! ------------------------ jararias 2013/08/10 -----------------
10152 real, dimension(ims:ime,jms:jme), intent(out) :: &
10153 swddir, & ! All-sky broadband surface direct horiz irradiance
10154 swddni, & ! All-sky broadband surface direct normal irradiance
10155 swddif, & ! All-sky broadband surface diffuse irradiance
10156 swdownc, & ! Clear sky GHI
10157 swddnic, & ! Clear ski DNI
10158 swddirc ! Clear ski direct horizontal irradiance
10160 integer, intent(in) :: yr
10161 real, optional, intent(in) :: &
10162 julian ! julian day (1-366)
10163 real, dimension(ims:ime,jms:jme), intent(in) :: &
10164 xcoszen ! cosine of the solar zenith angle
10165 real, dimension(:,:,:,:), pointer :: tauaer3d_sw,ssaaer3d_sw,asyaer3d_sw
10166 ! ------------------------ jararias end snippet -----------------
10168 REAL, INTENT(IN ) :: R,G
10172 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , &
10186 !..Added by G. Thompson to couple cloud physics effective radii.
10187 REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN):: &
10191 INTEGER, INTENT(IN):: has_reqc, has_reqi, has_reqs
10193 real pi,third,relconst,lwpmin,rhoh2o
10195 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , &
10201 LOGICAL, OPTIONAL, INTENT(IN) :: &
10202 F_QV,F_QC,F_QR,F_QI,F_QS,F_QG,F_QNDROP
10205 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), OPTIONAL , &
10206 INTENT(IN ) :: tauaer300,tauaer400,tauaer600,tauaer999, & ! czhao
10207 gaer300,gaer400,gaer600,gaer999, & ! czhao
10208 waer300,waer400,waer600,waer999 ! czhao
10210 INTEGER, INTENT(IN ), OPTIONAL :: aer_ra_feedback
10211 !jdfcz INTEGER, INTENT(IN ), OPTIONAL :: progn,prescribe
10212 INTEGER, INTENT(IN ), OPTIONAL :: progn
10213 INTEGER, INTENT(IN ) :: calc_clean_atm_diag
10216 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , &
10218 INTENT(IN ) :: O33D
10219 INTEGER, OPTIONAL, INTENT(IN ) :: o3input
10220 ! EC aerosol: no_src = naerec = 6
10221 INTEGER, INTENT(IN ) :: no_src
10222 REAL, DIMENSION( ims:ime, kms:kme, jms:jme, 1:no_src ) , &
10224 INTENT(IN ) :: aerod
10225 INTEGER, OPTIONAL, INTENT(IN ) :: aer_opt
10227 !wavelength corresponding to wavenum1 and wavenum2 (cm-1)
10228 real, save :: wavemin(nbndsw) ! Min wavelength (um) of 14 intervals
10229 data wavemin /3.077,2.500,2.150,1.942,1.626,1.299, &
10230 1.242,0.778,0.625,0.442,0.345,0.263,0.200,3.846/
10231 real, save :: wavemax(nbndsw) ! Max wavelength (um) of interval
10232 data wavemax/3.846,3.077,2.500,2.150,1.942,1.626, &
10233 1.299,1.242,0.778,0.625,0.442,0.345,0.263,12.195/
10234 real wavemid(nbndsw) ! Mid wavelength (um) of interval
10235 real, parameter :: thresh=1.e-9
10237 character(len=200) :: msg
10239 ! Top of atmosphere and surface shortwave fluxes (W m-2)
10240 REAL, DIMENSION( ims:ime, jms:jme ), &
10241 OPTIONAL, INTENT(INOUT) :: &
10242 SWUPT,SWUPTC,SWUPTCLN,SWDNT,SWDNTC,SWDNTCLN, &
10243 SWUPB,SWUPBC,SWUPBCLN,SWDNB,SWDNBC,SWDNBCLN
10245 ! Layer shortwave fluxes (including extra layer above model top)
10246 ! Vertical ordering is from bottom to top (W m-2)
10247 REAL, DIMENSION( ims:ime, kms:kme+2, jms:jme ), &
10248 OPTIONAL, INTENT(OUT) :: &
10249 SWUPFLX,SWUPFLXC, &
10252 ! amontornes-bcodina 2015/09 solar eclipses
10253 ! obscur --> degree of obscuration for solar eclipses prediction (2D)
10254 REAL, DIMENSION(ims:ime,jms:jme), INTENT(IN) :: obscur
10256 ! begin WRF-CMAQ twoway coupled model block
10257 LOGICAL, INTENT(IN) :: proceed_cmaq_sw
10259 ! ** FSB items needed for new aerosol code from CMAQ
10260 integer, optional, intent(in) :: nmode ! number of log-normal modes
10262 real, dimension(ims:ime, kms:kme, jms:jme), optional, intent(in) :: &
10263 mass_ws_i, mass_ws_j, mass_ws_k, & ! mass cocentrations in [ ug/m**3 ] for water
10264 ! soluble species in each mode
10265 mass_in_i, mass_in_j, mass_in_k, & ! mass cocentrations in [ ug/m**3 ] for water
10266 ! insoluble species in each mode
10267 mass_ec_i, mass_ec_j, mass_ec_k, & ! mass cocentrations in [ ug/m**3 ] for elemental
10268 ! carbon species in each mode
10269 mass_ss_i, mass_ss_j, mass_ss_k, & ! mass cocentrations in [ ug/m**3 ] for aerosol
10270 ! water species in each mode
10271 mass_h2o_i, mass_h2o_j, mass_h2o_k, & ! mass cocentrations in [ ug/m**3 ] for sea
10272 ! salt species in each mode
10273 dgn_i, dgn_j, dgn_k, & ! geometric mean diameter of each mode [ m ]
10274 sig_i, sig_j, sig_k ! geometric standard deviation of each mode
10276 real, dimension(ims:ime, kms:kme, jms:jme), optional, intent(out) :: &
10277 gtauxar_01, & ! Aerosol optical depth of RRTMG SW band 11
10278 gtauxar_02, & ! Aerosol optical depth of RRTMG SW band 10
10279 gtauxar_03, & ! Aerosol optical depth of RRTMG SW band 9
10280 gtauxar_04, & ! Aerosol optical depth of RRTMG SW band 8
10281 gtauxar_05, & ! Aerosol optical depth of RRTMG SW band 7
10282 asy_fac_01, & ! asymmetry factor of RRTMG SW band 11
10283 asy_fac_02, & ! asymmetry factor of RRTMG SW band 10
10284 asy_fac_03, & ! asymmetry factor of RRTMG SW band 9
10285 asy_fac_04, & ! asymmetry factor of RRTMG SW band 8
10286 asy_fac_05, & ! asymmetry factor of RRTMG SW band 7
10287 ssa_01, & ! single scattering albedo of RRTMG SW band 11
10288 ssa_02, & ! single scattering albedo of RRTMG SW band 10
10289 ssa_03, & ! single scattering albedo of RRTMG SW band 9
10290 ssa_04, & ! single scattering albedo of RRTMG SW band 8
10291 ssa_05 ! single scattering albedo of RRTMG SW band 7
10293 REAL, DIMENSION( ims:ime, jms:jme ), optional, INTENT(OUT) :: &
10294 sw_zbbcddir, & ! clearsky downward direct shortwave flux (w/m2)
10295 sw_dirdflux, & ! Direct downward shortwave surface flux
10296 sw_difdflux ! Diffuse downward shortwave surface flux
10297 ! end WRF-CMAQ twoway coupled model block
10301 REAL, DIMENSION( kts:kte+1 ) :: Pw1D, &
10304 REAL, DIMENSION( kts:kte ) :: TTEN1D, &
10319 !BSF: From eq. (5) on p. 2434 in McFarquhar & Heymsfield (1996)
10320 real, parameter :: re_50C=1250.0/9.917, re_40C=1250.0/9.337, &
10321 re_30C=1250.0/9.208, re_20C=1250.0/9.387
10323 ! Added local arrays for RRTMG
10327 cldovrlp, & ! J. Henderson AER
10336 ! Dimension with extra layer from model top to TOA
10337 real, dimension( 1, kts:kte+2 ) :: plev, &
10339 real, dimension( 1, kts:kte+1 ) :: play, &
10347 real, dimension( kts:kte+1 ) :: o3mmr
10348 ! mji - Add height of each layer for exponential-random cloud overlap
10349 ! This will be derived below from the dz in each layer
10350 real, dimension( 1, kts:kte+1 ) :: hgt
10352 ! Surface albedo (for UV/visible and near-IR spectral regions,
10353 ! and for direct and diffuse radiation)
10354 real, dimension( 1 ) :: asdir, &
10358 ! Dimension with extra layer from model top to TOA,
10359 ! though no clouds are allowed in extra layer
10360 real, dimension( 1, kts:kte+1 ) :: clwpth, &
10370 real, dimension( nbndsw, 1, kts:kte+1 ) :: taucld, &
10374 real, dimension( ngptsw, 1, kts:kte+1 ) :: cldfmcl, &
10382 real, dimension( 1, kts:kte+1, nbndsw ) :: tauaer, &
10385 real, dimension( 1, kts:kte+1, naerec ) :: ecaer
10387 ! Output arrays contain extra layer from model top to TOA
10388 real, dimension( 1, kts:kte+2 ) :: swuflx, &
10394 sibvisdir, & ! Zhenxin 2011-06-20
10397 sibnirdif ! Zhenxin 2011-06-20
10399 real, dimension( 1, kts:kte+2 ) :: swdkdir, & ! jararias, 2013/08/10
10400 swdkdif, & ! jararias, 2013/08/10
10403 real, dimension( 1, kts:kte+1 ) :: swhr, &
10406 real, dimension ( 1 ) :: tsfc, &
10419 ! Using data from CAMtr_volume_mixing_ratio data file
10420 real(kind=8) :: co2, n2o, ch4, cfc11, cfc12
10421 ! Set oxygen volume mixing ratio (for o2mmr=0.23143)
10423 data o2 / 0.209488 /
10425 integer :: iplon, irng, permuteseed
10428 ! For old lw cloud property specification
10429 ! Cloud and precipitation absorption coefficients
10430 ! real :: abcw,abice,abrn,absn
10431 ! data abcw /0.144/
10432 ! data abice /0.0735/
10433 ! data abrn /0.330e-3/
10434 ! data absn /2.34e-3/
10436 ! Molecular weights and ratios for converting mmr to vmr units
10437 ! real :: amd ! Effective molecular weight of dry air (g/mol)
10438 ! real :: amw ! Molecular weight of water vapor (g/mol)
10439 ! real :: amo ! Molecular weight of ozone (g/mol)
10440 ! real :: amo2 ! Molecular weight of oxygen (g/mol)
10441 ! Atomic weights for conversion from mass to volume mixing ratios
10442 ! data amd / 28.9660 /
10443 ! data amw / 18.0160 /
10444 ! data amo / 47.9998 /
10445 ! data amo2 / 31.9999 /
10447 real :: amdw ! Molecular weight of dry air / water vapor
10448 real :: amdo ! Molecular weight of dry air / ozone
10449 real :: amdo2 ! Molecular weight of dry air / oxygen
10450 data amdw / 1.607793 /
10451 data amdo / 0.603461 /
10452 data amdo2 / 0.905190 /
10455 real, dimension(1, 1:kte-kts+1 ) :: pdel ! Layer pressure thickness (mb)
10457 real, dimension(1, 1:kte-kts+1) :: cicewp, & ! in-cloud cloud ice water path
10458 cliqwp, & ! in-cloud cloud liquid water path
10459 csnowp, & ! in-cloud snow water path
10460 reliq, & ! effective drop radius (microns)
10461 reice ! ice effective drop size (microns)
10462 real, dimension(1, 1:kte-kts+1):: recloud1d, &
10465 real :: gliqwp, gicewp, gsnowp, gravmks, tem1,tem2,tem3
10468 ! REAL :: TSFC,GLW0,OLR0,EMISS0,FP
10471 ! real, dimension(1:ite-its+1 ) :: clat ! latitude in radians for columns
10472 real :: coszrs ! Cosine of solar zenith angle for present latitude
10473 logical :: dorrsw ! Flag to allow shortwave calculation
10475 real, dimension (1) :: landfrac, landm, snowh, icefrac
10477 integer :: pcols, pver
10479 INTEGER :: i,j,K, na
10480 LOGICAL :: predicate
10482 REAL :: da, eot ! jararias, 14/08/2013
10484 ! begin WRF-CMAQ twoway coupled model block
10485 #if ( WRF_CMAQ == 1 )
10486 REAL, DIMENSION (3) :: INMASS_ws, & ! holds mass cocentrations in [ ug/m**3 ] for
10487 ! water soluble species in all three modes
10488 INMASS_in, & ! holds mass cocentrations in [ ug/m**3 ] for
10489 ! water insoluble species in all three modes
10490 INMASS_ec, & ! holds mass cocentrations in [ ug/m**3 ] for
10491 ! elemental carbon species in all three modes
10492 INMASS_ss, & ! holds mass cocentrations in [ ug/m**3 ] for
10493 ! aerosol water species in all three modes
10494 INMASS_h2o, & ! holds mass cocentrations in [ ug/m**3 ] for
10495 ! sea salt species in all three modes
10496 INDGN, & ! holds geometric mean diameter in all three modes
10497 INSIG ! holds geometric standard deviation in all three modes
10499 REAL :: xtauaer, & ! temporary variable for Aerosol Optical Depth
10500 waer, & ! temporary variable for single scattering albedo
10501 gaer, & ! temporary variable for symmetry factor
10502 delta_z, & ! layer thickness
10503 loc_sw_zbbcddir, & ! clearsky downward direct shortwave flux (w/m2)
10504 loc_sw_dirdflux, & ! Direct downward shortwave surface flux
10505 loc_sw_difdflux ! Diffuse downward shortwave surface flux
10507 INTEGER :: modes ! number of modes
10509 character (len = 50) :: mystr ! temporary character string
10510 ! end WRF-CMAQ twoway coupled model block
10512 CHARACTER(LEN=256) :: message
10513 LOGICAL, EXTERNAL :: wrf_dm_on_monitor
10515 !------------------------------------------------------------------
10516 #if ( WRF_CHEM == 1 )
10517 IF ( aer_ra_feedback == 1) then
10519 ( PRESENT(tauaer300) .AND. &
10520 PRESENT(tauaer400) .AND. &
10521 PRESENT(tauaer600) .AND. &
10522 PRESENT(tauaer999) .AND. &
10523 PRESENT(gaer300) .AND. &
10524 PRESENT(gaer400) .AND. &
10525 PRESENT(gaer600) .AND. &
10526 PRESENT(gaer999) .AND. &
10527 PRESENT(waer300) .AND. &
10528 PRESENT(waer400) .AND. &
10529 PRESENT(waer600) .AND. &
10530 PRESENT(waer999) ) ) THEN
10531 CALL wrf_error_fatal &
10532 ('Warning: missing fields required for aerosol radiation' )
10537 !-----CALCULATE SHORT WAVE RADIATION
10539 ! Read time-varying trace gases concentrations and interpolate them to run date
10540 IF ( GHG_INPUT .EQ. 1 ) THEN
10541 CALL read_CAMgases(yr,julian,.false.,"RRTMG",co2,n2o,ch4,cfc11,cfc12)
10542 IF ( wrf_dm_on_monitor() ) THEN
10543 WRITE(message,*)'RRTMG SW CLWRF interpolated GHG values year:',yr,' julian day:',julian
10544 call wrf_debug( 1, message)
10545 WRITE(message,*)' co2vmr: ',co2,' n2ovmr:',n2o,' ch4vmr:',ch4,' cfc11vmr:',cfc11,' cfc12vmr:',cfc12
10546 call wrf_debug( 1, message)
10549 ! Set trace gas volume mixing ratios, 2005 values, IPCC (2007)
10550 ! Annual function for co2 in WRF v4.2
10551 co2 = (280. + 90.*exp(0.02*(yr-2000)))*1.e-6
10557 ! All fields are ordered vertically from bottom to top
10558 ! Pressures are in mb
10561 j_loop: do j = jts,jte
10564 i_loop: do i = its,ite
10565 rho1d(kts:kte)=rho3d(i,kts:kte,j) ! BUG FIX (SGT): this was uninitialized
10567 ! Do shortwave by default, deactivate below if sun below horizon
10570 ! Cosine solar zenith angle for current time step
10572 ! jararias, 14/08/2013
10573 coszr(i,j)=xcoszen(i,j)
10574 coszrs=xcoszen(i,j)
10576 ! Set flag to prevent shortwave calculation when sun below horizon
10577 if (coszrs.le.0.0) dorrsw = .false.
10578 ! Perform shortwave calculation if sun above horizon
10582 Pw1D(K) = p8w(I,K,J)/100.
10583 Tw1D(K) = t8w(I,K,J)
10597 QV1D(K)=QV3D(I,K,J)
10598 QV1D(K)=max(0.,QV1D(K))
10601 IF (PRESENT(O33D)) THEN
10603 O31D(K)=O33D(I,K,J)
10614 P1D(K)=p3d(I,K,J)/100.
10615 DZ1D(K)=dz8w(I,K,J)
10620 IF (ICLOUD .ne. 0) THEN
10621 IF ( PRESENT( CLDFRA3D ) ) THEN
10623 CLDFRA1D(k)=CLDFRA3D(I,K,J)
10627 IF (PRESENT(F_QC) .AND. PRESENT(QC3D)) THEN
10630 QC1D(K)=QC3D(I,K,J)
10631 QC1D(K)=max(0.,QC1D(K))
10636 IF (PRESENT(F_QR) .AND. PRESENT(QR3D)) THEN
10639 QR1D(K)=QR3D(I,K,J)
10640 QR1D(K)=max(0.,QR1D(K))
10645 IF ( PRESENT(F_QNDROP).AND.PRESENT(QNDROP3D)) THEN
10648 qndrop1d(K)=qndrop3d(I,K,J)
10653 ! This logic is tortured because cannot test F_QI unless
10654 ! it is present, and order of evaluation of expressions
10655 ! is not specified in Fortran
10657 IF ( PRESENT ( F_QI ) ) THEN
10660 predicate = .FALSE.
10664 IF (.NOT. predicate .and. .not. warm_rain) THEN
10666 IF (T1D(K) .lt. 273.15) THEN
10675 IF (PRESENT(F_QI) .AND. PRESENT(QI3D)) THEN
10678 QI1D(K)=QI3D(I,K,J)
10679 QI1D(K)=max(0.,QI1D(K))
10684 IF (PRESENT(F_QS) .AND. PRESENT(QS3D)) THEN
10687 QS1D(K)=QS3D(I,K,J)
10688 QS1D(K)=max(0.,QS1D(K))
10693 IF (PRESENT(F_QG) .AND. PRESENT(QG3D)) THEN
10696 QG1D(K)=QG3D(I,K,J)
10697 QG1D(K)=max(0.,QG1D(K))
10702 ! mji - For MP option 5
10703 IF ( PRESENT(F_QI) .and. PRESENT(F_QC) .and. PRESENT(F_QS) .and. PRESENT(F_ICE_PHY) ) THEN
10704 IF ( F_QC .and. .not. F_QI .and. F_QS ) THEN
10706 qi1d(k) = 0.1*qs3d(i,k,j)
10707 qs1d(k) = 0.9*qs3d(i,k,j)
10708 qc1d(k) = qc3d(i,k,j)
10709 qi1d(k) = max(0.,qi1d(k))
10710 qc1d(k) = max(0.,qc1d(k))
10716 ! For mp option=5 or 85 (new Ferrier- Aligo or called fer_hires
10717 ! scheme), QI3D saves all frozen water (ice+snow)
10719 IF ( mp_physics == FER_MP_HIRES .OR. &
10720 mp_physics == FER_MP_HIRES_ADVECT .OR. &
10721 mp_physics == ETAMP_HWRF ) THEN
10723 IF ( mp_physics == FER_MP_HIRES .OR. &
10724 mp_physics == FER_MP_HIRES_ADVECT) THEN
10727 qi1d(k) = qi3d(i,k,j)
10729 qc1d(k) = qc3d(i,k,j)
10730 qi1d(k) = max(0.,qi1d(k))
10731 qc1d(k) = max(0.,qc1d(k))
10735 ! EMISS0=EMISS(I,J)
10740 QV1D(K)=AMAX1(QV1D(K),1.E-12)
10743 ! Set up input for shortwave
10745 ! Add extra layer from top of model to top of atmosphere
10746 nlay = (kte - kts + 1) + 1
10748 ! Select cloud overlap assumption (1 = random, 2 = maximum-random, 3 = maximum, 4 = exponential, 5 = exponential-random
10749 icld=cldovrlp ! J. Henderson AER assign namelist variable cldovrlp to existing icld
10753 ! Select cloud liquid and ice optics parameterization options
10754 ! For passing in cloud optical properties directly:
10758 ! For passing in cloud physical properties; cloud optics parameterized in RRTMG:
10763 !Mukul change the flags here with reference to the new effective cloud/ice/snow radius
10764 IF (ICLOUD .ne. 0) THEN
10765 IF ( has_reqc .ne. 0) THEN
10768 recloud1D(ncol,K) = MAX(2.5, re_cloud(I,K,J)*1.E6)
10769 if (recloud1D(ncol,K).LE.2.5.AND.cldfra3d(i,k,j).gt.0. &
10770 & .AND. (XLAND(I,J)-1.5).GT.0.) then !--- Ocean
10771 recloud1D(ncol,K) = 10.5
10772 elseif (recloud1D(ncol,K).LE.2.5.AND.cldfra3d(i,k,j).gt.0. &
10773 & .AND. (XLAND(I,J)-1.5).LT.0.) then !--- Land
10774 recloud1D(ncol,K) = 7.5
10780 recloud1D(ncol,K) = 5.0
10782 recloud1D(ncol,K) = 10.0 ! was 5.0
10787 IF ( has_reqi .ne. 0) THEN
10791 reice1D(ncol,K) = MAX(5., re_ice(I,K,J)*1.E6)
10792 if (reice1D(ncol,K).LE.5..AND.cldfra3d(i,k,j).gt.0.) then
10793 idx_rei = int(t3d(i,k,j)-179.)
10794 idx_rei = min(max(idx_rei,1),75)
10795 corr = t3d(i,k,j) - int(t3d(i,k,j))
10796 reice1D(ncol,K) = retab(idx_rei)*(1.-corr) + &
10797 & retab(idx_rei+1)*corr
10798 reice1D(ncol,K) = MAX(reice1D(ncol,K), 5.0)
10803 reice1D(ncol,K) = 10.
10807 IF ( has_reqs .ne. 0) THEN
10811 resnow1D(ncol,K) = MAX(10., re_snow(I,K,J)*1.E6)
10816 resnow1D(ncol,K) = 10.0
10818 tem2 = 25.0 !- was 10.0
10819 tem3=1.e3*rho1d(k)*qi1d(k) !- IWC (g m^-3)
10820 if (tem3>thresh) then !- Only when IWC>1.e-9 g m^-3
10822 if (tem1 < -50.0) then
10823 tem2 = re_50C*tem3**0.109
10824 elseif (tem1 < -40.0) then
10825 tem2 = re_40C*tem3**0.08
10826 elseif (tem1 < -30.0) then
10827 tem2 = re_30C*tem3**0.055
10829 tem2 = re_20C*tem3**0.031
10831 tem2 = max(25.,tem2)
10833 reice1D(ncol,K) = min(tem2, 135.72) !- 1.0315*reice <= 140 microns
10838 ! special case for P3 microphysics
10839 ! put ice into snow category for optics, then set ice to zero
10840 IF ( has_reqs .eq. 0 .and. has_reqi .ne. 0 .and. has_reqc .ne. 0) THEN
10844 resnow1D(ncol,K) = MAX(10., re_ice(I,K,J)*1.E6)
10845 QS1D(K)=QI3D(I,K,J)
10847 reice1D(ncol,K)=10.
10854 ! Set cosine of solar zenith angle
10855 coszen(ncol) = coszrs
10856 ! Set solar constant (original) amontornes-bcodina 2015/09
10858 ! amontornes-bcodina 2015/09 solar eclipses
10859 scon = solcon*(1-obscur(i,j))
10861 ! For Earth/Sun distance adjustment in RRTMG
10864 ! For WRF, solar constant is already provided with eccentricity adjustment,
10865 ! so do not do this in RRTMG
10869 ! Layer indexing goes bottom to top here for all fields.
10870 ! Water vapor and ozone are converted from mmr to vmr.
10871 ! Pressures are in units of mb here.
10872 plev(ncol,1) = pw1d(1)
10873 tlev(ncol,1) = tw1d(1)
10874 tsfc(ncol) = tsk(i,j)
10876 play(ncol,k) = p1d(k)
10877 plev(ncol,k+1) = pw1d(k+1)
10878 pdel(ncol,k) = plev(ncol,k) - plev(ncol,k+1)
10879 tlay(ncol,k) = t1d(k)
10880 tlev(ncol,k+1) = tw1d(k+1)
10881 h2ovmr(ncol,k) = qv1d(k) * amdw
10882 co2vmr(ncol,k) = co2
10884 ch4vmr(ncol,k) = ch4
10885 n2ovmr(ncol,k) = n2o
10888 ! mji - Derive height of each layer mid-point from layer thickness.
10889 ! Needed for exponential (icld=4) and exponential-random overlap option (icld=5) only.
10893 hgt(ncol,k) = dzsum + 0.5*dz
10897 ! Define profile values for extra layer from model top to top of atmosphere.
10898 ! The top layer temperature for all gridpoints is set to the top layer-1
10899 ! temperature plus a constant (0 K) that represents an isothermal layer
10900 ! above ptop. Top layer interface temperatures are linearly interpolated
10901 ! from the layer temperatures.
10903 play(ncol,kte+1) = 0.5 * plev(ncol,kte+1)
10904 tlay(ncol,kte+1) = tlev(ncol,kte+1) + 0.0
10905 plev(ncol,kte+2) = 1.0e-5
10906 tlev(ncol,kte+2) = tlev(ncol,kte+1) + 0.0
10907 tlev(ncol,kte+2) = tlev(ncol,kte+1) + 0.0
10908 h2ovmr(ncol,kte+1) = h2ovmr(ncol,kte)
10909 co2vmr(ncol,kte+1) = co2vmr(ncol,kte)
10910 o2vmr(ncol,kte+1) = o2vmr(ncol,kte)
10911 ch4vmr(ncol,kte+1) = ch4vmr(ncol,kte)
10912 n2ovmr(ncol,kte+1) = n2ovmr(ncol,kte)
10914 ! mji - Fill in height array above model top to top of atmosphere using
10915 ! dz from model top layer for completeness, though this information is not
10916 ! likely to be used by the exponential-random cloud overlap method.
10917 hgt(ncol,kte+1) = dzsum + 0.5*dz
10919 ! Get ozone profile including amount in extra layer above model top
10920 call inirad (o3mmr,plev,kts,kte)
10922 if(present(o33d)) then
10924 o3vmr(ncol,k) = o3mmr(k) * amdo
10925 IF ( PRESENT( O33D ) ) THEN
10926 if(o3input .eq. 2)then
10928 o3vmr(ncol,k) = o31d(k)
10930 ! apply shifted climatology profile above model top
10931 o3vmr(ncol,k) = o31d(kte) - o3mmr(kte)*amdo + o3mmr(k)*amdo
10932 if(o3vmr(ncol,k) .le. 0.)o3vmr(ncol,k) = o3mmr(k)*amdo
10939 o3vmr(ncol,k) = o3mmr(k) * amdo
10943 ! Set surface albedo for direct and diffuse radiation in UV/visible and
10944 ! near-IR spectral regions
10945 ! -------------- Zhenxin 2011-06-20 ----------- !
10947 ! ------- 1. Commented by Zhenxin 2011-06-20 for SSiB coupling modified ---- !
10948 ! asdir(ncol) = albedo(i,j)
10949 ! asdif(ncol) = albedo(i,j)
10950 ! aldir(ncol) = albedo(i,j)
10951 ! aldif(ncol) = albedo(i,j)
10952 ! ------- End of Comments ------ !
10954 ! ------- 2. New Addiation ------ !
10955 IF ( sf_surface_physics .eq. 8 .AND. XLAND(i,j) .LT. 1.5) THEN
10956 asdir(ncol) = ALSWVISDIR(I,J)
10957 asdif(ncol) = ALSWVISDIF(I,J)
10958 aldir(ncol) = ALSWNIRDIR(I,J)
10959 aldif(ncol) = ALSWNIRDIF(I,J)
10961 asdir(ncol) = albedo(i,j)
10962 asdif(ncol) = albedo(i,j)
10963 aldir(ncol) = albedo(i,j)
10964 aldif(ncol) = albedo(i,j)
10967 ! ---------- End of Addiation ------!
10968 ! ---------- End of fds_Zhenxin 2011-06-20 --------------!
10970 ! Define cloud optical properties for radiation (inflgsw = 0)
10971 ! This option is not currently active
10972 ! Cloud and precipitation paths in g/m2
10973 ! qi=0 if no ice phase
10974 ! qs=0 if no ice phase
10975 if (inflgsw .eq. 0) then
10977 ! Set cloud fraction and cloud optical properties here; not yet active
10979 cldfrac(ncol,k) = cldfra1d(k)
10981 taucld(nb,ncol,k) = 0.0
10982 ssacld(nb,ncol,k) = 1.0
10983 asmcld(nb,ncol,k) = 0.0
10984 fsfcld(nb,ncol,k) = 0.0
10988 ! Zero out cloud physical property arrays; not used when passing optical properties
10991 clwpth(ncol,k) = 0.0
10992 ciwpth(ncol,k) = 0.0
10998 ! Define cloud physical properties for radiation (inflgsw = 1 or 2)
11000 ! Set cloud arrays if passing cloud physical properties into radiation
11001 if (inflgsw .gt. 0) then
11003 cldfrac(ncol,k) = cldfra1d(k)
11006 ! Compute cloud water/ice paths and particle sizes for input to radiation (CAM method)
11008 pver = kte - kts + 1
11010 landfrac(ncol) = 2.-XLAND(I,J)
11011 landm(ncol) = landfrac(ncol)
11012 snowh(ncol) = 0.001*SNOW(I,J)
11013 icefrac(ncol) = XICE(I,J)
11015 ! From module_ra_cam: Convert liquid and ice mixing ratios to water paths;
11016 ! pdel is in mb here; convert back to Pa (*100.)
11017 ! Water paths are in units of g/m2
11018 ! snow added as ice cloud (JD 091022)
11020 gicewp = (qi1d(k)+qs1d(k)) * pdel(ncol,k)*100.0 / gravmks * 1000.0 ! Grid box ice water path.
11021 gliqwp = qc1d(k) * pdel(ncol,k)*100.0 / gravmks * 1000.0 ! Grid box liquid water path.
11022 cicewp(ncol,k) = gicewp / max(0.01,cldfrac(ncol,k)) ! In-cloud ice water path.
11023 cliqwp(ncol,k) = gliqwp / max(0.01,cldfrac(ncol,k)) ! In-cloud liquid water path.
11027 !..The ice water path is already sum of cloud ice and snow, but when we have explicit
11028 !.. ice effective radius, overwrite the ice path with only the cloud ice variable,
11029 !.. leaving out the snow for its own effect.
11030 if(iceflgsw.ge.4)then
11032 gicewp = qi1d(k) * pdel(ncol,k)*100.0 / gravmks * 1000.0 ! Grid box ice water path.
11033 cicewp(ncol,k) = gicewp / max(0.01,cldfrac(ncol,k)) ! In-cloud ice water path.
11037 !..Here the snow path is adjusted if (radiation) effective radius of snow is
11038 !.. larger than what we currently have in the lookup tables. Since mass goes
11039 !.. rather close to diameter squared, adjust the mixing ratio of snow used
11040 !.. to compute its water path in combination with the max diameter. Not a
11041 !.. perfect fix, but certainly better than using all snow mass when diameter is
11042 !.. far larger than table currently contains and crystal sizes much larger than
11043 !.. about 140 microns have lesser impact than those much smaller sizes.
11045 if(iceflgsw.eq.5)then
11047 snow_mass_factor = 0.99 ! Assume 1% of snow overlaps the cloud ice category
11048 gicewp = gicewp + (qs1d(k)*(1.0-snow_mass_factor) * pdel(ncol,k)*100.0 / gravmks * 1000.0)
11049 if (resnow1d(ncol,k) .gt. 130.)then
11050 snow_mass_factor = MIN(snow_mass_factor, &
11051 & (130.0/resnow1d(ncol,k))*(130.0/resnow1d(ncol,k)))
11052 resnow1d(ncol,k) = 130.0
11054 gsnowp = qs1d(k) * snow_mass_factor * pdel(ncol,k)*100.0 / gravmks * 1000.0 ! Grid box snow water path.
11055 csnowp(ncol,k) = gsnowp / max(0.01,cldfrac(ncol,k))
11060 !link the aerosol feedback to cloud -czhao
11061 if( PRESENT( progn ) ) then
11062 if (progn == 1) then
11063 !jdfcz if(prescribe==0) then
11068 relconst=3/(4.*pi*rhoh2o)
11069 ! minimun liquid water path to calculate rel
11070 ! corresponds to optical depth of 1.e-3 for radius 4 microns.
11073 reliq(ncol,k) = 10.
11074 if( PRESENT( F_QNDROP ) ) then
11075 if( F_QNDROP ) then
11076 if ( qc1d(k)*pdel(ncol,k).gt.lwpmin.and. &
11077 qndrop1d(k).gt.1000. ) then
11078 reliq(ncol,k)=(relconst*qc1d(k)/qndrop1d(k))**third ! effective radius in m
11079 ! apply scaling from Martin et al., JAS 51, 1830.
11080 reliq(ncol,k)=1.1*reliq(ncol,k)
11081 reliq(ncol,k)=reliq(ncol,k)*1.e6 ! convert from m to microns
11082 reliq(ncol,k)=max(reliq(ncol,k),4.)
11083 reliq(ncol,k)=min(reliq(ncol,k),20.)
11088 !jdfcz else ! prescribe
11090 ! call relcalc(ncol, pcols, pver, tlay, landfrac, landm, icefrac, reliq, snowh)
11091 ! write(0,*) 'sw prescribe aerosol',maxval(qndrop3d)
11093 else ! progn (progn=1)
11094 call relcalc(ncol, pcols, pver, tlay, landfrac, landm, icefrac, reliq, snowh)
11096 else !progn (PRESENT)
11097 call relcalc(ncol, pcols, pver, tlay, landfrac, landm, icefrac, reliq, snowh)
11100 ! following Kristjansson and Mitchell
11101 call reicalc(ncol, pcols, pver, tlay, reice)
11105 !..If we already have effective radius of cloud and ice, then just overwrite what
11106 !.. was computed in the relcalc and reicalc subroutines above.
11108 if (inflgsw .ge. 3) then
11110 reliq(ncol,k) = recloud1d(ncol,k)
11114 if (iceflgsw .ge. 4) then
11116 if (iceflgsw .ge. 3) then !BSF: was .ge. 4
11119 reice(ncol,k) = reice1d(ncol,k)
11125 if (i==80.and.j==30) then
11126 #if defined( DM_PARALLEL ) && ! defined( STUBMPI)
11127 if( PRESENT( progn ) ) write(0,*) 'aerosol indirect',progn
11128 write(0,*)'sw water eff radius',reliq(ncol,10),reliq(ncol,20),reliq(ncol,25)
11129 write(0,*)'sw ice eff radius',reice(ncol,10),reice(ncol,20),reice(ncol,25)
11135 ! Limit upper bound of reice for Fu ice parameterization and convert
11136 ! from effective radius to generalized effective size (*1.0315; Fu, 1996)
11137 if (iceflgsw .eq. 3) then
11139 reice(ncol,k) = reice(ncol,k) * 1.0315
11140 reice(ncol,k) = min(140.0,reice(ncol,k))
11144 !if CAMMGMP is used, use output from CAMMGMP
11146 if(is_CAMMGMP_used) then
11148 if ( qi1d(k) .gt. 1.e-20 .or. qs1d(k) .gt. 1.e-20) then
11149 reice(ncol,k) = iradius(i,k,j)
11151 reice(ncol,k) = 25.
11153 reice(ncol,k) = max(5., min(140.0,reice(ncol,k)))
11154 if ( qc1d(k) .gt. 1.e-20) then
11155 reliq(ncol,k) = lradius(i,k,j)
11157 reliq(ncol,k) = 10.
11159 reliq(ncol,k) = max(2.5, min(60.0,reliq(ncol,k)))
11163 ! Set cloud physical property arrays
11165 clwpth(ncol,k) = cliqwp(ncol,k)
11166 ciwpth(ncol,k) = cicewp(ncol,k)
11167 rel(ncol,k) = reliq(ncol,k)
11168 rei(ncol,k) = reice(ncol,k)
11172 if (inflgsw .eq. 5) then
11174 cswpth(ncol,k) = csnowp(ncol,k)
11175 res(ncol,k) = resnow1d(ncol,k)
11179 cswpth(ncol,k) = 0.0
11184 ! Zero out cloud optical properties here, calculated in radiation
11187 taucld(nb,ncol,k) = 0.0
11188 ssacld(nb,ncol,k) = 1.0
11189 asmcld(nb,ncol,k) = 0.0
11190 fsfcld(nb,ncol,k) = 0.0
11195 ! No clouds are allowed in the extra layer from model top to TOA
11196 clwpth(ncol,kte+1) = 0.
11197 ciwpth(ncol,kte+1) = 0.
11198 cswpth(ncol,kte+1) = 0.
11199 rel(ncol,kte+1) = 10.
11200 rei(ncol,kte+1) = 10.
11201 res(ncol,kte+1) = 10.
11202 cldfrac(ncol,kte+1) = 0.
11204 taucld(nb,ncol,kte+1) = 0.
11205 ssacld(nb,ncol,kte+1) = 1.
11206 asmcld(nb,ncol,kte+1) = 0.
11207 fsfcld(nb,ncol,kte+1) = 0.
11214 ! Sub-column generator for McICA
11215 lat = XLAT(i,j) !retrieve scalar latitude for column calculation
11216 call mcica_subcol_sw(iplon, ncol, nlay, icld, permuteseed, irng, play, &
11217 cldfrac, ciwpth, clwpth, cswpth, rei, rel, res, taucld, ssacld, asmcld, fsfcld, &
11218 hgt, idcor, juldat, lat, &
11219 cldfmcl, ciwpmcl, clwpmcl, cswpmcl, reicmcl, relqmcl, resnmcl, &
11220 taucmcl, ssacmcl, asmcmcl, fsfcmcl)
11223 !--------------------------------------------------------------------------
11224 ! Aerosol optical depth, single scattering albedo and asymmetry parameter -czhao 03/2010
11225 !--------------------------------------------------------------------------
11226 ! by layer for each RRTMG shortwave band
11227 ! No aerosols in top layer above model top (kte+1).
11228 !cz do nb = 1, nbndsw
11229 !cz do k = kts, kte+1
11230 !cz tauaer(ncol,k,nb) = 0.
11231 !cz ssaaer(ncol,k,nb) = 1.
11232 !cz asmaer(ncol,k,nb) = 0.
11236 ! ... Aerosol effects. Added aerosol feedbacks from Chem , 03/2010 -czhao
11238 #if ( WRF_CMAQ == 1 )
11241 tauaer(ncol,k,nb) = 0.
11242 ssaaer(ncol,k,nb) = 1.
11243 asmaer(ncol,k,nb) = 0.
11245 if (proceed_cmaq_sw) then
11246 INMASS_ws(1) = mass_ws_i(i,k,j)
11247 INMASS_ws(2) = mass_ws_j(i,k,j)
11248 INMASS_ws(3) = mass_ws_k(i,k,j)
11249 INMASS_in(1) = mass_in_i(i,k,j)
11250 INMASS_in(2) = mass_in_j(i,k,j)
11251 INMASS_in(3) = mass_in_k(i,k,j)
11252 INMASS_ec(1) = mass_ec_i(i,k,j)
11253 INMASS_ec(2) = mass_ec_j(i,k,j)
11254 INMASS_ec(3) = mass_ec_k(i,k,j)
11255 INMASS_ss(1) = mass_ss_i(i,k,j)
11256 INMASS_ss(2) = mass_ss_j(i,k,j)
11257 INMASS_ss(3) = mass_ss_k(i,k,j)
11258 INMASS_h2o(1) = mass_h2o_i(i,k,j)
11259 INMASS_h2o(2) = mass_h2o_j(i,k,j)
11260 INMASS_h2o(3) = mass_h2o_k(i,k,j)
11261 INDGN(1) = dgn_i(i,k,j)
11262 INDGN(2) = dgn_j(i,k,j)
11263 INDGN(3) = dgn_k(i,k,j)
11264 INSIG(1) = sig_i(i,k,j)
11265 INSIG(2) = sig_j(i,k,j)
11266 INSIG(3) = sig_k(i,k,j)
11268 delta_z = dz8w(i,k,j)
11270 call get_aerosol_Optics_RRTMG_SW( nb,nmode,delta_z, &
11271 INMASS_ws, INMASS_in, INMASS_ec, INMASS_ss, &
11272 INMASS_h2o, INDGN, INSIG, &
11273 xtauaer, waer, gaer )
11275 write (mystr, *) xtauaer
11276 if (trim(mystr) == ' NaN') then
11277 write (6, '(a13, 2i5)') ' ==d== ', nb, nmode
11278 write (6, '(a13, 5e18.10)') ' ==d== delta ', delta_z
11279 write (6, '(a13, 5e18.10)') ' ==d== ws ', INMASS_ws
11280 write (6, '(a13, 5e18.10)') ' ==d== in ', INMASS_in
11281 write (6, '(a13, 5e18.10)') ' ==d== ec ', INMASS_ec
11282 write (6, '(a13, 5e18.10)') ' ==d== ss ', INMASS_ss
11283 write (6, '(a13, 5e18.10)') ' ==d== h2o ', INMASS_h2o
11284 write (6, '(a13, 5e18.10)') ' ==d== indgn ', INDGN
11285 write (6, '(a13, 5e18.10)') ' ==d== insig ', INSIG
11289 gtauxar_01 (i,k,j) = xtauaer
11290 asy_fac_01 (i,k,j) = gaer
11291 ssa_01 (i,k,j) = waer
11292 else if (nb == 10) then
11293 gtauxar_02 (i,k,j) = xtauaer
11294 asy_fac_02 (i,k,j) = gaer
11295 ssa_02 (i,k,j) = waer
11296 else if (nb == 9) then
11297 gtauxar_03 (i,k,j) = xtauaer
11298 asy_fac_03 (i,k,j) = gaer
11299 ssa_03 (i,k,j) = waer
11300 else if (nb == 8) then
11301 gtauxar_04 (i,k,j) = xtauaer
11302 asy_fac_04 (i,k,j) = gaer
11303 ssa_04 (i,k,j) = waer
11304 else if (nb == 7) then
11305 gtauxar_05 (i,k,j) = xtauaer
11306 asy_fac_05 (i,k,j) = gaer
11307 ssa_05 (i,k,j) = waer
11310 tauaer(ncol,k,nb) = xtauaer
11311 ssaaer(ncol,k,nb) = waer
11312 asmaer(ncol,k,nb) = gaer
11314 enddo ! loop over layers
11315 if (proceed_cmaq_sw) then
11316 ! No aerosols in top layer above model top (kte+1).
11317 tauaer(ncol, kte+1 ,nb) = 0.
11318 ssaaer(ncol, kte+1 ,nb) = 1.
11319 asmaer(ncol, kte+1 ,nb) = 0.
11321 enddo ! loop over wavelengths
11325 tauaer(ncol,k,nb) = 0.
11326 ssaaer(ncol,k,nb) = 1.
11327 asmaer(ncol,k,nb) = 0.
11331 if ( associated (tauaer3d_sw) ) then
11332 ! ---- jararias 11/2012
11335 tauaer(ncol,k,nb)=tauaer3d_sw(i,k,j,nb)
11336 ssaaer(ncol,k,nb)=ssaaer3d_sw(i,k,j,nb)
11337 asmaer(ncol,k,nb)=asyaer3d_sw(i,k,j,nb)
11343 #if ( WRF_CHEM == 1 )
11344 IF ( AER_RA_FEEDBACK == 1) then
11346 wavemid(nb)=0.5*(wavemin(nb)+wavemax(nb)) ! um
11347 do k = kts,kte !wig
11349 ! convert optical properties at 300,400,600, and 999 to conform to the band wavelengths
11350 ! tauaer - use angstrom exponent
11351 if(tauaer300(i,k,j).gt.thresh .and. tauaer999(i,k,j).gt.thresh) then
11352 ang=alog(tauaer300(i,k,j)/tauaer999(i,k,j))/alog(999./300.)
11353 tauaer(ncol,k,nb)=tauaer400(i,k,j)*(0.4/wavemid(nb))**ang
11354 !tauaer(ncol,k,nb)=tauaer600(i,k,j)*(0.6/wavemid(nb))**ang
11355 if (i==30.and.j==49.and.k==2.and.nb==12) then
11356 write(0,*) 'TAU from 600 vs 400 in RRTMG',tauaer600(i,k,j),tauaer400(i,k,j)
11357 print*, 'TAU from 600 vs 400 in RRTMG',tauaer600(i,k,j),tauaer400(i,k,j)
11358 write(0,*) tauaer600(i,k,j)*(0.6/wavemid(nb))**ang,tauaer400(i,k,j)*(0.4/wavemid(nb))**ang
11359 print*, tauaer600(i,k,j)*(0.6/wavemid(nb))**ang,tauaer400(i,k,j)*(0.4/wavemid(nb))**ang
11361 ! ssa - linear interpolation; extrapolation
11362 slope=(waer600(i,k,j)-waer400(i,k,j))/.2
11363 ssaaer(ncol,k,nb) = slope*(wavemid(nb)-.6)+waer600(i,k,j)
11364 if(ssaaer(ncol,k,nb).lt.0.4) ssaaer(ncol,k,nb)=0.4
11365 if(ssaaer(ncol,k,nb).ge.1.0) ssaaer(ncol,k,nb)=1.0
11366 ! g - linear interpolation;extrapolation
11367 slope=(gaer600(i,k,j)-gaer400(i,k,j))/.2
11368 asmaer(ncol,k,nb) = slope*(wavemid(nb)-.6)+gaer600(i,k,j) ! notice reversed varaibles
11369 if(asmaer(ncol,k,nb).lt.0.5) asmaer(ncol,k,nb)=0.5
11370 if(asmaer(ncol,k,nb).ge.1.0) asmaer(ncol,k,nb)=1.0
11377 slope = 0. !use slope as a sum holder
11379 slope = slope + tauaer(ncol,k,nb)
11381 if( slope < 0. ) then
11382 write(msg,'("ERROR: Negative total optical depth of ",f8.2," at point i,j,nb=",3i5)') slope,i,j,nb
11383 call wrf_error_fatal(msg)
11384 else if( slope > 6. ) then
11385 call wrf_message("-------------------------")
11386 write(msg,'("WARNING: Large total sw optical depth of ",f8.2," at point i,j,nb=",3i5)') slope,i,j,nb
11387 call wrf_message(msg)
11389 call wrf_message("Diagnostics 1: k, tauaer300, tauaer400, tauaer600, tauaer999, tauaer")
11391 write(msg,'(i4,5f8.2)') k, tauaer300(i,k,j), tauaer400(i,k,j), &
11392 tauaer600(i,k,j), tauaer999(i,k,j),tauaer(ncol,k,nb)
11393 call wrf_message(msg)
11394 !czhao set an up-limit here to avoid segmentation fault
11396 tauaer(ncol,k,nb)=tauaer(ncol,k,nb)*6.0/slope
11399 call wrf_message("Diagnostics 2: k, gaer300, gaer400, gaer600, gaer999")
11401 write(msg,'(i4,4f8.2)') k, gaer300(i,k,j), gaer400(i,k,j), &
11402 gaer600(i,k,j), gaer999(i,k,j)
11403 call wrf_message(msg)
11406 call wrf_message("Diagnostics 3: k, waer300, waer400, waer600, waer999")
11408 write(msg,'(i4,4f8.2)') k, waer300(i,k,j), waer400(i,k,j), &
11409 waer600(i,k,j), waer999(i,k,j)
11410 call wrf_message(msg)
11413 call wrf_message("Diagnostics 4: k, ssaal, asyal, taual")
11415 write(msg,'(i4,3f8.2)') k, ssaaer(i,k,nb), asmaer(i,k,nb), tauaer(i,k,nb)
11416 call wrf_message(msg)
11418 call wrf_message("-------------------------")
11421 endif ! aer_ra_feedback
11425 ! Zero array for input of aerosol optical thickness for use with
11426 ! ECMWF aerosol types (not used)
11429 ecaer(ncol,k,na) = 0.
11433 IF ( PRESENT( aerod ) ) THEN
11434 if ( aer_opt .eq. 0 ) then
11437 ecaer(ncol,k,na) = 0.
11440 else if ( aer_opt .eq. 1 ) then
11443 ecaer(ncol,k,na) = aerod(i,k,j,na)
11445 ! assuming 0 or same value at the top?
11446 ! ecaer(ncol,kte+1,na) = ecaer(ncol,kte,na)
11447 ecaer(ncol,kte+1,na) = 0.
11452 ! Call RRTMG shortwave radiation model
11455 (ncol ,nlay ,icld , &
11456 play ,plev ,tlay ,tlev ,tsfc , &
11457 h2ovmr , o3vmr ,co2vmr ,ch4vmr ,n2ovmr ,o2vmr , &
11458 asdir ,asdif ,aldir ,aldif , &
11459 coszen ,adjes ,dyofyr ,scon , &
11460 inflgsw ,iceflgsw,liqflgsw,cldfmcl , &
11461 taucmcl ,ssacmcl ,asmcmcl ,fsfcmcl , &
11462 ciwpmcl ,clwpmcl ,cswpmcl, reicmcl ,relqmcl ,resnmcl, &
11463 tauaer ,ssaaer ,asmaer ,ecaer , &
11464 swuflx ,swdflx ,swhr ,swuflxc ,swdflxc ,swhrc, swuflxcln, swdflxcln, aer_opt, &
11465 ! ----- Zhenxin added for ssib coupiling 2011-06-20 --------!
11466 sibvisdir, sibvisdif, sibnirdir, sibnirdif, &
11467 ! -------------------- End of addiation by Zhenxin 2011-06-20 ------!
11468 swdkdir, swdkdif, & ! jararias, 2012/08/10
11470 ,calc_clean_atm_diag &
11471 ,loc_sw_zbbcddir & ! WRF-CMAQ twoway coupled model
11472 ,loc_sw_dirdflux & ! WRF-CMAQ twoway coupled model
11473 ,loc_sw_difdflux & ! WRF-CMAQ twoway coupled model
11476 ! WRF-CMAQ twoway coupled model
11477 if (present(sw_zbbcddir)) then
11478 sw_zbbcddir(i,j) = loc_sw_zbbcddir
11479 sw_dirdflux(i,j) = loc_sw_dirdflux
11480 sw_difdflux(i,j) = loc_sw_difdflux
11483 ! Output net absorbed shortwave surface flux and shortwave cloud forcing
11484 ! at the top of atmosphere (W/m2)
11485 gsw(i,j) = swdflx(1,1) - swuflx(1,1)
11486 swcf(i,j) = (swdflx(1,kte+2) - swuflx(1,kte+2)) - (swdflxc(1,kte+2) - swuflxc(1,kte+2))
11488 if (present(swupt)) then
11489 ! Output up and down toa fluxes for total and clear sky
11490 swupt(i,j) = swuflx(1,kte+2)
11491 swuptc(i,j) = swuflxc(1,kte+2)
11492 swdnt(i,j) = swdflx(1,kte+2)
11493 swdntc(i,j) = swdflxc(1,kte+2)
11494 ! Output up and down surface fluxes for total and clear sky
11495 swupb(i,j) = swuflx(1,1)
11496 swupbc(i,j) = swuflxc(1,1)
11497 swdnb(i,j) = swdflx(1,1)
11498 ! Added by Zhenxin for 4 compenants of swdown radiation
11499 swvisdir(i,j) = sibvisdir(1,1)
11500 swvisdif(i,j) = sibvisdif(1,1)
11501 swnirdir(i,j) = sibnirdir(1,1)
11502 swnirdif(i,j) = sibnirdif(1,1)
11503 ! Ended, Zhenxin (2011/06/20)
11504 swdnbc(i,j) = swdflxc(1,1)
11505 if(calc_clean_atm_diag .gt. 0)then
11506 swuptcln(i,j) = swuflxcln(1,kte+2)
11507 swdntcln(i,j) = swdflxcln(1,kte+2)
11508 swupbcln(i,j) = swuflxcln(1,1)
11509 swdnbcln(i,j) = swdflxcln(1,1)
11512 swddir(i,j) = swdkdir(1,1) ! jararias 2013/08/10
11513 swddni(i,j) = swddir(i,j) / coszrs ! jararias 2013/08/10
11514 swddif(i,j) = swdkdif(1,1) ! jararias 2013/08/10
11515 swdownc(i, j) = swdflxc(1,1) ! PAJ: clear-sky GHI
11516 swddirc(i,j) = swdkdirc(1,1) ! PAJ: clear-sky direct normal irradiance
11517 swddnic(i,j) = swddirc(i,j) / coszrs ! PAJ: clear-sky direct normal irradiance
11519 ! Output up and down layer fluxes for total and clear sky.
11520 ! Vertical ordering is from bottom to top in units of W m-2.
11521 if ( present (swupflx) ) then
11523 swupflx(i,k,j) = swuflx(1,k)
11524 swupflxc(i,k,j) = swuflxc(1,k)
11525 swdnflx(i,k,j) = swdflx(1,k)
11526 swdnflxc(i,k,j) = swdflxc(1,k)
11530 ! Output heating rate tendency; convert heating rate from K/d to K/s
11531 ! Heating rate arrays are ordered vertically from bottom to top here.
11533 tten1d(k) = swhr(ncol,k)/86400.
11534 rthratensw(i,k,j) = tten1d(k)/pi3d(i,k,j)
11535 tten1d(k) = swhrc(ncol,k)/86400.
11536 rthratenswc(i,k,j) = tten1d(k)/pi3d(i,k,j)
11540 if (proceed_cmaq_sw) then ! this is for WRF-CMAQ twoway coupled model
11541 gtauxar_01 (i,:,j) = 0.0
11542 gtauxar_02 (i,:,j) = 0.0
11543 gtauxar_03 (i,:,j) = 0.0
11544 gtauxar_04 (i,:,j) = 0.0
11545 gtauxar_05 (i,:,j) = 0.0
11546 asy_fac_01 (i,:,j) = 0.0
11547 asy_fac_02 (i,:,j) = 0.0
11548 asy_fac_03 (i,:,j) = 0.0
11549 asy_fac_04 (i,:,j) = 0.0
11550 asy_fac_05 (i,:,j) = 0.0
11551 ssa_01 (i,:,j) = 0.0
11552 ssa_02 (i,:,j) = 0.0
11553 ssa_04 (i,:,j) = 0.0
11554 ssa_04 (i,:,j) = 0.0
11555 ssa_05 (i,:,j) = 0.0
11558 if (present(swupt)) then
11559 ! Output up and down toa fluxes for total and clear sky
11564 ! Output up and down surface fluxes for total and clear sky
11569 swvisdir(i,j) = 0. ! Add by Zhenxin (2011/06/20)
11572 swnirdif(i,j) = 0. ! Add by Zhenxin (2011/06/20)
11573 if(calc_clean_atm_diag .gt. 0)then
11580 swddir(i,j) = 0. ! jararias 2013/08/10
11581 swddni(i,j) = 0. ! jararias 2013/08/10
11582 swddif(i,j) = 0. ! jararias 2013/08/10
11583 swdownc(i, j) = 0.0 ! PAJ
11584 swddnic(i,j) = 0.0 ! PAJ
11585 swddirc(i,j) = 0.0 ! PAJ
11594 !-------------------------------------------------------------------
11596 END SUBROUTINE RRTMG_SWRAD
11599 !====================================================================
11600 SUBROUTINE rrtmg_swinit( &
11601 allowed_to_read , &
11602 ids, ide, jds, jde, kds, kde, &
11603 ims, ime, jms, jme, kms, kme, &
11604 its, ite, jts, jte, kts, kte )
11605 !--------------------------------------------------------------------
11607 !--------------------------------------------------------------------
11609 LOGICAL , INTENT(IN) :: allowed_to_read
11610 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
11611 ims, ime, jms, jme, kms, kme, &
11612 its, ite, jts, jte, kts, kte
11614 ! Read in absorption coefficients and other data
11615 IF ( allowed_to_read ) THEN
11616 CALL rrtmg_swlookuptable
11619 ! Perform g-point reduction and other initializations
11620 ! Specific heat of dry air (cp) used in flux to heating rate conversion factor.
11621 call rrtmg_sw_ini(cp)
11623 END SUBROUTINE rrtmg_swinit
11626 ! **************************************************************************
11627 SUBROUTINE rrtmg_swlookuptable
11628 ! **************************************************************************
11635 LOGICAL , EXTERNAL :: wrf_dm_on_monitor
11637 CHARACTER*80 errmess
11640 IF ( wrf_dm_on_monitor() ) THEN
11642 INQUIRE ( i , OPENED = opened )
11643 IF ( .NOT. opened ) THEN
11651 CALL wrf_dm_bcast_bytes ( rrtmg_unit , IWORDSIZE )
11652 IF ( rrtmg_unit < 0 ) THEN
11653 CALL wrf_error_fatal ( 'module_ra_rrtmg_sw: rrtm_swlookuptable: Can not '// &
11654 'find unused fortran unit to read in lookup table.' )
11657 IF ( wrf_dm_on_monitor() ) THEN
11658 OPEN(rrtmg_unit,FILE='RRTMG_SW_DATA', &
11659 FORM='UNFORMATTED',STATUS='OLD',ERR=9009)
11662 call sw_kgb16(rrtmg_unit)
11663 call sw_kgb17(rrtmg_unit)
11664 call sw_kgb18(rrtmg_unit)
11665 call sw_kgb19(rrtmg_unit)
11666 call sw_kgb20(rrtmg_unit)
11667 call sw_kgb21(rrtmg_unit)
11668 call sw_kgb22(rrtmg_unit)
11669 call sw_kgb23(rrtmg_unit)
11670 call sw_kgb24(rrtmg_unit)
11671 call sw_kgb25(rrtmg_unit)
11672 call sw_kgb26(rrtmg_unit)
11673 call sw_kgb27(rrtmg_unit)
11674 call sw_kgb28(rrtmg_unit)
11675 call sw_kgb29(rrtmg_unit)
11677 IF ( wrf_dm_on_monitor() ) CLOSE (rrtmg_unit)
11681 WRITE( errmess , '(A,I4)' ) 'module_ra_rrtmg_sw: error opening RRTMG_SW_DATA on unit ',rrtmg_unit
11682 CALL wrf_error_fatal(errmess)
11684 END SUBROUTINE rrtmg_swlookuptable
11686 ! **************************************************************************
11687 ! RRTMG Shortwave Radiative Transfer Model
11688 ! Atmospheric and Environmental Research, Inc., Cambridge, MA
11690 ! Original by J.Delamere, Atmospheric & Environmental Research.
11691 ! Reformatted for F90: JJMorcrette, ECMWF
11692 ! Revision for GCMs: Michael J. Iacono, AER, July 2002
11693 ! Further F90 reformatting: Michael J. Iacono, AER, June 2006
11695 ! This file contains 14 READ statements that include the
11696 ! absorption coefficients and other data for each of the 14 shortwave
11697 ! spectral bands used in RRTMG_SW. Here, the data are defined for 16
11698 ! g-points, or sub-intervals, per band. These data are combined and
11699 ! weighted using a mapping procedure in module RRTMG_SW_INIT to reduce
11700 ! the total number of g-points from 224 to 112 for use in the GCM.
11701 ! **************************************************************************
11703 ! **************************************************************************
11704 subroutine sw_kgb16(rrtmg_unit)
11705 ! **************************************************************************
11707 use rrsw_kg16, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
11708 rayl, strrat1, layreffr
11714 integer, intent(in) :: rrtmg_unit
11717 character*80 errmess
11718 logical, external :: wrf_dm_on_monitor
11720 ! Array sfluxrefo contains the Kurucz solar source function for this band.
11722 ! Array rayl contains the Rayleigh extinction coefficient at v = 2925 cm-1.
11724 ! The array KAO contains absorption coefs at the 16 chosen g-values
11725 ! for a range of pressure levels> ~100mb, temperatures, and binary
11726 ! species parameters (see taumol.f for definition). The first
11727 ! index in the array, JS, runs from 1 to 9, and corresponds to
11728 ! different values of the binary species parameter. For instance,
11729 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
11730 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
11731 ! in the array, JT, which runs from 1 to 5, corresponds to different
11732 ! temperatures. More specifically, JT = 3 means that the data are for
11733 ! the reference temperature TREF for this pressure level, JT = 2 refers
11734 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
11735 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
11736 ! to the JPth reference pressure level (see taumol.f for these levels
11737 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
11738 ! which g-interval the absorption coefficients are for.
11740 ! The array KBO contains absorption coefs at the 16 chosen g-values
11741 ! for a range of pressure levels < ~100mb and temperatures. The first
11742 ! index in the array, JT, which runs from 1 to 5, corresponds to
11743 ! different temperatures. More specifically, JT = 3 means that the
11744 ! data are for the reference temperature TREF for this pressure
11745 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
11746 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
11747 ! The second index, JP, runs from 13 to 59 and refers to the JPth
11748 ! reference pressure level (see taumol.f for the value of these
11749 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
11750 ! and tells us which g-interval the absorption coefficients are for.
11752 ! The array FORREFO contains the coefficient of the water vapor
11753 ! foreign-continuum (including the energy term). The first
11754 ! index refers to reference temperature (296,260,224,260) and
11755 ! pressure (970,475,219,3 mbar) levels. The second index
11756 ! runs over the g-channel (1 to 16).
11758 ! The array SELFREFO contains the coefficient of the water vapor
11759 ! self-continuum (including the energy term). The first index
11760 ! refers to temperature in 7.2 degree increments. For instance,
11761 ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8,
11762 ! etc. The second index runs over the g-channel (1 to 16).
11764 #define DM_BCAST_MACRO(A) CALL wrf_dm_bcast_bytes ( A , size ( A ) * RWORDSIZE )
11765 #define DM_BCAST_REAL(A) CALL wrf_dm_bcast_real ( A , 1 )
11766 #define DM_BCAST_INTEGER(A) CALL wrf_dm_bcast_integer ( A , 1 )
11768 IF ( wrf_dm_on_monitor() ) READ (rrtmg_unit,ERR=9010) &
11769 rayl, strrat1, layreffr, kao, kbo, selfrefo, forrefo, sfluxrefo
11770 DM_BCAST_REAL(rayl)
11771 DM_BCAST_REAL(strrat1)
11772 DM_BCAST_INTEGER(layreffr)
11773 DM_BCAST_MACRO(kao)
11774 DM_BCAST_MACRO(kbo)
11775 DM_BCAST_MACRO(selfrefo)
11776 DM_BCAST_MACRO(forrefo)
11777 DM_BCAST_MACRO(sfluxrefo)
11781 WRITE( errmess , '(A,I4)' ) 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
11782 CALL wrf_error_fatal(errmess)
11784 end subroutine sw_kgb16
11786 ! **************************************************************************
11787 subroutine sw_kgb17(rrtmg_unit)
11788 ! **************************************************************************
11790 use rrsw_kg17, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
11791 rayl, strrat, layreffr
11797 integer, intent(in) :: rrtmg_unit
11800 character*80 errmess
11801 logical, external :: wrf_dm_on_monitor
11803 ! Array sfluxrefo contains the Kurucz solar source function for this band.
11805 ! Array rayl contains the Rayleigh extinction coefficient at v = 3625 cm-1.
11807 ! The array KAO contains absorption coefs at the 16 chosen g-values
11808 ! for a range of pressure levels> ~100mb, temperatures, and binary
11809 ! species parameters (see taumol.f for definition). The first
11810 ! index in the array, JS, runs from 1 to 9, and corresponds to
11811 ! different values of the binary species parameter. For instance,
11812 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
11813 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
11814 ! in the array, JT, which runs from 1 to 5, corresponds to different
11815 ! temperatures. More specifically, JT = 3 means that the data are for
11816 ! the reference temperature TREF for this pressure level, JT = 2 refers
11817 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
11818 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
11819 ! to the JPth reference pressure level (see taumol.f for these levels
11820 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
11821 ! which g-interval the absorption coefficients are for.
11823 ! The array KBO contains absorption coefs at the 16 chosen g-values
11824 ! for a range of pressure levels < ~100mb and temperatures. The first
11825 ! index in the array, JT, which runs from 1 to 5, corresponds to
11826 ! different temperatures. More specifically, JT = 3 means that the
11827 ! data are for the reference temperature TREF for this pressure
11828 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
11829 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
11830 ! The second index, JP, runs from 13 to 59 and refers to the JPth
11831 ! reference pressure level (see taumol.f for the value of these
11832 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
11833 ! and tells us which g-interval the absorption coefficients are for.
11835 ! The array FORREFO contains the coefficient of the water vapor
11836 ! foreign-continuum (including the energy term). The first
11837 ! index refers to reference temperature (296,260,224,260) and
11838 ! pressure (970,475,219,3 mbar) levels. The second index
11839 ! runs over the g-channel (1 to 16).
11841 ! The array SELFREFO contains the coefficient of the water vapor
11842 ! self-continuum (including the energy term). The first index
11843 ! refers to temperature in 7.2 degree increments. For instance,
11844 ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8,
11845 ! etc. The second index runs over the g-channel (1 to 16).
11847 #define DM_BCAST_MACRO(A) CALL wrf_dm_bcast_bytes ( A , size ( A ) * RWORDSIZE )
11848 #define DM_BCAST_REAL(A) CALL wrf_dm_bcast_real ( A , 1 )
11849 #define DM_BCAST_INTEGER(A) CALL wrf_dm_bcast_integer ( A , 1 )
11851 IF ( wrf_dm_on_monitor() ) READ (rrtmg_unit,ERR=9010) &
11852 rayl, strrat, layreffr, kao, kbo, selfrefo, forrefo, sfluxrefo
11853 DM_BCAST_REAL(rayl)
11854 DM_BCAST_REAL(strrat)
11855 DM_BCAST_INTEGER(layreffr)
11856 DM_BCAST_MACRO(kao)
11857 DM_BCAST_MACRO(kbo)
11858 DM_BCAST_MACRO(selfrefo)
11859 DM_BCAST_MACRO(forrefo)
11860 DM_BCAST_MACRO(sfluxrefo)
11864 WRITE( errmess , '(A,I4)' ) 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
11865 CALL wrf_error_fatal(errmess)
11867 end subroutine sw_kgb17
11869 ! **************************************************************************
11870 subroutine sw_kgb18(rrtmg_unit)
11871 ! **************************************************************************
11873 use rrsw_kg18, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
11874 rayl, strrat, layreffr
11880 integer, intent(in) :: rrtmg_unit
11883 character*80 errmess
11884 logical, external :: wrf_dm_on_monitor
11886 ! Array sfluxrefo contains the Kurucz solar source function for this band.
11888 ! Array rayl contains the Rayleigh extinction coefficient at v = 4325 cm-1.
11890 ! The array KAO contains absorption coefs at the 16 chosen g-values
11891 ! for a range of pressure levels> ~100mb, temperatures, and binary
11892 ! species parameters (see taumol.f for definition). The first
11893 ! index in the array, JS, runs from 1 to 9, and corresponds to
11894 ! different values of the binary species parameter. For instance,
11895 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
11896 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
11897 ! in the array, JT, which runs from 1 to 5, corresponds to different
11898 ! temperatures. More specifically, JT = 3 means that the data are for
11899 ! the reference temperature TREF for this pressure level, JT = 2 refers
11900 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
11901 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
11902 ! to the JPth reference pressure level (see taumol.f for these levels
11903 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
11904 ! which g-interval the absorption coefficients are for.
11906 ! The array KBO contains absorption coefs at the 16 chosen g-values
11907 ! for a range of pressure levels < ~100mb and temperatures. The first
11908 ! index in the array, JT, which runs from 1 to 5, corresponds to
11909 ! different temperatures. More specifically, JT = 3 means that the
11910 ! data are for the reference temperature TREF for this pressure
11911 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
11912 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
11913 ! The second index, JP, runs from 13 to 59 and refers to the JPth
11914 ! reference pressure level (see taumol.f for the value of these
11915 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
11916 ! and tells us which g-interval the absorption coefficients are for.
11918 ! The array FORREFO contains the coefficient of the water vapor
11919 ! foreign-continuum (including the energy term). The first
11920 ! index refers to reference temperature (296,260,224,260) and
11921 ! pressure (970,475,219,3 mbar) levels. The second index
11922 ! runs over the g-channel (1 to 16).
11924 ! The array SELFREFO contains the coefficient of the water vapor
11925 ! self-continuum (including the energy term). The first index
11926 ! refers to temperature in 7.2 degree increments. For instance,
11927 ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8,
11928 ! etc. The second index runs over the g-channel (1 to 16).
11930 #define DM_BCAST_MACRO(A) CALL wrf_dm_bcast_bytes ( A , size ( A ) * RWORDSIZE )
11931 #define DM_BCAST_REAL(A) CALL wrf_dm_bcast_real ( A , 1 )
11932 #define DM_BCAST_INTEGER(A) CALL wrf_dm_bcast_integer ( A , 1 )
11934 IF ( wrf_dm_on_monitor() ) READ (rrtmg_unit,ERR=9010) &
11935 rayl, strrat, layreffr, kao, kbo, selfrefo, forrefo, sfluxrefo
11936 DM_BCAST_REAL(rayl)
11937 DM_BCAST_REAL(strrat)
11938 DM_BCAST_INTEGER(layreffr)
11939 DM_BCAST_MACRO(kao)
11940 DM_BCAST_MACRO(kbo)
11941 DM_BCAST_MACRO(selfrefo)
11942 DM_BCAST_MACRO(forrefo)
11943 DM_BCAST_MACRO(sfluxrefo)
11947 WRITE( errmess , '(A,I4)' ) 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
11948 CALL wrf_error_fatal(errmess)
11950 end subroutine sw_kgb18
11952 ! **************************************************************************
11953 subroutine sw_kgb19(rrtmg_unit)
11954 ! **************************************************************************
11956 use rrsw_kg19, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
11957 rayl, strrat, layreffr
11963 integer, intent(in) :: rrtmg_unit
11966 character*80 errmess
11967 logical, external :: wrf_dm_on_monitor
11969 ! Array sfluxrefo contains the Kurucz solar source function for this band.
11971 ! Array rayl contains the Rayleigh extinction coefficient at v = 4900 cm-1.
11973 ! The array KAO contains absorption coefs at the 16 chosen g-values
11974 ! for a range of pressure levels> ~100mb, temperatures, and binary
11975 ! species parameters (see taumol.f for definition). The first
11976 ! index in the array, JS, runs from 1 to 9, and corresponds to
11977 ! different values of the binary species parameter. For instance,
11978 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
11979 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
11980 ! in the array, JT, which runs from 1 to 5, corresponds to different
11981 ! temperatures. More specifically, JT = 3 means that the data are for
11982 ! the reference temperature TREF for this pressure level, JT = 2 refers
11983 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
11984 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
11985 ! to the JPth reference pressure level (see taumol.f for these levels
11986 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
11987 ! which g-interval the absorption coefficients are for.
11989 ! The array KBO contains absorption coefs at the 16 chosen g-values
11990 ! for a range of pressure levels < ~100mb and temperatures. The first
11991 ! index in the array, JT, which runs from 1 to 5, corresponds to
11992 ! different temperatures. More specifically, JT = 3 means that the
11993 ! data are for the reference temperature TREF for this pressure
11994 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
11995 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
11996 ! The second index, JP, runs from 13 to 59 and refers to the JPth
11997 ! reference pressure level (see taumol.f for the value of these
11998 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
11999 ! and tells us which g-interval the absorption coefficients are for.
12001 ! The array FORREFO contains the coefficient of the water vapor
12002 ! foreign-continuum (including the energy term). The first
12003 ! index refers to reference temperature (296,260,224,260) and
12004 ! pressure (970,475,219,3 mbar) levels. The second index
12005 ! runs over the g-channel (1 to 16).
12007 ! The array SELFREFO contains the coefficient of the water vapor
12008 ! self-continuum (including the energy term). The first index
12009 ! refers to temperature in 7.2 degree increments. For instance,
12010 ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8,
12011 ! etc. The second index runs over the g-channel (1 to 16).
12013 #define DM_BCAST_MACRO(A) CALL wrf_dm_bcast_bytes ( A , size ( A ) * RWORDSIZE )
12014 #define DM_BCAST_REAL(A) CALL wrf_dm_bcast_real ( A , 1 )
12015 #define DM_BCAST_INTEGER(A) CALL wrf_dm_bcast_integer ( A , 1 )
12017 IF ( wrf_dm_on_monitor() ) READ (rrtmg_unit,ERR=9010) &
12018 rayl, strrat, layreffr, kao, kbo, selfrefo, forrefo, sfluxrefo
12019 DM_BCAST_REAL(rayl)
12020 DM_BCAST_REAL(strrat)
12021 DM_BCAST_INTEGER(layreffr)
12022 DM_BCAST_MACRO(kao)
12023 DM_BCAST_MACRO(kbo)
12024 DM_BCAST_MACRO(selfrefo)
12025 DM_BCAST_MACRO(forrefo)
12026 DM_BCAST_MACRO(sfluxrefo)
12030 WRITE( errmess , '(A,I4)' ) 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
12031 CALL wrf_error_fatal(errmess)
12033 end subroutine sw_kgb19
12035 ! **************************************************************************
12036 subroutine sw_kgb20(rrtmg_unit)
12037 ! **************************************************************************
12039 use rrsw_kg20, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
12040 absch4o, rayl, layreffr
12046 integer, intent(in) :: rrtmg_unit
12049 character*80 errmess
12050 logical, external :: wrf_dm_on_monitor
12052 ! Array sfluxrefo contains the Kurucz solar source function for this band.
12054 ! Array rayl contains the Rayleigh extinction coefficient at v = 5670 cm-1.
12056 ! Array absch4o contains the absorption coefficients for methane.
12058 ! The array KAO contains absorption coefs at the 16 chosen g-values
12059 ! for a range of pressure levels> ~100mb, temperatures, and binary
12060 ! species parameters (see taumol.f for definition). The first
12061 ! index in the array, JS, runs from 1 to 9, and corresponds to
12062 ! different values of the binary species parameter. For instance,
12063 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
12064 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
12065 ! in the array, JT, which runs from 1 to 5, corresponds to different
12066 ! temperatures. More specifically, JT = 3 means that the data are for
12067 ! the reference temperature TREF for this pressure level, JT = 2 refers
12068 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
12069 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
12070 ! to the JPth reference pressure level (see taumol.f for these levels
12071 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
12072 ! which g-interval the absorption coefficients are for.
12074 ! The array KBO contains absorption coefs at the 16 chosen g-values
12075 ! for a range of pressure levels < ~100mb and temperatures. The first
12076 ! index in the array, JT, which runs from 1 to 5, corresponds to
12077 ! different temperatures. More specifically, JT = 3 means that the
12078 ! data are for the reference temperature TREF for this pressure
12079 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
12080 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
12081 ! The second index, JP, runs from 13 to 59 and refers to the JPth
12082 ! reference pressure level (see taumol.f for the value of these
12083 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
12084 ! and tells us which g-interval the absorption coefficients are for.
12086 ! The array FORREFO contains the coefficient of the water vapor
12087 ! foreign-continuum (including the energy term). The first
12088 ! index refers to reference temperature (296,260,224,260) and
12089 ! pressure (970,475,219,3 mbar) levels. The second index
12090 ! runs over the g-channel (1 to 16).
12092 ! The array SELFREFO contains the coefficient of the water vapor
12093 ! self-continuum (including the energy term). The first index
12094 ! refers to temperature in 7.2 degree increments. For instance,
12095 ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8,
12096 ! etc. The second index runs over the g-channel (1 to 16).
12098 #define DM_BCAST_MACRO(A) CALL wrf_dm_bcast_bytes ( A , size ( A ) * RWORDSIZE )
12099 #define DM_BCAST_REAL(A) CALL wrf_dm_bcast_real ( A , 1 )
12100 #define DM_BCAST_INTEGER(A) CALL wrf_dm_bcast_integer ( A , 1 )
12102 IF ( wrf_dm_on_monitor() ) READ (rrtmg_unit,ERR=9010) &
12103 rayl, layreffr, absch4o, kao, kbo, selfrefo, forrefo, sfluxrefo
12104 DM_BCAST_REAL(rayl)
12105 DM_BCAST_INTEGER(layreffr)
12106 DM_BCAST_MACRO(absch4o)
12107 DM_BCAST_MACRO(kao)
12108 DM_BCAST_MACRO(kbo)
12109 DM_BCAST_MACRO(selfrefo)
12110 DM_BCAST_MACRO(forrefo)
12111 DM_BCAST_MACRO(sfluxrefo)
12115 WRITE( errmess , '(A,I4)' ) 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
12116 CALL wrf_error_fatal(errmess)
12118 end subroutine sw_kgb20
12120 ! **************************************************************************
12121 subroutine sw_kgb21(rrtmg_unit)
12122 ! **************************************************************************
12124 use rrsw_kg21, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
12125 rayl, strrat, layreffr
12131 integer, intent(in) :: rrtmg_unit
12134 character*80 errmess
12135 logical, external :: wrf_dm_on_monitor
12137 ! Array sfluxrefo contains the Kurucz solar source function for this band.
12139 ! Array rayl contains the Rayleigh extinction coefficient at v = 6925 cm-1.
12141 ! The array KAO contains absorption coefs at the 16 chosen g-values
12142 ! for a range of pressure levels> ~100mb, temperatures, and binary
12143 ! species parameters (see taumol.f for definition). The first
12144 ! index in the array, JS, runs from 1 to 9, and corresponds to
12145 ! different values of the binary species parameter. For instance,
12146 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
12147 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
12148 ! in the array, JT, which runs from 1 to 5, corresponds to different
12149 ! temperatures. More specifically, JT = 3 means that the data are for
12150 ! the reference temperature TREF for this pressure level, JT = 2 refers
12151 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
12152 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
12153 ! to the JPth reference pressure level (see taumol.f for these levels
12154 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
12155 ! which g-interval the absorption coefficients are for.
12157 ! The array KBO contains absorption coefs at the 16 chosen g-values
12158 ! for a range of pressure levels < ~100mb and temperatures. The first
12159 ! index in the array, JT, which runs from 1 to 5, corresponds to
12160 ! different temperatures. More specifically, JT = 3 means that the
12161 ! data are for the reference temperature TREF for this pressure
12162 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
12163 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
12164 ! The second index, JP, runs from 13 to 59 and refers to the JPth
12165 ! reference pressure level (see taumol.f for the value of these
12166 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
12167 ! and tells us which g-interval the absorption coefficients are for.
12169 ! The array FORREFO contains the coefficient of the water vapor
12170 ! foreign-continuum (including the energy term). The first
12171 ! index refers to reference temperature (296,260,224,260) and
12172 ! pressure (970,475,219,3 mbar) levels. The second index
12173 ! runs over the g-channel (1 to 16).
12175 ! The array SELFREFO contains the coefficient of the water vapor
12176 ! self-continuum (including the energy term). The first index
12177 ! refers to temperature in 7.2 degree increments. For instance,
12178 ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8,
12179 ! etc. The second index runs over the g-channel (1 to 16).
12181 #define DM_BCAST_MACRO(A) CALL wrf_dm_bcast_bytes ( A , size ( A ) * RWORDSIZE )
12182 #define DM_BCAST_REAL(A) CALL wrf_dm_bcast_real ( A , 1 )
12183 #define DM_BCAST_INTEGER(A) CALL wrf_dm_bcast_integer ( A , 1 )
12185 IF ( wrf_dm_on_monitor() ) READ (rrtmg_unit,ERR=9010) &
12186 rayl, strrat, layreffr, kao, kbo, selfrefo, forrefo, sfluxrefo
12187 DM_BCAST_REAL(rayl)
12188 DM_BCAST_REAL(strrat)
12189 DM_BCAST_INTEGER(layreffr)
12190 DM_BCAST_MACRO(kao)
12191 DM_BCAST_MACRO(kbo)
12192 DM_BCAST_MACRO(selfrefo)
12193 DM_BCAST_MACRO(forrefo)
12194 DM_BCAST_MACRO(sfluxrefo)
12198 WRITE( errmess , '(A,I4)' ) 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
12199 CALL wrf_error_fatal(errmess)
12201 end subroutine sw_kgb21
12203 ! **************************************************************************
12204 subroutine sw_kgb22(rrtmg_unit)
12205 ! **************************************************************************
12207 use rrsw_kg22, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
12208 rayl, strrat, layreffr
12214 integer, intent(in) :: rrtmg_unit
12217 character*80 errmess
12218 logical, external :: wrf_dm_on_monitor
12220 ! Array sfluxrefo contains the Kurucz solar source function for this band.
12222 ! Array rayl contains the Rayleigh extinction coefficient at v = 8000 cm-1.
12224 ! The array KAO contains absorption coefs at the 16 chosen g-values
12225 ! for a range of pressure levels> ~100mb, temperatures, and binary
12226 ! species parameters (see taumol.f for definition). The first
12227 ! index in the array, JS, runs from 1 to 9, and corresponds to
12228 ! different values of the binary species parameter. For instance,
12229 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
12230 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
12231 ! in the array, JT, which runs from 1 to 5, corresponds to different
12232 ! temperatures. More specifically, JT = 3 means that the data are for
12233 ! the reference temperature TREF for this pressure level, JT = 2 refers
12234 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
12235 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
12236 ! to the JPth reference pressure level (see taumol.f for these levels
12237 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
12238 ! which g-interval the absorption coefficients are for.
12240 ! The array KBO contains absorption coefs at the 16 chosen g-values
12241 ! for a range of pressure levels < ~100mb and temperatures. The first
12242 ! index in the array, JT, which runs from 1 to 5, corresponds to
12243 ! different temperatures. More specifically, JT = 3 means that the
12244 ! data are for the reference temperature TREF for this pressure
12245 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
12246 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
12247 ! The second index, JP, runs from 13 to 59 and refers to the JPth
12248 ! reference pressure level (see taumol.f for the value of these
12249 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
12250 ! and tells us which g-interval the absorption coefficients are for.
12252 ! The array FORREFO contains the coefficient of the water vapor
12253 ! foreign-continuum (including the energy term). The first
12254 ! index refers to reference temperature (296_rb,260_rb,224,260) and
12255 ! pressure (970,475,219,3 mbar) levels. The second index
12256 ! runs over the g-channel (1 to 16).
12258 ! The array SELFREFO contains the coefficient of the water vapor
12259 ! self-continuum (including the energy term). The first index
12260 ! refers to temperature in 7.2 degree increments. For instance,
12261 ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8,
12262 ! etc. The second index runs over the g-channel (1 to 16).
12264 #define DM_BCAST_MACRO(A) CALL wrf_dm_bcast_bytes ( A , size ( A ) * RWORDSIZE )
12265 #define DM_BCAST_REAL(A) CALL wrf_dm_bcast_real ( A , 1 )
12266 #define DM_BCAST_INTEGER(A) CALL wrf_dm_bcast_integer ( A , 1 )
12268 IF ( wrf_dm_on_monitor() ) READ (rrtmg_unit,ERR=9010) &
12269 rayl, strrat, layreffr, kao, kbo, selfrefo, forrefo, sfluxrefo
12270 DM_BCAST_REAL(rayl)
12271 DM_BCAST_REAL(strrat)
12272 DM_BCAST_INTEGER(layreffr)
12273 DM_BCAST_MACRO(kao)
12274 DM_BCAST_MACRO(kbo)
12275 DM_BCAST_MACRO(selfrefo)
12276 DM_BCAST_MACRO(forrefo)
12277 DM_BCAST_MACRO(sfluxrefo)
12281 WRITE( errmess , '(A,I4)' ) 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
12282 CALL wrf_error_fatal(errmess)
12284 end subroutine sw_kgb22
12286 ! **************************************************************************
12287 subroutine sw_kgb23(rrtmg_unit)
12288 ! **************************************************************************
12290 use rrsw_kg23, only : kao, selfrefo, forrefo, sfluxrefo, &
12291 raylo, givfac, layreffr
12297 integer, intent(in) :: rrtmg_unit
12300 character*80 errmess
12301 logical, external :: wrf_dm_on_monitor
12303 ! Array sfluxrefo contains the Kurucz solar source function for this band.
12305 ! Array raylo contains the Rayleigh extinction coefficient at all v for this band
12307 ! Array givfac is the average Giver et al. correction factor for this band.
12309 ! The array KAO contains absorption coefs at the 16 chosen g-values
12310 ! for a range of pressure levels> ~100mb, temperatures, and binary
12311 ! species parameters (see taumol.f for definition). The first
12312 ! index in the array, JS, runs from 1 to 9, and corresponds to
12313 ! different values of the binary species parameter. For instance,
12314 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
12315 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
12316 ! in the array, JT, which runs from 1 to 5, corresponds to different
12317 ! temperatures. More specifically, JT = 3 means that the data are for
12318 ! the reference temperature TREF for this pressure level, JT = 2 refers
12319 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
12320 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
12321 ! to the JPth reference pressure level (see taumol.f for these levels
12322 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
12323 ! which g-interval the absorption coefficients are for.
12325 ! The array FORREFO contains the coefficient of the water vapor
12326 ! foreign-continuum (including the energy term). The first
12327 ! index refers to reference temperature (296,260,224,260) and
12328 ! pressure (970,475,219,3 mbar) levels. The second index
12329 ! runs over the g-channel (1 to 16).
12331 ! The array SELFREFO contains the coefficient of the water vapor
12332 ! self-continuum (including the energy term). The first index
12333 ! refers to temperature in 7.2 degree increments. For instance,
12334 ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8,
12335 ! etc. The second index runs over the g-channel (1 to 16).
12337 #define DM_BCAST_MACRO(A) CALL wrf_dm_bcast_bytes ( A , size ( A ) * RWORDSIZE )
12338 #define DM_BCAST_REAL(A) CALL wrf_dm_bcast_real ( A , 1 )
12339 #define DM_BCAST_INTEGER(A) CALL wrf_dm_bcast_integer ( A , 1 )
12341 IF ( wrf_dm_on_monitor() ) READ (rrtmg_unit,ERR=9010) &
12342 raylo, givfac, layreffr, kao, selfrefo, forrefo, sfluxrefo
12343 DM_BCAST_MACRO(raylo)
12344 DM_BCAST_REAL(givfac)
12345 DM_BCAST_INTEGER(layreffr)
12346 DM_BCAST_MACRO(kao)
12347 DM_BCAST_MACRO(selfrefo)
12348 DM_BCAST_MACRO(forrefo)
12349 DM_BCAST_MACRO(sfluxrefo)
12353 WRITE( errmess , '(A,I4)' ) 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
12354 CALL wrf_error_fatal(errmess)
12356 end subroutine sw_kgb23
12358 ! **************************************************************************
12359 subroutine sw_kgb24(rrtmg_unit)
12360 ! **************************************************************************
12362 use rrsw_kg24, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
12363 raylao, raylbo, abso3ao, abso3bo, strrat, layreffr
12369 integer, intent(in) :: rrtmg_unit
12372 character*80 errmess
12373 logical, external :: wrf_dm_on_monitor
12375 ! Array sfluxrefo contains the Kurucz solar source function for this band.
12377 ! Arrays raylao and raylbo contain the Rayleigh extinction coefficient at
12378 ! all v for this band for the upper and lower atmosphere.
12380 ! Arrays abso3ao and abso3bo contain the ozone absorption coefficient at
12381 ! all v for this band for the upper and lower atmosphere.
12383 ! The array KAO contains absorption coefs at the 16 chosen g-values
12384 ! for a range of pressure levels> ~100mb, temperatures, and binary
12385 ! species parameters (see taumol.f for definition). The first
12386 ! index in the array, JS, runs from 1 to 9, and corresponds to
12387 ! different values of the binary species parameter. For instance,
12388 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
12389 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
12390 ! in the array, JT, which runs from 1 to 5, corresponds to different
12391 ! temperatures. More specifically, JT = 3 means that the data are for
12392 ! the reference temperature TREF for this pressure level, JT = 2 refers
12393 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
12394 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
12395 ! to the JPth reference pressure level (see taumol.f for these levels
12396 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
12397 ! which g-interval the absorption coefficients are for.
12399 ! The array KBO contains absorption coefs at the 16 chosen g-values
12400 ! for a range of pressure levels < ~100mb and temperatures. The first
12401 ! index in the array, JT, which runs from 1 to 5, corresponds to
12402 ! different temperatures. More specifically, JT = 3 means that the
12403 ! data are for the reference temperature TREF for this pressure
12404 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
12405 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
12406 ! The second index, JP, runs from 13 to 59 and refers to the JPth
12407 ! reference pressure level (see taumol.f for the value of these
12408 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
12409 ! and tells us which g-interval the absorption coefficients are for.
12411 ! The array FORREFO contains the coefficient of the water vapor
12412 ! foreign-continuum (including the energy term). The first
12413 ! index refers to reference temperature (296,260,224,260) and
12414 ! pressure (970,475,219,3 mbar) levels. The second index
12415 ! runs over the g-channel (1 to 16).
12417 ! The array SELFREFO contains the coefficient of the water vapor
12418 ! self-continuum (including the energy term). The first index
12419 ! refers to temperature in 7.2 degree increments. For instance,
12420 ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8,
12421 ! etc. The second index runs over the g-channel (1 to 16).
12423 #define DM_BCAST_MACRO(A) CALL wrf_dm_bcast_bytes ( A , size ( A ) * RWORDSIZE )
12424 #define DM_BCAST_REAL(A) CALL wrf_dm_bcast_real ( A , 1 )
12425 #define DM_BCAST_INTEGER(A) CALL wrf_dm_bcast_integer ( A , 1 )
12427 IF ( wrf_dm_on_monitor() ) READ (rrtmg_unit,ERR=9010) &
12428 raylao, raylbo, strrat, layreffr, abso3ao, abso3bo, kao, kbo, selfrefo, &
12430 DM_BCAST_MACRO(raylao)
12431 DM_BCAST_MACRO(raylbo)
12432 DM_BCAST_REAL(strrat)
12433 DM_BCAST_INTEGER(layreffr)
12434 DM_BCAST_MACRO(abso3ao)
12435 DM_BCAST_MACRO(abso3bo)
12436 DM_BCAST_MACRO(kao)
12437 DM_BCAST_MACRO(kbo)
12438 DM_BCAST_MACRO(selfrefo)
12439 DM_BCAST_MACRO(forrefo)
12440 DM_BCAST_MACRO(sfluxrefo)
12444 WRITE( errmess , '(A,I4)' ) 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
12445 CALL wrf_error_fatal(errmess)
12447 end subroutine sw_kgb24
12449 ! **************************************************************************
12450 subroutine sw_kgb25(rrtmg_unit)
12451 ! **************************************************************************
12453 use rrsw_kg25, only : kao, sfluxrefo, &
12454 raylo, abso3ao, abso3bo, layreffr
12460 integer, intent(in) :: rrtmg_unit
12463 character*80 errmess
12464 logical, external :: wrf_dm_on_monitor
12466 ! Array sfluxrefo contains the Kurucz solar source function for this band.
12468 ! Array raylo contains the Rayleigh extinction coefficient at all v = 2925 cm-1.
12470 ! Arrays abso3ao and abso3bo contain the ozone absorption coefficient at
12471 ! all v for this band for the upper and lower atmosphere.
12473 ! The array KAO contains absorption coefs at the 16 chosen g-values
12474 ! for a range of pressure levels> ~100mb, temperatures, and binary
12475 ! species parameters (see taumol.f for definition). The first
12476 ! index in the array, JS, runs from 1 to 9, and corresponds to
12477 ! different values of the binary species parameter. For instance,
12478 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
12479 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
12480 ! in the array, JT, which runs from 1 to 5, corresponds to different
12481 ! temperatures. More specifically, JT = 3 means that the data are for
12482 ! the reference temperature TREF for this pressure level, JT = 2 refers
12483 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
12484 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
12485 ! to the JPth reference pressure level (see taumol.f for these levels
12486 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
12487 ! which g-interval the absorption coefficients are for.
12489 #define DM_BCAST_MACRO(A) CALL wrf_dm_bcast_bytes ( A , size ( A ) * RWORDSIZE )
12490 #define DM_BCAST_INTEGER(A) CALL wrf_dm_bcast_integer ( A , 1 )
12492 IF ( wrf_dm_on_monitor() ) READ (rrtmg_unit,ERR=9010) &
12493 raylo, layreffr, abso3ao, abso3bo, kao, sfluxrefo
12494 DM_BCAST_MACRO(raylo)
12495 DM_BCAST_INTEGER(layreffr)
12496 DM_BCAST_MACRO(abso3ao)
12497 DM_BCAST_MACRO(abso3bo)
12498 DM_BCAST_MACRO(kao)
12499 DM_BCAST_MACRO(sfluxrefo)
12503 WRITE( errmess , '(A,I4)' ) 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
12504 CALL wrf_error_fatal(errmess)
12506 end subroutine sw_kgb25
12508 ! **************************************************************************
12509 subroutine sw_kgb26(rrtmg_unit)
12510 ! **************************************************************************
12512 use rrsw_kg26, only : sfluxrefo, raylo
12518 integer, intent(in) :: rrtmg_unit
12521 character*80 errmess
12522 logical, external :: wrf_dm_on_monitor
12524 ! Array sfluxrefo contains the Kurucz solar source function for this band.
12526 ! Array raylo contains the Rayleigh extinction coefficient at all v for this band.
12528 #define DM_BCAST_MACRO(A) CALL wrf_dm_bcast_bytes ( A , size ( A ) * RWORDSIZE )
12530 IF ( wrf_dm_on_monitor() ) READ (rrtmg_unit,ERR=9010) &
12532 DM_BCAST_MACRO(raylo)
12533 DM_BCAST_MACRO(sfluxrefo)
12537 WRITE( errmess , '(A,I4)' ) 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
12538 CALL wrf_error_fatal(errmess)
12540 end subroutine sw_kgb26
12542 ! **************************************************************************
12543 subroutine sw_kgb27(rrtmg_unit)
12544 ! **************************************************************************
12546 use rrsw_kg27, only : kao, kbo, sfluxrefo, raylo, &
12553 integer, intent(in) :: rrtmg_unit
12556 character*80 errmess
12557 logical, external :: wrf_dm_on_monitor
12559 ! Array sfluxrefo contains the Kurucz solar source function for this band.
12560 ! The values in array sfluxrefo were obtained using the "low resolution"
12561 ! version of the Kurucz solar source function. For unknown reasons,
12562 ! the total irradiance in this band differs from the corresponding
12563 ! total in the "high-resolution" version of the Kurucz function.
12564 ! Therefore, these values are scaled by the factor SCALEKUR.
12566 ! Array raylo contains the Rayleigh extinction coefficient at all v = 2925 cm-1.
12568 ! The array KAO contains absorption coefs at the 16 chosen g-values
12569 ! for a range of pressure levels> ~100mb, temperatures, and binary
12570 ! species parameters (see taumol.f for definition). The first
12571 ! index in the array, JS, runs from 1 to 9, and corresponds to
12572 ! different values of the binary species parameter. For instance,
12573 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
12574 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
12575 ! in the array, JT, which runs from 1 to 5, corresponds to different
12576 ! temperatures. More specifically, JT = 3 means that the data are for
12577 ! the reference temperature TREF for this pressure level, JT = 2 refers
12578 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
12579 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
12580 ! to the JPth reference pressure level (see taumol.f for these levels
12581 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
12582 ! which g-interval the absorption coefficients are for.
12584 ! The array KBO contains absorption coefs at the 16 chosen g-values
12585 ! for a range of pressure levels < ~100mb and temperatures. The first
12586 ! index in the array, JT, which runs from 1 to 5, corresponds to
12587 ! different temperatures. More specifically, JT = 3 means that the
12588 ! data are for the reference temperature TREF for this pressure
12589 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
12590 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
12591 ! The second index, JP, runs from 13 to 59 and refers to the JPth
12592 ! reference pressure level (see taumol.f for the value of these
12593 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
12594 ! and tells us which g-interval the absorption coefficients are for.
12596 #define DM_BCAST_MACRO(A) CALL wrf_dm_bcast_bytes ( A , size ( A ) * RWORDSIZE )
12597 #define DM_BCAST_REAL(A) CALL wrf_dm_bcast_real ( A , 1 )
12598 #define DM_BCAST_INTEGER(A) CALL wrf_dm_bcast_integer ( A , 1 )
12600 IF ( wrf_dm_on_monitor() ) READ (rrtmg_unit,ERR=9010) &
12601 raylo, scalekur, layreffr, kao, kbo, sfluxrefo
12602 DM_BCAST_MACRO(raylo)
12603 DM_BCAST_REAL(scalekur)
12604 DM_BCAST_INTEGER(layreffr)
12605 DM_BCAST_MACRO(kao)
12606 DM_BCAST_MACRO(kbo)
12607 DM_BCAST_MACRO(sfluxrefo)
12611 WRITE( errmess , '(A,I4)' ) 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
12612 CALL wrf_error_fatal(errmess)
12614 end subroutine sw_kgb27
12616 ! **************************************************************************
12617 subroutine sw_kgb28(rrtmg_unit)
12618 ! **************************************************************************
12620 use rrsw_kg28, only : kao, kbo, sfluxrefo, &
12621 rayl, strrat, layreffr
12627 integer, intent(in) :: rrtmg_unit
12630 character*80 errmess
12631 logical, external :: wrf_dm_on_monitor
12633 ! Array sfluxrefo contains the Kurucz solar source function for this band.
12635 ! Array raylo contains the Rayleigh extinction coefficient at all v = ???? cm-1.
12637 ! The array KAO contains absorption coefs at the 16 chosen g-values
12638 ! for a range of pressure levels> ~100mb, temperatures, and binary
12639 ! species parameters (see taumol.f for definition). The first
12640 ! index in the array, JS, runs from 1 to 9, and corresponds to
12641 ! different values of the binary species parameter. For instance,
12642 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
12643 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
12644 ! in the array, JT, which runs from 1 to 5, corresponds to different
12645 ! temperatures. More specifically, JT = 3 means that the data are for
12646 ! the reference temperature TREF for this pressure level, JT = 2 refers
12647 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
12648 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
12649 ! to the JPth reference pressure level (see taumol.f for these levels
12650 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
12651 ! which g-interval the absorption coefficients are for.
12653 ! The array KBO contains absorption coefs at the 16 chosen g-values
12654 ! for a range of pressure levels < ~100mb and temperatures. The first
12655 ! index in the array, JT, which runs from 1 to 5, corresponds to
12656 ! different temperatures. More specifically, JT = 3 means that the
12657 ! data are for the reference temperature TREF for this pressure
12658 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
12659 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
12660 ! The second index, JP, runs from 13 to 59 and refers to the JPth
12661 ! reference pressure level (see taumol.f for the value of these
12662 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
12663 ! and tells us which g-interval the absorption coefficients are for.
12665 #define DM_BCAST_MACRO(A) CALL wrf_dm_bcast_bytes ( A , size ( A ) * RWORDSIZE )
12666 #define DM_BCAST_REAL(A) CALL wrf_dm_bcast_real ( A , 1 )
12667 #define DM_BCAST_INTEGER(A) CALL wrf_dm_bcast_integer ( A , 1 )
12669 IF ( wrf_dm_on_monitor() ) READ (rrtmg_unit,ERR=9010) &
12670 rayl, strrat, layreffr, kao, kbo, sfluxrefo
12671 DM_BCAST_REAL(rayl)
12672 DM_BCAST_REAL(strrat)
12673 DM_BCAST_INTEGER(layreffr)
12674 DM_BCAST_MACRO(kao)
12675 DM_BCAST_MACRO(kbo)
12676 DM_BCAST_MACRO(sfluxrefo)
12680 WRITE( errmess , '(A,I4)' ) 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
12681 CALL wrf_error_fatal(errmess)
12683 end subroutine sw_kgb28
12685 ! **************************************************************************
12686 subroutine sw_kgb29(rrtmg_unit)
12687 ! **************************************************************************
12689 use rrsw_kg29, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
12690 absh2oo, absco2o, rayl, layreffr
12696 integer, intent(in) :: rrtmg_unit
12699 character*80 errmess
12700 logical, external :: wrf_dm_on_monitor
12702 ! Array sfluxrefo contains the Kurucz solar source function for this band.
12704 ! Array rayl contains the Rayleigh extinction coefficient at all v = 2200 cm-1.
12706 ! Array absh2oo contains the water vapor absorption coefficient for this band.
12708 ! Array absco2o contains the carbon dioxide absorption coefficient for this band.
12710 ! The array KAO contains absorption coefs at the 16 chosen g-values
12711 ! for a range of pressure levels> ~100mb, temperatures, and binary
12712 ! species parameters (see taumol.f for definition). The first
12713 ! index in the array, JS, runs from 1 to 9, and corresponds to
12714 ! different values of the binary species parameter. For instance,
12715 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
12716 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
12717 ! in the array, JT, which runs from 1 to 5, corresponds to different
12718 ! temperatures. More specifically, JT = 3 means that the data are for
12719 ! the reference temperature TREF for this pressure level, JT = 2 refers
12720 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
12721 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
12722 ! to the JPth reference pressure level (see taumol.f for these levels
12723 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
12724 ! which g-interval the absorption coefficients are for.
12726 ! The array KBO contains absorption coefs at the 16 chosen g-values
12727 ! for a range of pressure levels < ~100mb and temperatures. The first
12728 ! index in the array, JT, which runs from 1 to 5, corresponds to
12729 ! different temperatures. More specifically, JT = 3 means that the
12730 ! data are for the reference temperature TREF for this pressure
12731 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
12732 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
12733 ! The second index, JP, runs from 13 to 59 and refers to the JPth
12734 ! reference pressure level (see taumol.f for the value of these
12735 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
12736 ! and tells us which g-interval the absorption coefficients are for.
12738 ! The array FORREFO contains the coefficient of the water vapor
12739 ! foreign-continuum (including the energy term). The first
12740 ! index refers to reference temperature (296,260,224,260) and
12741 ! pressure (970,475,219,3 mbar) levels. The second index
12742 ! runs over the g-channel (1 to 16).
12744 ! The array SELFREFO contains the coefficient of the water vapor
12745 ! self-continuum (including the energy term). The first index
12746 ! refers to temperature in 7.2 degree increments. For instance,
12747 ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8,
12748 ! etc. The second index runs over the g-channel (1 to 16).
12750 #define DM_BCAST_MACRO(A) CALL wrf_dm_bcast_bytes ( A , size ( A ) * RWORDSIZE )
12751 #define DM_BCAST_REAL(A) CALL wrf_dm_bcast_real ( A , 1 )
12752 #define DM_BCAST_INTEGER(A) CALL wrf_dm_bcast_integer ( A , 1 )
12754 IF ( wrf_dm_on_monitor() ) READ (rrtmg_unit,ERR=9010) &
12755 rayl, layreffr, absh2oo, absco2o, kao, kbo, selfrefo, forrefo, sfluxrefo
12756 DM_BCAST_REAL(rayl)
12757 DM_BCAST_INTEGER(layreffr)
12758 DM_BCAST_MACRO(absh2oo)
12759 DM_BCAST_MACRO(absco2o)
12760 DM_BCAST_MACRO(kao)
12761 DM_BCAST_MACRO(kbo)
12762 DM_BCAST_MACRO(selfrefo)
12763 DM_BCAST_MACRO(forrefo)
12764 DM_BCAST_MACRO(sfluxrefo)
12768 WRITE( errmess , '(A,I4)' ) 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
12769 CALL wrf_error_fatal(errmess)
12771 end subroutine sw_kgb29
12773 !------------------------------------------------------------------
12775 END MODULE module_ra_rrtmg_sw
12776 !***********************************************************************