2 MODULE module_ra_rrtmg_swk
7 END SUBROUTINE rrtmg_sw
8 END MODULE module_ra_rrtmg_swk
11 !-------------------------------------------------------------------------------
13 !-------------------------------------------------------------------------------
14 ! abstract : rrtmg_sw main parameters
17 ! 1998-07 JJMorcrette Initial version
18 ! 2006-06 MJIacono Revised
19 ! 2008-08 MJIacono Revised
22 !-------------------------------------------------------------------------------
25 ! ----- : ---- : -----------------------------------------------------------
26 ! mxlay : integer: maximum number of layers
27 ! mg : integer: number of original g-intervals per spectral band
28 ! nbndsw : integer: number of spectral bands
29 ! naerec : integer: number of aerosols (iaer=6, ecmwf aerosol option)
30 ! ngptsw : integer: total number of reduced g-intervals for rrtmg_lw
31 ! ngNN : integer: number of reduced g-intervals per spectral band
32 ! ngsNN : integer: cumulative number of g-intervals per band
33 !-------------------------------------------------------------------------------
34 use parkind_k , only : im => kind_im, rb => kind_rb
39 integer(kind=im), parameter :: mxlay = 203 !jplay, klev
40 integer(kind=im), parameter :: mg = 16 !jpg
41 integer(kind=im), parameter :: nbndsw = 14 !jpsw, ksw
42 integer(kind=im), parameter :: naerec = 6 !jpaer
43 integer(kind=im), parameter :: mxmol = 38
44 integer(kind=im), parameter :: nstr = 2
45 integer(kind=im), parameter :: nmol = 7
47 ! Use for 112 g-point model
49 integer(kind=im), parameter :: ngptsw = 112 !jpgpt
51 ! Use for 224 g-point model
52 ! integer(kind=im), parameter :: ngptsw = 224 !jpgpt
54 ! may need to rename these - from v2.6
56 integer(kind=im), parameter :: jpband = 29
57 integer(kind=im), parameter :: jpb1 = 16 !istart
58 integer(kind=im), parameter :: jpb2 = 29 !iend
59 integer(kind=im), parameter :: jmcmu = 32
60 integer(kind=im), parameter :: jmumu = 32
61 integer(kind=im), parameter :: jmphi = 3
62 integer(kind=im), parameter :: jmxang = 4
63 integer(kind=im), parameter :: jmxstr = 16
65 ! Use for 112 g-point model
67 integer(kind=im), parameter :: ng16 = 6
68 integer(kind=im), parameter :: ng17 = 12
69 integer(kind=im), parameter :: ng18 = 8
70 integer(kind=im), parameter :: ng19 = 8
71 integer(kind=im), parameter :: ng20 = 10
72 integer(kind=im), parameter :: ng21 = 10
73 integer(kind=im), parameter :: ng22 = 2
74 integer(kind=im), parameter :: ng23 = 10
75 integer(kind=im), parameter :: ng24 = 8
76 integer(kind=im), parameter :: ng25 = 6
77 integer(kind=im), parameter :: ng26 = 6
78 integer(kind=im), parameter :: ng27 = 8
79 integer(kind=im), parameter :: ng28 = 6
80 integer(kind=im), parameter :: ng29 = 12
81 integer(kind=im), parameter :: ngs16 = 6
82 integer(kind=im), parameter :: ngs17 = 18
83 integer(kind=im), parameter :: ngs18 = 26
84 integer(kind=im), parameter :: ngs19 = 34
85 integer(kind=im), parameter :: ngs20 = 44
86 integer(kind=im), parameter :: ngs21 = 54
87 integer(kind=im), parameter :: ngs22 = 56
88 integer(kind=im), parameter :: ngs23 = 66
89 integer(kind=im), parameter :: ngs24 = 74
90 integer(kind=im), parameter :: ngs25 = 80
91 integer(kind=im), parameter :: ngs26 = 86
92 integer(kind=im), parameter :: ngs27 = 94
93 integer(kind=im), parameter :: ngs28 = 100
94 integer(kind=im), parameter :: ngs29 = 112
96 ! Use for 224 g-point model
97 ! integer(kind=im), parameter :: ng16 = 16
98 ! integer(kind=im), parameter :: ng17 = 16
99 ! integer(kind=im), parameter :: ng18 = 16
100 ! integer(kind=im), parameter :: ng19 = 16
101 ! integer(kind=im), parameter :: ng20 = 16
102 ! integer(kind=im), parameter :: ng21 = 16
103 ! integer(kind=im), parameter :: ng22 = 16
104 ! integer(kind=im), parameter :: ng23 = 16
105 ! integer(kind=im), parameter :: ng24 = 16
106 ! integer(kind=im), parameter :: ng25 = 16
107 ! integer(kind=im), parameter :: ng26 = 16
108 ! integer(kind=im), parameter :: ng27 = 16
109 ! integer(kind=im), parameter :: ng28 = 16
110 ! integer(kind=im), parameter :: ng29 = 16
112 ! integer(kind=im), parameter :: ngs16 = 16
113 ! integer(kind=im), parameter :: ngs17 = 32
114 ! integer(kind=im), parameter :: ngs18 = 48
115 ! integer(kind=im), parameter :: ngs19 = 64
116 ! integer(kind=im), parameter :: ngs20 = 80
117 ! integer(kind=im), parameter :: ngs21 = 96
118 ! integer(kind=im), parameter :: ngs22 = 112
119 ! integer(kind=im), parameter :: ngs23 = 128
120 ! integer(kind=im), parameter :: ngs24 = 144
121 ! integer(kind=im), parameter :: ngs25 = 160
122 ! integer(kind=im), parameter :: ngs26 = 176
123 ! integer(kind=im), parameter :: ngs27 = 192
124 ! integer(kind=im), parameter :: ngs28 = 208
125 ! integer(kind=im), parameter :: ngs29 = 224
127 ! Source function solar constant
129 real(kind=rb), parameter :: rrsw_scon = 1.36822e+03 ! W/m2
130 !-------------------------------------------------------------------------------
132 !-------------------------------------------------------------------------------
135 !-------------------------------------------------------------------------------
137 !-------------------------------------------------------------------------------
139 ! rrtmg_sw aerosol optical properties
140 ! Data derived from six ECMWF aerosol types and defined for
141 ! the rrtmg_sw spectral intervals
144 ! 2003-03 J.-J. Morcrette, ECMWF Initial
145 ! 2006-07 MJIacono Revised
146 ! 2008-08 MJIacono Revised
147 !-------------------------------------------------------------------------------
149 !-- The six ECMWF aerosol types ar e respectively:
151 ! 1/ continental average 2/ maritime
153 ! 5/ volcanic active 6/ stratospheric background
155 ! computed from Hess and Koepke (con, mar, des, urb)
156 ! from Bonnel et al. (vol, str)
158 ! rrtmg_sw 14 spectral intervals (microns):
174 !-------------------------------------------------------------------------------
177 ! ----- : ---- : ----------------------------------------------
178 ! rsrtaua : real : ratio of average optical thickness in
179 ! spectral band to that at 0.55 micron
180 ! rsrpiza : real : average single scattering albedo (unitless)
181 ! rsrasya : real : average asymmetry parameter (unitless)
182 !-------------------------------------------------------------------------------
183 use parkind_k, only : im => kind_im, rb => kind_rb
184 use parrrsw_k, only : nbndsw, naerec
189 real(kind=rb), dimension(nbndsw,naerec) :: rsrtaua
190 real(kind=rb), dimension(nbndsw,naerec) :: rsrpiza
191 real(kind=rb), dimension(nbndsw,naerec) :: rsrasya
192 !-------------------------------------------------------------------------------
193 end module rrsw_aer_k
194 !-------------------------------------------------------------------------------
197 !-------------------------------------------------------------------------------
199 !-------------------------------------------------------------------------------
201 ! rrtmg_sw cloud property coefficients
204 ! 1999-08 J.-J. Morcrette, ECMWF Initial
205 ! 2005-08 J. Delamere/MJIacono, AER, Revised
206 ! 2005-11 MJIacono, AER Revised
207 ! 2008-08 MJIacono, AER Revised
208 !-------------------------------------------------------------------------------
211 ! ----- : ---- : --------------------------------------------------------
212 ! xxxliq1 : real : optical properties (extinction coefficient, single
213 ! scattering albedo, assymetry factor) from
214 ! Hu & Stamnes, j. clim., 6, 728-742, 1993.
215 ! xxxice2 : real : optical properties (extinction coefficient, single
216 ! scattering albedo, assymetry factor) from streamer v3.0,
217 ! Key, streamer user's guide, cooperative institude
218 ! for meteorological studies, 95 pp., 2001.
219 ! xxxice3 : real : optical properties (extinction coefficient, single
220 ! scattering albedo, assymetry factor) from
221 ! Fu, j. clim., 9, 1996.
222 ! xbari : real : optical property coefficients for five spectral
223 ! intervals (2857-4000, 4000-5263, 5263-7692, 7692-14285,
224 ! and 14285-40000 wavenumbers) following
225 ! Ebert and Curry, jgr, 97, 3831-3836, 1992.
226 !-------------------------------------------------------------------------------
227 use parkind_k, only : im => kind_im, rb => kind_rb
232 real(kind=rb), dimension(58,16:29) :: extliq1, ssaliq1, asyliq1
233 real(kind=rb), dimension(43,16:29) :: extice2, ssaice2, asyice2
234 real(kind=rb), dimension(46,16:29) :: extice3, ssaice3, asyice3
235 real(kind=rb), dimension(46,16:29) :: fdlice3
236 real(kind=rb), dimension(5) :: abari, bbari, cbari, dbari, ebari, fbari
237 !-------------------------------------------------------------------------------
238 end module rrsw_cld_k
239 !-------------------------------------------------------------------------------
242 !-------------------------------------------------------------------------------
244 !-------------------------------------------------------------------------------
249 ! 2006-06 MJIacono AER Initial
250 ! 2008-08 MJIacono AER Revised
251 !-------------------------------------------------------------------------------
253 ! ----- : ---- : -----------------------------------------------------------
254 ! fluxfac: real : radiance to flux conversion factor
255 ! heatfac: real : flux to heating rate conversion factor
256 !oneminus: real : 1.-1.e-6
258 ! grav : real : acceleration of gravity
259 ! planck : real : planck constant
260 ! boltz : real : boltzmann constant
261 ! clight : real : speed of light
262 ! avogad : real : avogadro constant
263 ! alosmt : real : loschmidt constant
264 ! gascon : real : molar gas constant
265 ! radcn1 : real : first radiation constant
266 ! radcn2 : real : second radiation constant
267 ! sbcnst : real : stefan-boltzmann constant
268 ! secdy : real : seconds per day
269 !-------------------------------------------------------------------------------
270 use parkind_k, only : im => kind_im, rb => kind_rb
275 real(kind=rb) :: fluxfac, heatfac
276 real(kind=rb) :: oneminus, pi, grav
277 real(kind=rb) :: planck, boltz, clight
278 real(kind=rb) :: avogad, alosmt, gascon
279 real(kind=rb) :: radcn1, radcn2
280 real(kind=rb) :: sbcnst, secdy
281 !-------------------------------------------------------------------------------
282 end module rrsw_con_k
283 !-------------------------------------------------------------------------------
287 !-------------------------------------------------------------------------------
289 !-------------------------------------------------------------------------------
291 ! rrtmg_sw ORIGINAL abs. coefficients for interval 16
292 ! band 16: 2600-3250 cm-1 (low - h2o,ch4; high - ch4)
295 ! 1999-10 JJMorcrette Initial version
296 ! 2006-07 MJIacono Revised, AER
297 ! 2008-08 MJIacono Revised, AER
298 !-------------------------------------------------------------------------------
301 ! ---- : ---- : ---------------------------------------------
307 !-------------------------------------------------------------------------------
308 ! rrtmg_sw COMBINED abs. coefficients for interval 16
309 ! band 16: 2600-3250 cm-1 (low - h2o,ch4; high - ch4)
311 ! Initial version: JJMorcrette, ECMWF, oct1999
312 ! Revised: MJIacono, AER, jul2006
313 ! Revised: MJIacono, AER, aug2008
314 !-------------------------------------------------------------------------------
317 ! ---- : ---- : ---------------------------------------------
325 !-------------------------------------------------------------------------------
326 use parkind_k, only : im => kind_im, rb => kind_rb
327 use parrrsw_k, only : ng16
332 integer(kind=im), parameter :: no16 = 16
333 real(kind=rb), dimension(9,5,13,no16) :: kao
334 real(kind=rb), dimension(5,13:59,no16):: kbo
335 real(kind=rb), dimension(10,no16) :: selfrefo
336 real(kind=rb), dimension(3,no16) :: forrefo
337 real(kind=rb), dimension(no16) :: sfluxrefo
338 integer(kind=im) :: layreffr
339 real(kind=rb) :: rayl, strrat1
341 real(kind=rb), dimension(9,5,13,ng16) :: ka
342 real(kind=rb), dimension(585,ng16) :: absa
343 real(kind=rb), dimension(5,13:59,ng16):: kb
344 real(kind=rb), dimension(235,ng16) :: absb
345 real(kind=rb), dimension(10,ng16) :: selfref
346 real(kind=rb), dimension(3,ng16) :: forref
347 real(kind=rb), dimension(ng16) :: sfluxref
349 equivalence (ka(1,1,1,1),absa(1,1)), (kb(1,13,1),absb(1,1))
350 !-------------------------------------------------------------------------------
351 end module rrsw_kg16_k
352 !-------------------------------------------------------------------------------
355 !-------------------------------------------------------------------------------
357 !-------------------------------------------------------------------------------
359 ! rrtmg_sw ORIGINAL abs. coefficients for interval 17
360 ! band 17: 3250-4000 cm-1 (low - h2o,co2; high - h2o,co2)
363 ! 1999-10 JJMorcrette Initial version
364 ! 2006-07 MJIacono Revised, AER
365 ! 2008-08 MJIacono Revised, AER
366 !-----------------------------------------------------------------
369 ! ---- : ---- : ---------------------------------------------
375 !-------------------------------------------------------------------------------
376 ! rrtmg_sw COMBINED abs. coefficients for interval 17
377 ! band 17: 3250-4000 cm-1 (low - h2o,co2; high - h2o,co2)
379 ! Initial version: JJMorcrette, ECMWF, oct1999
380 ! Revised: MJIacono, AER, jul2006
381 ! Revised: MJIacono, AER, aug2008
382 !-------------------------------------------------------------------------------
385 ! ---- : ---- : ---------------------------------------------
393 !-------------------------------------------------------------------------------
394 use parkind_k, only : im => kind_im, rb => kind_rb
395 use parrrsw_k, only : ng17
396 !-------------------------------------------------------------------------------
401 integer(kind=im), parameter :: no17 = 16
403 real(kind=rb), dimension(9,5,13,no17) :: kao
404 real(kind=rb), dimension(5,5,13:59,no17):: kbo
405 real(kind=rb), dimension(10,no17) :: selfrefo
406 real(kind=rb), dimension(4,no17) :: forrefo
407 real(kind=rb), dimension(no17,5) :: sfluxrefo
409 integer(kind=im) :: layreffr
410 real(kind=rb) :: rayl, strrat
412 real(kind=rb), dimension(9,5,13,ng17) :: ka
413 real(kind=rb), dimension(585,ng17) :: absa
414 real(kind=rb), dimension(5,5,13:59,ng17):: kb
415 real(kind=rb), dimension(1175,ng17) :: absb
416 real(kind=rb), dimension(10,ng17) :: selfref
417 real(kind=rb), dimension(4,ng17) :: forref
418 real(kind=rb), dimension(ng17,5) :: sfluxref
420 equivalence (ka(1,1,1,1),absa(1,1)), (kb(1,1,13,1),absb(1,1))
421 !-------------------------------------------------------------------------------
422 end module rrsw_kg17_k
423 !-------------------------------------------------------------------------------
426 !-------------------------------------------------------------------------------
428 !-------------------------------------------------------------------------------
430 ! rrtmg_sw ORIGINAL abs. coefficients for interval 18
431 ! band 18: 4000-4650 cm-1 (low - h2o,ch4; high - ch4)
434 ! 1999-10 JJMorcrette Initial version
435 ! 2006-07 MJIacono Revised, AER
436 ! 2008-08 MJIacono Revised, AER
437 !-------------------------------------------------------------------------------
440 ! ---- : ---- : ---------------------------------------------
446 !-------------------------------------------------------------------------------
447 ! rrtmg_sw COMBINED abs. coefficients for interval 18
448 ! band 18: 4000-4650 cm-1 (low - h2o,ch4; high - ch4)
450 ! Initial version: JJMorcrette, ECMWF, oct1999
451 ! Revised: MJIacono, AER, jul2006
452 ! Revised: MJIacono, AER, aug2008
453 !-------------------------------------------------------------------------------
456 ! ---- : ---- : ---------------------------------------------
464 !-------------------------------------------------------------------------------
465 use parkind_k, only : im => kind_im, rb => kind_rb
466 use parrrsw_k, only : ng18
471 integer(kind=im), parameter :: no18 = 16
473 real(kind=rb), dimension(9,5,13,no18) :: kao
474 real(kind=rb), dimension(5,13:59,no18) :: kbo
475 real(kind=rb), dimension(10,no18) :: selfrefo
476 real(kind=rb), dimension(3,no18) :: forrefo
477 real(kind=rb), dimension(no18,9) :: sfluxrefo
479 integer(kind=im) :: layreffr
480 real(kind=rb) :: rayl, strrat
482 real(kind=rb), dimension(9,5,13,ng18) :: ka
483 real(kind=rb), dimension(585,ng18) :: absa
484 real(kind=rb), dimension(5,13:59,ng18) :: kb
485 real(kind=rb), dimension(235,ng18) :: absb
486 real(kind=rb), dimension(10,ng18) :: selfref
487 real(kind=rb), dimension(3,ng18) :: forref
488 real(kind=rb), dimension(ng18,9) :: sfluxref
489 equivalence (ka(1,1,1,1),absa(1,1)), (kb(1,13,1),absb(1,1))
490 !-------------------------------------------------------------------------------
491 end module rrsw_kg18_k
492 !-------------------------------------------------------------------------------
495 !-------------------------------------------------------------------------------
497 !-------------------------------------------------------------------------------
499 ! rrtmg_sw ORIGINAL abs. coefficients for interval 19
500 ! band 19: 4650-5150 cm-1 (low - h2o,co2; high - co2)
503 ! 1999-10 JJMorcrette Initial version
504 ! 2006-07 MJIacono Revised, AER
505 ! 2008-08 MJIacono Revised, AER
506 !-------------------------------------------------------------------------------
509 ! ---- : ---- : ---------------------------------------------
515 !-------------------------------------------------------------------------------
516 ! rrtmg_sw COMBINED abs. coefficients for interval 19
517 ! band 19: 4650-5150 cm-1 (low - h2o,co2; high - co2)
519 ! Initial version: JJMorcrette, ECMWF, oct1999
520 ! Revised: MJIacono, AER, jul2006
521 ! Revised: MJIacono, AER, aug2008
522 !-------------------------------------------------------------------------------
525 ! ---- : ---- : ---------------------------------------------
533 !-------------------------------------------------------------------------------
534 use parkind_k, only : im => kind_im, rb => kind_rb
535 use parrrsw_k, only : ng19
540 integer(kind=im), parameter :: no19 = 16
542 real(kind=rb), dimension(9,5,13,no19) :: kao
543 real(kind=rb), dimension(5,13:59,no19) :: kbo
544 real(kind=rb), dimension(10,no19) :: selfrefo
545 real(kind=rb), dimension(3,no19) :: forrefo
546 real(kind=rb), dimension(no19,9) :: sfluxrefo
548 integer(kind=im) :: layreffr
549 real(kind=rb) :: rayl, strrat
551 real(kind=rb), dimension(9,5,13,ng19) :: ka
552 real(kind=rb), dimension(585,ng19) :: absa
553 real(kind=rb), dimension(5,13:59,ng19) :: kb
554 real(kind=rb), dimension(235,ng19) :: absb
555 real(kind=rb), dimension(10,ng19) :: selfref
556 real(kind=rb), dimension(3,ng19) :: forref
557 real(kind=rb), dimension(ng19,9) :: sfluxref
558 equivalence (ka(1,1,1,1),absa(1,1)), (kb(1,13,1),absb(1,1))
559 !-------------------------------------------------------------------------------
560 end module rrsw_kg19_k
561 !-------------------------------------------------------------------------------
564 !-------------------------------------------------------------------------------
566 !-------------------------------------------------------------------------------
568 ! rrtmg_sw ORIGINAL abs. coefficients for interval 20
569 ! band 20: 5150-6150 cm-1 (low - h2o; high - h2o)
572 ! 1999-10 JJMorcrette Initial version
573 ! 2006-07 MJIacono Revised, AER
574 ! 2008-08 MJIacono Revised, AER
575 !-------------------------------------------------------------------------------
578 ! ---- : ---- : ---------------------------------------------
585 !-------------------------------------------------------------------------------
586 ! rrtmg_sw COMBINED abs. coefficients for interval 20
587 ! band 20: 5150-6150 cm-1 (low - h2o; high - h2o)
589 ! Initial version: JJMorcrette, ECMWF, oct1999
590 ! Revised: MJIacono, AER, jul2006
591 ! Revised: MJIacono, AER, aug2008
592 !-------------------------------------------------------------------------------
595 ! ---- : ---- : ---------------------------------------------
604 !-------------------------------------------------------------------------------
605 use parkind_k, only : im => kind_im, rb => kind_rb
606 use parrrsw_k, only : ng20
611 integer(kind=im), parameter :: no20 = 16
613 real(kind=rb), dimension(5,13,no20) :: kao
614 real(kind=rb), dimension(5,13:59,no20) :: kbo
615 real(kind=rb), dimension(10,no20) :: selfrefo
616 real(kind=rb), dimension(4,no20) :: forrefo
617 real(kind=rb), dimension(no20) :: sfluxrefo
618 real(kind=rb), dimension(no20) :: absch4o
620 integer(kind=im) :: layreffr
621 real(kind=rb) :: rayl, strrat
623 real(kind=rb), dimension(5,13,ng20) :: ka
624 real(kind=rb), dimension(65,ng20) :: absa
625 real(kind=rb), dimension(5,13:59,ng20) :: kb
626 real(kind=rb), dimension(235,ng20) :: absb
627 real(kind=rb), dimension(10,ng20) :: selfref
628 real(kind=rb), dimension(4,ng20) :: forref
629 real(kind=rb), dimension(ng20) :: sfluxref
630 real(kind=rb), dimension(no20) :: absch4
631 equivalence (ka(1,1,1),absa(1,1)), (kb(1,13,1),absb(1,1))
632 !-------------------------------------------------------------------------------
633 end module rrsw_kg20_k
634 !-------------------------------------------------------------------------------
637 !-------------------------------------------------------------------------------
639 !-------------------------------------------------------------------------------
641 ! rrtmg_sw ORIGINAL abs. coefficients for interval 21
642 ! band 21: 6150-7700 cm-1 (low - h2o,co2; high - h2o,co2)
645 ! 1999-10 JJMorcrette Initial version
646 ! 2006-07 MJIacono Revised, AER
647 ! 2008-08 MJIacono Revised, AER
648 !-------------------------------------------------------------------------------
651 ! ---- : ---- : ---------------------------------------------
657 !-------------------------------------------------------------------------------
658 ! rrtmg_sw COMBINED abs. coefficients for interval 21
659 ! band 21: 6150-7700 cm-1 (low - h2o,co2; high - h2o,co2)
661 ! Initial version: JJMorcrette, ECMWF, oct1999
662 ! Revised: MJIacono, AER, jul2006
663 ! Revised: MJIacono, AER, aug2008
664 !-------------------------------------------------------------------------------
667 ! ---- : ---- : ---------------------------------------------
675 !-------------------------------------------------------------------------------
676 use parkind_k, only : im => kind_im, rb => kind_rb
677 use parrrsw_k, only : ng21
682 integer(kind=im), parameter :: no21 = 16
684 real(kind=rb), dimension(9,5,13,no21) :: kao
685 real(kind=rb), dimension(5,5,13:59,no21) :: kbo
686 real(kind=rb), dimension(10,no21) :: selfrefo
687 real(kind=rb), dimension(4,no21) :: forrefo
688 real(kind=rb), dimension(no21,9) :: sfluxrefo
690 integer(kind=im) :: layreffr
691 real(kind=rb) :: rayl, strrat
693 real(kind=rb), dimension(9,5,13,ng21) :: ka
694 real(kind=rb), dimension(585,ng21) :: absa
695 real(kind=rb), dimension(5,5,13:59,ng21) :: kb
696 real(kind=rb), dimension(1175,ng21) :: absb
697 real(kind=rb), dimension(10,ng21) :: selfref
698 real(kind=rb), dimension(4,ng21) :: forref
699 real(kind=rb), dimension(ng21,9) :: sfluxref
700 equivalence (ka(1,1,1,1),absa(1,1)), (kb(1,1,13,1),absb(1,1))
701 !-------------------------------------------------------------------------------
702 end module rrsw_kg21_k
703 !-------------------------------------------------------------------------------
706 !-------------------------------------------------------------------------------
708 !-------------------------------------------------------------------------------
710 ! rrtmg_sw ORIGINAL abs. coefficients for interval 22
711 ! band 22: 7700-8050 cm-1 (low - h2o,o2; high - o2)
714 ! 1999-10 JJMorcrette Initial version
715 ! 2006-07 MJIacono Revised, AER
716 ! 2008-08 MJIacono Revised, AER
717 !-------------------------------------------------------------------------------
720 ! ---- : ---- : ---------------------------------------------
726 !-------------------------------------------------------------------------------
727 ! rrtmg_sw ORIGINAL abs. coefficients for interval 22
728 ! band 22: 7700-8050 cm-1 (low - h2o,o2; high - o2)
730 ! Initial version: JJMorcrette, ECMWF, oct1999
731 ! Revised: MJIacono, AER, jul2006
732 ! Revised: MJIacono, AER, aug2008
733 !-------------------------------------------------------------------------------
736 ! ---- : ---- : ---------------------------------------------
742 !-------------------------------------------------------------------------------
743 use parkind_k, only : im => kind_im, rb => kind_rb
744 use parrrsw_k, only : ng22
749 integer(kind=im), parameter :: no22 = 16
751 real(kind=rb), dimension(9,5,13,no22) :: kao
752 real(kind=rb), dimension(5,13:59,no22) :: kbo
753 real(kind=rb), dimension(10,no22) :: selfrefo
754 real(kind=rb), dimension(3,no22) :: forrefo
755 real(kind=rb), dimension(no22,9) :: sfluxrefo
757 integer(kind=im) :: layreffr
758 real(kind=rb) :: rayl, strrat
760 real(kind=rb), dimension(9,5,13,ng22) :: ka
761 real(kind=rb), dimension(585,ng22) :: absa
762 real(kind=rb), dimension(5,13:59,ng22) :: kb
763 real(kind=rb), dimension(235,ng22) :: absb
764 real(kind=rb), dimension(10,ng22) :: selfref
765 real(kind=rb), dimension(3,ng22) :: forref
766 real(kind=rb), dimension(ng22,9) :: sfluxref
767 equivalence (ka(1,1,1,1),absa(1,1)), (kb(1,13,1),absb(1,1))
768 !-------------------------------------------------------------------------------
769 end module rrsw_kg22_k
770 !-------------------------------------------------------------------------------
773 !-------------------------------------------------------------------------------
775 !-------------------------------------------------------------------------------
777 ! rrtmg_sw ORIGINAL abs. coefficients for interval 23
778 ! band 23: 8050-12850 cm-1 (low - h2o; high - nothing)
781 ! 1999-10 JJMorcrette Initial version
782 ! 2006-07 MJIacono Revised, AER
783 ! 2008-08 MJIacono Revised, AER
784 !-------------------------------------------------------------------------------
787 ! ---- : ---- : ---------------------------------------------
793 !-------------------------------------------------------------------------------
794 ! rrtmg_sw COMBINED abs. coefficients for interval 23
795 ! band 23: 8050-12850 cm-1 (low - h2o; high - nothing)
797 ! Initial version: JJMorcrette, ECMWF, oct1999
798 ! Revised: MJIacono, AER, jul2006
799 ! Revised: MJIacono, AER, aug2008
800 !-------------------------------------------------------------------------------
803 ! ---- : ---- : ---------------------------------------------
811 !-------------------------------------------------------------------------------
812 use parkind_k, only : im => kind_im, rb => kind_rb
813 use parrrsw_k, only : ng23
818 integer(kind=im), parameter :: no23 = 16
820 real(kind=rb), dimension(5,13,no23) :: kao
821 real(kind=rb), dimension(10,no23) :: selfrefo
822 real(kind=rb), dimension(3,no23) :: forrefo
823 real(kind=rb), dimension(no23) :: sfluxrefo
824 real(kind=rb), dimension(no23) :: raylo
826 integer(kind=im) :: layreffr
827 real(kind=rb) :: givfac
829 real(kind=rb), dimension(5,13,ng23) :: ka
830 real(kind=rb), dimension(65,ng23) :: absa
831 real(kind=rb), dimension(10,ng23) :: selfref
832 real(kind=rb), dimension(3,ng23) :: forref
833 real(kind=rb), dimension(ng23) :: sfluxref
834 real(kind=rb), dimension(no23) :: rayl
835 equivalence (ka(1,1,1),absa(1,1))
836 !-------------------------------------------------------------------------------
837 end module rrsw_kg23_k
838 !-------------------------------------------------------------------------------
841 !-------------------------------------------------------------------------------
843 !-------------------------------------------------------------------------------
845 ! rrtmg_sw ORIGINAL abs. coefficients for interval 24
846 ! band 24: 12850-16000 cm-1 (low - h2o,o2; high - o2)
849 ! 1999-10 JJMorcrette Initial version
850 ! 2006-07 MJIacono Revised, AER
851 ! 2008-08 MJIacono Revised, AER
852 !-------------------------------------------------------------------------------
855 ! ---- : ---- : ---------------------------------------------
865 !-------------------------------------------------------------------------------
866 ! rrtmg_sw COMBINED abs. coefficients for interval 24
867 ! band 24: 12850-16000 cm-1 (low - h2o,o2; high - o2)
869 ! Initial version: JJMorcrette, ECMWF, oct1999
870 ! Revised: MJIacono, AER, jul2006
871 ! Revised: MJIacono, AER, aug2008
872 !-------------------------------------------------------------------------------
875 ! ---- : ---- : ---------------------------------------------
887 !-------------------------------------------------------------------------------
888 use parkind_k, only : im => kind_im, rb => kind_rb
889 use parrrsw_k, only : ng24
894 integer(kind=im), parameter :: no24 = 16
896 real(kind=rb), dimension(9,5,13,no24) :: kao
897 real(kind=rb), dimension(5,13:59,no24) :: kbo
898 real(kind=rb), dimension(10,no24) :: selfrefo
899 real(kind=rb), dimension(3,no24) :: forrefo
900 real(kind=rb), dimension(no24,9) :: sfluxrefo
901 real(kind=rb), dimension(no24) :: abso3ao
902 real(kind=rb), dimension(no24) :: abso3bo
903 real(kind=rb), dimension(no24,9) :: raylao
904 real(kind=rb), dimension(no24) :: raylbo
906 integer(kind=im) :: layreffr
907 real(kind=rb) :: strrat
909 real(kind=rb), dimension(9,5,13,ng24) :: ka
910 real(kind=rb), dimension(585,ng24) :: absa
911 real(kind=rb), dimension(5,13:59,ng24) :: kb
912 real(kind=rb), dimension(235,ng24) :: absb
913 real(kind=rb), dimension(10,ng24) :: selfref
914 real(kind=rb), dimension(3,ng24) :: forref
915 real(kind=rb), dimension(ng24,9) :: sfluxref
916 real(kind=rb), dimension(ng24) :: abso3a
917 real(kind=rb), dimension(ng24) :: abso3b
918 real(kind=rb), dimension(ng24,9) :: rayla
919 real(kind=rb), dimension(ng24) :: raylb
920 equivalence (ka(1,1,1,1),absa(1,1)), (kb(1,13,1),absb(1,1))
921 !-------------------------------------------------------------------------------
922 end module rrsw_kg24_k
923 !-------------------------------------------------------------------------------
926 !-------------------------------------------------------------------------------
928 !-------------------------------------------------------------------------------
930 ! rrtmg_sw ORIGINAL abs. coefficients for interval 25
931 ! band 25: 16000-22650 cm-1 (low - h2o; high - nothing)
934 ! 1999-10 JJMorcrette Initial version
935 ! 2006-07 MJIacono Revised, AER
936 ! 2008-08 MJIacono Revised, AER
937 !-------------------------------------------------------------------------------
940 ! ---- : ---- : ---------------------------------------------
946 !-------------------------------------------------------------------------------
947 ! rrtmg_sw COMBINED abs. coefficients for interval 25
948 ! band 25: 16000-22650 cm-1 (low - h2o; high - nothing)
950 ! Initial version: JJMorcrette, ECMWF, oct1999
951 ! Revised: MJIacono, AER, jul2006
952 ! Revised: MJIacono, AER, aug2008
953 !-------------------------------------------------------------------------------
956 ! ---- : ---- : ---------------------------------------------
963 !-------------------------------------------------------------------------------
964 use parkind_k, only : im => kind_im, rb => kind_rb
965 use parrrsw_k, only : ng25
970 integer(kind=im), parameter :: no25 = 16
972 real(kind=rb), dimension(5,13,no25) :: kao
973 real(kind=rb), dimension(no25) :: sfluxrefo
974 real(kind=rb), dimension(no25) :: abso3ao
975 real(kind=rb), dimension(no25) :: abso3bo
976 real(kind=rb), dimension(no25) :: raylo
978 integer(kind=im) :: layreffr
980 real(kind=rb), dimension(5,13,ng25) :: ka
981 real(kind=rb), dimension(65,ng25) :: absa
982 real(kind=rb), dimension(ng25) :: sfluxref
983 real(kind=rb), dimension(ng25) :: abso3a
984 real(kind=rb), dimension(ng25) :: abso3b
985 real(kind=rb), dimension(ng25) :: rayl
986 equivalence (ka(1,1,1),absa(1,1))
987 !-------------------------------------------------------------------------------
988 end module rrsw_kg25_k
989 !-------------------------------------------------------------------------------
992 !-------------------------------------------------------------------------------
994 !-------------------------------------------------------------------------------
996 ! rrtmg_sw ORIGINAL abs. coefficients for interval 26
997 ! band 26: 22650-29000 cm-1 (low - nothing; high - nothing)
1000 ! 1999-10 JJMorcrette Initial version
1001 ! 2006-07 MJIacono Revised, AER
1002 ! 2008-08 MJIacono Revised, AER
1003 !-------------------------------------------------------------------------------
1006 ! ---- : ---- : ---------------------------------------------
1009 !-------------------------------------------------------------------------------
1010 ! rrtmg_sw COMBINED abs. coefficients for interval 26
1011 ! band 26: 22650-29000 cm-1 (low - nothing; high - nothing)
1013 ! Initial version: JJMorcrette, ECMWF, oct1999
1014 ! Revised: MJIacono, AER, jul2006
1015 ! Revised: MJIacono, AER, aug2008
1016 !-------------------------------------------------------------------------------
1019 ! ---- : ---- : ---------------------------------------------
1022 !-------------------------------------------------------------------------------
1023 use parkind_k, only : im => kind_im, rb => kind_rb
1024 use parrrsw_k, only : ng26
1029 integer(kind=im), parameter :: no26 = 16
1031 real(kind=rb), dimension(no26) :: sfluxrefo
1032 real(kind=rb), dimension(no26) :: raylo
1034 real(kind=rb), dimension(ng26) :: sfluxref
1035 real(kind=rb), dimension(ng26) :: rayl
1036 !-------------------------------------------------------------------------------
1037 end module rrsw_kg26_k
1038 !-------------------------------------------------------------------------------
1041 !-------------------------------------------------------------------------------
1043 !-------------------------------------------------------------------------------
1045 ! rrtmg_sw ORIGINAL abs. coefficients for interval 27
1046 ! band 27: 29000-38000 cm-1 (low - o3; high - o3)
1049 ! 1999-10 JJMorcrette Initial version
1050 ! 2006-07 MJIacono Revised, AER
1051 ! 2008-08 MJIacono Revised, AER
1052 !-------------------------------------------------------------------------------
1055 ! ---- : ---- : ---------------------------------------------
1060 !-------------------------------------------------------------------------------
1061 ! rrtmg_sw COMBINED abs. coefficients for interval 27
1062 ! band 27: 29000-38000 cm-1 (low - o3; high - o3)
1064 ! Initial version: JJMorcrette, ECMWF, oct1999
1065 ! Revised: MJIacono, AER, jul2006
1066 ! Revised: MJIacono, AER, aug2008
1067 !-------------------------------------------------------------------------------
1070 ! ---- : ---- : ---------------------------------------------
1077 !-------------------------------------------------------------------------------
1078 use parkind_k, only : im => kind_im, rb => kind_rb
1079 use parrrsw_k, only : ng27
1084 integer(kind=im), parameter :: no27 = 16
1086 real(kind=rb), dimension(5,13,no27) :: kao
1087 real(kind=rb), dimension(5,13:59,no27) :: kbo
1088 real(kind=rb), dimension(no27) :: sfluxrefo
1089 real(kind=rb), dimension(no27) :: raylo
1091 integer(kind=im) :: layreffr
1092 real(kind=rb) :: scalekur
1094 real(kind=rb), dimension(5,13,ng27) :: ka
1095 real(kind=rb), dimension(65,ng27) :: absa
1096 real(kind=rb), dimension(5,13:59,ng27) :: kb
1097 real(kind=rb), dimension(235,ng27) :: absb
1098 real(kind=rb), dimension(ng27) :: sfluxref
1099 real(kind=rb), dimension(ng27) :: rayl
1101 equivalence (ka(1,1,1),absa(1,1)), (kb(1,13,1),absb(1,1))
1102 !-------------------------------------------------------------------------------
1103 end module rrsw_kg27_k
1104 !-------------------------------------------------------------------------------
1107 !-------------------------------------------------------------------------------
1109 !-------------------------------------------------------------------------------
1111 ! rrtmg_sw ORIGINAL abs. coefficients for interval 28
1112 ! band 28: 38000-50000 cm-1 (low - o3, o2; high - o3, o2)
1115 ! 1999-10 JJMorcrette Initial version
1116 ! 2006-07 MJIacono Revised, AER
1117 ! 2008-08 MJIacono Revised, AER
1118 !-------------------------------------------------------------------------------
1121 ! ---- : ---- : ---------------------------------------------
1125 !-------------------------------------------------------------------------------
1126 ! rrtmg_sw COMBINED abs. coefficients for interval 28
1127 ! band 28: 38000-50000 cm-1 (low - o3, o2; high - o3, o2)
1129 ! Initial version: JJMorcrette, ECMWF, oct1999
1130 ! Revised: MJIacono, AER, jul2006
1131 ! Revised: MJIacono, AER, aug2008
1132 !-------------------------------------------------------------------------------
1135 ! ---- : ---- : ---------------------------------------------
1139 !-------------------------------------------------------------------------------
1140 use parkind_k, only : im => kind_im, rb => kind_rb
1141 use parrrsw_k, only : ng28
1146 integer(kind=im), parameter :: no28 = 16
1148 real(kind=rb), dimension(9,5,13,no28) :: kao
1149 real(kind=rb), dimension(5,5,13:59,no28) :: kbo
1150 real(kind=rb), dimension(no28,5) :: sfluxrefo
1152 integer(kind=im) :: layreffr
1153 real(kind=rb) :: rayl, strrat
1155 real(kind=rb), dimension(9,5,13,ng28) :: ka
1156 real(kind=rb), dimension(585,ng28) :: absa
1157 real(kind=rb), dimension(5,5,13:59,ng28) :: kb
1158 real(kind=rb), dimension(1175,ng28) :: absb
1159 real(kind=rb), dimension(ng28,5) :: sfluxref
1160 equivalence (ka(1,1,1,1),absa(1,1)), (kb(1,1,13,1),absb(1,1))
1161 !-------------------------------------------------------------------------------
1162 end module rrsw_kg28_k
1163 !-------------------------------------------------------------------------------
1166 !-------------------------------------------------------------------------------
1168 !-------------------------------------------------------------------------------
1170 ! rrtmg_sw ORIGINAL abs. coefficients for interval 29
1171 ! band 29: 820-2600 cm-1 (low - h2o; high - co2)
1174 ! 1999-10 JJMorcrette Initial version
1175 ! 2006-07 MJIacono Revised, AER
1176 ! 2008-08 MJIacono Revised, AER
1177 !-------------------------------------------------------------------------------
1180 ! ---- : ---- : ---------------------------------------------
1188 !-------------------------------------------------------------------------------
1189 ! rrtmg_sw COMBINED abs. coefficients for interval 29
1190 ! band 29: 820-2600 cm-1 (low - h2o; high - co2)
1192 ! Initial version: JJMorcrette, ECMWF, oct1999
1193 ! Revised: MJIacono, AER, jul2006
1194 ! Revised: MJIacono, AER, aug2008
1195 !-------------------------------------------------------------------------------
1198 ! ---- : ---- : ---------------------------------------------
1206 !-------------------------------------------------------------------------------
1208 use parkind_k, only : im => kind_im, rb => kind_rb
1209 use parrrsw_k, only : ng29
1214 integer(kind=im), parameter :: no29 = 16
1216 real(kind=rb), dimension(5,13,no29) :: kao
1217 real(kind=rb), dimension(5,13:59,no29) :: kbo
1218 real(kind=rb), dimension(10,no29) :: selfrefo
1219 real(kind=rb), dimension(4,no29) :: forrefo
1220 real(kind=rb), dimension(no29) :: sfluxrefo
1221 real(kind=rb), dimension(no29) :: absh2oo, absco2o
1223 integer(kind=im) :: layreffr
1224 real(kind=rb) :: rayl
1226 real(kind=rb), dimension(5,13,ng29) :: ka
1227 real(kind=rb), dimension(65,ng29) :: absa
1228 real(kind=rb), dimension(5,13:59,ng29) :: kb
1229 real(kind=rb), dimension(235,ng29) :: absb
1230 real(kind=rb), dimension(10,ng29) :: selfref
1231 real(kind=rb), dimension(4,ng29) :: forref
1232 real(kind=rb), dimension(ng29) :: sfluxref
1233 real(kind=rb), dimension(ng29) :: absh2o,absco2
1234 equivalence (ka(1,1,1),absa(1,1)), (kb(1,13,1),absb(1,1))
1235 !-------------------------------------------------------------------------------
1236 end module rrsw_kg29_k
1237 !-------------------------------------------------------------------------------
1240 !-------------------------------------------------------------------------------
1242 !-------------------------------------------------------------------------------
1244 ! rrtmg_sw reference atmosphere
1245 ! Based on standard mid-latitude summer profile
1248 ! 1998-07 JJMorcrette Initial version
1249 ! 2006-07 MJIacono Revised, AER
1250 ! 2008-08 MJIacono Revised, AER
1251 !-------------------------------------------------------------------------------
1253 ! ----- : ---- : ----------------------------------------------
1254 ! pref : real : Reference pressure levels
1255 ! preflog: real : Reference pressure levels, ln(pref)
1256 ! tref : real : Reference temperature levels for MLS profile
1257 !-------------------------------------------------------------------------------
1258 use parkind_k, only : im => kind_im, rb => kind_rb
1263 real(kind=rb) , dimension(59) :: pref
1264 real(kind=rb) , dimension(59) :: preflog
1265 real(kind=rb) , dimension(59) :: tref
1266 !-------------------------------------------------------------------------------
1267 end module rrsw_ref_k
1268 !-------------------------------------------------------------------------------
1271 !-------------------------------------------------------------------------------
1273 !-------------------------------------------------------------------------------
1275 ! rrtmg_sw lookup table arrays
1278 ! 2007-05 MJIAcono Initial version
1279 ! 2006-07 MJIacono Revised, AER
1280 ! 2008-08 MJIacono Revised, AER
1281 !-------------------------------------------------------------------------------
1283 ! ----- : ---- : ----------------------------------------------
1284 ! ntbl : integer: Lookup table dimension
1285 ! tblint : real : Lookup table conversion factor
1286 ! tau_tbl: real : Clear-sky optical depth
1287 ! exp_tbl: real : Exponential lookup table for transmittance
1288 ! od_lo : real : Value of tau below which expansion is used
1289 ! : in place of lookup table
1290 ! pade : real : Pade approximation constant
1291 ! bpade : real : Inverse of Pade constant
1292 !-------------------------------------------------------------------------------
1293 use parkind_k, only : im => kind_im, rb => kind_rb
1298 integer(kind=im), parameter :: ntbl = 10000
1299 real(kind=rb), parameter :: tblint = 10000.0_rb
1300 real(kind=rb), parameter :: od_lo = 0.06_rb
1301 real(kind=rb) :: tau_tbl
1302 real(kind=rb), dimension(0:ntbl) :: exp_tbl
1304 real(kind=rb), parameter :: pade = 0.278_rb
1305 real(kind=rb) :: bpade
1307 end module rrsw_tbl_k
1308 !-------------------------------------------------------------------------------
1311 !-------------------------------------------------------------------------------
1313 !-------------------------------------------------------------------------------
1315 ! rrtmg_sw version information
1318 ! 1998-07 JJMorcrette Initial version
1319 ! 2006-07 MJIacono Revised, AER
1320 ! 2008-08 MJIacono Revised, AER
1321 !-------------------------------------------------------------------------------
1323 ! ----- : ---- : ----------------------------------------------
1324 !hnamrtm :character:
1325 !hnamini :character:
1326 !hnamcld :character:
1327 !hnamclc :character:
1328 !hnamrft :character:
1329 !hnamspv :character:
1330 !hnamspc :character:
1331 !hnamset :character:
1332 !hnamtau :character:
1333 !hnamvqd :character:
1334 !hnamatm :character:
1335 !hnamutl :character:
1336 !hnamext :character:
1339 ! hvrrtm :character:
1340 ! hvrini :character:
1341 ! hvrcld :character:
1342 ! hvrclc :character:
1343 ! hvrrft :character:
1344 ! hvrspv :character:
1345 ! hvrspc :character:
1346 ! hvrset :character:
1347 ! hvrtau :character:
1348 ! hvrvqd :character:
1349 ! hvratm :character:
1350 ! hvrutl :character:
1351 ! hvrext :character:
1353 !-------------------------------------------------------------------------------
1358 character*18 hvrrtm,hvrini,hvrcld,hvrclc,hvrrft,hvrspv, &
1359 hvrspc,hvrset,hvrtau,hvrvqd,hvratm,hvrutl,hvrext
1360 character*20 hnamrtm,hnamini,hnamcld,hnamclc,hnamrft,hnamspv, &
1361 hnamspc,hnamset,hnamtau,hnamvqd,hnamatm,hnamutl,hnamext
1365 !-------------------------------------------------------------------------------
1366 end module rrsw_vsn_k
1367 !-------------------------------------------------------------------------------
1370 !-------------------------------------------------------------------------------
1372 !-------------------------------------------------------------------------------
1373 use parkind_k, only : im => kind_im, rb => kind_rb
1374 use parrrsw_k, only : nbndsw, mg, ngptsw, jpb1, jpb2
1375 !-------------------------------------------------------------------------------
1377 ! rrtmg_sw spectral information
1380 ! 1998-07 JJMorcrette Initial version
1381 ! 2006-07 MJIacono Revised, AER
1382 ! 2008-08 MJIacono Revised, AER
1383 !-------------------------------------------------------------------------------
1385 ! ----- : ---- : ----------------------------------------------
1386 ! ng : integer: Number of original g-intervals in each spectral band
1389 !wavenum1: real : Spectral band lower boundary in wavenumbers
1390 !wavenum2: real : Spectral band upper boundary in wavenumbers
1391 ! delwave: real : Spectral band width in wavenumbers
1393 ! ngc : integer: The number of new g-intervals in each band
1394 ! ngs : integer: The cumulative sum of new g-intervals for each band
1395 ! ngm : integer: The index of each new g-interval relative to the
1396 ! original 16 g-intervals in each band
1397 ! ngn : integer: The number of original g-intervals that are
1398 ! combined to make each new g-intervals in each band
1399 ! ngb : integer: The band index for each new g-interval
1400 ! wt : real : RRTM weights for the original 16 g-intervals
1401 ! rwgt : real : Weights for combining original 16 g-intervals
1402 ! (224 total) into reduced set of g-intervals
1404 !-------------------------------------------------------------------------------
1409 integer(kind=im), dimension(jpb1:jpb2) :: ng, nspa, nspb
1411 real(kind=rb), dimension(jpb1:jpb2) :: wavenum1, wavenum2, delwave
1413 integer(kind=im), dimension(nbndsw) :: ngc, ngs
1414 integer(kind=im), dimension(ngptsw) :: ngn, ngb
1415 integer(kind=im), dimension(nbndsw*mg) :: ngm
1417 real(kind=rb), dimension(mg) :: wt
1418 real(kind=rb), dimension(nbndsw*mg) :: rwgt
1419 !-------------------------------------------------------------------------------
1420 end module rrsw_wvn_k
1421 !-------------------------------------------------------------------------------
1424 !-------------------------------------------------------------------------------
1425 module rrtmg_sw_cldprmc_k
1426 !-------------------------------------------------------------------------------
1427 ! --------------------------------------------------------------------------
1429 ! | Copyright 2002-2008, Atmospheric & Environmental Research, Inc. (AER). |
1430 ! | This software may be used, copied, or redistributed as long as it is |
1431 ! | not sold and this copyright notice is reproduced on each copy made. |
1432 ! | This model is provided as is without any express or implied warranties. |
1433 ! | (http://www.rtweb.aer.com/) |
1435 ! --------------------------------------------------------------------------
1436 ! ------- Modules -------
1438 use parkind_k, only : im => kind_im, rb => kind_rb
1439 use parrrsw_k, only : ngptsw, jpband, jpb1, jpb2
1440 use rrsw_cld_k, only : extliq1, ssaliq1, asyliq1, &
1441 extice2, ssaice2, asyice2, &
1442 extice3, ssaice3, asyice3, fdlice3, &
1443 abari, bbari, cbari, dbari, ebari, fbari
1444 use rrsw_wvn_k, only : wavenum1, wavenum2, ngb
1445 use rrsw_vsn_k, only : hvrclc, hnamclc
1450 !-------------------------------------------------------------------------------
1451 subroutine cldprmc_sw(nlayers, inflag, iceflag, liqflag, cldfmc, &
1452 ciwpmc, clwpmc, reicmc, relqmc, &
1454 dtliq, dtice, dtsno, dwliq, dwice, dwsno, &
1455 daliq, daice, dasno, &
1456 taormc, taucmc, ssacmc, asmcmc, fsfcmc)
1457 !-------------------------------------------------------------------------------
1460 ! Compute the cloud optical properties for each cloudy layer
1461 ! and g-point interval for use by the McICA method.
1462 ! Note: Only inflag = 0 and inflag=2/liqflag=1/iceflag=2,3 are available;
1467 ! Hu & Stamnes, Key, and Fu
1471 ! nlayer - total number of layers
1472 ! inflag - see definitions
1473 ! iceflag - see definitions
1474 ! liqflag - see definitions
1475 ! cldfmc(ngptsw,nlayers) - cloud fraction [mcica]
1476 ! ciwpmc(ngptsw,nlayers) - cloud ice water path [mcica]
1477 ! clwpmc(ngptsw,nlayers) - cloud liquid water path [mcica]
1478 ! cswpmc(ngptsw,nlayers) - cloud snow water path [mcica]
1479 ! relqmc(nlayers) - cloud liquid particle effective radius (microns)
1480 ! reicmc(nlayers) - cloud ice particle effective radius (microns)
1481 ! resnmc(nlayers) - cloud snow particle effective radius (microns)
1483 ! specific definition of reicmc depends on setting of iceflag:
1484 ! iceflag = 1: ice effective radius, r_ec, (Ebert and Curry, 1992),
1485 ! r_ec range is limited to 13.0 to 130.0 microns
1486 ! iceflag = 2: ice effective radius, r_k, (Key, Streamer Ref. Manual, 1996)
1487 ! r_k range is limited to 5.0 to 131.0 microns
1488 ! iceflag = 3: generalized effective size, dge, (Fu, 1996),
1489 ! dge range is limited to 5.0 to 140.0 microns
1490 ! [dge = 1.0315 * r_ec]
1491 ! fsfcmc(ngptsw,nlayers) - cloud forward scattering fraction
1494 ! taucmc(ngptsw,nlayers) - cloud optical depth (delta scaled)
1495 ! ssacmc(ngptsw,nlayers) - single scattering albedo (delta scaled)
1496 ! asmcmc(ngptsw,nlayers) - asymmetry parameter (delta scaled)
1497 ! taormc(ngptsw,nlayers) - cloud optical depth (non-delta scaled)
1501 ! cldmin - minimum value for cloud quantities
1502 ! cwp - total cloud water path
1503 ! radliq - cloud liquid droplet radius (microns)
1504 ! radice - cloud ice effective size (microns)
1505 ! radsno - cloud snow effective size (microns)
1507 ! ------- Input -------
1509 integer(kind=im), intent(in ) :: nlayers
1510 integer(kind=im), intent(in ) :: inflag
1511 integer(kind=im), intent(in ) :: iceflag
1512 integer(kind=im), intent(in ) :: liqflag
1513 real(kind=rb), dimension(:,:), intent(in ) :: cldfmc
1514 real(kind=rb), dimension(:,:), intent(in ) :: ciwpmc
1515 real(kind=rb), dimension(:,:), intent(in ) :: clwpmc
1516 real(kind=rb), dimension(:,:), intent(in ) :: cswpmc
1517 real(kind=rb), dimension(:), intent(in ) :: relqmc
1518 real(kind=rb), dimension(:), intent(in ) :: reicmc
1519 real(kind=rb), dimension(:), intent(in ) :: resnmc
1520 real(kind=rb), dimension(:,:), intent(in ) :: fsfcmc
1522 ! ------- Output -------
1524 real(kind=rb), dimension(:,:), intent(inout) :: taucmc
1525 real(kind=rb), dimension(:,:), intent(inout) :: ssacmc
1526 real(kind=rb), dimension(:,:), intent(inout) :: asmcmc
1527 real(kind=rb), dimension(:,:), intent(out) :: taormc
1528 real(kind=rb), dimension(:,:), intent(inout) :: dtliq, dtice, dtsno
1529 real(kind=rb), dimension(:,:), intent(inout) :: dwliq, dwice, dwsno
1530 real(kind=rb), dimension(:,:), intent(inout) :: daliq, daice, dasno
1532 ! ------- Local -------
1534 integer(kind=im) :: ib, lay, istr, index, icx, ig
1536 real(kind=rb), parameter :: eps = 1.e-06_rb
1537 real(kind=rb), parameter :: cldmin = 1.e-20_rb
1538 real(kind=rb) :: cwp
1539 real(kind=rb) :: radliq
1540 real(kind=rb) :: radice
1541 real(kind=rb) :: radsno
1542 real(kind=rb) :: factor
1543 real(kind=rb) :: fint
1545 real(kind=rb) :: taucldorig_a, taucloud_a, ssacloud_a, ffp, ffp1, ffpssa
1546 real(kind=rb) :: tauiceorig, scatice, ssaice, tauice
1547 real(kind=rb) :: tauliqorig, scatliq, ssaliq, tauliq
1548 real(kind=rb) :: tausnoorig, scatsno, ssasno, tausno
1549 real(kind=rb), dimension(ngptsw) :: fdelta
1550 real(kind=rb), dimension(ngptsw) :: extcoice, gice
1551 real(kind=rb), dimension(ngptsw) :: ssacoice, forwice
1552 real(kind=rb), dimension(ngptsw) :: extcoliq, gliq
1553 real(kind=rb), dimension(ngptsw) :: ssacoliq, forwliq
1554 real(kind=rb), dimension(ngptsw) :: extcosno, gsno
1555 real(kind=rb), dimension(ngptsw) :: ssacosno, forwsno
1556 !-------------------------------------------------------------------------------
1560 hvrclc = '$Revision: 1.3 $'
1562 ! Some of these initializations are done elsewhere
1566 taormc(ig,lay) = taucmc(ig,lay)
1567 ! taucmc(ig,lay) = 0.0_rb
1568 ! ssacmc(ig,lay) = 1.0_rb
1569 ! asmcmc(ig,lay) = 0.0_rb
1577 ! Main g-point interval loop
1580 cwp = ciwpmc(ig,lay) + clwpmc(ig,lay) + cswpmc(ig,lay)
1581 if(cldfmc(ig,lay).ge.cldmin .and. &
1582 (cwp.ge.cldmin .or. taucmc(ig,lay).ge.cldmin)) then
1584 ! (inflag=0): Cloud optical properties input directly
1586 if(inflag.eq.0) then
1588 ! Cloud optical properties already defined in taucmc, ssacmc, asmcmc are
1589 ! unscaled; Apply delta-M scaling here (using Henyey-Greenstein approximation)
1591 taucldorig_a = taucmc(ig,lay)
1592 ffp = fsfcmc(ig,lay)
1594 ffpssa = 1.0_rb-ffp*ssacmc(ig,lay)
1595 ssacloud_a = ffp1*ssacmc(ig,lay)/ffpssa
1596 taucloud_a = ffpssa*taucldorig_a
1598 taormc(ig,lay) = taucldorig_a
1599 ssacmc(ig,lay) = ssacloud_a
1600 taucmc(ig,lay) = taucloud_a
1601 asmcmc(ig,lay) = (asmcmc(ig,lay) - ffp) / (ffp1)
1603 elseif(inflag.eq.1) then
1604 stop 'INFLAG = 1 OPTION NOT AVAILABLE WITH MCICA'
1606 ! (inflag=2): Separate treatement of ice clouds and water clouds.
1608 elseif(inflag.ge.2) then
1609 radice = reicmc(lay)
1611 ! Calculation of absorption coefficients due to ice clouds.
1613 if((ciwpmc(ig,lay)+cswpmc(ig,lay)).eq.0.0_rb) then
1614 extcoice(ig) = 0.0_rb
1615 ssacoice(ig) = 0.0_rb
1617 forwice(ig) = 0.0_rb
1618 extcosno(ig) = 0.0_rb
1619 ssacosno(ig) = 0.0_rb
1621 forwsno(ig) = 0.0_rb
1624 ! Note: This option uses Ebert and Curry approach for all particle sizes similar
1625 ! to CAM3 implementation, though this is somewhat unjustified for large ice
1628 elseif(iceflag.eq.1) then
1630 if(wavenum2(ib).gt.1.43e04_rb) then
1632 elseif (wavenum2(ib).gt.7.7e03_rb) then
1634 elseif (wavenum2(ib).gt.5.3e03_rb) then
1636 elseif (wavenum2(ib).gt.4.0e03_rb) then
1638 elseif (wavenum2(ib).ge.2.5e03_rb) then
1641 extcoice(ig) = (abari(icx)+bbari(icx)/radice)
1642 ssacoice(ig) = 1._rb-cbari(icx)-dbari(icx)*radice
1643 gice(ig) = ebari(icx)+fbari(icx)*radice
1645 ! Check to ensure upper limit of gice is within physical limits for large
1648 if (gice(ig).ge.1._rb) gice(ig) = 1._rb-eps
1649 forwice(ig) = gice(ig)*gice(ig)
1651 ! Check to ensure all calculated quantities are within physical limits.
1653 if(extcoice(ig).lt.0.0_rb) stop 'ICE EXTINCTION LESS THAN 0.0'
1654 if(ssacoice(ig).gt.1.0_rb) stop 'ICE SSA GRTR THAN 1.0'
1655 if(ssacoice(ig) .lt. 0.0_rb) stop 'ICE SSA LESS THAN 0.0'
1656 if(gice(ig).gt.1.0_rb) stop 'ICE ASYM GRTR THAN 1.0'
1657 if(gice(ig).lt.0.0_rb) stop 'ICE ASYM LESS THAN 0.0'
1659 ! For iceflag=2 option, ice particle effective radius is limited to 5.0 to 131.0
1662 elseif (iceflag .eq. 2) then
1663 if(radice.lt.5.0_rb .or. radice.gt.131.0_rb) &
1664 stop 'ICE RADIUS OUT OF BOUNDS'
1665 factor = (radice - 2._rb)/3._rb
1667 if(index.eq.43) index = 42
1668 fint = factor - real(index)
1670 extcoice(ig) = extice2(index,ib) + fint * &
1671 (extice2(index+1,ib) - extice2(index,ib))
1672 ssacoice(ig) = ssaice2(index,ib) + fint * &
1673 (ssaice2(index+1,ib) - ssaice2(index,ib))
1674 gice(ig) = asyice2(index,ib) + fint * &
1675 (asyice2(index+1,ib) - asyice2(index,ib))
1676 forwice(ig) = gice(ig)*gice(ig)
1678 ! Check to ensure all calculated quantities are within physical limits.
1680 if(extcoice(ig).lt.0.0_rb) stop 'ICE EXTINCTION LESS THAN 0.0'
1681 if(ssacoice(ig).gt.1.0_rb) stop 'ICE SSA GRTR THAN 1.0'
1682 if(ssacoice(ig).lt.0.0_rb) stop 'ICE SSA LESS THAN 0.0'
1683 if(gice(ig).gt.1.0_rb) stop 'ICE ASYM GRTR THAN 1.0'
1684 if(gice(ig).lt.0.0_rb) stop 'ICE ASYM LESS THAN 0.0'
1686 ! For iceflag=3 option, ice particle generalized effective size is limited to
1687 ! 5.0 to 140.0 microns
1689 elseif(iceflag.ge.3) then
1691 if(radice.lt.5.0_rb .or. radice.gt.140.0_rb) &
1692 stop 'ICE GENERALIZED EFFECTIVE SIZE OUT OF BOUNDS'
1693 factor = (radice - 2._rb)/3._rb
1695 if(index.eq.46) index = 45
1696 fint = factor - real(index)
1698 extcoice(ig) = extice3(index,ib)+fint* &
1699 (extice3(index+1,ib)-extice3(index,ib))
1700 ssacoice(ig) = ssaice3(index,ib)+fint* &
1701 (ssaice3(index+1,ib)-ssaice3(index,ib))
1702 gice(ig) = asyice3(index,ib)+fint* &
1703 (asyice3(index+1,ib)-asyice3(index,ib))
1704 fdelta(ig) = fdlice3(index,ib)+fint* &
1705 (fdlice3(index+1,ib)-fdlice3(index,ib))
1706 if(fdelta(ig).lt.0.0_rb) stop 'FDELTA LESS THAN 0.0'
1707 if(fdelta(ig).gt.1.0_rb) stop 'FDELTA GT THAN 1.0'
1708 forwice(ig) = fdelta(ig)+0.5_rb/ssacoice(ig)
1710 ! See Fu 1996 p. 2067
1712 if (forwice(ig) .gt. gice(ig)) forwice(ig) = gice(ig)
1714 ! Check to ensure all calculated quantities are within physical limits.
1716 if(extcoice(ig).lt.0.0_rb) stop 'ICE EXTINCTION LESS THAN 0.0'
1717 if(ssacoice(ig).gt.1.0_rb) stop 'ICE SSA GRTR THAN 1.0'
1718 if(ssacoice(ig).lt.0.0_rb) stop 'ICE SSA LESS THAN 0.0'
1719 if(gice(ig).gt.1.0_rb) stop 'ICE ASYM GRTR THAN 1.0'
1720 if(gice(ig).lt.0.0_rb) stop 'ICE ASYM LESS THAN 0.0'
1723 ! INSERT THE EQUIVALENT SNOW VARIABLE CODE HERE
1724 ! Although far from perfect, the snow will utilize the
1725 ! same lookup table constants as cloud ice. Changes
1726 ! to those constants for larger particle snow would be
1729 if(cswpmc(ig,lay).gt.0.0_rb .and. iceflag.eq.5) then
1730 radsno = resnmc(lay)
1731 if(radsno.lt.5.0_rb .or. radsno.gt.140.0_rb) stop &
1732 'ERROR: SNOW GENERALIZED EFFECTIVE SIZE OUT OF BOUNDS'
1733 factor = (radsno - 2._rb)/3._rb
1735 if(index.eq.46) index = 45
1736 fint = factor-real(index)
1738 extcosno(ig) = extice3(index,ib)+fint* &
1739 (extice3(index+1,ib)-extice3(index,ib))
1740 ssacosno(ig) = ssaice3(index,ib)+fint* &
1741 (ssaice3(index+1,ib)-ssaice3(index,ib))
1742 gsno(ig) = asyice3(index,ib)+fint* &
1743 (asyice3(index+1,ib)-asyice3(index,ib))
1744 fdelta(ig) = fdlice3(index,ib)+fint* &
1745 (fdlice3(index+1,ib)-fdlice3(index,ib))
1746 if(fdelta(ig).lt.0.0_rb) stop 'FDELTA LESS THAN 0.0'
1747 if(fdelta(ig).gt.1.0_rb) stop 'FDELTA GT THAN 1.0'
1748 forwsno(ig) = fdelta(ig)+0.5_rb/ssacosno(ig)
1749 if(forwsno(ig).gt.gsno(ig)) forwsno(ig) = gsno(ig)
1751 ! Check to ensure all calculated quantities are within physical limits.
1753 if(extcosno(ig).lt.0.0_rb) stop 'SNOW EXTINCTION LESS THAN 0.0'
1754 if(ssacosno(ig).gt.1.0_rb) stop 'SNOW SSA GRTR THAN 1.0'
1755 if(ssacosno(ig).lt.0.0_rb) stop 'SNOW SSA LESS THAN 0.0'
1756 if(gsno(ig).gt.1.0_rb) stop 'SNOW ASYM GRTR THAN 1.0'
1757 if(gsno(ig).lt.0.0_rb) stop 'SNOW ASYM LESS THAN 0.0'
1759 extcosno(ig) = 0.0_rb
1760 ssacosno(ig) = 0.0_rb
1762 forwsno(ig) = 0.0_rb
1765 ! Calculation of absorption coefficients due to water clouds.
1767 if (clwpmc(ig,lay) .eq. 0.0_rb) then
1768 extcoliq(ig) = 0.0_rb
1769 ssacoliq(ig) = 0.0_rb
1771 forwliq(ig) = 0.0_rb
1772 elseif (liqflag .eq. 1) then
1773 radliq = relqmc(lay)
1774 if (radliq .lt. 1.5_rb .or. radliq .gt. 60._rb) stop &
1775 'liquid effective radius out of bounds'
1776 index = int(radliq - 1.5_rb)
1777 if (index .eq. 0) index = 1
1778 if (index .eq. 58) index = 57
1779 fint = radliq - 1.5_rb - real(index)
1781 extcoliq(ig) = extliq1(index,ib) + fint * &
1782 (extliq1(index+1,ib) - extliq1(index,ib))
1783 ssacoliq(ig) = ssaliq1(index,ib) + fint * &
1784 (ssaliq1(index+1,ib) - ssaliq1(index,ib))
1785 if (fint .lt. 0._rb .and. ssacoliq(ig) .gt. 1._rb) &
1786 ssacoliq(ig) = ssaliq1(index,ib)
1787 gliq(ig) = asyliq1(index,ib) + fint * &
1788 (asyliq1(index+1,ib) - asyliq1(index,ib))
1789 forwliq(ig) = gliq(ig)*gliq(ig)
1791 ! Check to ensure all calculated quantities are within physical limits.
1793 if (extcoliq(ig) .lt. 0.0_rb) stop 'LIQUID EXTINCTION LESS THAN 0.0'
1794 if (ssacoliq(ig) .gt. 1.0_rb) stop 'LIQUID SSA GRTR THAN 1.0'
1795 if (ssacoliq(ig) .lt. 0.0_rb) stop 'LIQUID SSA LESS THAN 0.0'
1796 if (gliq(ig) .gt. 1.0_rb) stop 'LIQUID ASYM GRTR THAN 1.0'
1797 if (gliq(ig) .lt. 0.0_rb) stop 'LIQUID ASYM LESS THAN 0.0'
1800 if(iceflag.lt.5) then
1801 tauliqorig = clwpmc(ig,lay)*extcoliq(ig)
1802 tauiceorig = ciwpmc(ig,lay)*extcoice(ig)
1803 taormc(ig,lay) = tauliqorig+tauiceorig
1805 ssaliq = ssacoliq(ig)*(1._rb-forwliq(ig)) &
1806 /(1._rb-forwliq(ig)*ssacoliq(ig))
1807 tauliq = (1._rb-forwliq(ig)*ssacoliq(ig))*tauliqorig
1808 ssaice = ssacoice(ig)*(1._rb-forwice(ig)) &
1809 /(1._rb-forwice(ig)*ssacoice(ig))
1810 tauice = (1._rb-forwice(ig)*ssacoice(ig))*tauiceorig
1812 scatliq = ssaliq*tauliq
1813 scatice = ssaice*tauice
1815 taucmc(ig,lay) = tauliq+tauice
1817 tauliqorig = clwpmc(ig,lay)*extcoliq(ig)
1818 tauiceorig = ciwpmc(ig,lay)*extcoice(ig)
1819 tausnoorig = cswpmc(ig,lay)*extcosno(ig)
1820 taormc(ig,lay) = tauliqorig+tauiceorig+tausnoorig
1822 ssaliq = ssacoliq(ig)*(1._rb-forwliq(ig)) &
1823 /(1._rb-forwliq(ig)*ssacoliq(ig))
1824 tauliq = (1._rb-forwliq(ig)*ssacoliq(ig))*tauliqorig
1825 ssaice = ssacoice(ig)*(1._rb-forwice(ig)) &
1826 /(1._rb-forwice(ig)*ssacoice(ig))
1827 tauice = (1._rb-forwice(ig)*ssacoice(ig))*tauiceorig
1828 ssasno = ssacosno(ig)*(1._rb-forwsno(ig)) &
1829 /(1._rb-forwsno(ig)*ssacosno(ig))
1830 tausno = (1._rb-forwsno(ig)*ssacosno(ig))*tausnoorig
1831 scatliq = ssaliq*tauliq
1832 scatice = ssaice*tauice
1833 scatsno = ssasno*tausno
1834 taucmc(ig,lay) = tauliq+tauice+tausno
1836 dtliq(ig,lay)=tauliq ; dwliq(ig,lay)=ssaliq
1837 dtice(ig,lay)=tauice ; dwice(ig,lay)=ssaice
1838 dtsno(ig,lay)=tausno ; dwsno(ig,lay)=ssasno
1839 daliq(ig,lay)=(gliq(ig)-forwliq(ig))/(1._rb-forwliq(ig))
1840 daice(ig,lay)=(gice(ig)-forwice(ig))/(1._rb-forwice(ig))
1841 dasno(ig,lay)=(gsno(ig)-forwsno(ig))/(1._rb-forwsno(ig))
1843 ! Ensure non-zero taucmc and scatice
1845 if(taucmc(ig,lay).eq.0.) taucmc(ig,lay) = cldmin
1846 if(scatice.eq.0.) scatice = cldmin
1847 if(scatsno.eq.0.) scatsno = cldmin
1849 if(iceflag.lt.5) then
1850 ssacmc(ig,lay) = (scatliq+scatice)/taucmc(ig,lay)
1852 ssacmc(ig,lay) = (scatliq+scatice+scatsno)/taucmc(ig,lay)
1855 if(iceflag.eq.3 .or. iceflag.eq.4) then
1857 ! In accordance with the 1996 Fu paper, equation A.3,
1858 ! the moments for ice were calculated depending on whether using spheres
1859 ! or hexagonal ice crystals.
1860 ! Set asymetry parameter to first moment (istr=1)
1863 asmcmc(ig,lay) = (1.0_rb/(scatliq+scatice))* &
1864 (scatliq*(gliq(ig)**istr - forwliq(ig)) / &
1865 (1.0_rb - forwliq(ig)) + scatice * ((gice(ig)-forwice(ig))/ &
1866 (1.0_rb - forwice(ig)))**istr)
1867 elseif(iceflag.eq.5) then
1869 asmcmc(ig,lay) = (1.0_rb/(scatliq+scatice+scatsno)) &
1870 *(scatliq*(gliq(ig)**istr-forwliq(ig))/(1.0_rb-forwliq(ig)) &
1871 + scatice*((gice(ig)-forwice(ig))/(1.0_rb-forwice(ig))) &
1872 + scatsno*((gsno(ig)-forwsno(ig))/ &
1873 (1.0_rb-forwsno(ig)))**istr)
1876 ! This code is the standard method for delta-m scaling.
1877 ! Set asymetry parameter to first moment (istr=1)
1880 asmcmc(ig,lay) = (scatliq * &
1881 (gliq(ig)**istr - forwliq(ig)) / &
1882 (1.0_rb - forwliq(ig)) + scatice * (gice(ig)**istr - forwice(ig)) / &
1883 (1.0_rb - forwice(ig)))/(scatliq + scatice)
1890 ! End g-point interval loop
1898 end subroutine cldprmc_sw
1899 !-------------------------------------------------------------------------------
1902 !-------------------------------------------------------------------------------
1903 end module rrtmg_sw_cldprmc_k
1904 !-------------------------------------------------------------------------------
1907 !-------------------------------------------------------------------------------
1908 module rrtmg_sw_reftra_k
1909 !-------------------------------------------------------------------------------
1910 ! --------------------------------------------------------------------------
1912 ! | Copyright 2002-2008, Atmospheric & Environmental Research, Inc. (AER). |
1913 ! | This software may be used, copied, or redistributed as long as it is |
1914 ! | not sold and this copyright notice is reproduced on each copy made. |
1915 ! | This model is provided as is without any express or implied warranties. |
1916 ! | (http://www.rtweb.aer.com/) |
1918 ! --------------------------------------------------------------------------
1919 ! ------- Modules -------
1921 use parkind_k, only : im => kind_im, rb => kind_rb
1922 use rrsw_tbl_k, only : tblint, bpade, od_lo, exp_tbl
1923 use rrsw_vsn_k, only : hvrrft, hnamrft
1928 !-------------------------------------------------------------------------------
1931 !-------------------------------------------------------------------------------
1932 subroutine reftra_sw(nlayers, lrtchk, pgg, prmuz, ptau, pw, &
1934 pref, prefd, ptra, ptrad)
1935 !-------------------------------------------------------------------------------
1938 ! computes the reflectivity and transmissivity of a clear or
1939 ! cloudy layer using a choice of various approximations.
1942 ! 2016-10-27 sunghye baek revised TSA
1943 ! Interface: *rrtmg_sw_reftra* is called by *rrtmg_sw_spcvrt*
1946 ! explicit arguments :
1947 ! --------------------
1950 ! lrtchk = .t. for all layers in clear profile
1951 ! lrtchk = .t. for cloudy layers in cloud profile
1952 ! = .f. for clear layers in cloud profile
1953 ! pgg = assymetry factor
1954 ! prmuz = cosine solar zenith angle
1955 ! ptau = optical thickness
1956 ! pw = single scattering albedo
1957 ! al,a2,a3= coefficients for Ritter and Geleyn 1992 convention
1961 ! pref : collimated beam reflectivity
1962 ! prefd : diffuse beam reflectivity
1963 ! ptra : collimated beam transmissivity
1964 ! ptrad : diffuse beam transmissivity
1969 ! standard delta-eddington, p.i.f.m., or d.o.m. layer calculations.
1970 ! kmodts = 1 eddington (joseph et al., 1976)
1971 ! = 2 pifm (zdunkowski et al., 1980)
1972 ! = 3 discrete ordinates (liou, 1973)
1973 ! = 4 same as pifm, but Ritter and Geleyn 1992 convention
1974 ! = 5 revised TSA (sunghye baek)
1978 ! Original: J-JMorcrette, ECMWF, Feb 2003
1979 ! Revised for F90 reformatting: MJIacono, AER, Jul 2006
1980 ! Revised to add exponential lookup table: MJIacono, AER, Aug 2007
1981 ! Reformulated some code to avoid potential fpes: MJIacono, AER, Nov 2008
1984 ! lrtchk(nlayers) : Logical flag for reflectivity and transmissivity calculation
1985 ! pgg(nlayers) : asymmetry parameter
1986 ! ptau(nlayers) : optical depth
1987 ! pw(nlayers) : single scattering albedo
1988 ! prmuz : cosine of solar zenith angle
1990 ! pref(nlayers+1) : direct beam reflectivity
1991 ! prefd(nlayers+1) : diffuse beam reflectivity
1992 ! ptra(nlayers+1) : direct beam transmissivity
1993 ! ptrad(nlayers+1) : diffuse beam transmissivity
1994 ! ------------------------------------------------------------------------------
1996 ! ------- Declarations ------
1998 ! ------- Input -------
2000 integer(kind=im), intent(in ) :: nlayers
2001 logical, dimension(:), intent(in ) :: lrtchk
2002 real(kind=rb), dimension(:), intent(in ) :: pgg
2003 real(kind=rb), dimension(:), intent(in ) :: ptau
2004 real(kind=rb), dimension(:), intent(in ) :: pw
2005 real(kind=rb), intent(in ) :: prmuz
2006 real(kind=rb), dimension(:), intent(in ) :: al1
2007 real(kind=rb), dimension(:), intent(in ) :: al2
2008 real(kind=rb), dimension(:), intent(in ) :: al3
2010 ! ------- Output -------
2012 real(kind=rb), dimension(:), intent(inout) :: pref
2013 real(kind=rb), dimension(:), intent(inout) :: prefd
2014 real(kind=rb), dimension(:), intent(inout) :: ptra
2015 real(kind=rb), dimension(:), intent(inout) :: ptrad
2017 ! ------- Local -------
2019 integer(kind=im) :: jk, jl, kmodts
2020 integer(kind=im) :: itind
2022 real(kind=rb) :: tblind
2023 real(kind=rb) :: za, za1, za2
2024 real(kind=rb) :: zbeta, zdend, zdenr, zdent
2025 real(kind=rb) :: ze1, ze2, zem1, zem2, zemm, zep1, zep2
2026 real(kind=rb) :: zg, zg3, zgamma1, zgamma2, zgamma3, zgamma4, zgt
2027 real(kind=rb) :: zr1, zr2, zr3, zr4, zr5
2028 real(kind=rb) :: zrk, zrk2, zrkg, zrm1, zrp, zrp1, zrpp
2029 real(kind=rb) :: zsr3, zt1, zt2, zt3, zt4, zt5, zto1
2030 real(kind=rb) :: zw, zwcrit, zwo
2031 real(kind=rb) :: denom
2033 real(kind=rb), parameter :: eps = 1.e-08_rb
2034 real(kind=rb) :: zbetab, zbetad, ztos, ztoa, zto2
2035 !-------------------------------------------------------------------------------
2039 hvrrft = '$Revision: 1.3 $'
2045 if (.not.lrtchk(jk)) then
2055 ! General two-stream expressions
2058 if (kmodts == 1) then
2059 zgamma1= (7._rb - zw * (4._rb + zg3)) * 0.25_rb
2060 zgamma2=-(1._rb - zw * (4._rb - zg3)) * 0.25_rb
2061 zgamma3= (2._rb - zg3 * prmuz ) * 0.25_rb
2062 else if (kmodts == 2) then
2063 zgamma1= (8._rb - zw * (5._rb + zg3)) * 0.25_rb
2064 zgamma2= 3._rb *(zw * (1._rb - zg )) * 0.25_rb
2065 zgamma3= (2._rb - zg3 * prmuz ) * 0.25_rb
2066 else if (kmodts == 3) then
2067 zgamma1= zsr3 * (2._rb - zw * (1._rb + zg)) * 0.5_rb
2068 zgamma2= zsr3 * zw * (1._rb - zg ) * 0.5_rb
2069 zgamma3= (1._rb - zsr3 * zg * prmuz ) * 0.5_rb
2070 else if (kmodts == 4) then ! Ritter and Geleyn 1992 convention
2071 zbetad = 3._rb*0.125_rb*(1._rb-zg)
2072 zbetab = 0.25_rb*(2._rb-3._rb*zg*prmuz)
2076 zgamma1= (2._rb * ztoa + 2._rb * zbetad * ztos) / zto1
2077 zgamma2= 2._rb * zbetad * zto2
2079 else if (kmodts == 5) then
2084 if(kmodts .ge. 4) then
2085 zgamma4= zw - zgamma3
2087 zgamma4= 1._rb - zgamma3
2090 ! Recompute original s.s.a. to test for conservative solution
2094 if (zg .ne. 1._rb) denom = (1._rb - (1._rb - zw) * (zg / (1._rb - zg))**2)
2095 if (zw .gt. 0._rb .and. denom .ne. 0._rb) zwo = zw / denom
2097 if (zwo >= zwcrit) then
2099 ! Conservative scattering
2101 za = zgamma1 * prmuz
2103 zgt = zgamma1 * zto1
2105 ! Homogeneous reflectance and transmittance,
2108 ze1 = min ( zto1 / prmuz , 500._rb)
2111 ! Use exponential lookup table for transmittance, or expansion of
2112 ! exponential for low tau
2114 if (ze1 .le. od_lo) then
2115 ze2 = 1._rb - ze1 + 0.5_rb * ze1 * ze1
2117 tblind = ze1 / (bpade + ze1)
2118 itind = tblint * tblind + 0.5_rb
2119 ze2 = exp_tbl(itind)
2122 pref(jk) = (zgt - za1 * (1._rb - ze2)) / (1._rb + zgt)
2123 ptra(jk) = 1._rb - pref(jk)
2125 ! isotropic incidence
2127 prefd(jk) = zgt / (1._rb + zgt)
2128 ptrad(jk) = 1._rb - prefd(jk)
2130 ! This is applied for consistency between total (delta-scaled) and direct
2131 ! (unscaled) calculations at very low optical depths (tau < 1.e-4) when
2132 ! the exponential lookup table returns a transmittance of 1.0.
2134 if (ze2 .eq. 1.0_rb) then
2143 ! Non-conservative scattering
2145 za1 = zgamma1 * zgamma4 + zgamma2 * zgamma3
2146 za2 = zgamma1 * zgamma3 + zgamma2 * zgamma4
2147 zrk = sqrt ( zgamma1**2 - zgamma2**2)
2152 zrpp = 1._rb - zrp*zrp
2153 zrkg = zrk + zgamma1
2154 zr1 = zrm1 * (za2 + zrk * zgamma3)
2155 zr2 = zrp1 * (za2 - zrk * zgamma3)
2156 zr3 = zrk2 * (zgamma3 - za2 * prmuz )
2158 zr5 = zrpp * (zrk - zgamma1)
2159 zt1 = zrp1 * (za1 + zrk * zgamma4)
2160 zt2 = zrm1 * (za1 - zrk * zgamma4)
2161 zt3 = zrk2 * (zgamma4 + za1 * prmuz )
2165 ! mji - reformulated code to avoid potential floating point exceptions
2166 ! zbeta = - zr5 / zr4
2167 zbeta = (zgamma1 - zrk) / zrkg
2169 ! Homogeneous reflectance and transmittance
2171 ze1 = min ( zrk * zto1, 500._rb)
2172 ze2 = min ( zto1 / prmuz , 500._rb)
2180 ! Revised original, to reduce exponentials
2182 ! zem1 = 1._rb / zep1
2184 ! zem2 = 1._rb / zep2
2186 ! Use exponential lookup table for transmittance, or expansion of
2187 ! exponential for low tau
2189 if (ze1 .le. od_lo) then
2190 zem1 = 1._rb - ze1 + 0.5_rb * ze1 * ze1
2193 tblind = ze1 / (bpade + ze1)
2194 itind = tblint * tblind + 0.5_rb
2195 zem1 = exp_tbl(itind)
2199 if (ze2 .le. od_lo) then
2200 zem2 = 1._rb - ze2 + 0.5_rb * ze2 * ze2
2203 tblind = ze2 / (bpade + ze2)
2204 itind = tblint * tblind + 0.5_rb
2205 zem2 = exp_tbl(itind)
2211 ! mji - reformulated code to avoid potential floating point exceptions
2212 ! zdenr = zr4*zep1 + zr5*zem1
2213 ! pref(jk) = zw * (zr1*zep1 - zr2*zem1 - zr3*zem2) / zdenr
2214 ! zdent = zt4*zep1 + zt5*zem1
2215 ! ptra(jk) = zem2 - zem2 * zw * (zt1*zep1 - zt2*zem1 - zt3*zep2) / zdent
2217 zdenr = zr4*zep1 + zr5*zem1
2218 zdent = zt4*zep1 + zt5*zem1
2219 if (zdenr .ge. -eps .and. zdenr .le. eps) then
2223 if(kmodts .ge. 4) then
2224 pref(jk) = (zr1*zep1 - zr2*zem1 - zr3*zem2) / zdenr
2225 ptra(jk) = zem2 - zem2 * (zt1*zep1 - zt2*zem1 - zt3*zep2) / zdent
2227 pref(jk) = zw * (zr1*zep1 - zr2*zem1 - zr3*zem2) / zdenr
2228 ptra(jk) = zem2 - zem2 * zw * (zt1*zep1 - zt2*zem1 - zt3*zep2) / zdent
2235 zdend = 1._rb / ( (1._rb - zbeta*zemm ) * zrkg)
2236 prefd(jk) = zgamma2 * (1._rb - zemm) * zdend
2237 ptrad(jk) = zrk2*zem1*zdend
2244 end subroutine reftra_sw
2245 !-------------------------------------------------------------------------------
2248 !-------------------------------------------------------------------------------
2249 end module rrtmg_sw_reftra_k
2250 !-------------------------------------------------------------------------------
2253 !-------------------------------------------------------------------------------
2254 module rrtmg_sw_setcoef_k
2255 !-------------------------------------------------------------------------------
2256 ! --------------------------------------------------------------------------
2258 ! | Copyright 2002-2008, Atmospheric & Environmental Research, Inc. (AER). |
2259 ! | This software may be used, copied, or redistributed as long as it is |
2260 ! | not sold and this copyright notice is reproduced on each copy made. |
2261 ! | This model is provided as is without any express or implied warranties. |
2262 ! | (http://www.rtweb.aer.com/) |
2264 ! --------------------------------------------------------------------------
2265 ! ------- Modules -------
2267 use parkind_k, only : im => kind_im, rb => kind_rb
2268 use parrrsw_k, only : mxmol
2269 use rrsw_ref_k, only : pref, preflog, tref
2270 use rrsw_vsn_k, only : hvrset, hnamset
2275 !-------------------------------------------------------------------------------
2278 !-------------------------------------------------------------------------------
2279 subroutine setcoef_sw(nlayers, pavel, tavel, pz, tz, tbound, coldry, wkl, &
2280 laytrop, layswtch, laylow, jp, jt, jt1, &
2281 co2mult, colch4, colco2, colh2o, colmol, coln2o, &
2282 colo2, colo3, fac00, fac01, fac10, fac11, &
2283 selffac, selffrac, indself, forfac, forfrac, indfor)
2284 !-------------------------------------------------------------------------------
2286 ! abstract: For a given atmosphere, calculate the indices and
2287 ! fractions related to the pressure and temperature interpolations.
2290 ! 2002-04-01 J. Delamere, AER, Inc. version 2.5
2291 ! 2003-02-24 JJMorcrette Rewritten and adapted to ECMWF F90
2292 ! 2006-07 MJIacono For uniform rrtmg formatting
2295 ! nlayers : total number of layers
2296 ! pavel(nlayers) : layer pressures (mb)
2297 ! tavel(nlayers) : layer temperatures (K)
2298 ! pz(0:nlayers) : level (interface) pressures (hPa, mb)
2299 ! tz(0:nlayers) : level (interface) temperatures (K)
2300 ! tbound : surface temperature (K)
2301 ! coldry(nlayers) : dry air column density (mol/cm2)
2302 ! wkl(mxmol,nlayers) : molecular amounts (mol/cm-2)
2305 ! laytrop : tropopause layer index
2309 ! colh2o(nlayers) column amount (h2o)
2310 ! colco2(nlayers) column amount (co2)
2311 ! colo3(nlayers) column amount (o3)
2312 ! coln2o(nlayers) column amount (n20)
2313 ! colch4(nlayers) column amount (ch4)
2314 ! colo2(nlayers) column amount (o2)
2323 ! fac00(nlayers), fac01, fac10, fac11
2324 !-------------------------------------------------------------------------------
2328 integer(kind=im), intent(in ) :: nlayers
2329 real(kind=rb), dimension(:), intent(in ) :: pavel
2330 real(kind=rb), dimension(:), intent(in ) :: tavel
2331 real(kind=rb), dimension(0:), intent(in ) :: pz
2332 real(kind=rb), dimension(0:), intent(in ) :: tz
2333 real(kind=rb), intent(in ) :: tbound
2334 real(kind=rb), dimension(:), intent(in ) :: coldry
2335 real(kind=rb), dimension(:,:),intent(in ) :: wkl
2337 ! ----- Output -----
2339 integer(kind=im), intent( out) :: laytrop
2340 integer(kind=im), intent( out) :: layswtch
2341 integer(kind=im), intent( out) :: laylow
2342 integer(kind=im), dimension(:), intent( out) :: jp
2343 integer(kind=im), dimension(:), intent( out) :: jt
2344 integer(kind=im), dimension(:), intent( out) :: jt1
2345 real(kind=rb), dimension(:), intent( out) :: colh2o
2346 real(kind=rb), dimension(:), intent( out) :: colco2
2347 real(kind=rb), dimension(:), intent( out) :: colo3
2348 real(kind=rb), dimension(:), intent( out) :: coln2o
2349 real(kind=rb), dimension(:), intent( out) :: colch4
2350 real(kind=rb), dimension(:), intent( out) :: colo2
2351 real(kind=rb), dimension(:), intent( out) :: colmol
2352 real(kind=rb), dimension(:), intent( out) :: co2mult
2354 integer(kind=im), dimension(:), intent( out) :: indself
2355 integer(kind=im), dimension(:), intent( out) :: indfor
2356 real(kind=rb), dimension(:), intent(out) :: selffac
2357 real(kind=rb), dimension(:), intent(out) :: selffrac
2358 real(kind=rb), dimension(:), intent(out) :: forfac
2359 real(kind=rb), dimension(:), intent(out) :: forfrac
2360 real(kind=rb), dimension(:), intent(out) :: fac00, fac01
2361 real(kind=rb), dimension(:), intent(out) :: fac10, fac11
2365 integer(kind=im) :: indbound
2366 integer(kind=im) :: indlev0
2367 integer(kind=im) :: lay
2368 integer(kind=im) :: jp1
2370 real(kind=rb) :: stpfac
2371 real(kind=rb) :: tbndfrac
2372 real(kind=rb) :: t0frac
2373 real(kind=rb) :: plog
2376 real(kind=rb) :: ft1
2377 real(kind=rb) :: water
2378 real(kind=rb) :: scalefac
2379 real(kind=rb) :: factor
2380 real(kind=rb) :: co2reg
2381 real(kind=rb) :: compfp
2382 !-------------------------------------------------------------------------------
2386 stpfac = 296._rb/1013._rb
2388 indbound = tbound - 159._rb
2389 tbndfrac = tbound - int(tbound)
2390 indlev0 = tz(0) - 159._rb
2391 t0frac = tz(0) - int(tz(0))
2401 ! Find the two reference pressures on either side of the
2402 ! layer pressure. Store them in JP and JP1. Store in FP the
2403 ! fraction of the difference (in ln(pressure)) between these
2404 ! two values that the layer pressure lies.
2406 plog = log(pavel(lay))
2407 jp(lay) = int(36._rb - 5*(plog+0.04_rb))
2408 if (jp(lay) .lt. 1) then
2410 elseif (jp(lay) .gt. 58) then
2414 fp = 5._rb * (preflog(jp(lay)) - plog)
2416 ! Determine, for each reference pressure (JP and JP1), which
2417 ! reference temperature (these are different for each
2418 ! reference pressure) is nearest the layer temperature but does
2419 ! not exceed it. Store these indices in JT and JT1, resp.
2420 ! Store in FT (resp. FT1) the fraction of the way between JT
2421 ! (JT1) and the next highest reference temperature that the
2422 ! layer temperature falls.
2424 jt(lay) = int(3._rb + (tavel(lay)-tref(jp(lay)))/15._rb)
2425 if (jt(lay) .lt. 1) then
2427 elseif (jt(lay) .gt. 4) then
2430 ft = ((tavel(lay)-tref(jp(lay)))/15._rb) - real(jt(lay)-3)
2431 jt1(lay) = int(3._rb + (tavel(lay)-tref(jp1))/15._rb)
2432 if (jt1(lay) .lt. 1) then
2434 elseif (jt1(lay) .gt. 4) then
2437 ft1 = ((tavel(lay)-tref(jp1))/15._rb) - real(jt1(lay)-3)
2439 water = wkl(1,lay)/coldry(lay)
2440 scalefac = pavel(lay) * stpfac / tavel(lay)
2442 ! If the pressure is less than ~100mb, perform a different
2443 ! set of species interpolations.
2445 if (plog .le. 4.56_rb) go to 5300
2446 laytrop = laytrop + 1
2447 if (plog .ge. 6.62_rb) laylow = laylow + 1
2449 ! Set up factors needed to separately include the water vapor
2450 ! foreign-continuum in the calculation of absorption coefficient.
2452 forfac(lay) = scalefac / (1.+water)
2453 factor = (332.0_rb-tavel(lay))/36.0_rb
2454 indfor(lay) = min(2, max(1, int(factor)))
2455 forfrac(lay) = factor - real(indfor(lay))
2457 ! Set up factors needed to separately include the water vapor
2458 ! self-continuum in the calculation of absorption coefficient.
2460 selffac(lay) = water * forfac(lay)
2461 factor = (tavel(lay)-188.0_rb)/7.2_rb
2462 indself(lay) = min(9, max(1, int(factor)-7))
2463 selffrac(lay) = factor - real(indself(lay) + 7)
2465 ! Calculate needed column amounts.
2467 colh2o(lay) = 1.e-20_rb * wkl(1,lay)
2468 colco2(lay) = 1.e-20_rb * wkl(2,lay)
2469 colo3(lay) = 1.e-20_rb * wkl(3,lay)
2470 ! colo3(lay) = 0._rb
2471 ! colo3(lay) = colo3(lay)/1.16_rb
2472 coln2o(lay) = 1.e-20_rb * wkl(4,lay)
2473 colch4(lay) = 1.e-20_rb * wkl(6,lay)
2474 colo2(lay) = 1.e-20_rb * wkl(7,lay)
2475 colmol(lay) = 1.e-20_rb * coldry(lay) + colh2o(lay)
2476 ! colco2(lay) = 0._rb
2477 ! colo3(lay) = 0._rb
2478 ! coln2o(lay) = 0._rb
2479 ! colch4(lay) = 0._rb
2480 ! colo2(lay) = 0._rb
2481 ! colmol(lay) = 0._rb
2482 if (colco2(lay) .eq. 0._rb) colco2(lay) = 1.e-32_rb * coldry(lay)
2483 if (coln2o(lay) .eq. 0._rb) coln2o(lay) = 1.e-32_rb * coldry(lay)
2484 if (colch4(lay) .eq. 0._rb) colch4(lay) = 1.e-32_rb * coldry(lay)
2485 if (colo2(lay) .eq. 0._rb) colo2(lay) = 1.e-32_rb * coldry(lay)
2487 ! Using E = 1334.2 cm-1.
2489 co2reg = 3.55e-24_rb * coldry(lay)
2490 co2mult(lay)= (colco2(lay) - co2reg) * &
2491 272.63_rb*exp(-1919.4_rb/tavel(lay))/(8.7604e-4_rb*tavel(lay))
2498 ! Set up factors needed to separately include the water vapor
2499 ! foreign-continuum in the calculation of absorption coefficient.
2501 forfac(lay) = scalefac / (1.+water)
2502 factor = (tavel(lay)-188.0_rb)/36.0_rb
2504 forfrac(lay) = factor - 1.0_rb
2506 ! Calculate needed column amounts.
2508 colh2o(lay) = 1.e-20_rb * wkl(1,lay)
2509 colco2(lay) = 1.e-20_rb * wkl(2,lay)
2510 colo3(lay) = 1.e-20_rb * wkl(3,lay)
2511 coln2o(lay) = 1.e-20_rb * wkl(4,lay)
2512 colch4(lay) = 1.e-20_rb * wkl(6,lay)
2513 colo2(lay) = 1.e-20_rb * wkl(7,lay)
2514 colmol(lay) = 1.e-20_rb * coldry(lay) + colh2o(lay)
2515 if (colco2(lay) .eq. 0._rb) colco2(lay) = 1.e-32_rb * coldry(lay)
2516 if (coln2o(lay) .eq. 0._rb) coln2o(lay) = 1.e-32_rb * coldry(lay)
2517 if (colch4(lay) .eq. 0._rb) colch4(lay) = 1.e-32_rb * coldry(lay)
2518 if (colo2(lay) .eq. 0._rb) colo2(lay) = 1.e-32_rb * coldry(lay)
2519 co2reg = 3.55e-24_rb * coldry(lay)
2520 co2mult(lay)= (colco2(lay) - co2reg) * &
2521 272.63_rb*exp(-1919.4_rb/tavel(lay))/(8.7604e-4_rb*tavel(lay))
2522 selffac(lay) = 0._rb
2523 selffrac(lay)= 0._rb
2528 ! We have now isolated the layer ln pressure and temperature,
2529 ! between two reference pressures and two reference temperatures
2530 ! (for each reference pressure). We multiply the pressure
2531 ! fraction FP with the appropriate temperature fractions to get
2532 ! the factors that will be needed for the interpolation that yields
2533 ! the optical depths (performed in routines TAUGBn for band n).
2536 fac10(lay) = compfp * ft
2537 fac00(lay) = compfp * (1._rb - ft)
2538 fac11(lay) = fp * ft1
2539 fac01(lay) = fp * (1._rb - ft1)
2545 end subroutine setcoef_sw
2546 !-------------------------------------------------------------------------------
2549 !-------------------------------------------------------------------------------
2551 !-------------------------------------------------------------------------------
2555 ! These pressures are chosen such that the ln of the first pressure
2556 ! has only a few non-zero digits (i.e. ln(PREF(1)) = 6.96000) and
2557 ! each subsequent ln(pressure) differs from the previous one by 0.2.
2560 1.05363e+03_rb,8.62642e+02_rb,7.06272e+02_rb,5.78246e+02_rb,4.73428e+02_rb, &
2561 3.87610e+02_rb,3.17348e+02_rb,2.59823e+02_rb,2.12725e+02_rb,1.74164e+02_rb, &
2562 1.42594e+02_rb,1.16746e+02_rb,9.55835e+01_rb,7.82571e+01_rb,6.40715e+01_rb, &
2563 5.24573e+01_rb,4.29484e+01_rb,3.51632e+01_rb,2.87892e+01_rb,2.35706e+01_rb, &
2564 1.92980e+01_rb,1.57998e+01_rb,1.29358e+01_rb,1.05910e+01_rb,8.67114e+00_rb, &
2565 7.09933e+00_rb,5.81244e+00_rb,4.75882e+00_rb,3.89619e+00_rb,3.18993e+00_rb, &
2566 2.61170e+00_rb,2.13828e+00_rb,1.75067e+00_rb,1.43333e+00_rb,1.17351e+00_rb, &
2567 9.60789e-01_rb,7.86628e-01_rb,6.44036e-01_rb,5.27292e-01_rb,4.31710e-01_rb, &
2568 3.53455e-01_rb,2.89384e-01_rb,2.36928e-01_rb,1.93980e-01_rb,1.58817e-01_rb, &
2569 1.30029e-01_rb,1.06458e-01_rb,8.71608e-02_rb,7.13612e-02_rb,5.84256e-02_rb, &
2570 4.78349e-02_rb,3.91639e-02_rb,3.20647e-02_rb,2.62523e-02_rb,2.14936e-02_rb, &
2571 1.75975e-02_rb,1.44076e-02_rb,1.17959e-02_rb,9.65769e-03_rb /)
2574 6.9600e+00_rb, 6.7600e+00_rb, 6.5600e+00_rb, 6.3600e+00_rb, 6.1600e+00_rb, &
2575 5.9600e+00_rb, 5.7600e+00_rb, 5.5600e+00_rb, 5.3600e+00_rb, 5.1600e+00_rb, &
2576 4.9600e+00_rb, 4.7600e+00_rb, 4.5600e+00_rb, 4.3600e+00_rb, 4.1600e+00_rb, &
2577 3.9600e+00_rb, 3.7600e+00_rb, 3.5600e+00_rb, 3.3600e+00_rb, 3.1600e+00_rb, &
2578 2.9600e+00_rb, 2.7600e+00_rb, 2.5600e+00_rb, 2.3600e+00_rb, 2.1600e+00_rb, &
2579 1.9600e+00_rb, 1.7600e+00_rb, 1.5600e+00_rb, 1.3600e+00_rb, 1.1600e+00_rb, &
2580 9.6000e-01_rb, 7.6000e-01_rb, 5.6000e-01_rb, 3.6000e-01_rb, 1.6000e-01_rb, &
2581 -4.0000e-02_rb,-2.4000e-01_rb,-4.4000e-01_rb,-6.4000e-01_rb,-8.4000e-01_rb, &
2582 -1.0400e+00_rb,-1.2400e+00_rb,-1.4400e+00_rb,-1.6400e+00_rb,-1.8400e+00_rb, &
2583 -2.0400e+00_rb,-2.2400e+00_rb,-2.4400e+00_rb,-2.6400e+00_rb,-2.8400e+00_rb, &
2584 -3.0400e+00_rb,-3.2400e+00_rb,-3.4400e+00_rb,-3.6400e+00_rb,-3.8400e+00_rb, &
2585 -4.0400e+00_rb,-4.2400e+00_rb,-4.4400e+00_rb,-4.6400e+00_rb /)
2587 ! These are the temperatures associated with the respective
2588 ! pressures for the MLS standard atmosphere.
2591 2.9420e+02_rb, 2.8799e+02_rb, 2.7894e+02_rb, 2.6925e+02_rb, 2.5983e+02_rb, &
2592 2.5017e+02_rb, 2.4077e+02_rb, 2.3179e+02_rb, 2.2306e+02_rb, 2.1578e+02_rb, &
2593 2.1570e+02_rb, 2.1570e+02_rb, 2.1570e+02_rb, 2.1706e+02_rb, 2.1858e+02_rb, &
2594 2.2018e+02_rb, 2.2174e+02_rb, 2.2328e+02_rb, 2.2479e+02_rb, 2.2655e+02_rb, &
2595 2.2834e+02_rb, 2.3113e+02_rb, 2.3401e+02_rb, 2.3703e+02_rb, 2.4022e+02_rb, &
2596 2.4371e+02_rb, 2.4726e+02_rb, 2.5085e+02_rb, 2.5457e+02_rb, 2.5832e+02_rb, &
2597 2.6216e+02_rb, 2.6606e+02_rb, 2.6999e+02_rb, 2.7340e+02_rb, 2.7536e+02_rb, &
2598 2.7568e+02_rb, 2.7372e+02_rb, 2.7163e+02_rb, 2.6955e+02_rb, 2.6593e+02_rb, &
2599 2.6211e+02_rb, 2.5828e+02_rb, 2.5360e+02_rb, 2.4854e+02_rb, 2.4348e+02_rb, &
2600 2.3809e+02_rb, 2.3206e+02_rb, 2.2603e+02_rb, 2.2000e+02_rb, 2.1435e+02_rb, &
2601 2.0887e+02_rb, 2.0340e+02_rb, 1.9792e+02_rb, 1.9290e+02_rb, 1.8809e+02_rb, &
2602 1.8329e+02_rb, 1.7849e+02_rb, 1.7394e+02_rb, 1.7212e+02_rb /)
2604 end subroutine swatmref
2605 !-------------------------------------------------------------------------------
2608 !-------------------------------------------------------------------------------
2609 end module rrtmg_sw_setcoef_k
2610 !-------------------------------------------------------------------------------
2613 !-------------------------------------------------------------------------------
2614 module rrtmg_sw_taumol_k
2615 !-------------------------------------------------------------------------------
2616 ! --------------------------------------------------------------------------
2618 ! | Copyright 2002-2008, Atmospheric & Environmental Research, Inc. (AER). |
2619 ! | This software may be used, copied, or redistributed as long as it is |
2620 ! | not sold and this copyright notice is reproduced on each copy made. |
2621 ! | This model is provided as is without any express or implied warranties. |
2622 ! | (http://www.rtweb.aer.com/) |
2624 ! --------------------------------------------------------------------------
2625 ! ------- Modules -------
2627 use parkind_k, only : im => kind_im, rb => kind_rb
2628 ! use parrrsw, only : mg, jpband, nbndsw, ngptsw
2629 use rrsw_con_k, only: oneminus
2630 use rrsw_wvn_k, only: nspa, nspb
2631 use rrsw_vsn_k, only: hvrtau, hnamtau
2636 !-------------------------------------------------------------------------------
2639 !-------------------------------------------------------------------------------
2640 subroutine taumol_sw(nlayers, &
2641 colh2o, colco2, colch4, colo2, colo3, colmol, &
2642 laytrop, jp, jt, jt1, &
2643 fac00, fac01, fac10, fac11, &
2644 selffac, selffrac, indself, forfac, forfrac, indfor,&
2645 sfluxzen, taug, taur)
2646 !-------------------------------------------------------------------------------
2647 ! ******************************************************************************
2649 ! * Optical depths developed for the *
2651 ! * RAPID RADIATIVE TRANSFER MODEL (RRTM) *
2654 ! * ATMOSPHERIC AND ENVIRONMENTAL RESEARCH, INC. *
2655 ! * 131 HARTWELL AVENUE *
2656 ! * LEXINGTON, MA 02421 *
2660 ! * JENNIFER DELAMERE *
2661 ! * STEVEN J. TAUBMAN *
2662 ! * SHEPARD A. CLOUGH *
2667 ! * email: mlawer@aer.com *
2668 ! * email: jdelamer@aer.com *
2670 ! * The authors wish to acknowledge the contributions of the *
2671 ! * following people: Patrick D. Brown, Michael J. Iacono, *
2672 ! * Ronald E. Farren, Luke Chen, Robert Bergstrom. *
2674 ! ******************************************************************************
2677 ! * This file contains the subroutines TAUGBn (where n goes from *
2678 ! * 1 to 28). TAUGBn calculates the optical depths and Planck fractions *
2679 ! * per g-value and layer for band n. *
2681 ! * Output: optical depths (unitless) *
2682 ! * fractions needed to compute Planck functions at every layer *
2685 ! * COMMON /TAUGCOM/ TAUG(MXLAY,MG) *
2686 ! * COMMON /PLANKG/ FRACS(MXLAY,MG) *
2690 ! * PARAMETER (MG=16, MXLAY=203, NBANDS=14) *
2692 ! * COMMON /FEATURES/ NG(NBANDS),NSPA(NBANDS),NSPB(NBANDS) *
2693 ! * COMMON /PRECISE/ ONEMINUS *
2694 ! * COMMON /PROFILE/ NLAYERS,PAVEL(MXLAY),TAVEL(MXLAY), *
2695 ! * & PZ(0:MXLAY),TZ(0:MXLAY),TBOUND *
2696 ! * COMMON /PROFDATA/ LAYTROP,LAYSWTCH,LAYLOW, *
2697 ! * & COLH2O(MXLAY),COLCO2(MXLAY), *
2698 ! * & COLO3(MXLAY),COLN2O(MXLAY),COLCH4(MXLAY), *
2699 ! * & COLO2(MXLAY),CO2MULT(MXLAY) *
2700 ! * COMMON /INTFAC/ FAC00(MXLAY),FAC01(MXLAY), *
2701 ! * & FAC10(MXLAY),FAC11(MXLAY) *
2702 ! * COMMON /INTIND/ JP(MXLAY),JT(MXLAY),JT1(MXLAY) *
2703 ! * COMMON /SELF/ SELFFAC(MXLAY), SELFFRAC(MXLAY), INDSELF(MXLAY) *
2706 ! * NG(IBAND) - number of g-values in band IBAND *
2707 ! * NSPA(IBAND) - for the lower atmosphere, the number of reference *
2708 ! * atmospheres that are stored for band IBAND per *
2709 ! * pressure level and temperature. Each of these *
2710 ! * atmospheres has different relative amounts of the *
2711 ! * key species for the band (i.e. different binary *
2712 ! * species parameters). *
2713 ! * NSPB(IBAND) - same for upper atmosphere *
2714 ! * ONEMINUS - since problems are caused in some cases by interpolation *
2715 ! * parameters equal to or greater than 1, for these cases *
2716 ! * these parameters are set to this value, slightly < 1. *
2717 ! * PAVEL - layer pressures (mb) *
2718 ! * TAVEL - layer temperatures (degrees K) *
2719 ! * PZ - level pressures (mb) *
2720 ! * TZ - level temperatures (degrees K) *
2721 ! * LAYTROP - layer at which switch is made from one combination of *
2722 ! * key species to another *
2723 ! * COLH2O, COLCO2, COLO3, COLN2O, COLCH4 - column amounts of water *
2724 ! * vapor,carbon dioxide, ozone, nitrous ozide, methane, *
2725 ! * respectively (molecules/cm**2) *
2726 ! * CO2MULT - for bands in which carbon dioxide is implemented as a *
2727 ! * trace species, this is the factor used to multiply the *
2728 ! * band's average CO2 absorption coefficient to get the added *
2729 ! * contribution to the optical depth relative to 355 ppm. *
2730 ! * FACij(LAY) - for layer LAY, these are factors that are needed to *
2731 ! * compute the interpolation factors that multiply the *
2732 ! * appropriate reference k-values. A value of 0 (1) for *
2733 ! * i,j indicates that the corresponding factor multiplies *
2734 ! * reference k-value for the lower (higher) of the two *
2735 ! * appropriate temperatures, and altitudes, respectively. *
2736 ! * JP - the index of the lower (in altitude) of the two appropriate *
2737 ! * reference pressure levels needed for interpolation *
2738 ! * JT, JT1 - the indices of the lower of the two appropriate reference *
2739 ! * temperatures needed for interpolation (for pressure *
2740 ! * levels JP and JP+1, respectively) *
2741 ! * SELFFAC - scale factor needed to water vapor self-continuum, equals *
2742 ! * (water vapor density)/(atmospheric density at 296K and *
2744 ! * SELFFRAC - factor needed for temperature interpolation of reference *
2745 ! * water vapor self-continuum data *
2746 ! * INDSELF - index of the lower of the two appropriate reference *
2747 ! * temperatures needed for the self-continuum interpolation *
2750 ! * COMMON /Kn/ KA(NSPA(n),5,13,MG), KB(NSPB(n),5,13:59,MG), SELFREF(10,MG) *
2751 ! * (note: n is the band number) *
2754 ! * KA - k-values for low reference atmospheres (no water vapor *
2755 ! * self-continuum) (units: cm**2/molecule) *
2756 ! * KB - k-values for high reference atmospheres (all sources) *
2757 ! * (units: cm**2/molecule) *
2758 ! * SELFREF - k-values for water vapor self-continuum for reference *
2759 ! * atmospheres (used below LAYTROP) *
2760 ! * (units: cm**2/molecule) *
2762 ! * DIMENSION ABSA(65*NSPA(n),MG), ABSB(235*NSPB(n),MG) *
2763 ! * EQUIVALENCE (KA,ABSA),(KB,ABSB) *
2765 ! *****************************************************************************
2769 ! Revised: Adapted to F90 coding, J.-J.Morcrette, ECMWF, Feb 2003
2770 ! Revised: Modified for g-point reduction, MJIacono, AER, Dec 2003
2771 ! Revised: Reformatted for consistency with rrtmg_lw, MJIacono, AER, Jul 2006
2774 ! nlayers : total number of layers
2775 ! laytrop : tropopause layer index
2780 ! colh2o(nlayers) column amount (h2o)
2781 ! colco2(nlayers) column amount (co2)
2782 ! colo3(nlayers) column amount (o3)
2783 ! coln2o(nlayers) column amount (n20)
2784 ! colch4(nlayers) column amount (ch4)
2785 ! colo2(nlayers) column amount (o2)
2794 ! fac00(nlayers), fac01, fac10, fac11
2797 ! sfluxzen(ngptsw) : solar source function
2798 ! taug(nlayers,ngptsw) : gaseous optical depth
2799 ! taur(nlayers,ngptsw) : Rayleigh scattering
2800 ! ssa(nlayers,ngptsw) : single scattering albedo (inactive)
2801 ! ------- Declarations -------
2804 integer(kind=im), intent(in ) :: nlayers
2805 integer(kind=im), intent(in ) :: laytrop
2806 integer(kind=im), dimension(:), intent(in ) :: jp
2807 integer(kind=im), dimension(:), intent(in ) :: jt
2808 integer(kind=im), dimension(:), intent(in ) :: jt1
2809 real(kind=rb), dimension(:), intent(in ) :: colh2o
2810 real(kind=rb), dimension(:), intent(in ) :: colco2
2811 real(kind=rb), dimension(:), intent(in ) :: colo3
2812 real(kind=rb), dimension(:), intent(in ) :: colch4
2813 real(kind=rb), dimension(:), intent(in ) :: colo2
2814 real(kind=rb), dimension(:), intent(in ) :: colmol
2815 integer(kind=im), dimension(:), intent(in ) :: indself
2816 integer(kind=im), dimension(:), intent(in ) :: indfor
2817 real(kind=rb), dimension(:), intent(in ) :: selffac
2818 real(kind=rb), dimension(:), intent(in ) :: selffrac
2819 real(kind=rb), dimension(:), intent(in ) :: forfac
2820 real(kind=rb), dimension(:), intent(in ) :: forfrac
2821 real(kind=rb), dimension(:), intent(in ) :: fac00, fac01
2822 real(kind=rb), dimension(:), intent(in ) :: fac10, fac11
2824 ! ----- Output -----
2826 real(kind=rb), dimension(:), intent( out) :: sfluxzen
2827 real(kind=rb), dimension(:,:), intent( out) :: taug
2828 real(kind=rb), dimension(:,:), intent( out) :: taur
2829 ! real(kind=rb), intent(out) :: ssa(:,:)
2830 hvrtau = '$Revision: 1.3 $'
2832 ! Calculate gaseous optical depth and planck fractions for each spectral band.
2850 !-------------------------------------------------------------------------------
2853 !-------------------------------------------------------------------------------
2855 !-------------------------------------------------------------------------------
2856 ! band 16: 2600-3250 cm-1 (low - h2o,ch4; high - ch4)
2857 !-------------------------------------------------------------------------------
2859 ! ------- Modules -------
2861 use parrrsw_k, only : ng16
2862 use rrsw_kg16_k, only : absa, ka, absb, kb, forref, selfref, &
2863 sfluxref, rayl, layreffr, strrat1
2865 ! ------- Declarations -------
2869 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
2870 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
2871 fac110, fac111, fs, speccomb, specmult, specparm, &
2873 !-------------------------------------------------------------------------------
2875 ! Compute the optical depth by interpolating in ln(pressure),
2876 ! temperature, and appropriate species. Below LAYTROP, the water
2877 ! vapor self-continuum is interpolated (in temperature) separately.
2879 ! Lower atmosphere loop
2882 speccomb = colh2o(lay) + strrat1*colch4(lay)
2883 specparm = colh2o(lay)/speccomb
2884 if (specparm .ge. oneminus) specparm = oneminus
2885 specmult = 8._rb*(specparm)
2886 js = 1 + int(specmult)
2887 fs = mod(specmult, 1._rb )
2888 fac000 = (1._rb - fs) * fac00(lay)
2889 fac010 = (1._rb - fs) * fac10(lay)
2890 fac100 = fs * fac00(lay)
2891 fac110 = fs * fac10(lay)
2892 fac001 = (1._rb - fs) * fac01(lay)
2893 fac011 = (1._rb - fs) * fac11(lay)
2894 fac101 = fs * fac01(lay)
2895 fac111 = fs * fac11(lay)
2896 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(16) + js
2897 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(16) + js
2900 tauray = colmol(lay) * rayl
2902 taug(lay,ig) = speccomb * &
2903 (fac000 * absa(ind0 ,ig) + &
2904 fac100 * absa(ind0 +1,ig) + &
2905 fac010 * absa(ind0 +9,ig) + &
2906 fac110 * absa(ind0+10,ig) + &
2907 fac001 * absa(ind1 ,ig) + &
2908 fac101 * absa(ind1 +1,ig) + &
2909 fac011 * absa(ind1 +9,ig) + &
2910 fac111 * absa(ind1+10,ig)) + &
2912 (selffac(lay) * (selfref(inds,ig) + &
2914 (selfref(inds+1,ig) - selfref(inds,ig))) + &
2915 forfac(lay) * (forref(indf,ig) + &
2917 (forref(indf+1,ig) - forref(indf,ig))))
2918 ! ssa(lay,ig) = tauray/taug(lay,ig)
2919 taur(lay,ig) = tauray
2925 ! Upper atmosphere loop
2927 do lay = laytrop+1,nlayers
2928 if (jp(lay-1) .lt. layreffr .and. jp(lay) .ge. layreffr) &
2930 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(16) + 1
2931 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(16) + 1
2932 tauray = colmol(lay) * rayl
2934 taug(lay,ig) = colch4(lay) * &
2935 (fac00(lay) * absb(ind0 ,ig) + &
2936 fac10(lay) * absb(ind0+1,ig) + &
2937 fac01(lay) * absb(ind1 ,ig) + &
2938 fac11(lay) * absb(ind1+1,ig))
2939 ! ssa(lay,ig) = tauray/taug(lay,ig)
2940 if (lay .eq. laysolfr) sfluxzen(ig) = sfluxref(ig)
2941 taur(lay,ig) = tauray
2945 end subroutine taumol16
2946 !-------------------------------------------------------------------------------
2949 !-------------------------------------------------------------------------------
2951 !-------------------------------------------------------------------------------
2952 ! band 17: 3250-4000 cm-1 (low - h2o,co2; high - h2o,co2)
2953 !-------------------------------------------------------------------------------
2955 ! ------- Modules -------
2957 use parrrsw_k, only : ng17, ngs16
2958 use rrsw_kg17_k, only : absa, ka, absb, kb, forref, selfref, &
2959 sfluxref, rayl, layreffr, strrat
2961 ! ------- Declarations -------
2965 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
2966 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
2967 fac110, fac111, fs, speccomb, specmult, specparm, &
2969 !-------------------------------------------------------------------------------
2971 ! Compute the optical depth by interpolating in ln(pressure),
2972 ! temperature, and appropriate species. Below LAYTROP, the water
2973 ! vapor self-continuum is interpolated (in temperature) separately.
2975 ! Lower atmosphere loop
2978 speccomb = colh2o(lay) + strrat*colco2(lay)
2979 specparm = colh2o(lay)/speccomb
2980 if (specparm .ge. oneminus) specparm = oneminus
2981 specmult = 8._rb*(specparm)
2982 js = 1 + int(specmult)
2983 fs = mod(specmult, 1._rb )
2984 fac000 = (1._rb - fs) * fac00(lay)
2985 fac010 = (1._rb - fs) * fac10(lay)
2986 fac100 = fs * fac00(lay)
2987 fac110 = fs * fac10(lay)
2988 fac001 = (1._rb - fs) * fac01(lay)
2989 fac011 = (1._rb - fs) * fac11(lay)
2990 fac101 = fs * fac01(lay)
2991 fac111 = fs * fac11(lay)
2992 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(17) + js
2993 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(17) + js
2996 tauray = colmol(lay) * rayl
2998 taug(lay,ngs16+ig) = speccomb * &
2999 (fac000 * absa(ind0,ig) + &
3000 fac100 * absa(ind0+1,ig) + &
3001 fac010 * absa(ind0+9,ig) + &
3002 fac110 * absa(ind0+10,ig) + &
3003 fac001 * absa(ind1,ig) + &
3004 fac101 * absa(ind1+1,ig) + &
3005 fac011 * absa(ind1+9,ig) + &
3006 fac111 * absa(ind1+10,ig)) + &
3008 (selffac(lay) * (selfref(inds,ig) + &
3010 (selfref(inds+1,ig) - selfref(inds,ig))) + &
3011 forfac(lay) * (forref(indf,ig) + &
3013 (forref(indf+1,ig) - forref(indf,ig))))
3014 ! ssa(lay,ngs16+ig) = tauray/taug(lay,ngs16+ig)
3015 taur(lay,ngs16+ig) = tauray
3021 ! Upper atmosphere loop
3023 do lay = laytrop+1,nlayers
3024 if (jp(lay-1) .lt. layreffr .and. jp(lay) .ge. layreffr) &
3026 speccomb = colh2o(lay) + strrat*colco2(lay)
3027 specparm = colh2o(lay)/speccomb
3028 if (specparm .ge. oneminus) specparm = oneminus
3029 specmult = 4._rb*(specparm)
3030 js = 1 + int(specmult)
3031 fs = mod(specmult, 1._rb )
3032 fac000 = (1._rb - fs) * fac00(lay)
3033 fac010 = (1._rb - fs) * fac10(lay)
3034 fac100 = fs * fac00(lay)
3035 fac110 = fs * fac10(lay)
3036 fac001 = (1._rb - fs) * fac01(lay)
3037 fac011 = (1._rb - fs) * fac11(lay)
3038 fac101 = fs * fac01(lay)
3039 fac111 = fs * fac11(lay)
3040 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(17) + js
3041 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(17) + js
3043 tauray = colmol(lay) * rayl
3045 taug(lay,ngs16+ig) = speccomb * &
3046 (fac000 * absb(ind0,ig) + &
3047 fac100 * absb(ind0+1,ig) + &
3048 fac010 * absb(ind0+5,ig) + &
3049 fac110 * absb(ind0+6,ig) + &
3050 fac001 * absb(ind1,ig) + &
3051 fac101 * absb(ind1+1,ig) + &
3052 fac011 * absb(ind1+5,ig) + &
3053 fac111 * absb(ind1+6,ig)) + &
3055 forfac(lay) * (forref(indf,ig) + &
3057 (forref(indf+1,ig) - forref(indf,ig)))
3058 ! ssa(lay,ngs16+ig) = tauray/taug(lay,ngs16+ig)
3059 if (lay .eq. laysolfr) sfluxzen(ngs16+ig) = sfluxref(ig,js) &
3060 + fs * (sfluxref(ig,js+1) - sfluxref(ig,js))
3061 taur(lay,ngs16+ig) = tauray
3065 end subroutine taumol17
3066 !-------------------------------------------------------------------------------
3069 !-------------------------------------------------------------------------------
3071 !-------------------------------------------------------------------------------
3072 ! band 18: 4000-4650 cm-1 (low - h2o,ch4; high - ch4)
3073 !-------------------------------------------------------------------------------
3075 ! ------- Modules -------
3077 use parrrsw_k, only : ng18, ngs17
3078 use rrsw_kg18_k, only : absa, ka, absb, kb, forref, selfref, &
3079 sfluxref, rayl, layreffr, strrat
3081 ! ------- Declarations -------
3085 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
3086 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
3087 fac110, fac111, fs, speccomb, specmult, specparm, &
3089 !-------------------------------------------------------------------------------
3091 ! Compute the optical depth by interpolating in ln(pressure),
3092 ! temperature, and appropriate species. Below LAYTROP, the water
3093 ! vapor self-continuum is interpolated (in temperature) separately.
3097 ! Lower atmosphere loop
3100 if (jp(lay) .lt. layreffr .and. jp(lay+1) .ge. layreffr) &
3101 laysolfr = min(lay+1,laytrop)
3102 speccomb = colh2o(lay) + strrat*colch4(lay)
3103 specparm = colh2o(lay)/speccomb
3104 if (specparm .ge. oneminus) specparm = oneminus
3105 specmult = 8._rb*(specparm)
3106 js = 1 + int(specmult)
3107 fs = mod(specmult, 1._rb )
3108 fac000 = (1._rb - fs) * fac00(lay)
3109 fac010 = (1._rb - fs) * fac10(lay)
3110 fac100 = fs * fac00(lay)
3111 fac110 = fs * fac10(lay)
3112 fac001 = (1._rb - fs) * fac01(lay)
3113 fac011 = (1._rb - fs) * fac11(lay)
3114 fac101 = fs * fac01(lay)
3115 fac111 = fs * fac11(lay)
3116 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(18) + js
3117 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(18) + js
3120 tauray = colmol(lay) * rayl
3122 taug(lay,ngs17+ig) = speccomb * &
3123 (fac000 * absa(ind0,ig) + &
3124 fac100 * absa(ind0+1,ig) + &
3125 fac010 * absa(ind0+9,ig) + &
3126 fac110 * absa(ind0+10,ig) + &
3127 fac001 * absa(ind1,ig) + &
3128 fac101 * absa(ind1+1,ig) + &
3129 fac011 * absa(ind1+9,ig) + &
3130 fac111 * absa(ind1+10,ig)) + &
3132 (selffac(lay) * (selfref(inds,ig) + &
3134 (selfref(inds+1,ig) - selfref(inds,ig))) + &
3135 forfac(lay) * (forref(indf,ig) + &
3137 (forref(indf+1,ig) - forref(indf,ig))))
3138 ! ssa(lay,ngs17+ig) = tauray/taug(lay,ngs17+ig)
3139 if (lay .eq. laysolfr) sfluxzen(ngs17+ig) = sfluxref(ig,js) &
3140 + fs * (sfluxref(ig,js+1) - sfluxref(ig,js))
3141 taur(lay,ngs17+ig) = tauray
3145 ! Upper atmosphere loop
3147 do lay = laytrop+1,nlayers
3148 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(18) + 1
3149 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(18) + 1
3150 tauray = colmol(lay) * rayl
3153 taug(lay,ngs17+ig) = colch4(lay) * &
3154 (fac00(lay) * absb(ind0,ig) + &
3155 fac10(lay) * absb(ind0+1,ig) + &
3156 fac01(lay) * absb(ind1,ig) + &
3157 fac11(lay) * absb(ind1+1,ig))
3158 ! ssa(lay,ngs17+ig) = tauray/taug(lay,ngs17+ig)
3159 taur(lay,ngs17+ig) = tauray
3163 end subroutine taumol18
3164 !-------------------------------------------------------------------------------
3167 !-------------------------------------------------------------------------------
3169 !-------------------------------------------------------------------------------
3170 ! band 19: 4650-5150 cm-1 (low - h2o,co2; high - co2)
3171 !-------------------------------------------------------------------------------
3173 ! ------- Modules -------
3175 use parrrsw_k, only : ng19, ngs18
3176 use rrsw_kg19_k, only : absa, ka, absb, kb, forref, selfref, &
3177 sfluxref, rayl, layreffr, strrat
3179 ! ------- Declarations -------
3183 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
3184 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
3185 fac110, fac111, fs, speccomb, specmult, specparm, &
3187 !-------------------------------------------------------------------------------
3189 ! Compute the optical depth by interpolating in ln(pressure),
3190 ! temperature, and appropriate species. Below LAYTROP, the water
3191 ! vapor self-continuum is interpolated (in temperature) separately.
3195 ! Lower atmosphere loop
3198 if (jp(lay) .lt. layreffr .and. jp(lay+1) .ge. layreffr) &
3199 laysolfr = min(lay+1,laytrop)
3200 speccomb = colh2o(lay) + strrat*colco2(lay)
3201 specparm = colh2o(lay)/speccomb
3202 if (specparm .ge. oneminus) specparm = oneminus
3203 specmult = 8._rb*(specparm)
3204 js = 1 + int(specmult)
3205 fs = mod(specmult, 1._rb )
3206 fac000 = (1._rb - fs) * fac00(lay)
3207 fac010 = (1._rb - fs) * fac10(lay)
3208 fac100 = fs * fac00(lay)
3209 fac110 = fs * fac10(lay)
3210 fac001 = (1._rb - fs) * fac01(lay)
3211 fac011 = (1._rb - fs) * fac11(lay)
3212 fac101 = fs * fac01(lay)
3213 fac111 = fs * fac11(lay)
3214 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(19) + js
3215 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(19) + js
3218 tauray = colmol(lay) * rayl
3220 taug(lay,ngs18+ig) = speccomb * &
3221 (fac000 * absa(ind0,ig) + &
3222 fac100 * absa(ind0+1,ig) + &
3223 fac010 * absa(ind0+9,ig) + &
3224 fac110 * absa(ind0+10,ig) + &
3225 fac001 * absa(ind1,ig) + &
3226 fac101 * absa(ind1+1,ig) + &
3227 fac011 * absa(ind1+9,ig) + &
3228 fac111 * absa(ind1+10,ig)) + &
3230 (selffac(lay) * (selfref(inds,ig) + &
3232 (selfref(inds+1,ig) - selfref(inds,ig))) + &
3233 forfac(lay) * (forref(indf,ig) + &
3235 (forref(indf+1,ig) - forref(indf,ig))))
3236 ! ssa(lay,ngs18+ig) = tauray/taug(lay,ngs18+ig)
3237 if (lay .eq. laysolfr) sfluxzen(ngs18+ig) = sfluxref(ig,js) &
3238 + fs * (sfluxref(ig,js+1) - sfluxref(ig,js))
3239 taur(lay,ngs18+ig) = tauray
3243 ! Upper atmosphere loop
3245 do lay = laytrop+1,nlayers
3246 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(19) + 1
3247 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(19) + 1
3248 tauray = colmol(lay) * rayl
3250 taug(lay,ngs18+ig) = colco2(lay) * &
3251 (fac00(lay) * absb(ind0,ig) + &
3252 fac10(lay) * absb(ind0+1,ig) + &
3253 fac01(lay) * absb(ind1,ig) + &
3254 fac11(lay) * absb(ind1+1,ig))
3255 ! ssa(lay,ngs18+ig) = tauray/taug(lay,ngs18+ig)
3256 taur(lay,ngs18+ig) = tauray
3260 end subroutine taumol19
3261 !-------------------------------------------------------------------------------
3264 !-------------------------------------------------------------------------------
3266 !-------------------------------------------------------------------------------
3267 ! band 20: 5150-6150 cm-1 (low - h2o; high - h2o)
3268 !-------------------------------------------------------------------------------
3270 ! ------- Modules -------
3272 use parrrsw_k, only : ng20, ngs19
3273 use rrsw_kg20_k, only : absa, ka, absb, kb, forref, selfref, &
3274 sfluxref, absch4, rayl, layreffr
3279 ! ------- Declarations -------
3283 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
3284 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
3285 fac110, fac111, fs, speccomb, specmult, specparm, &
3287 !-------------------------------------------------------------------------------
3289 ! Compute the optical depth by interpolating in ln(pressure),
3290 ! temperature, and appropriate species. Below LAYTROP, the water
3291 ! vapor self-continuum is interpolated (in temperature) separately.
3295 ! Lower atmosphere loop
3298 if (jp(lay) .lt. layreffr .and. jp(lay+1) .ge. layreffr) &
3299 laysolfr = min(lay+1,laytrop)
3300 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(20) + 1
3301 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(20) + 1
3304 tauray = colmol(lay) * rayl
3306 taug(lay,ngs19+ig) = colh2o(lay) * &
3307 ((fac00(lay) * absa(ind0,ig) + &
3308 fac10(lay) * absa(ind0+1,ig) + &
3309 fac01(lay) * absa(ind1,ig) + &
3310 fac11(lay) * absa(ind1+1,ig)) + &
3311 selffac(lay) * (selfref(inds,ig) + &
3313 (selfref(inds+1,ig) - selfref(inds,ig))) + &
3314 forfac(lay) * (forref(indf,ig) + &
3316 (forref(indf+1,ig) - forref(indf,ig)))) &
3317 + colch4(lay) * absch4(ig)
3318 ! ssa(lay,ngs19+ig) = tauray/taug(lay,ngs19+ig)
3319 taur(lay,ngs19+ig) = tauray
3320 if (lay .eq. laysolfr) sfluxzen(ngs19+ig) = sfluxref(ig)
3324 ! Upper atmosphere loop
3326 do lay = laytrop+1,nlayers
3327 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(20) + 1
3328 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(20) + 1
3330 tauray = colmol(lay) * rayl
3332 taug(lay,ngs19+ig) = colh2o(lay) * &
3333 (fac00(lay) * absb(ind0,ig) + &
3334 fac10(lay) * absb(ind0+1,ig) + &
3335 fac01(lay) * absb(ind1,ig) + &
3336 fac11(lay) * absb(ind1+1,ig) + &
3337 forfac(lay) * (forref(indf,ig) + &
3339 (forref(indf+1,ig) - forref(indf,ig)))) + &
3340 colch4(lay) * absch4(ig)
3341 ! ssa(lay,ngs19+ig) = tauray/taug(lay,ngs19+ig)
3342 taur(lay,ngs19+ig) = tauray
3346 end subroutine taumol20
3347 !-------------------------------------------------------------------------------
3350 !-------------------------------------------------------------------------------
3352 !-------------------------------------------------------------------------------
3353 ! band 21: 6150-7700 cm-1 (low - h2o,co2; high - h2o,co2)
3354 !-------------------------------------------------------------------------------
3356 ! ------- Modules -------
3358 use parrrsw_k, only : ng21, ngs20
3359 use rrsw_kg21_k, only : absa, ka, absb, kb, forref, selfref, &
3360 sfluxref, rayl, layreffr, strrat
3362 ! ------- Declarations -------
3366 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
3367 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
3368 fac110, fac111, fs, speccomb, specmult, specparm, &
3370 !-------------------------------------------------------------------------------
3372 ! Compute the optical depth by interpolating in ln(pressure),
3373 ! temperature, and appropriate species. Below LAYTROP, the water
3374 ! vapor self-continuum is interpolated (in temperature) separately.
3378 ! Lower atmosphere loop
3381 if (jp(lay) .lt. layreffr .and. jp(lay+1) .ge. layreffr) &
3382 laysolfr = min(lay+1,laytrop)
3383 speccomb = colh2o(lay) + strrat*colco2(lay)
3384 specparm = colh2o(lay)/speccomb
3385 if (specparm .ge. oneminus) specparm = oneminus
3386 specmult = 8._rb*(specparm)
3387 js = 1 + int(specmult)
3388 fs = mod(specmult, 1._rb )
3389 fac000 = (1._rb - fs) * fac00(lay)
3390 fac010 = (1._rb - fs) * fac10(lay)
3391 fac100 = fs * fac00(lay)
3392 fac110 = fs * fac10(lay)
3393 fac001 = (1._rb - fs) * fac01(lay)
3394 fac011 = (1._rb - fs) * fac11(lay)
3395 fac101 = fs * fac01(lay)
3396 fac111 = fs * fac11(lay)
3397 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(21) + js
3398 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(21) + js
3401 tauray = colmol(lay) * rayl
3403 taug(lay,ngs20+ig) = speccomb * &
3404 (fac000 * absa(ind0,ig) + &
3405 fac100 * absa(ind0+1,ig) + &
3406 fac010 * absa(ind0+9,ig) + &
3407 fac110 * absa(ind0+10,ig) + &
3408 fac001 * absa(ind1,ig) + &
3409 fac101 * absa(ind1+1,ig) + &
3410 fac011 * absa(ind1+9,ig) + &
3411 fac111 * absa(ind1+10,ig)) + &
3413 (selffac(lay) * (selfref(inds,ig) + &
3415 (selfref(inds+1,ig) - selfref(inds,ig))) + &
3416 forfac(lay) * (forref(indf,ig) + &
3418 (forref(indf+1,ig) - forref(indf,ig))))
3419 ! ssa(lay,ngs20+ig) = tauray/taug(lay,ngs20+ig)
3420 if (lay .eq. laysolfr) sfluxzen(ngs20+ig) = sfluxref(ig,js) &
3421 + fs * (sfluxref(ig,js+1) - sfluxref(ig,js))
3422 taur(lay,ngs20+ig) = tauray
3426 ! Upper atmosphere loop
3428 do lay = laytrop+1,nlayers
3429 speccomb = colh2o(lay) + strrat*colco2(lay)
3430 specparm = colh2o(lay)/speccomb
3431 if (specparm .ge. oneminus) specparm = oneminus
3432 specmult = 4._rb*(specparm)
3433 js = 1 + int(specmult)
3434 fs = mod(specmult, 1._rb )
3435 fac000 = (1._rb - fs) * fac00(lay)
3436 fac010 = (1._rb - fs) * fac10(lay)
3437 fac100 = fs * fac00(lay)
3438 fac110 = fs * fac10(lay)
3439 fac001 = (1._rb - fs) * fac01(lay)
3440 fac011 = (1._rb - fs) * fac11(lay)
3441 fac101 = fs * fac01(lay)
3442 fac111 = fs * fac11(lay)
3443 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(21) + js
3444 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(21) + js
3446 tauray = colmol(lay) * rayl
3448 taug(lay,ngs20+ig) = speccomb * &
3449 (fac000 * absb(ind0,ig) + &
3450 fac100 * absb(ind0+1,ig) + &
3451 fac010 * absb(ind0+5,ig) + &
3452 fac110 * absb(ind0+6,ig) + &
3453 fac001 * absb(ind1,ig) + &
3454 fac101 * absb(ind1+1,ig) + &
3455 fac011 * absb(ind1+5,ig) + &
3456 fac111 * absb(ind1+6,ig)) + &
3458 forfac(lay) * (forref(indf,ig) + &
3460 (forref(indf+1,ig) - forref(indf,ig)))
3461 ! ssa(lay,ngs20+ig) = tauray/taug(lay,ngs20+ig)
3462 taur(lay,ngs20+ig) = tauray
3466 end subroutine taumol21
3467 !-------------------------------------------------------------------------------
3470 !-------------------------------------------------------------------------------
3472 !-------------------------------------------------------------------------------
3473 ! band 22: 7700-8050 cm-1 (low - h2o,o2; high - o2)
3474 !-------------------------------------------------------------------------------
3476 ! ------- Modules -------
3478 use parrrsw_k, only : ng22, ngs21
3479 use rrsw_kg22_k, only : absa, ka, absb, kb, forref, selfref, &
3480 sfluxref, rayl, layreffr, strrat
3482 ! ------- Declarations -------
3486 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
3487 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
3488 fac110, fac111, fs, speccomb, specmult, specparm, &
3489 tauray, o2adj, o2cont
3490 !-------------------------------------------------------------------------------
3492 ! The following factor is the ratio of total O2 band intensity (lines
3493 ! and Mate continuum) to O2 band intensity (line only). It is needed
3494 ! to adjust the optical depths since the k's include only lines.
3498 ! Compute the optical depth by interpolating in ln(pressure),
3499 ! temperature, and appropriate species. Below LAYTROP, the water
3500 ! vapor self-continuum is interpolated (in temperature) separately.
3504 ! Lower atmosphere loop
3507 if (jp(lay) .lt. layreffr .and. jp(lay+1) .ge. layreffr) &
3508 laysolfr = min(lay+1,laytrop)
3509 o2cont = 4.35e-4_rb*colo2(lay)/(350.0_rb*2.0_rb)
3510 speccomb = colh2o(lay) + o2adj*strrat*colo2(lay)
3511 specparm = colh2o(lay)/speccomb
3512 if (specparm .ge. oneminus) specparm = oneminus
3513 specmult = 8._rb*(specparm)
3514 ! odadj = specparm + o2adj * (1._rb - specparm)
3515 js = 1 + int(specmult)
3516 fs = mod(specmult, 1._rb )
3517 fac000 = (1._rb - fs) * fac00(lay)
3518 fac010 = (1._rb - fs) * fac10(lay)
3519 fac100 = fs * fac00(lay)
3520 fac110 = fs * fac10(lay)
3521 fac001 = (1._rb - fs) * fac01(lay)
3522 fac011 = (1._rb - fs) * fac11(lay)
3523 fac101 = fs * fac01(lay)
3524 fac111 = fs * fac11(lay)
3525 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(22) + js
3526 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(22) + js
3529 tauray = colmol(lay) * rayl
3531 taug(lay,ngs21+ig) = speccomb * &
3532 (fac000 * absa(ind0,ig) + &
3533 fac100 * absa(ind0+1,ig) + &
3534 fac010 * absa(ind0+9,ig) + &
3535 fac110 * absa(ind0+10,ig) + &
3536 fac001 * absa(ind1,ig) + &
3537 fac101 * absa(ind1+1,ig) + &
3538 fac011 * absa(ind1+9,ig) + &
3539 fac111 * absa(ind1+10,ig)) + &
3541 (selffac(lay) * (selfref(inds,ig) + &
3543 (selfref(inds+1,ig) - selfref(inds,ig))) + &
3544 forfac(lay) * (forref(indf,ig) + &
3546 (forref(indf+1,ig) - forref(indf,ig)))) &
3548 ! ssa(lay,ngs21+ig) = tauray/taug(lay,ngs21+ig)
3549 if (lay .eq. laysolfr) sfluxzen(ngs21+ig) = sfluxref(ig,js) &
3550 + fs * (sfluxref(ig,js+1) - sfluxref(ig,js))
3551 taur(lay,ngs21+ig) = tauray
3555 ! Upper atmosphere loop
3557 do lay = laytrop+1,nlayers
3558 o2cont = 4.35e-4_rb*colo2(lay)/(350.0_rb*2.0_rb)
3559 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(22) + 1
3560 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(22) + 1
3561 tauray = colmol(lay) * rayl
3563 taug(lay,ngs21+ig) = colo2(lay) * o2adj * &
3564 (fac00(lay) * absb(ind0,ig) + &
3565 fac10(lay) * absb(ind0+1,ig) + &
3566 fac01(lay) * absb(ind1,ig) + &
3567 fac11(lay) * absb(ind1+1,ig)) + &
3569 ! ssa(lay,ngs21+ig) = tauray/taug(lay,ngs21+ig)
3570 taur(lay,ngs21+ig) = tauray
3574 end subroutine taumol22
3575 !-------------------------------------------------------------------------------
3578 !-------------------------------------------------------------------------------
3580 !-------------------------------------------------------------------------------
3581 ! band 23: 8050-12850 cm-1 (low - h2o; high - nothing)
3582 !-------------------------------------------------------------------------------
3584 ! ------- Modules -------
3586 use parrrsw_k, only : ng23, ngs22
3587 use rrsw_kg23_k, only : absa, ka, forref, selfref, &
3588 sfluxref, rayl, layreffr, givfac
3590 ! ------- Declarations -------
3594 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
3595 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
3596 fac110, fac111, fs, speccomb, specmult, specparm, &
3598 !-------------------------------------------------------------------------------
3600 ! Compute the optical depth by interpolating in ln(pressure),
3601 ! temperature, and appropriate species. Below LAYTROP, the water
3602 ! vapor self-continuum is interpolated (in temperature) separately.
3606 ! Lower atmosphere loop
3609 if (jp(lay) .lt. layreffr .and. jp(lay+1) .ge. layreffr) &
3610 laysolfr = min(lay+1,laytrop)
3611 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(23) + 1
3612 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(23) + 1
3616 tauray = colmol(lay) * rayl(ig)
3617 taug(lay,ngs22+ig) = colh2o(lay) * &
3618 (givfac * (fac00(lay) * absa(ind0,ig) + &
3619 fac10(lay) * absa(ind0+1,ig) + &
3620 fac01(lay) * absa(ind1,ig) + &
3621 fac11(lay) * absa(ind1+1,ig)) + &
3622 selffac(lay) * (selfref(inds,ig) + &
3624 (selfref(inds+1,ig) - selfref(inds,ig))) + &
3625 forfac(lay) * (forref(indf,ig) + &
3627 (forref(indf+1,ig) - forref(indf,ig))))
3628 ! ssa(lay,ngs22+ig) = tauray/taug(lay,ngs22+ig)
3629 if (lay .eq. laysolfr) sfluxzen(ngs22+ig) = sfluxref(ig)
3630 taur(lay,ngs22+ig) = tauray
3634 ! Upper atmosphere loop
3636 do lay = laytrop+1,nlayers
3638 ! taug(lay,ngs22+ig) = colmol(lay) * rayl(ig)
3639 ! ssa(lay,ngs22+ig) = 1.0_rb
3640 taug(lay,ngs22+ig) = 0._rb
3641 taur(lay,ngs22+ig) = colmol(lay) * rayl(ig)
3645 end subroutine taumol23
3646 !-------------------------------------------------------------------------------
3649 !-------------------------------------------------------------------------------
3651 !-------------------------------------------------------------------------------
3652 ! band 24: 12850-16000 cm-1 (low - h2o,o2; high - o2)
3653 !-------------------------------------------------------------------------------
3655 ! ------- Modules -------
3657 use parrrsw_k, only : ng24, ngs23
3658 use rrsw_kg24_k, only : absa, ka, absb, kb, forref, selfref, &
3659 sfluxref, abso3a, abso3b, rayla, raylb, &
3662 ! ------- Declarations -------
3666 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
3667 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
3668 fac110, fac111, fs, speccomb, specmult, specparm, &
3670 !-------------------------------------------------------------------------------
3672 ! Compute the optical depth by interpolating in ln(pressure),
3673 ! temperature, and appropriate species. Below LAYTROP, the water
3674 ! vapor self-continuum is interpolated (in temperature) separately.
3678 ! Lower atmosphere loop
3681 if (jp(lay) .lt. layreffr .and. jp(lay+1) .ge. layreffr) &
3682 laysolfr = min(lay+1,laytrop)
3683 speccomb = colh2o(lay) + strrat*colo2(lay)
3684 specparm = colh2o(lay)/speccomb
3685 if (specparm .ge. oneminus) specparm = oneminus
3686 specmult = 8._rb*(specparm)
3687 js = 1 + int(specmult)
3688 fs = mod(specmult, 1._rb )
3689 fac000 = (1._rb - fs) * fac00(lay)
3690 fac010 = (1._rb - fs) * fac10(lay)
3691 fac100 = fs * fac00(lay)
3692 fac110 = fs * fac10(lay)
3693 fac001 = (1._rb - fs) * fac01(lay)
3694 fac011 = (1._rb - fs) * fac11(lay)
3695 fac101 = fs * fac01(lay)
3696 fac111 = fs * fac11(lay)
3697 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(24) + js
3698 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(24) + js
3702 tauray = colmol(lay) * (rayla(ig,js) + &
3703 fs * (rayla(ig,js+1) - rayla(ig,js)))
3704 taug(lay,ngs23+ig) = speccomb * &
3705 (fac000 * absa(ind0,ig) + &
3706 fac100 * absa(ind0+1,ig) + &
3707 fac010 * absa(ind0+9,ig) + &
3708 fac110 * absa(ind0+10,ig) + &
3709 fac001 * absa(ind1,ig) + &
3710 fac101 * absa(ind1+1,ig) + &
3711 fac011 * absa(ind1+9,ig) + &
3712 fac111 * absa(ind1+10,ig)) + &
3713 colo3(lay) * abso3a(ig) + &
3715 (selffac(lay) * (selfref(inds,ig) + &
3717 (selfref(inds+1,ig) - selfref(inds,ig))) + &
3718 forfac(lay) * (forref(indf,ig) + &
3720 (forref(indf+1,ig) - forref(indf,ig))))
3721 ! ssa(lay,ngs23+ig) = tauray/taug(lay,ngs23+ig)
3722 if (lay .eq. laysolfr) sfluxzen(ngs23+ig) = sfluxref(ig,js) &
3723 + fs * (sfluxref(ig,js+1) - sfluxref(ig,js))
3724 taur(lay,ngs23+ig) = tauray
3728 ! Upper atmosphere loop
3730 do lay = laytrop+1,nlayers
3731 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(24) + 1
3732 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(24) + 1
3734 tauray = colmol(lay) * raylb(ig)
3735 taug(lay,ngs23+ig) = colo2(lay) * &
3736 (fac00(lay) * absb(ind0,ig) + &
3737 fac10(lay) * absb(ind0+1,ig) + &
3738 fac01(lay) * absb(ind1,ig) + &
3739 fac11(lay) * absb(ind1+1,ig)) + &
3740 colo3(lay) * abso3b(ig)
3741 ! ssa(lay,ngs23+ig) = tauray/taug(lay,ngs23+ig)
3742 taur(lay,ngs23+ig) = tauray
3746 end subroutine taumol24
3747 !-------------------------------------------------------------------------------
3750 !-------------------------------------------------------------------------------
3752 !-------------------------------------------------------------------------------
3753 ! band 25: 16000-22650 cm-1 (low - h2o; high - nothing)
3754 !-------------------------------------------------------------------------------
3756 ! ------- Modules -------
3758 use parrrsw_k, only : ng25, ngs24
3759 use rrsw_kg25_k, only : absa, ka, &
3760 sfluxref, abso3a, abso3b, rayl, layreffr
3762 ! ------- Declarations -------
3766 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
3767 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
3768 fac110, fac111, fs, speccomb, specmult, specparm, &
3770 !-------------------------------------------------------------------------------
3772 ! Compute the optical depth by interpolating in ln(pressure),
3773 ! temperature, and appropriate species. Below LAYTROP, the water
3774 ! vapor self-continuum is interpolated (in temperature) separately.
3778 ! Lower atmosphere loop
3781 if (jp(lay) .lt. layreffr .and. jp(lay+1) .ge. layreffr) &
3782 laysolfr = min(lay+1,laytrop)
3783 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(25) + 1
3784 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(25) + 1
3786 tauray = colmol(lay) * rayl(ig)
3787 taug(lay,ngs24+ig) = colh2o(lay) * &
3788 (fac00(lay) * absa(ind0,ig) + &
3789 fac10(lay) * absa(ind0+1,ig) + &
3790 fac01(lay) * absa(ind1,ig) + &
3791 fac11(lay) * absa(ind1+1,ig)) + &
3792 colo3(lay) * abso3a(ig)
3793 ! ssa(lay,ngs24+ig) = tauray/taug(lay,ngs24+ig)
3794 if (lay .eq. laysolfr) sfluxzen(ngs24+ig) = sfluxref(ig)
3795 taur(lay,ngs24+ig) = tauray
3799 ! Upper atmosphere loop
3801 do lay = laytrop+1,nlayers
3803 tauray = colmol(lay) * rayl(ig)
3804 taug(lay,ngs24+ig) = colo3(lay) * abso3b(ig)
3805 ! ssa(lay,ngs24+ig) = tauray/taug(lay,ngs24+ig)
3806 taur(lay,ngs24+ig) = tauray
3810 end subroutine taumol25
3811 !-------------------------------------------------------------------------------
3814 !-------------------------------------------------------------------------------
3816 !-------------------------------------------------------------------------------
3817 ! band 26: 22650-29000 cm-1 (low - nothing; high - nothing)
3818 !-------------------------------------------------------------------------------
3820 ! ------- Modules -------
3822 use parrrsw_k, only : ng26, ngs25
3823 use rrsw_kg26_k, only : sfluxref, rayl
3825 ! ------- Declarations -------
3829 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
3830 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
3831 fac110, fac111, fs, speccomb, specmult, specparm, &
3833 !-------------------------------------------------------------------------------
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
3845 ! taug(lay,ngs25+ig) = colmol(lay) * rayl(ig)
3846 ! ssa(lay,ngs25+ig) = 1.0_rb
3847 if (lay .eq. laysolfr) sfluxzen(ngs25+ig) = sfluxref(ig)
3848 taug(lay,ngs25+ig) = 0._rb
3849 taur(lay,ngs25+ig) = colmol(lay) * rayl(ig)
3853 ! Upper atmosphere loop
3855 do lay = laytrop+1,nlayers
3857 ! taug(lay,ngs25+ig) = colmol(lay) * rayl(ig)
3858 ! ssa(lay,ngs25+ig) = 1.0_rb
3859 taug(lay,ngs25+ig) = 0._rb
3860 taur(lay,ngs25+ig) = colmol(lay) * rayl(ig)
3864 end subroutine taumol26
3865 !-------------------------------------------------------------------------------
3868 !-------------------------------------------------------------------------------
3870 !-------------------------------------------------------------------------------
3871 ! band 27: 29000-38000 cm-1 (low - o3; high - o3)
3872 !-------------------------------------------------------------------------------
3874 ! ------- Modules -------
3876 use parrrsw_k, only : ng27, ngs26
3877 use rrsw_kg27_k, only : absa, ka, absb, kb, &
3878 sfluxref, rayl, layreffr, scalekur
3880 ! ------- Declarations -------
3884 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
3885 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
3886 fac110, fac111, fs, speccomb, specmult, specparm, &
3888 !-------------------------------------------------------------------------------
3890 ! Compute the optical depth by interpolating in ln(pressure),
3891 ! temperature, and appropriate species. Below LAYTROP, the water
3892 ! vapor self-continuum is interpolated (in temperature) separately.
3894 ! Lower atmosphere loop
3897 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(27) + 1
3898 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(27) + 1
3900 tauray = colmol(lay) * rayl(ig)
3901 taug(lay,ngs26+ig) = colo3(lay) * &
3902 (fac00(lay) * absa(ind0,ig) + &
3903 fac10(lay) * absa(ind0+1,ig) + &
3904 fac01(lay) * absa(ind1,ig) + &
3905 fac11(lay) * absa(ind1+1,ig))
3906 ! ssa(lay,ngs26+ig) = tauray/taug(lay,ngs26+ig)
3907 taur(lay,ngs26+ig) = tauray
3913 ! Upper atmosphere loop
3915 do lay = laytrop+1,nlayers
3916 if (jp(lay-1) .lt. layreffr .and. jp(lay) .ge. layreffr) &
3918 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(27) + 1
3919 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(27) + 1
3921 tauray = colmol(lay) * rayl(ig)
3922 taug(lay,ngs26+ig) = colo3(lay) * &
3923 (fac00(lay) * absb(ind0,ig) + &
3924 fac10(lay) * absb(ind0+1,ig) + &
3925 fac01(lay) * absb(ind1,ig) + &
3926 fac11(lay) * absb(ind1+1,ig))
3927 ! ssa(lay,ngs26+ig) = tauray/taug(lay,ngs26+ig)
3928 if (lay.eq.laysolfr) sfluxzen(ngs26+ig) = scalekur * sfluxref(ig)
3929 taur(lay,ngs26+ig) = tauray
3933 end subroutine taumol27
3934 !-------------------------------------------------------------------------------
3937 !-------------------------------------------------------------------------------
3939 !-------------------------------------------------------------------------------
3940 ! band 28: 38000-50000 cm-1 (low - o3,o2; high - o3,o2)
3941 !------------------------------------------------------------------------------
3943 ! ------- Modules -------
3945 use parrrsw_k, only : ng28, ngs27
3946 use rrsw_kg28_k, only : absa, ka, absb, kb, &
3947 sfluxref, rayl, layreffr, strrat
3949 ! ------- Declarations -------
3953 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
3954 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
3955 fac110, fac111, fs, speccomb, specmult, specparm, &
3957 !-------------------------------------------------------------------------------
3959 ! Compute the optical depth by interpolating in ln(pressure),
3960 ! temperature, and appropriate species. Below LAYTROP, the water
3961 ! vapor self-continuum is interpolated (in temperature) separately.
3963 ! Lower atmosphere loop
3966 speccomb = colo3(lay) + strrat*colo2(lay)
3967 specparm = colo3(lay)/speccomb
3968 if (specparm .ge. oneminus) specparm = oneminus
3969 specmult = 8._rb*(specparm)
3970 js = 1 + int(specmult)
3971 fs = mod(specmult, 1._rb )
3972 fac000 = (1._rb - fs) * fac00(lay)
3973 fac010 = (1._rb - fs) * fac10(lay)
3974 fac100 = fs * fac00(lay)
3975 fac110 = fs * fac10(lay)
3976 fac001 = (1._rb - fs) * fac01(lay)
3977 fac011 = (1._rb - fs) * fac11(lay)
3978 fac101 = fs * fac01(lay)
3979 fac111 = fs * fac11(lay)
3980 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(28) + js
3981 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(28) + js
3982 tauray = colmol(lay) * rayl
3984 taug(lay,ngs27+ig) = speccomb * &
3985 (fac000 * absa(ind0,ig) + &
3986 fac100 * absa(ind0+1,ig) + &
3987 fac010 * absa(ind0+9,ig) + &
3988 fac110 * absa(ind0+10,ig) + &
3989 fac001 * absa(ind1,ig) + &
3990 fac101 * absa(ind1+1,ig) + &
3991 fac011 * absa(ind1+9,ig) + &
3992 fac111 * absa(ind1+10,ig))
3993 ! ssa(lay,ngs27+ig) = tauray/taug(lay,ngs27+ig)
3994 taur(lay,ngs27+ig) = tauray
4000 ! Upper atmosphere loop
4002 do lay = laytrop+1,nlayers
4003 if (jp(lay-1) .lt. layreffr .and. jp(lay) .ge. layreffr) &
4005 speccomb = colo3(lay) + strrat*colo2(lay)
4006 specparm = colo3(lay)/speccomb
4007 if (specparm .ge. oneminus) specparm = oneminus
4008 specmult = 4._rb*(specparm)
4009 js = 1 + int(specmult)
4010 fs = mod(specmult, 1._rb )
4011 fac000 = (1._rb - fs) * fac00(lay)
4012 fac010 = (1._rb - fs) * fac10(lay)
4013 fac100 = fs * fac00(lay)
4014 fac110 = fs * fac10(lay)
4015 fac001 = (1._rb - fs) * fac01(lay)
4016 fac011 = (1._rb - fs) * fac11(lay)
4017 fac101 = fs * fac01(lay)
4018 fac111 = fs * fac11(lay)
4019 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(28) + js
4020 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(28) + js
4021 tauray = colmol(lay) * rayl
4023 taug(lay,ngs27+ig) = speccomb * &
4024 (fac000 * absb(ind0,ig) + &
4025 fac100 * absb(ind0+1,ig) + &
4026 fac010 * absb(ind0+5,ig) + &
4027 fac110 * absb(ind0+6,ig) + &
4028 fac001 * absb(ind1,ig) + &
4029 fac101 * absb(ind1+1,ig) + &
4030 fac011 * absb(ind1+5,ig) + &
4031 fac111 * absb(ind1+6,ig))
4032 ! ssa(lay,ngs27+ig) = tauray/taug(lay,ngs27+ig)
4033 if (lay .eq. laysolfr) sfluxzen(ngs27+ig) = sfluxref(ig,js) &
4034 + fs * (sfluxref(ig,js+1) - sfluxref(ig,js))
4035 taur(lay,ngs27+ig) = tauray
4039 end subroutine taumol28
4040 !-------------------------------------------------------------------------------
4043 !-------------------------------------------------------------------------------
4045 !-------------------------------------------------------------------------------
4046 ! band 29: 820-2600 cm-1 (low - h2o; high - co2)
4047 !-------------------------------------------------------------------------------
4049 ! ------- Modules -------
4051 use parrrsw_k, only : ng29, ngs28
4052 use rrsw_kg29_k, only : absa, ka, absb, kb, forref, selfref, &
4053 sfluxref, absh2o, absco2, rayl, layreffr
4055 ! ------- Declarations -------
4057 integer(kind=im) :: ig, ind0, ind1, inds, indf, js, lay, laysolfr
4058 real(kind=rb) :: fac000, fac001, fac010, fac011, fac100, fac101, &
4059 fac110, fac111, fs, speccomb, specmult, specparm, &
4061 !-------------------------------------------------------------------------------
4063 ! Compute the optical depth by interpolating in ln(pressure),
4064 ! temperature, and appropriate species. Below LAYTROP, the water
4065 ! vapor self-continuum is interpolated (in temperature) separately.
4067 ! Lower atmosphere loop
4070 ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(29) + 1
4071 ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(29) + 1
4074 tauray = colmol(lay) * rayl
4076 taug(lay,ngs28+ig) = colh2o(lay) * &
4077 ((fac00(lay) * absa(ind0,ig) + &
4078 fac10(lay) * absa(ind0+1,ig) + &
4079 fac01(lay) * absa(ind1,ig) + &
4080 fac11(lay) * absa(ind1+1,ig)) + &
4081 selffac(lay) * (selfref(inds,ig) + &
4083 (selfref(inds+1,ig) - selfref(inds,ig))) + &
4084 forfac(lay) * (forref(indf,ig) + &
4086 (forref(indf+1,ig) - forref(indf,ig)))) &
4087 + colco2(lay) * absco2(ig)
4088 ! ssa(lay,ngs28+ig) = tauray/taug(lay,ngs28+ig)
4089 taur(lay,ngs28+ig) = tauray
4095 ! Upper atmosphere loop
4097 do lay = laytrop+1,nlayers
4098 if (jp(lay-1) .lt. layreffr .and. jp(lay) .ge. layreffr) &
4100 ind0 = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(29) + 1
4101 ind1 = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(29) + 1
4102 tauray = colmol(lay) * rayl
4104 taug(lay,ngs28+ig) = colco2(lay) * &
4105 (fac00(lay) * absb(ind0,ig) + &
4106 fac10(lay) * absb(ind0+1,ig) + &
4107 fac01(lay) * absb(ind1,ig) + &
4108 fac11(lay) * absb(ind1+1,ig)) &
4109 + colh2o(lay) * absh2o(ig)
4110 ! ssa(lay,ngs28+ig) = tauray/taug(lay,ngs28+ig)
4111 if (lay .eq. laysolfr) sfluxzen(ngs28+ig) = sfluxref(ig)
4112 taur(lay,ngs28+ig) = tauray
4116 end subroutine taumol29
4117 !-------------------------------------------------------------------------------
4120 !-------------------------------------------------------------------------------
4121 end subroutine taumol_sw
4122 !-------------------------------------------------------------------------------
4125 !-------------------------------------------------------------------------------
4126 end module rrtmg_sw_taumol_k
4127 !-------------------------------------------------------------------------------
4130 !-------------------------------------------------------------------------------
4131 module rrtmg_sw_init_k
4132 !-------------------------------------------------------------------------------
4133 ! --------------------------------------------------------------------------
4135 ! | Copyright 2002-2008, Atmospheric & Environmental Research, Inc. (AER). |
4136 ! | This software may be used, copied, or redistributed as long as it is |
4137 ! | not sold and this copyright notice is reproduced on each copy made. |
4138 ! | This model is provided as is without any express or implied warranties. |
4139 ! | (http://www.rtweb.aer.com/) |
4141 ! --------------------------------------------------------------------------
4142 ! ------- Modules -------
4144 use parkind_k, only : im => kind_im, rb => kind_rb
4146 use rrtmg_sw_setcoef_k, only: swatmref
4151 !-------------------------------------------------------------------------------
4154 !-------------------------------------------------------------------------------
4155 subroutine rrtmg_sw_ini(cpdair)
4156 !-------------------------------------------------------------------------------
4158 ! This subroutine performs calculations necessary for the initialization
4159 ! of the shortwave model. Lookup tables are computed for use in the SW
4160 ! radiative transfer, and input absorption coefficient data for each
4161 ! spectral band are reduced from 224 g-point intervals to 112.
4164 ! 2004-02 Michael J. Iacono Original version
4165 ! 2006-07 M. J. Iacono Revision for F90 formatting
4167 !-------------------------------------------------------------------------------
4168 use parrrsw_k, only : mg, nbndsw, ngptsw
4169 use rrsw_tbl_k, only: ntbl, tblint, pade, bpade, tau_tbl, exp_tbl
4170 use rrsw_vsn_k, only: hvrini, hnamini
4172 real(kind=rb), intent(in) :: cpdair ! Specific heat capacity of dry air
4173 ! at constant pressure at 273 K
4176 ! ------- Local -------
4178 integer(kind=im) :: ibnd, igc, ig, ind, ipr
4179 integer(kind=im) :: igcsm, iprsm
4180 integer(kind=im) :: itr
4182 real(kind=rb) :: wtsum, wtsm(mg)
4183 real(kind=rb) :: tfn
4185 real(kind=rb), parameter :: expeps = 1.e-20
4186 ! Smallest value for exponential table
4188 ! ------- Definitions -------
4189 ! Arrays for 10000-point look-up tables:
4190 ! TAU_TBL Clear-sky optical depth
4191 ! EXP_TBL Exponential lookup table for transmittance
4192 ! PADE Pade approximation constant (= 0.278)
4193 ! BPADE Inverse of the Pade approximation constant
4195 hvrini = '$Revision: 1.3 $'
4197 ! Initialize model data
4199 call swdatinit(cpdair)
4200 call swcmbdat ! g-point interval reduction data
4201 call swaerpr ! aerosol optical properties
4202 call swcldpr ! cloud optical properties
4203 call swatmref ! reference MLS profile
4205 ! Moved to module_ra_rrtmg_sw for WRF
4206 ! call sw_kgb16 ! molecular absorption coefficients
4221 ! Define exponential lookup tables for transmittance. Tau is
4222 ! computed as a function of the tau transition function, and transmittance
4223 ! is calculated as a function of tau. All tables are computed at intervals
4224 ! of 0.0001. The inverse of the constant used in the Pade approximation to
4225 ! the tau transition function is set to bpade.
4228 exp_tbl(ntbl) = expeps
4229 bpade = 1.0_rb / pade
4231 tfn = real(itr) / real(ntbl)
4232 tau_tbl = bpade * tfn / (1._rb - tfn)
4233 exp_tbl(itr) = exp(-tau_tbl)
4234 if (exp_tbl(itr) .le. expeps) exp_tbl(itr) = expeps
4237 ! Perform g-point reduction from 16 per band (224 total points) to
4238 ! a band dependent number (112 total points) for all absorption
4239 ! coefficient input data and Planck fraction input data.
4240 ! Compute relative weighting for new g-point combinations.
4245 if (ngc(ibnd).lt.mg) then
4246 do igc = 1,ngc(ibnd)
4249 do ipr = 1,ngn(igcsm)
4251 wtsum = wtsum + wt(iprsm)
4255 do ig = 1,ng(ibnd+15)
4256 ind = (ibnd-1)*mg + ig
4257 rwgt(ind) = wt(ig)/wtsm(ngm(ind))
4260 do ig = 1,ng(ibnd+15)
4262 ind = (ibnd-1)*mg + ig
4268 ! Reduce g-points for absorption coefficient data in each LW spectral band.
4285 end subroutine rrtmg_sw_ini
4286 !-------------------------------------------------------------------------------
4289 !-------------------------------------------------------------------------------
4290 subroutine swdatinit(cpdair)
4292 ! --------- Modules ----------
4294 use rrsw_con_k, only: heatfac, grav, planck, boltz, &
4295 clight, avogad, alosmt, gascon, radcn1, radcn2, &
4301 real(kind=rb), intent(in) :: cpdair ! Specific heat capacity of dry air
4302 ! at constant pressure at 273 K
4305 ! Shortwave spectral band limits (wavenumbers)
4307 wavenum1(:) = (/2600._rb, 3250._rb, 4000._rb, 4650._rb, 5150._rb, 6150._rb, &
4308 7700._rb, 8050._rb,12850._rb,16000._rb,22650._rb,29000._rb, &
4309 38000._rb, 820._rb/)
4310 wavenum2(:) = (/3250._rb, 4000._rb, 4650._rb, 5150._rb, 6150._rb, 7700._rb, &
4311 8050._rb,12850._rb,16000._rb,22650._rb,29000._rb,38000._rb, &
4312 50000._rb, 2600._rb/)
4313 delwave(:) = (/ 650._rb, 750._rb, 650._rb, 500._rb, 1000._rb, 1550._rb, &
4314 350._rb, 4800._rb, 3150._rb, 6650._rb, 6350._rb, 9000._rb, &
4315 12000._rb, 1780._rb/)
4317 ! Spectral band information
4319 ng(:) = (/16,16,16,16,16,16,16,16,16,16,16,16,16,16/)
4320 nspa(:) = (/9,9,9,9,1,9,9,1,9,1,0,1,9,1/)
4321 nspb(:) = (/1,5,1,1,1,5,1,0,1,0,0,1,5,1/)
4323 ! Fundamental physical constants from NIST 2002
4325 grav = 9.8066_rb ! Acceleration of gravity
4327 planck = 6.62606876e-27_rb ! Planck constant
4328 ! (ergs s; g cm2 s-1)
4329 boltz = 1.3806503e-16_rb ! Boltzmann constant
4330 ! (ergs K-1; g cm2 s-2 K-1)
4331 clight = 2.99792458e+10_rb ! Speed of light in a vacuum
4333 avogad = 6.02214199e+23_rb ! Avogadro constant
4335 alosmt = 2.6867775e+19_rb ! Loschmidt constant
4337 gascon = 8.31447200e+07_rb ! Molar gas constant
4339 radcn1 = 1.191042772e-12_rb ! First radiation constant
4341 radcn2 = 1.4387752_rb ! Second radiation constant
4343 sbcnst = 5.670400e-04_rb ! Stefan-Boltzmann constant
4345 secdy = 8.6400e4_rb ! Number of seconds per day
4348 ! units are generally cgs
4350 ! The first and second radiation constants are taken from NIST.
4351 ! They were previously obtained from the relations:
4352 ! radcn1 = 2.*planck*clight*clight*1.e-07
4353 ! radcn2 = planck*clight/boltz
4355 ! Heatfac is the factor by which delta-flux / delta-pressure is
4356 ! multiplied, with flux in W/m-2 and pressure in mbar, to get
4357 ! the heating rate in units of degrees/day. It is equal to:
4359 ! (g)x(#sec/day)x(1e-5)/(specific heat of air at const. p)
4360 ! Here, cpdair (1.004) is in units of J g-1 K-1, and the
4361 ! constant (1.e-5) converts mb to Pa and g-1 to kg-1.
4362 ! = (9.8066)(86400)(1e-5)/(1.004)
4363 ! heatfac = 8.4391_rb
4365 ! Modified value for consistency with CAM3:
4366 ! (g)x(#sec/day)x(1e-5)/(specific heat of air at const. p)
4367 ! Here, cpdair (1.00464) is in units of J g-1 K-1, and the
4368 ! constant (1.e-5) converts mb to Pa and g-1 to kg-1.
4369 ! = (9.80616)(86400)(1e-5)/(1.00464)
4370 ! heatfac = 8.43339130434_rb
4372 ! Calculated value (from constants above and input cpdair)
4373 ! (grav) x (#sec/day) / (specific heat of dry air at const. p x 1.e2)
4374 ! Here, cpdair is in units of J kg-1 K-1, and the constant (1.e2)
4375 ! converts mb to Pa when heatfac is multiplied by W m-2 mb-1.
4377 heatfac = grav * secdy / (cpdair * 1.e2_rb)
4379 end subroutine swdatinit
4380 !-------------------------------------------------------------------------------
4383 !-------------------------------------------------------------------------------
4385 !-------------------------------------------------------------------------------
4387 ! ------- Definitions -------
4388 ! Arrays for the g-point reduction from 224 to 112 for the 16 LW bands:
4389 ! This mapping from 224 to 112 points has been carefully selected to
4390 ! minimize the effect on the resulting fluxes and cooling rates, and
4391 ! caution should be used if the mapping is modified. The full 224
4392 ! g-point set can be restored with ngpt=224, ngc=16*16, ngn=224*1., etc.
4393 ! ngpt The total number of new g-points
4394 ! ngc The number of new g-points in each band
4395 ! ngs The cumulative sum of new g-points for each band
4396 ! ngm The index of each new g-point relative to the original
4397 ! 16 g-points for each band.
4398 ! ngn The number of original g-points that are combined to make
4399 ! each new g-point in each band.
4400 ! ngb The band index for each new g-point.
4401 ! wt RRTM weights for 16 g-points.
4403 ! Use this set for 112 quadrature point (g-point) model
4404 ! ------- Data statements -------
4407 ngc(:) = (/ 6,12, 8, 8,10,10, 2,10, 8, 6, 6, 8, 6,12 /)
4408 ngs(:) = (/ 6,18,26,34,44,54,56,66,74,80,86,94,100,112 /)
4409 ngm(:) = (/ 1,1,2,2,3,3,4,4,5,5,5,5,6,6,6,6, &
4411 1,2,3,4,5,6,6,7,8,8,9,10,10,11,12,12, &
4413 1,2,3,4,5,5,6,6,7,7,7,7,8,8,8,8, &
4415 1,2,3,4,5,5,6,6,7,7,7,7,8,8,8,8, &
4417 1,2,3,4,5,6,7,8,9,9,10,10,10,10,10,10, &
4419 1,2,3,4,5,6,7,8,9,9,10,10,10,10,10,10, &
4421 1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2, &
4423 1,1,2,2,3,4,5,6,7,8,9,9,10,10,10,10, &
4425 1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8, &
4427 1,2,3,3,4,4,5,5,5,5,6,6,6,6,6,6, &
4429 1,2,3,3,4,4,5,5,5,5,6,6,6,6,6,6, &
4431 1,2,3,4,5,6,7,7,7,7,8,8,8,8,8,8, &
4433 1,2,3,3,4,4,5,5,5,5,6,6,6,6,6,6, &
4435 1,2,3,4,5,5,6,6,7,7,8,8,9,10,11,12 /)
4437 ngn(:) = (/ 2,2,2,2,4,4, &
4439 1,1,1,1,1,2,1,2,1,2,1,2, &
4445 1,1,1,1,1,1,1,1,2,6, &
4447 1,1,1,1,1,1,1,1,2,6, &
4451 2,2,1,1,1,1,1,1,2,4, &
4463 1,1,1,1,2,2,2,2,1,1,1,1 /)
4465 ngb(:) = (/ 16,16,16,16,16,16, &
4467 17,17,17,17,17,17,17,17,17,17,17,17, &
4469 18,18,18,18,18,18,18,18, &
4471 19,19,19,19,19,19,19,19, &
4473 20,20,20,20,20,20,20,20,20,20, &
4475 21,21,21,21,21,21,21,21,21,21, &
4479 23,23,23,23,23,23,23,23,23,23, &
4481 24,24,24,24,24,24,24,24, &
4483 25,25,25,25,25,25, &
4485 26,26,26,26,26,26, &
4487 27,27,27,27,27,27,27,27, &
4489 28,28,28,28,28,28, &
4491 29,29,29,29,29,29,29,29,29,29,29,29 /)
4494 ! Use this set for full 224 quadrature point (g-point) model
4495 ! ------- Data statements -------
4496 ! ngc(:) = (/ 16,16,16,16,16,16,16,16,16,16,16,16,16,16 /)
4497 ! ngs(:) = (/ 16,32,48,64,80,96,112,128,144,160,176,192,208,224 /)
4498 ! ngm(:) = (/ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 16
4499 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 17
4500 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 18
4501 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 19
4502 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 20
4503 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 21
4504 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 22
4505 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 23
4506 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 24
4507 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 25
4508 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 26
4509 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 27
4510 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, & ! band 28
4511 ! 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 /) ! band 29
4512 ! ngn(:) = (/ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 16
4513 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 17
4514 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 18
4515 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 19
4516 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 20
4517 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 21
4518 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 22
4519 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 23
4520 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 24
4521 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 25
4522 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 26
4523 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 27
4524 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, & ! band 28
4525 ! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /) ! band 29
4526 ! ngb(:) = (/ 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, & ! band 16
4527 ! 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, & ! band 17
4528 ! 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, & ! band 18
4529 ! 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19, & ! band 19
4530 ! 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, & ! band 20
4531 ! 21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21, & ! band 21
4532 ! 22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, & ! band 22
4533 ! 23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, & ! band 23
4534 ! 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, & ! band 24
4535 ! 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, & ! band 25
4536 ! 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, & ! band 26
4537 ! 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27, & ! band 27
4538 ! 28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28, & ! band 28
4539 ! 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 /) ! band 29
4540 wt(:) = (/ 0.1527534276_rb, 0.1491729617_rb, 0.1420961469_rb, &
4541 0.1316886544_rb, 0.1181945205_rb, 0.1019300893_rb, &
4542 0.0832767040_rb, 0.0626720116_rb, 0.0424925000_rb, &
4543 0.0046269894_rb, 0.0038279891_rb, 0.0030260086_rb, &
4544 0.0022199750_rb, 0.0014140010_rb, 0.0005330000_rb, &
4547 end subroutine swcmbdat
4548 !-------------------------------------------------------------------------------
4551 !-------------------------------------------------------------------------------
4553 !-------------------------------------------------------------------------------
4556 ! Define spectral aerosol properties for six ECMWF aerosol types
4557 ! as used in the ECMWF IFS model (see module rrsw_aer.F90 for details)
4560 ! 2003-02 JJMorcrette, ECMWF Defined for rrtmg_sw 14 spectral bands
4561 ! 2006-07 MJIacono, AER Reformatted for consistency with rrtmg_lw
4563 !-------------------------------------------------------------------------------
4564 use rrsw_aer_k, only : rsrtaua, rsrpiza, rsrasya
4568 rsrtaua( 1, :) = (/ &
4569 0.10849_rb, 0.66699_rb, 0.65255_rb, 0.11600_rb, 0.06529_rb, 0.04468_rb/)
4570 rsrtaua( 2, :) = (/ &
4571 0.10849_rb, 0.66699_rb, 0.65255_rb, 0.11600_rb, 0.06529_rb, 0.04468_rb/)
4572 rsrtaua( 3, :) = (/ &
4573 0.20543_rb, 0.84642_rb, 0.84958_rb, 0.21673_rb, 0.28270_rb, 0.10915_rb/)
4574 rsrtaua( 4, :) = (/ &
4575 0.20543_rb, 0.84642_rb, 0.84958_rb, 0.21673_rb, 0.28270_rb, 0.10915_rb/)
4576 rsrtaua( 5, :) = (/ &
4577 0.20543_rb, 0.84642_rb, 0.84958_rb, 0.21673_rb, 0.28270_rb, 0.10915_rb/)
4578 rsrtaua( 6, :) = (/ &
4579 0.20543_rb, 0.84642_rb, 0.84958_rb, 0.21673_rb, 0.28270_rb, 0.10915_rb/)
4580 rsrtaua( 7, :) = (/ &
4581 0.20543_rb, 0.84642_rb, 0.84958_rb, 0.21673_rb, 0.28270_rb, 0.10915_rb/)
4582 rsrtaua( 8, :) = (/ &
4583 0.52838_rb, 0.93285_rb, 0.93449_rb, 0.53078_rb, 0.67148_rb, 0.46608_rb/)
4584 rsrtaua( 9, :) = (/ &
4585 0.52838_rb, 0.93285_rb, 0.93449_rb, 0.53078_rb, 0.67148_rb, 0.46608_rb/)
4586 rsrtaua(10, :) = (/ &
4587 1.69446_rb, 1.11855_rb, 1.09212_rb, 1.72145_rb, 1.03858_rb, 1.12044_rb/)
4588 rsrtaua(11, :) = (/ &
4589 1.69446_rb, 1.11855_rb, 1.09212_rb, 1.72145_rb, 1.03858_rb, 1.12044_rb/)
4590 rsrtaua(12, :) = (/ &
4591 1.69446_rb, 1.11855_rb, 1.09212_rb, 1.72145_rb, 1.03858_rb, 1.12044_rb/)
4592 rsrtaua(13, :) = (/ &
4593 1.69446_rb, 1.11855_rb, 1.09212_rb, 1.72145_rb, 1.03858_rb, 1.12044_rb/)
4594 rsrtaua(14, :) = (/ &
4595 0.10849_rb, 0.66699_rb, 0.65255_rb, 0.11600_rb, 0.06529_rb, 0.04468_rb/)
4597 rsrpiza( 1, :) = (/.5230504_rb, .7868518_rb, .8531531_rb, .4048149_rb, &
4598 .8748231_rb, .2355667_rb/)
4599 rsrpiza( 2, :) = (/.5230504_rb, .7868518_rb, .8531531_rb, .4048149_rb, &
4600 .8748231_rb, .2355667_rb/)
4601 rsrpiza( 3, :) = (/.8287144_rb, .9949396_rb, .9279543_rb, .6765051_rb, &
4602 .9467578_rb, .9955938_rb/)
4603 rsrpiza( 4, :) = (/.8287144_rb, .9949396_rb, .9279543_rb, .6765051_rb, &
4604 .9467578_rb, .9955938_rb/)
4605 rsrpiza( 5, :) = (/.8287144_rb, .9949396_rb, .9279543_rb, .6765051_rb, &
4606 .9467578_rb, .9955938_rb/)
4607 rsrpiza( 6, :) = (/.8287144_rb, .9949396_rb, .9279543_rb, .6765051_rb, &
4608 .9467578_rb, .9955938_rb/)
4609 rsrpiza( 7, :) = (/.8287144_rb, .9949396_rb, .9279543_rb, .6765051_rb, &
4610 .9467578_rb, .9955938_rb/)
4611 rsrpiza( 8, :) = (/.8970131_rb, .9984940_rb, .9245594_rb, .7768385_rb, &
4612 .9532763_rb, .9999999_rb/)
4613 rsrpiza( 9, :) = (/.8970131_rb, .9984940_rb, .9245594_rb, .7768385_rb, &
4614 .9532763_rb, .9999999_rb/)
4615 rsrpiza(10, :) = (/.9148907_rb, .9956173_rb, .7504584_rb, .8131335_rb, &
4616 .9401905_rb, .9999999_rb/)
4617 rsrpiza(11, :) = (/.9148907_rb, .9956173_rb, .7504584_rb, .8131335_rb, &
4618 .9401905_rb, .9999999_rb/)
4619 rsrpiza(12, :) = (/.9148907_rb, .9956173_rb, .7504584_rb, .8131335_rb, &
4620 .9401905_rb, .9999999_rb/)
4621 rsrpiza(13, :) = (/.9148907_rb, .9956173_rb, .7504584_rb, .8131335_rb, &
4622 .9401905_rb, .9999999_rb/)
4623 rsrpiza(14, :) = (/.5230504_rb, .7868518_rb, .8531531_rb, .4048149_rb, &
4624 .8748231_rb, .2355667_rb/)
4626 rsrasya( 1, :) = (/0.700610_rb, 0.818871_rb, 0.702399_rb, 0.689886_rb, &
4627 .4629866_rb, .1907639_rb/)
4628 rsrasya( 2, :) = (/0.700610_rb, 0.818871_rb, 0.702399_rb, 0.689886_rb, &
4629 .4629866_rb, .1907639_rb/)
4630 rsrasya( 3, :) = (/0.636342_rb, 0.802467_rb, 0.691305_rb, 0.627497_rb, &
4631 .6105750_rb, .4760794_rb/)
4632 rsrasya( 4, :) = (/0.636342_rb, 0.802467_rb, 0.691305_rb, 0.627497_rb, &
4633 .6105750_rb, .4760794_rb/)
4634 rsrasya( 5, :) = (/0.636342_rb, 0.802467_rb, 0.691305_rb, 0.627497_rb, &
4635 .6105750_rb, .4760794_rb/)
4636 rsrasya( 6, :) = (/0.636342_rb, 0.802467_rb, 0.691305_rb, 0.627497_rb, &
4637 .6105750_rb, .4760794_rb/)
4638 rsrasya( 7, :) = (/0.636342_rb, 0.802467_rb, 0.691305_rb, 0.627497_rb, &
4639 .6105750_rb, .4760794_rb/)
4640 rsrasya( 8, :) = (/0.668431_rb, 0.788530_rb, 0.698682_rb, 0.657422_rb, &
4641 .6735182_rb, .6519706_rb/)
4642 rsrasya( 9, :) = (/0.668431_rb, 0.788530_rb, 0.698682_rb, 0.657422_rb, &
4643 .6735182_rb, .6519706_rb/)
4644 rsrasya(10, :) = (/0.729019_rb, 0.803129_rb, 0.784592_rb, 0.712208_rb, &
4645 .7008249_rb, .7270548_rb/)
4646 rsrasya(11, :) = (/0.729019_rb, 0.803129_rb, 0.784592_rb, 0.712208_rb, &
4647 .7008249_rb, .7270548_rb/)
4648 rsrasya(12, :) = (/0.729019_rb, 0.803129_rb, 0.784592_rb, 0.712208_rb, &
4649 .7008249_rb, .7270548_rb/)
4650 rsrasya(13, :) = (/0.729019_rb, 0.803129_rb, 0.784592_rb, 0.712208_rb, &
4651 .7008249_rb, .7270548_rb/)
4652 rsrasya(14, :) = (/0.700610_rb, 0.818871_rb, 0.702399_rb, 0.689886_rb, &
4653 .4629866_rb, .1907639_rb/)
4655 end subroutine swaerpr
4656 !-------------------------------------------------------------------------------
4659 !-------------------------------------------------------------------------------
4661 !-------------------------------------------------------------------------------
4664 ! The subroutines CMBGB16->CMBGB29 input the absorption coefficient
4665 ! data for each band, which are defined for 16 g-points and 14 spectral
4666 ! bands. The data are combined with appropriate weighting following the
4667 ! g-point mapping arrays specified in RRTMG_SW_INIT. Solar source
4668 ! function data in array SFLUXREF are combined without weighting. All
4669 ! g-point reduced data are put into new arrays for use in RRTMG_SW.
4671 ! band 16: 2600-3250 cm-1 (low key- h2o,ch4; high key - ch4)
4674 ! 1998-07 MJIacono Original version
4675 ! 2002-11 MJIacono Revision for RRTM_SW
4676 ! 2003-12 MJIacono Revision for RRTMG_SW
4677 ! 2006-07 MJIacono Revision for F90 reformatting
4678 !-----------------------------------------------------------------------
4680 use rrsw_kg16_k, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
4681 absa, ka, absb, kb, selfref, forref, sfluxref
4683 ! ------- Local -------
4685 integer(kind=im) :: jn, jt, jp, igc, ipr, iprsm
4686 real(kind=rb) :: sumk, sumf
4687 !-------------------------------------------------------------------------------
4696 sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm)
4698 ka(jn,jt,jp,igc) = sumk
4711 sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm)
4713 kb(jt,jp,igc) = sumk
4724 sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm)
4726 selfref(jt,igc) = sumk
4736 sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm)
4738 forref(jt,igc) = sumk
4747 sumf = sumf + sfluxrefo(iprsm)
4749 sfluxref(igc) = sumf
4752 end subroutine cmbgb16s
4753 !-------------------------------------------------------------------------------
4756 !-------------------------------------------------------------------------------
4758 !-------------------------------------------------------------------------------
4759 ! band 17: 3250-4000 cm-1 (low - h2o,co2; high - h2o,co2)
4760 !-------------------------------------------------------------------------------
4762 use rrsw_kg17_k, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
4763 absa, ka, absb, kb, selfref, forref, sfluxref
4765 ! ------- Local -------
4767 integer(kind=im) :: jn, jt, jp, igc, ipr, iprsm
4768 real(kind=rb) :: sumk, sumf
4769 !-------------------------------------------------------------------------------
4776 do ipr = 1,ngn(ngs(1)+igc)
4778 sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+16)
4780 ka(jn,jt,jp,igc) = sumk
4792 do ipr = 1,ngn(ngs(1)+igc)
4794 sumk = sumk + kbo(jn,jt,jp,iprsm)*rwgt(iprsm+16)
4796 kb(jn,jt,jp,igc) = sumk
4806 do ipr = 1,ngn(ngs(1)+igc)
4808 sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+16)
4810 selfref(jt,igc) = sumk
4818 do ipr = 1,ngn(ngs(1)+igc)
4820 sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+16)
4822 forref(jt,igc) = sumk
4830 do ipr = 1,ngn(ngs(1)+igc)
4832 sumf = sumf + sfluxrefo(iprsm,jp)
4834 sfluxref(igc,jp) = sumf
4838 end subroutine cmbgb17
4839 !-------------------------------------------------------------------------------
4842 !-------------------------------------------------------------------------------
4844 !-------------------------------------------------------------------------------
4845 ! band 18: 4000-4650 cm-1 (low - h2o,ch4; high - ch4)
4846 !-------------------------------------------------------------------------------
4848 use rrsw_kg18_k, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
4849 absa, ka, absb, kb, selfref, forref, sfluxref
4851 ! ------- Local -------
4853 integer(kind=im) :: jn, jt, jp, igc, ipr, iprsm
4854 real(kind=rb) :: sumk, sumf
4855 !-------------------------------------------------------------------------------
4862 do ipr = 1,ngn(ngs(2)+igc)
4864 sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+32)
4866 ka(jn,jt,jp,igc) = sumk
4877 do ipr = 1,ngn(ngs(2)+igc)
4879 sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+32)
4881 kb(jt,jp,igc) = sumk
4890 do ipr = 1,ngn(ngs(2)+igc)
4892 sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+32)
4894 selfref(jt,igc) = sumk
4902 do ipr = 1,ngn(ngs(2)+igc)
4904 sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+32)
4906 forref(jt,igc) = sumk
4914 do ipr = 1,ngn(ngs(2)+igc)
4916 sumf = sumf + sfluxrefo(iprsm,jp)
4918 sfluxref(igc,jp) = sumf
4922 end subroutine cmbgb18
4923 !-------------------------------------------------------------------------------
4926 !-------------------------------------------------------------------------------
4928 !-------------------------------------------------------------------------------
4929 ! band 19: 4650-5150 cm-1 (low - h2o,co2; high - co2)
4930 !-------------------------------------------------------------------------------
4932 use rrsw_kg19_k, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
4933 absa, ka, absb, kb, selfref, forref, sfluxref
4935 ! ------- Local -------
4937 integer(kind=im) :: jn, jt, jp, igc, ipr, iprsm
4938 real(kind=rb) :: sumk, sumf
4939 !-------------------------------------------------------------------------------
4946 do ipr = 1,ngn(ngs(3)+igc)
4948 sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+48)
4950 ka(jn,jt,jp,igc) = sumk
4961 do ipr = 1,ngn(ngs(3)+igc)
4963 sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+48)
4965 kb(jt,jp,igc) = sumk
4974 do ipr = 1,ngn(ngs(3)+igc)
4976 sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+48)
4978 selfref(jt,igc) = sumk
4986 do ipr = 1,ngn(ngs(3)+igc)
4988 sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+48)
4990 forref(jt,igc) = sumk
4998 do ipr = 1,ngn(ngs(3)+igc)
5000 sumf = sumf + sfluxrefo(iprsm,jp)
5002 sfluxref(igc,jp) = sumf
5006 end subroutine cmbgb19
5007 !-------------------------------------------------------------------------------
5010 !-------------------------------------------------------------------------------
5012 !-------------------------------------------------------------------------------
5013 ! band 20: 5150-6150 cm-1 (low - h2o; high - h2o)
5014 !-------------------------------------------------------------------------------
5016 use rrsw_kg20_k, only : kao, kbo, selfrefo, forrefo, sfluxrefo, absch4o, &
5017 absa, ka, absb, kb, selfref, forref, sfluxref, absch4
5019 ! ------- Local -------
5021 integer(kind=im) :: jt, jp, igc, ipr, iprsm
5022 real(kind=rb) :: sumk, sumf1, sumf2
5023 !-------------------------------------------------------------------------------
5029 do ipr = 1,ngn(ngs(4)+igc)
5031 sumk = sumk + kao(jt,jp,iprsm)*rwgt(iprsm+64)
5033 ka(jt,jp,igc) = sumk
5040 do ipr = 1,ngn(ngs(4)+igc)
5042 sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+64)
5044 kb(jt,jp,igc) = sumk
5053 do ipr = 1,ngn(ngs(4)+igc)
5055 sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+64)
5057 selfref(jt,igc) = sumk
5065 do ipr = 1,ngn(ngs(4)+igc)
5067 sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+64)
5069 forref(jt,igc) = sumk
5077 do ipr = 1,ngn(ngs(4)+igc)
5079 sumf1 = sumf1 + sfluxrefo(iprsm)
5080 sumf2 = sumf2 + absch4o(iprsm)*rwgt(iprsm+64)
5082 sfluxref(igc) = sumf1
5086 end subroutine cmbgb20
5087 !-------------------------------------------------------------------------------
5090 !-------------------------------------------------------------------------------
5092 !-------------------------------------------------------------------------------
5093 ! band 21: 6150-7700 cm-1 (low - h2o,co2; high - h2o,co2)
5094 !-------------------------------------------------------------------------------
5096 use rrsw_kg21_k, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
5097 absa, ka, absb, kb, selfref, forref, sfluxref
5099 ! ------- Local -------
5101 integer(kind=im) :: jn, jt, jp, igc, ipr, iprsm
5102 real(kind=rb) :: sumk, sumf
5103 !-------------------------------------------------------------------------------
5110 do ipr = 1,ngn(ngs(5)+igc)
5112 sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+80)
5114 ka(jn,jt,jp,igc) = sumk
5126 do ipr = 1,ngn(ngs(5)+igc)
5128 sumk = sumk + kbo(jn,jt,jp,iprsm)*rwgt(iprsm+80)
5130 kb(jn,jt,jp,igc) = sumk
5140 do ipr = 1,ngn(ngs(5)+igc)
5142 sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+80)
5144 selfref(jt,igc) = sumk
5152 do ipr = 1,ngn(ngs(5)+igc)
5154 sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+80)
5156 forref(jt,igc) = sumk
5164 do ipr = 1,ngn(ngs(5)+igc)
5166 sumf = sumf + sfluxrefo(iprsm,jp)
5168 sfluxref(igc,jp) = sumf
5172 end subroutine cmbgb21
5173 !-------------------------------------------------------------------------------
5176 !-------------------------------------------------------------------------------
5178 !-------------------------------------------------------------------------------
5179 ! band 22: 7700-8050 cm-1 (low - h2o,o2; high - o2)
5180 !-------------------------------------------------------------------------------
5182 use rrsw_kg22_k, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
5183 absa, ka, absb, kb, selfref, forref, sfluxref
5185 ! ------- Local -------
5187 integer(kind=im) :: jn, jt, jp, igc, ipr, iprsm
5188 real(kind=rb) :: sumk, sumf
5189 !-------------------------------------------------------------------------------
5196 do ipr = 1,ngn(ngs(6)+igc)
5198 sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+96)
5200 ka(jn,jt,jp,igc) = sumk
5211 do ipr = 1,ngn(ngs(6)+igc)
5213 sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+96)
5215 kb(jt,jp,igc) = sumk
5224 do ipr = 1,ngn(ngs(6)+igc)
5226 sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+96)
5228 selfref(jt,igc) = sumk
5236 do ipr = 1,ngn(ngs(6)+igc)
5238 sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+96)
5240 forref(jt,igc) = sumk
5248 do ipr = 1,ngn(ngs(6)+igc)
5250 sumf = sumf + sfluxrefo(iprsm,jp)
5252 sfluxref(igc,jp) = sumf
5256 end subroutine cmbgb22
5257 !-------------------------------------------------------------------------------
5260 !-------------------------------------------------------------------------------
5262 !-------------------------------------------------------------------------------
5263 ! band 23: 8050-12850 cm-1 (low - h2o; high - nothing)
5264 !-------------------------------------------------------------------------------
5266 use rrsw_kg23_k, only : kao, selfrefo, forrefo, sfluxrefo, raylo, &
5267 absa, ka, selfref, forref, sfluxref, rayl
5269 ! ------- Local -------
5271 integer(kind=im) :: jt, jp, igc, ipr, iprsm
5272 real(kind=rb) :: sumk, sumf1, sumf2
5273 !-------------------------------------------------------------------------------
5279 do ipr = 1,ngn(ngs(7)+igc)
5281 sumk = sumk + kao(jt,jp,iprsm)*rwgt(iprsm+112)
5283 ka(jt,jp,igc) = sumk
5292 do ipr = 1,ngn(ngs(7)+igc)
5294 sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+112)
5296 selfref(jt,igc) = sumk
5304 do ipr = 1,ngn(ngs(7)+igc)
5306 sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+112)
5308 forref(jt,igc) = sumk
5316 do ipr = 1,ngn(ngs(7)+igc)
5318 sumf1 = sumf1 + sfluxrefo(iprsm)
5319 sumf2 = sumf2 + raylo(iprsm)*rwgt(iprsm+112)
5321 sfluxref(igc) = sumf1
5325 end subroutine cmbgb23
5326 !-------------------------------------------------------------------------------
5329 !-------------------------------------------------------------------------------
5331 !-------------------------------------------------------------------------------
5332 ! band 24: 12850-16000 cm-1 (low - h2o,o2; high - o2)
5333 !-------------------------------------------------------------------------------
5335 use rrsw_kg24_k, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
5336 abso3ao, abso3bo, raylao, raylbo, &
5337 absa, ka, absb, kb, selfref, forref, sfluxref, &
5338 abso3a, abso3b, rayla, raylb
5340 ! ------- Local -------
5342 integer(kind=im) :: jn, jt, jp, igc, ipr, iprsm
5343 real(kind=rb) :: sumk, sumf1, sumf2, sumf3
5344 !-------------------------------------------------------------------------------
5351 do ipr = 1,ngn(ngs(8)+igc)
5353 sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+128)
5355 ka(jn,jt,jp,igc) = sumk
5366 do ipr = 1,ngn(ngs(8)+igc)
5368 sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+128)
5370 kb(jt,jp,igc) = sumk
5379 do ipr = 1,ngn(ngs(8)+igc)
5381 sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+128)
5383 selfref(jt,igc) = sumk
5391 do ipr = 1,ngn(ngs(8)+igc)
5393 sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+128)
5395 forref(jt,igc) = sumk
5404 do ipr = 1,ngn(ngs(8)+igc)
5406 sumf1 = sumf1 + raylbo(iprsm)*rwgt(iprsm+128)
5407 sumf2 = sumf2 + abso3ao(iprsm)*rwgt(iprsm+128)
5408 sumf3 = sumf3 + abso3bo(iprsm)*rwgt(iprsm+128)
5420 do ipr = 1,ngn(ngs(8)+igc)
5422 sumf1 = sumf1 + sfluxrefo(iprsm,jp)
5423 sumf2 = sumf2 + raylao(iprsm,jp)*rwgt(iprsm+128)
5425 sfluxref(igc,jp) = sumf1
5426 rayla(igc,jp) = sumf2
5430 end subroutine cmbgb24
5431 !-------------------------------------------------------------------------------
5434 !-------------------------------------------------------------------------------
5436 !-------------------------------------------------------------------------------
5437 ! band 25: 16000-22650 cm-1 (low - h2o; high - nothing)
5438 !-------------------------------------------------------------------------------
5440 use rrsw_kg25_k, only : kao, sfluxrefo, &
5441 abso3ao, abso3bo, raylo, &
5442 absa, ka, sfluxref, &
5443 abso3a, abso3b, rayl
5445 ! ------- Local -------
5447 integer(kind=im) :: jt, jp, igc, ipr, iprsm
5448 real(kind=rb) :: sumk, sumf1, sumf2, sumf3, sumf4
5449 !-------------------------------------------------------------------------------
5455 do ipr = 1,ngn(ngs(9)+igc)
5457 sumk = sumk + kao(jt,jp,iprsm)*rwgt(iprsm+144)
5459 ka(jt,jp,igc) = sumk
5470 do ipr = 1,ngn(ngs(9)+igc)
5472 sumf1 = sumf1 + sfluxrefo(iprsm)
5473 sumf2 = sumf2 + abso3ao(iprsm)*rwgt(iprsm+144)
5474 sumf3 = sumf3 + abso3bo(iprsm)*rwgt(iprsm+144)
5475 sumf4 = sumf4 + raylo(iprsm)*rwgt(iprsm+144)
5477 sfluxref(igc) = sumf1
5483 end subroutine cmbgb25
5484 !-------------------------------------------------------------------------------
5487 !-------------------------------------------------------------------------------
5489 !-------------------------------------------------------------------------------
5490 ! band 26: 22650-29000 cm-1 (low - nothing; high - nothing)
5491 !-------------------------------------------------------------------------------
5493 use rrsw_kg26_k, only : sfluxrefo, raylo, sfluxref, rayl
5495 ! ------- Local -------
5497 integer(kind=im) :: igc, ipr, iprsm
5498 real(kind=rb) :: sumf1, sumf2
5499 !-------------------------------------------------------------------------------
5504 do ipr = 1,ngn(ngs(10)+igc)
5506 sumf1 = sumf1 + raylo(iprsm)*rwgt(iprsm+160)
5507 sumf2 = sumf2 + sfluxrefo(iprsm)
5510 sfluxref(igc) = sumf2
5513 end subroutine cmbgb26
5514 !-------------------------------------------------------------------------------
5517 !-------------------------------------------------------------------------------
5519 !-------------------------------------------------------------------------------
5520 ! band 27: 29000-38000 cm-1 (low - o3; high - o3)
5521 !-------------------------------------------------------------------------------
5523 use rrsw_kg27_k, only : kao, kbo, sfluxrefo, raylo, &
5524 absa, ka, absb, kb, sfluxref, rayl
5526 ! ------- Local -------
5528 integer(kind=im) :: jt, jp, igc, ipr, iprsm
5529 real(kind=rb) :: sumk, sumf1, sumf2
5530 !-------------------------------------------------------------------------------
5536 do ipr = 1,ngn(ngs(11)+igc)
5538 sumk = sumk + kao(jt,jp,iprsm)*rwgt(iprsm+176)
5540 ka(jt,jp,igc) = sumk
5547 do ipr = 1,ngn(ngs(11)+igc)
5549 sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+176)
5551 kb(jt,jp,igc) = sumk
5560 do ipr = 1,ngn(ngs(11)+igc)
5562 sumf1 = sumf1 + sfluxrefo(iprsm)
5563 sumf2 = sumf2 + raylo(iprsm)*rwgt(iprsm+176)
5565 sfluxref(igc) = sumf1
5569 end subroutine cmbgb27
5570 !-------------------------------------------------------------------------------
5573 !-------------------------------------------------------------------------------
5575 !-------------------------------------------------------------------------------
5576 ! band 28: 38000-50000 cm-1 (low - o3,o2; high - o3,o2)
5577 !-------------------------------------------------------------------------------
5579 use rrsw_kg28_k, only : kao, kbo, sfluxrefo, &
5580 absa, ka, absb, kb, sfluxref
5582 ! ------- Local -------
5584 integer(kind=im) :: jn, jt, jp, igc, ipr, iprsm
5585 real(kind=rb) :: sumk, sumf
5586 !-------------------------------------------------------------------------------
5593 do ipr = 1,ngn(ngs(12)+igc)
5595 sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+192)
5597 ka(jn,jt,jp,igc) = sumk
5609 do ipr = 1,ngn(ngs(12)+igc)
5611 sumk = sumk + kbo(jn,jt,jp,iprsm)*rwgt(iprsm+192)
5613 kb(jn,jt,jp,igc) = sumk
5623 do ipr = 1,ngn(ngs(12)+igc)
5625 sumf = sumf + sfluxrefo(iprsm,jp)
5627 sfluxref(igc,jp) = sumf
5631 end subroutine cmbgb28
5632 !-------------------------------------------------------------------------------
5635 !-------------------------------------------------------------------------------
5637 !-------------------------------------------------------------------------------
5638 ! band 29: 820-2600 cm-1 (low - h2o; high - co2)
5639 !-------------------------------------------------------------------------------
5641 use rrsw_kg29_k, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
5643 absa, ka, absb, kb, selfref, forref, sfluxref, &
5646 ! ------- Local -------
5648 integer(kind=im) :: jt, jp, igc, ipr, iprsm
5649 real(kind=rb) :: sumk, sumf1, sumf2, sumf3
5650 !-------------------------------------------------------------------------------
5656 do ipr = 1,ngn(ngs(13)+igc)
5658 sumk = sumk + kao(jt,jp,iprsm)*rwgt(iprsm+208)
5660 ka(jt,jp,igc) = sumk
5667 do ipr = 1,ngn(ngs(13)+igc)
5669 sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+208)
5671 kb(jt,jp,igc) = sumk
5680 do ipr = 1,ngn(ngs(13)+igc)
5682 sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+208)
5684 selfref(jt,igc) = sumk
5692 do ipr = 1,ngn(ngs(13)+igc)
5694 sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+208)
5696 forref(jt,igc) = sumk
5705 do ipr = 1,ngn(ngs(13)+igc)
5707 sumf1 = sumf1 + sfluxrefo(iprsm)
5708 sumf2 = sumf2 + absco2o(iprsm)*rwgt(iprsm+208)
5709 sumf3 = sumf3 + absh2oo(iprsm)*rwgt(iprsm+208)
5711 sfluxref(igc) = sumf1
5716 end subroutine cmbgb29
5717 !-------------------------------------------------------------------------------
5720 !-------------------------------------------------------------------------------
5722 !-------------------------------------------------------------------------------
5725 ! Define cloud extinction coefficient, single scattering albedo
5726 ! and asymmetry parameter data.
5730 !-------------------------------------------------------------------------------
5732 ! Explanation of the method for each value of INFLAG. A value of
5733 ! 0 for INFLAG do not distingish being liquid and ice clouds.
5734 ! INFLAG = 2 does distinguish between liquid and ice clouds, and
5735 ! requires further user input to specify the method to be used to
5736 ! compute the aborption due to each.
5737 ! INFLAG = 0: For each cloudy layer, the cloud fraction, the cloud optical
5738 ! depth, the cloud single-scattering albedo, and the
5739 ! moments of the phase function (0:NSTREAM). Note
5740 ! that these values are delta-m scaled within this
5742 ! INFLAG = 2: For each cloudy layer, the cloud fraction, cloud
5743 ! water path (g/m2), and cloud ice fraction are input.
5744 ! ICEFLAG = 2: The ice effective radius (microns) is input and the
5745 ! optical properties due to ice clouds are computed from
5746 ! the optical properties stored in the RT code, STREAMER v3.0
5747 ! (Reference: Key. J., Streamer User's Guide, Cooperative
5748 ! Institute for Meteorological Satellite Studies, 2001, 96 pp.).
5749 ! Valid range of values for re are between 5.0 and
5751 ! This version uses Ebert and Curry, JGR, (1992) method for
5752 ! ice particles larger than 131.0 microns.
5753 ! ICEFLAG = 3: The ice generalized effective size (dge) is input
5754 ! and the optical depths, single-scattering albedo,
5755 ! and phase function moments are calculated as in
5756 ! Q. Fu, J. Climate, (1996). Q. Fu provided high resolution
5757 ! tables which were appropriately averaged for the
5758 ! bands in RRTM_SW. Linear interpolation is used to
5759 ! get the coefficients from the stored tables.
5760 ! Valid range of values for dge are between 5.0 and
5762 ! This version uses Ebert and Curry, JGR, (1992) method for
5763 ! ice particles larger than 140.0 microns.
5764 ! LIQFLAG = 1: The water droplet effective radius (microns) is input
5765 ! and the optical depths due to water clouds are computed
5766 ! as in Hu and Stamnes, J., Clim., 6, 728-742, (1993).
5767 ! The values for absorption coefficients appropriate for
5768 ! the spectral bands in RRTM have been obtained for a
5769 ! range of effective radii by an averaging procedure
5770 ! based on the work of J. Pinto (private communication).
5771 ! Linear interpolation is used to get the absorption
5772 ! coefficients for the input effective radius.
5774 ! ------------------------------------------------------------------
5776 use rrsw_cld_k, only : extliq1, ssaliq1, asyliq1, &
5777 extice2, ssaice2, asyice2, &
5778 extice3, ssaice3, asyice3, fdlice3, &
5779 abari, bbari, cbari, dbari, ebari, fbari
5782 ! Everything below is for INFLAG = 2.
5784 ! Coefficients for Ebert and Curry method
5787 3.448e-03_rb,3.448e-03_rb,3.448e-03_rb,3.448e-03_rb,3.448e-03_rb /)
5789 2.431e+00_rb,2.431e+00_rb,2.431e+00_rb,2.431e+00_rb,2.431e+00_rb /)
5791 1.000e-05_rb,1.100e-04_rb,1.240e-02_rb,3.779e-02_rb,4.666e-01_rb /)
5793 0.000e+00_rb,1.405e-05_rb,6.867e-04_rb,1.284e-03_rb,2.050e-05_rb /)
5795 7.661e-01_rb,7.730e-01_rb,7.865e-01_rb,8.172e-01_rb,9.595e-01_rb /)
5797 5.851e-04_rb,5.665e-04_rb,7.204e-04_rb,7.463e-04_rb,1.076e-04_rb /)
5799 ! Extinction coefficient
5801 extliq1(:, 16) = (/ &
5802 8.981463e-01_rb,6.317895e-01_rb,4.557508e-01_rb,3.481624e-01_rb, &
5803 2.797950e-01_rb,2.342753e-01_rb,2.026934e-01_rb,1.800102e-01_rb, &
5804 1.632408e-01_rb,1.505384e-01_rb,1.354524e-01_rb,1.246520e-01_rb, &
5805 1.154342e-01_rb,1.074756e-01_rb,1.005353e-01_rb,9.442987e-02_rb, &
5806 8.901760e-02_rb,8.418693e-02_rb,7.984904e-02_rb,7.593229e-02_rb, &
5807 7.237827e-02_rb,6.913887e-02_rb,6.617415e-02_rb,6.345061e-02_rb, &
5808 6.094001e-02_rb,5.861834e-02_rb,5.646506e-02_rb,5.446250e-02_rb, &
5809 5.249596e-02_rb,5.081114e-02_rb,4.922243e-02_rb,4.772189e-02_rb, &
5810 4.630243e-02_rb,4.495766e-02_rb,4.368189e-02_rb,4.246995e-02_rb, &
5811 4.131720e-02_rb,4.021941e-02_rb,3.917276e-02_rb,3.817376e-02_rb, &
5812 3.721926e-02_rb,3.630635e-02_rb,3.543237e-02_rb,3.459491e-02_rb, &
5813 3.379171e-02_rb,3.302073e-02_rb,3.228007e-02_rb,3.156798e-02_rb, &
5814 3.088284e-02_rb,3.022315e-02_rb,2.958753e-02_rb,2.897468e-02_rb, &
5815 2.838340e-02_rb,2.781258e-02_rb,2.726117e-02_rb,2.672821e-02_rb, &
5816 2.621278e-02_rb,2.5714e-02_rb /)
5817 extliq1(:, 17) = (/ &
5818 8.293797e-01_rb,6.048371e-01_rb,4.465706e-01_rb,3.460387e-01_rb, &
5819 2.800064e-01_rb,2.346584e-01_rb,2.022399e-01_rb,1.782626e-01_rb, &
5820 1.600153e-01_rb,1.457903e-01_rb,1.334061e-01_rb,1.228548e-01_rb, &
5821 1.138396e-01_rb,1.060486e-01_rb,9.924856e-02_rb,9.326208e-02_rb, &
5822 8.795158e-02_rb,8.320883e-02_rb,7.894750e-02_rb,7.509792e-02_rb, &
5823 7.160323e-02_rb,6.841653e-02_rb,6.549889e-02_rb,6.281763e-02_rb, &
5824 6.034516e-02_rb,5.805802e-02_rb,5.593615e-02_rb,5.396226e-02_rb, &
5825 5.202302e-02_rb,5.036246e-02_rb,4.879606e-02_rb,4.731610e-02_rb, &
5826 4.591565e-02_rb,4.458852e-02_rb,4.332912e-02_rb,4.213243e-02_rb, &
5827 4.099390e-02_rb,3.990941e-02_rb,3.887522e-02_rb,3.788792e-02_rb, &
5828 3.694440e-02_rb,3.604183e-02_rb,3.517760e-02_rb,3.434934e-02_rb, &
5829 3.355485e-02_rb,3.279211e-02_rb,3.205925e-02_rb,3.135458e-02_rb, &
5830 3.067648e-02_rb,3.002349e-02_rb,2.939425e-02_rb,2.878748e-02_rb, &
5831 2.820200e-02_rb,2.763673e-02_rb,2.709062e-02_rb,2.656272e-02_rb, &
5832 2.605214e-02_rb,2.5558e-02_rb /)
5833 extliq1(:, 18) = (/ &
5834 9.193685e-01_rb,6.128292e-01_rb,4.344150e-01_rb,3.303048e-01_rb, &
5835 2.659500e-01_rb,2.239727e-01_rb,1.953457e-01_rb,1.751012e-01_rb, &
5836 1.603515e-01_rb,1.493360e-01_rb,1.323791e-01_rb,1.219335e-01_rb, &
5837 1.130076e-01_rb,1.052926e-01_rb,9.855839e-02_rb,9.262925e-02_rb, &
5838 8.736918e-02_rb,8.267112e-02_rb,7.844965e-02_rb,7.463585e-02_rb, &
5839 7.117343e-02_rb,6.801601e-02_rb,6.512503e-02_rb,6.246815e-02_rb, &
5840 6.001806e-02_rb,5.775154e-02_rb,5.564872e-02_rb,5.369250e-02_rb, &
5841 5.176284e-02_rb,5.011536e-02_rb,4.856099e-02_rb,4.709211e-02_rb, &
5842 4.570193e-02_rb,4.438430e-02_rb,4.313375e-02_rb,4.194529e-02_rb, &
5843 4.081443e-02_rb,3.973712e-02_rb,3.870966e-02_rb,3.772866e-02_rb, &
5844 3.679108e-02_rb,3.589409e-02_rb,3.503514e-02_rb,3.421185e-02_rb, &
5845 3.342206e-02_rb,3.266377e-02_rb,3.193513e-02_rb,3.123447e-02_rb, &
5846 3.056018e-02_rb,2.991081e-02_rb,2.928502e-02_rb,2.868154e-02_rb, &
5847 2.809920e-02_rb,2.753692e-02_rb,2.699367e-02_rb,2.646852e-02_rb, &
5848 2.596057e-02_rb,2.5469e-02_rb /)
5849 extliq1(:, 19) = (/ &
5850 9.136931e-01_rb,5.743244e-01_rb,4.080708e-01_rb,3.150572e-01_rb, &
5851 2.577261e-01_rb,2.197900e-01_rb,1.933037e-01_rb,1.740212e-01_rb, &
5852 1.595056e-01_rb,1.482756e-01_rb,1.312164e-01_rb,1.209246e-01_rb, &
5853 1.121227e-01_rb,1.045095e-01_rb,9.785967e-02_rb,9.200149e-02_rb, &
5854 8.680170e-02_rb,8.215531e-02_rb,7.797850e-02_rb,7.420361e-02_rb, &
5855 7.077530e-02_rb,6.764798e-02_rb,6.478369e-02_rb,6.215063e-02_rb, &
5856 5.972189e-02_rb,5.747458e-02_rb,5.538913e-02_rb,5.344866e-02_rb, &
5857 5.153216e-02_rb,4.989745e-02_rb,4.835476e-02_rb,4.689661e-02_rb, &
5858 4.551629e-02_rb,4.420777e-02_rb,4.296563e-02_rb,4.178497e-02_rb, &
5859 4.066137e-02_rb,3.959081e-02_rb,3.856963e-02_rb,3.759452e-02_rb, &
5860 3.666244e-02_rb,3.577061e-02_rb,3.491650e-02_rb,3.409777e-02_rb, &
5861 3.331227e-02_rb,3.255803e-02_rb,3.183322e-02_rb,3.113617e-02_rb, &
5862 3.046530e-02_rb,2.981918e-02_rb,2.919646e-02_rb,2.859591e-02_rb, &
5863 2.801635e-02_rb,2.745671e-02_rb,2.691599e-02_rb,2.639324e-02_rb, &
5864 2.588759e-02_rb,2.5398e-02_rb /)
5865 extliq1(:, 20) = (/ &
5866 8.447548e-01_rb,5.326840e-01_rb,3.921523e-01_rb,3.119082e-01_rb, &
5867 2.597055e-01_rb,2.228737e-01_rb,1.954157e-01_rb,1.741155e-01_rb, &
5868 1.570881e-01_rb,1.431520e-01_rb,1.302034e-01_rb,1.200491e-01_rb, &
5869 1.113571e-01_rb,1.038330e-01_rb,9.725657e-02_rb,9.145949e-02_rb, &
5870 8.631112e-02_rb,8.170840e-02_rb,7.756901e-02_rb,7.382641e-02_rb, &
5871 7.042616e-02_rb,6.732338e-02_rb,6.448069e-02_rb,6.186672e-02_rb, &
5872 5.945494e-02_rb,5.722277e-02_rb,5.515089e-02_rb,5.322262e-02_rb, &
5873 5.132153e-02_rb,4.969799e-02_rb,4.816556e-02_rb,4.671686e-02_rb, &
5874 4.534525e-02_rb,4.404480e-02_rb,4.281014e-02_rb,4.163643e-02_rb, &
5875 4.051930e-02_rb,3.945479e-02_rb,3.843927e-02_rb,3.746945e-02_rb, &
5876 3.654234e-02_rb,3.565518e-02_rb,3.480547e-02_rb,3.399088e-02_rb, &
5877 3.320930e-02_rb,3.245876e-02_rb,3.173745e-02_rb,3.104371e-02_rb, &
5878 3.037600e-02_rb,2.973287e-02_rb,2.911300e-02_rb,2.851516e-02_rb, &
5879 2.793818e-02_rb,2.738101e-02_rb,2.684264e-02_rb,2.632214e-02_rb, &
5880 2.581863e-02_rb,2.5331e-02_rb /)
5881 extliq1(:, 21) = (/ &
5882 7.727642e-01_rb,5.034865e-01_rb,3.808673e-01_rb,3.080333e-01_rb, &
5883 2.586453e-01_rb,2.224989e-01_rb,1.947060e-01_rb,1.725821e-01_rb, &
5884 1.545096e-01_rb,1.394456e-01_rb,1.288683e-01_rb,1.188852e-01_rb, &
5885 1.103317e-01_rb,1.029214e-01_rb,9.643967e-02_rb,9.072239e-02_rb, &
5886 8.564194e-02_rb,8.109758e-02_rb,7.700875e-02_rb,7.331026e-02_rb, &
5887 6.994879e-02_rb,6.688028e-02_rb,6.406807e-02_rb,6.148133e-02_rb, &
5888 5.909400e-02_rb,5.688388e-02_rb,5.483197e-02_rb,5.292185e-02_rb, &
5889 5.103763e-02_rb,4.942905e-02_rb,4.791039e-02_rb,4.647438e-02_rb, &
5890 4.511453e-02_rb,4.382497e-02_rb,4.260043e-02_rb,4.143616e-02_rb, &
5891 4.032784e-02_rb,3.927155e-02_rb,3.826375e-02_rb,3.730117e-02_rb, &
5892 3.638087e-02_rb,3.550013e-02_rb,3.465646e-02_rb,3.384759e-02_rb, &
5893 3.307141e-02_rb,3.232598e-02_rb,3.160953e-02_rb,3.092040e-02_rb, &
5894 3.025706e-02_rb,2.961810e-02_rb,2.900220e-02_rb,2.840814e-02_rb, &
5895 2.783478e-02_rb,2.728106e-02_rb,2.674599e-02_rb,2.622864e-02_rb, &
5896 2.572816e-02_rb,2.5244e-02_rb /)
5897 extliq1(:, 22) = (/ &
5898 7.416833e-01_rb,4.959591e-01_rb,3.775057e-01_rb,3.056353e-01_rb, &
5899 2.565943e-01_rb,2.206935e-01_rb,1.931479e-01_rb,1.712860e-01_rb, &
5900 1.534837e-01_rb,1.386906e-01_rb,1.281198e-01_rb,1.182344e-01_rb, &
5901 1.097595e-01_rb,1.024137e-01_rb,9.598552e-02_rb,9.031320e-02_rb, &
5902 8.527093e-02_rb,8.075927e-02_rb,7.669869e-02_rb,7.302481e-02_rb, &
5903 6.968491e-02_rb,6.663542e-02_rb,6.384008e-02_rb,6.126838e-02_rb, &
5904 5.889452e-02_rb,5.669654e-02_rb,5.465558e-02_rb,5.275540e-02_rb, &
5905 5.087937e-02_rb,4.927904e-02_rb,4.776796e-02_rb,4.633895e-02_rb, &
5906 4.498557e-02_rb,4.370202e-02_rb,4.248306e-02_rb,4.132399e-02_rb, &
5907 4.022052e-02_rb,3.916878e-02_rb,3.816523e-02_rb,3.720665e-02_rb, &
5908 3.629011e-02_rb,3.541290e-02_rb,3.457257e-02_rb,3.376685e-02_rb, &
5909 3.299365e-02_rb,3.225105e-02_rb,3.153728e-02_rb,3.085069e-02_rb, &
5910 3.018977e-02_rb,2.955310e-02_rb,2.893940e-02_rb,2.834742e-02_rb, &
5911 2.777606e-02_rb,2.722424e-02_rb,2.669099e-02_rb,2.617539e-02_rb, &
5912 2.567658e-02_rb,2.5194e-02_rb /)
5913 extliq1(:, 23) = (/ &
5914 7.058580e-01_rb,4.866573e-01_rb,3.712238e-01_rb,2.998638e-01_rb, &
5915 2.513441e-01_rb,2.161972e-01_rb,1.895576e-01_rb,1.686669e-01_rb, &
5916 1.518437e-01_rb,1.380046e-01_rb,1.267564e-01_rb,1.170399e-01_rb, &
5917 1.087026e-01_rb,1.014704e-01_rb,9.513729e-02_rb,8.954555e-02_rb, &
5918 8.457221e-02_rb,8.012009e-02_rb,7.611136e-02_rb,7.248294e-02_rb, &
5919 6.918317e-02_rb,6.616934e-02_rb,6.340584e-02_rb,6.086273e-02_rb, &
5920 5.851465e-02_rb,5.634001e-02_rb,5.432027e-02_rb,5.243946e-02_rb, &
5921 5.058070e-02_rb,4.899628e-02_rb,4.749975e-02_rb,4.608411e-02_rb, &
5922 4.474303e-02_rb,4.347082e-02_rb,4.226237e-02_rb,4.111303e-02_rb, &
5923 4.001861e-02_rb,3.897528e-02_rb,3.797959e-02_rb,3.702835e-02_rb, &
5924 3.611867e-02_rb,3.524791e-02_rb,3.441364e-02_rb,3.361360e-02_rb, &
5925 3.284577e-02_rb,3.210823e-02_rb,3.139923e-02_rb,3.071716e-02_rb, &
5926 3.006052e-02_rb,2.942791e-02_rb,2.881806e-02_rb,2.822974e-02_rb, &
5927 2.766185e-02_rb,2.711335e-02_rb,2.658326e-02_rb,2.607066e-02_rb, &
5928 2.557473e-02_rb,2.5095e-02_rb /)
5929 extliq1(:, 24) = (/ &
5930 6.822779e-01_rb,4.750373e-01_rb,3.634834e-01_rb,2.940726e-01_rb, &
5931 2.468060e-01_rb,2.125768e-01_rb,1.866586e-01_rb,1.663588e-01_rb, &
5932 1.500326e-01_rb,1.366192e-01_rb,1.253472e-01_rb,1.158052e-01_rb, &
5933 1.076101e-01_rb,1.004954e-01_rb,9.426089e-02_rb,8.875268e-02_rb, &
5934 8.385090e-02_rb,7.946063e-02_rb,7.550578e-02_rb,7.192466e-02_rb, &
5935 6.866669e-02_rb,6.569001e-02_rb,6.295971e-02_rb,6.044642e-02_rb, &
5936 5.812526e-02_rb,5.597500e-02_rb,5.397746e-02_rb,5.211690e-02_rb, &
5937 5.027505e-02_rb,4.870703e-02_rb,4.722555e-02_rb,4.582373e-02_rb, &
5938 4.449540e-02_rb,4.323497e-02_rb,4.203742e-02_rb,4.089821e-02_rb, &
5939 3.981321e-02_rb,3.877867e-02_rb,3.779118e-02_rb,3.684762e-02_rb, &
5940 3.594514e-02_rb,3.508114e-02_rb,3.425322e-02_rb,3.345917e-02_rb, &
5941 3.269698e-02_rb,3.196477e-02_rb,3.126082e-02_rb,3.058352e-02_rb, &
5942 2.993141e-02_rb,2.930310e-02_rb,2.869732e-02_rb,2.811289e-02_rb, &
5943 2.754869e-02_rb,2.700371e-02_rb,2.647698e-02_rb,2.596760e-02_rb, &
5944 2.547473e-02_rb,2.4998e-02_rb /)
5945 extliq1(:, 25) = (/ &
5946 6.666233e-01_rb,4.662044e-01_rb,3.579517e-01_rb,2.902984e-01_rb, &
5947 2.440475e-01_rb,2.104431e-01_rb,1.849277e-01_rb,1.648970e-01_rb, &
5948 1.487555e-01_rb,1.354714e-01_rb,1.244173e-01_rb,1.149913e-01_rb, &
5949 1.068903e-01_rb,9.985323e-02_rb,9.368351e-02_rb,8.823009e-02_rb, &
5950 8.337507e-02_rb,7.902511e-02_rb,7.510529e-02_rb,7.155482e-02_rb, &
5951 6.832386e-02_rb,6.537113e-02_rb,6.266218e-02_rb,6.016802e-02_rb, &
5952 5.786408e-02_rb,5.572939e-02_rb,5.374598e-02_rb,5.189830e-02_rb, &
5953 5.006825e-02_rb,4.851081e-02_rb,4.703906e-02_rb,4.564623e-02_rb, &
5954 4.432621e-02_rb,4.307349e-02_rb,4.188312e-02_rb,4.075060e-02_rb, &
5955 3.967183e-02_rb,3.864313e-02_rb,3.766111e-02_rb,3.672269e-02_rb, &
5956 3.582505e-02_rb,3.496559e-02_rb,3.414196e-02_rb,3.335198e-02_rb, &
5957 3.259362e-02_rb,3.186505e-02_rb,3.116454e-02_rb,3.049052e-02_rb, &
5958 2.984152e-02_rb,2.921617e-02_rb,2.861322e-02_rb,2.803148e-02_rb, &
5959 2.746986e-02_rb,2.692733e-02_rb,2.640295e-02_rb,2.589582e-02_rb, &
5960 2.540510e-02_rb,2.4930e-02_rb /)
5961 extliq1(:, 26) = (/ &
5962 6.535669e-01_rb,4.585865e-01_rb,3.529226e-01_rb,2.867245e-01_rb, &
5963 2.413848e-01_rb,2.083956e-01_rb,1.833191e-01_rb,1.636150e-01_rb, &
5964 1.477247e-01_rb,1.346392e-01_rb,1.236449e-01_rb,1.143095e-01_rb, &
5965 1.062828e-01_rb,9.930773e-02_rb,9.319029e-02_rb,8.778150e-02_rb, &
5966 8.296497e-02_rb,7.864847e-02_rb,7.475799e-02_rb,7.123343e-02_rb, &
5967 6.802549e-02_rb,6.509332e-02_rb,6.240285e-02_rb,5.992538e-02_rb, &
5968 5.763657e-02_rb,5.551566e-02_rb,5.354483e-02_rb,5.170870e-02_rb, &
5969 4.988866e-02_rb,4.834061e-02_rb,4.687751e-02_rb,4.549264e-02_rb, &
5970 4.417999e-02_rb,4.293410e-02_rb,4.175006e-02_rb,4.062344e-02_rb, &
5971 3.955019e-02_rb,3.852663e-02_rb,3.754943e-02_rb,3.661553e-02_rb, &
5972 3.572214e-02_rb,3.486669e-02_rb,3.404683e-02_rb,3.326040e-02_rb, &
5973 3.250542e-02_rb,3.178003e-02_rb,3.108254e-02_rb,3.041139e-02_rb, &
5974 2.976511e-02_rb,2.914235e-02_rb,2.854187e-02_rb,2.796247e-02_rb, &
5975 2.740309e-02_rb,2.686271e-02_rb,2.634038e-02_rb,2.583520e-02_rb, &
5976 2.534636e-02_rb,2.4873e-02_rb /)
5977 extliq1(:, 27) = (/ &
5978 6.448790e-01_rb,4.541425e-01_rb,3.503348e-01_rb,2.850494e-01_rb, &
5979 2.401966e-01_rb,2.074811e-01_rb,1.825631e-01_rb,1.629515e-01_rb, &
5980 1.471142e-01_rb,1.340574e-01_rb,1.231462e-01_rb,1.138628e-01_rb, &
5981 1.058802e-01_rb,9.894286e-02_rb,9.285818e-02_rb,8.747802e-02_rb, &
5982 8.268676e-02_rb,7.839271e-02_rb,7.452230e-02_rb,7.101580e-02_rb, &
5983 6.782418e-02_rb,6.490685e-02_rb,6.222991e-02_rb,5.976484e-02_rb, &
5984 5.748742e-02_rb,5.537703e-02_rb,5.341593e-02_rb,5.158883e-02_rb, &
5985 4.977355e-02_rb,4.823172e-02_rb,4.677430e-02_rb,4.539465e-02_rb, &
5986 4.408680e-02_rb,4.284533e-02_rb,4.166539e-02_rb,4.054257e-02_rb, &
5987 3.947283e-02_rb,3.845256e-02_rb,3.747842e-02_rb,3.654737e-02_rb, &
5988 3.565665e-02_rb,3.480370e-02_rb,3.398620e-02_rb,3.320198e-02_rb, &
5989 3.244908e-02_rb,3.172566e-02_rb,3.103002e-02_rb,3.036062e-02_rb, &
5990 2.971600e-02_rb,2.909482e-02_rb,2.849582e-02_rb,2.791785e-02_rb, &
5991 2.735982e-02_rb,2.682072e-02_rb,2.629960e-02_rb,2.579559e-02_rb, &
5992 2.530786e-02_rb,2.4836e-02_rb /)
5993 extliq1(:, 28) = (/ &
5994 6.422688e-01_rb,4.528453e-01_rb,3.497232e-01_rb,2.847724e-01_rb, &
5995 2.400815e-01_rb,2.074403e-01_rb,1.825502e-01_rb,1.629415e-01_rb, &
5996 1.470934e-01_rb,1.340183e-01_rb,1.230935e-01_rb,1.138049e-01_rb, &
5997 1.058201e-01_rb,9.888245e-02_rb,9.279878e-02_rb,8.742053e-02_rb, &
5998 8.263175e-02_rb,7.834058e-02_rb,7.447327e-02_rb,7.097000e-02_rb, &
5999 6.778167e-02_rb,6.486765e-02_rb,6.219400e-02_rb,5.973215e-02_rb, &
6000 5.745790e-02_rb,5.535059e-02_rb,5.339250e-02_rb,5.156831e-02_rb, &
6001 4.975308e-02_rb,4.821235e-02_rb,4.675596e-02_rb,4.537727e-02_rb, &
6002 4.407030e-02_rb,4.282968e-02_rb,4.165053e-02_rb,4.052845e-02_rb, &
6003 3.945941e-02_rb,3.843980e-02_rb,3.746628e-02_rb,3.653583e-02_rb, &
6004 3.564567e-02_rb,3.479326e-02_rb,3.397626e-02_rb,3.319253e-02_rb, &
6005 3.244008e-02_rb,3.171711e-02_rb,3.102189e-02_rb,3.035289e-02_rb, &
6006 2.970866e-02_rb,2.908784e-02_rb,2.848920e-02_rb,2.791156e-02_rb, &
6007 2.735385e-02_rb,2.681507e-02_rb,2.629425e-02_rb,2.579053e-02_rb, &
6008 2.530308e-02_rb,2.4831e-02_rb /)
6009 extliq1(:, 29) = (/ &
6010 4.614710e-01_rb,4.556116e-01_rb,4.056568e-01_rb,3.529833e-01_rb, &
6011 3.060334e-01_rb,2.658127e-01_rb,2.316095e-01_rb,2.024325e-01_rb, &
6012 1.773749e-01_rb,1.556867e-01_rb,1.455558e-01_rb,1.332882e-01_rb, &
6013 1.229052e-01_rb,1.140067e-01_rb,1.062981e-01_rb,9.955703e-02_rb, &
6014 9.361333e-02_rb,8.833420e-02_rb,8.361467e-02_rb,7.937071e-02_rb, &
6015 7.553420e-02_rb,7.204942e-02_rb,6.887031e-02_rb,6.595851e-02_rb, &
6016 6.328178e-02_rb,6.081286e-02_rb,5.852854e-02_rb,5.640892e-02_rb, &
6017 5.431269e-02_rb,5.252561e-02_rb,5.084345e-02_rb,4.925727e-02_rb, &
6018 4.775910e-02_rb,4.634182e-02_rb,4.499907e-02_rb,4.372512e-02_rb, &
6019 4.251484e-02_rb,4.136357e-02_rb,4.026710e-02_rb,3.922162e-02_rb, &
6020 3.822365e-02_rb,3.727004e-02_rb,3.635790e-02_rb,3.548457e-02_rb, &
6021 3.464764e-02_rb,3.384488e-02_rb,3.307424e-02_rb,3.233384e-02_rb, &
6022 3.162192e-02_rb,3.093688e-02_rb,3.027723e-02_rb,2.964158e-02_rb, &
6023 2.902864e-02_rb,2.843722e-02_rb,2.786621e-02_rb,2.731457e-02_rb, &
6024 2.678133e-02_rb,2.6266e-02_rb /)
6026 ! Single scattering albedo
6028 ssaliq1(:, 16) = (/ &
6029 8.143821e-01_rb,7.836739e-01_rb,7.550722e-01_rb,7.306269e-01_rb, &
6030 7.105612e-01_rb,6.946649e-01_rb,6.825556e-01_rb,6.737762e-01_rb, &
6031 6.678448e-01_rb,6.642830e-01_rb,6.679741e-01_rb,6.584607e-01_rb, &
6032 6.505598e-01_rb,6.440951e-01_rb,6.388901e-01_rb,6.347689e-01_rb, &
6033 6.315549e-01_rb,6.290718e-01_rb,6.271432e-01_rb,6.255928e-01_rb, &
6034 6.242441e-01_rb,6.229207e-01_rb,6.214464e-01_rb,6.196445e-01_rb, &
6035 6.173388e-01_rb,6.143527e-01_rb,6.105099e-01_rb,6.056339e-01_rb, &
6036 6.108290e-01_rb,6.073939e-01_rb,6.043073e-01_rb,6.015473e-01_rb, &
6037 5.990913e-01_rb,5.969173e-01_rb,5.950028e-01_rb,5.933257e-01_rb, &
6038 5.918636e-01_rb,5.905944e-01_rb,5.894957e-01_rb,5.885453e-01_rb, &
6039 5.877209e-01_rb,5.870003e-01_rb,5.863611e-01_rb,5.857811e-01_rb, &
6040 5.852381e-01_rb,5.847098e-01_rb,5.841738e-01_rb,5.836081e-01_rb, &
6041 5.829901e-01_rb,5.822979e-01_rb,5.815089e-01_rb,5.806011e-01_rb, &
6042 5.795521e-01_rb,5.783396e-01_rb,5.769413e-01_rb,5.753351e-01_rb, &
6043 5.734986e-01_rb,5.7141e-01_rb /)
6044 ssaliq1(:, 17) = (/ &
6045 8.165821e-01_rb,8.002015e-01_rb,7.816921e-01_rb,7.634131e-01_rb, &
6046 7.463721e-01_rb,7.312469e-01_rb,7.185883e-01_rb,7.088975e-01_rb, &
6047 7.026671e-01_rb,7.004020e-01_rb,7.042138e-01_rb,6.960930e-01_rb, &
6048 6.894243e-01_rb,6.840459e-01_rb,6.797957e-01_rb,6.765119e-01_rb, &
6049 6.740325e-01_rb,6.721955e-01_rb,6.708391e-01_rb,6.698013e-01_rb, &
6050 6.689201e-01_rb,6.680339e-01_rb,6.669805e-01_rb,6.655982e-01_rb, &
6051 6.637250e-01_rb,6.611992e-01_rb,6.578588e-01_rb,6.535420e-01_rb, &
6052 6.584449e-01_rb,6.553992e-01_rb,6.526547e-01_rb,6.501917e-01_rb, &
6053 6.479905e-01_rb,6.460313e-01_rb,6.442945e-01_rb,6.427605e-01_rb, &
6054 6.414094e-01_rb,6.402217e-01_rb,6.391775e-01_rb,6.382573e-01_rb, &
6055 6.374413e-01_rb,6.367099e-01_rb,6.360433e-01_rb,6.354218e-01_rb, &
6056 6.348257e-01_rb,6.342355e-01_rb,6.336313e-01_rb,6.329935e-01_rb, &
6057 6.323023e-01_rb,6.315383e-01_rb,6.306814e-01_rb,6.297122e-01_rb, &
6058 6.286110e-01_rb,6.273579e-01_rb,6.259333e-01_rb,6.243176e-01_rb, &
6059 6.224910e-01_rb,6.2043e-01_rb /)
6060 ssaliq1(:, 18) = (/ &
6061 9.900163e-01_rb,9.854307e-01_rb,9.797730e-01_rb,9.733113e-01_rb, &
6062 9.664245e-01_rb,9.594976e-01_rb,9.529055e-01_rb,9.470112e-01_rb, &
6063 9.421695e-01_rb,9.387304e-01_rb,9.344918e-01_rb,9.305302e-01_rb, &
6064 9.267048e-01_rb,9.230072e-01_rb,9.194289e-01_rb,9.159616e-01_rb, &
6065 9.125968e-01_rb,9.093260e-01_rb,9.061409e-01_rb,9.030330e-01_rb, &
6066 8.999940e-01_rb,8.970154e-01_rb,8.940888e-01_rb,8.912058e-01_rb, &
6067 8.883579e-01_rb,8.855368e-01_rb,8.827341e-01_rb,8.799413e-01_rb, &
6068 8.777423e-01_rb,8.749566e-01_rb,8.722298e-01_rb,8.695605e-01_rb, &
6069 8.669469e-01_rb,8.643875e-01_rb,8.618806e-01_rb,8.594246e-01_rb, &
6070 8.570179e-01_rb,8.546589e-01_rb,8.523459e-01_rb,8.500773e-01_rb, &
6071 8.478516e-01_rb,8.456670e-01_rb,8.435219e-01_rb,8.414148e-01_rb, &
6072 8.393439e-01_rb,8.373078e-01_rb,8.353047e-01_rb,8.333330e-01_rb, &
6073 8.313911e-01_rb,8.294774e-01_rb,8.275904e-01_rb,8.257282e-01_rb, &
6074 8.238893e-01_rb,8.220721e-01_rb,8.202751e-01_rb,8.184965e-01_rb, &
6075 8.167346e-01_rb,8.1499e-01_rb /)
6076 ssaliq1(:, 19) = (/ &
6077 9.999916e-01_rb,9.987396e-01_rb,9.966900e-01_rb,9.950738e-01_rb, &
6078 9.937531e-01_rb,9.925912e-01_rb,9.914525e-01_rb,9.902018e-01_rb, &
6079 9.887046e-01_rb,9.868263e-01_rb,9.849039e-01_rb,9.832372e-01_rb, &
6080 9.815265e-01_rb,9.797770e-01_rb,9.779940e-01_rb,9.761827e-01_rb, &
6081 9.743481e-01_rb,9.724955e-01_rb,9.706303e-01_rb,9.687575e-01_rb, &
6082 9.668823e-01_rb,9.650100e-01_rb,9.631457e-01_rb,9.612947e-01_rb, &
6083 9.594622e-01_rb,9.576534e-01_rb,9.558734e-01_rb,9.541275e-01_rb, &
6084 9.522059e-01_rb,9.504258e-01_rb,9.486459e-01_rb,9.468676e-01_rb, &
6085 9.450921e-01_rb,9.433208e-01_rb,9.415548e-01_rb,9.397955e-01_rb, &
6086 9.380441e-01_rb,9.363022e-01_rb,9.345706e-01_rb,9.328510e-01_rb, &
6087 9.311445e-01_rb,9.294524e-01_rb,9.277761e-01_rb,9.261167e-01_rb, &
6088 9.244755e-01_rb,9.228540e-01_rb,9.212534e-01_rb,9.196748e-01_rb, &
6089 9.181197e-01_rb,9.165894e-01_rb,9.150851e-01_rb,9.136080e-01_rb, &
6090 9.121596e-01_rb,9.107410e-01_rb,9.093536e-01_rb,9.079987e-01_rb, &
6091 9.066775e-01_rb,9.0539e-01_rb /)
6092 ssaliq1(:, 20) = (/ &
6093 9.979493e-01_rb,9.964113e-01_rb,9.950014e-01_rb,9.937045e-01_rb, &
6094 9.924964e-01_rb,9.913546e-01_rb,9.902575e-01_rb,9.891843e-01_rb, &
6095 9.881136e-01_rb,9.870238e-01_rb,9.859934e-01_rb,9.849372e-01_rb, &
6096 9.838873e-01_rb,9.828434e-01_rb,9.818052e-01_rb,9.807725e-01_rb, &
6097 9.797450e-01_rb,9.787225e-01_rb,9.777047e-01_rb,9.766914e-01_rb, &
6098 9.756823e-01_rb,9.746771e-01_rb,9.736756e-01_rb,9.726775e-01_rb, &
6099 9.716827e-01_rb,9.706907e-01_rb,9.697014e-01_rb,9.687145e-01_rb, &
6100 9.678060e-01_rb,9.668108e-01_rb,9.658218e-01_rb,9.648391e-01_rb, &
6101 9.638629e-01_rb,9.628936e-01_rb,9.619313e-01_rb,9.609763e-01_rb, &
6102 9.600287e-01_rb,9.590888e-01_rb,9.581569e-01_rb,9.572330e-01_rb, &
6103 9.563176e-01_rb,9.554108e-01_rb,9.545128e-01_rb,9.536239e-01_rb, &
6104 9.527443e-01_rb,9.518741e-01_rb,9.510137e-01_rb,9.501633e-01_rb, &
6105 9.493230e-01_rb,9.484931e-01_rb,9.476740e-01_rb,9.468656e-01_rb, &
6106 9.460683e-01_rb,9.452824e-01_rb,9.445080e-01_rb,9.437454e-01_rb, &
6107 9.429948e-01_rb,9.4226e-01_rb /)
6108 ssaliq1(:, 21) = (/ &
6109 9.988742e-01_rb,9.982668e-01_rb,9.976935e-01_rb,9.971497e-01_rb, &
6110 9.966314e-01_rb,9.961344e-01_rb,9.956545e-01_rb,9.951873e-01_rb, &
6111 9.947286e-01_rb,9.942741e-01_rb,9.938457e-01_rb,9.933947e-01_rb, &
6112 9.929473e-01_rb,9.925032e-01_rb,9.920621e-01_rb,9.916237e-01_rb, &
6113 9.911875e-01_rb,9.907534e-01_rb,9.903209e-01_rb,9.898898e-01_rb, &
6114 9.894597e-01_rb,9.890304e-01_rb,9.886015e-01_rb,9.881726e-01_rb, &
6115 9.877435e-01_rb,9.873138e-01_rb,9.868833e-01_rb,9.864516e-01_rb, &
6116 9.860698e-01_rb,9.856317e-01_rb,9.851957e-01_rb,9.847618e-01_rb, &
6117 9.843302e-01_rb,9.839008e-01_rb,9.834739e-01_rb,9.830494e-01_rb, &
6118 9.826275e-01_rb,9.822083e-01_rb,9.817918e-01_rb,9.813782e-01_rb, &
6119 9.809675e-01_rb,9.805598e-01_rb,9.801552e-01_rb,9.797538e-01_rb, &
6120 9.793556e-01_rb,9.789608e-01_rb,9.785695e-01_rb,9.781817e-01_rb, &
6121 9.777975e-01_rb,9.774171e-01_rb,9.770404e-01_rb,9.766676e-01_rb, &
6122 9.762988e-01_rb,9.759340e-01_rb,9.755733e-01_rb,9.752169e-01_rb, &
6123 9.748649e-01_rb,9.7452e-01_rb /)
6124 ssaliq1(:, 22) = (/ &
6125 9.994441e-01_rb,9.991608e-01_rb,9.988949e-01_rb,9.986439e-01_rb, &
6126 9.984054e-01_rb,9.981768e-01_rb,9.979557e-01_rb,9.977396e-01_rb, &
6127 9.975258e-01_rb,9.973120e-01_rb,9.971011e-01_rb,9.968852e-01_rb, &
6128 9.966708e-01_rb,9.964578e-01_rb,9.962462e-01_rb,9.960357e-01_rb, &
6129 9.958264e-01_rb,9.956181e-01_rb,9.954108e-01_rb,9.952043e-01_rb, &
6130 9.949987e-01_rb,9.947937e-01_rb,9.945892e-01_rb,9.943853e-01_rb, &
6131 9.941818e-01_rb,9.939786e-01_rb,9.937757e-01_rb,9.935728e-01_rb, &
6132 9.933922e-01_rb,9.931825e-01_rb,9.929739e-01_rb,9.927661e-01_rb, &
6133 9.925592e-01_rb,9.923534e-01_rb,9.921485e-01_rb,9.919447e-01_rb, &
6134 9.917421e-01_rb,9.915406e-01_rb,9.913403e-01_rb,9.911412e-01_rb, &
6135 9.909435e-01_rb,9.907470e-01_rb,9.905519e-01_rb,9.903581e-01_rb, &
6136 9.901659e-01_rb,9.899751e-01_rb,9.897858e-01_rb,9.895981e-01_rb, &
6137 9.894120e-01_rb,9.892276e-01_rb,9.890447e-01_rb,9.888637e-01_rb, &
6138 9.886845e-01_rb,9.885070e-01_rb,9.883314e-01_rb,9.881576e-01_rb, &
6139 9.879859e-01_rb,9.8782e-01_rb /)
6140 ssaliq1(:, 23) = (/ &
6141 9.999138e-01_rb,9.998730e-01_rb,9.998338e-01_rb,9.997965e-01_rb, &
6142 9.997609e-01_rb,9.997270e-01_rb,9.996944e-01_rb,9.996629e-01_rb, &
6143 9.996321e-01_rb,9.996016e-01_rb,9.995690e-01_rb,9.995372e-01_rb, &
6144 9.995057e-01_rb,9.994744e-01_rb,9.994433e-01_rb,9.994124e-01_rb, &
6145 9.993817e-01_rb,9.993510e-01_rb,9.993206e-01_rb,9.992903e-01_rb, &
6146 9.992600e-01_rb,9.992299e-01_rb,9.991998e-01_rb,9.991698e-01_rb, &
6147 9.991398e-01_rb,9.991098e-01_rb,9.990799e-01_rb,9.990499e-01_rb, &
6148 9.990231e-01_rb,9.989920e-01_rb,9.989611e-01_rb,9.989302e-01_rb, &
6149 9.988996e-01_rb,9.988690e-01_rb,9.988386e-01_rb,9.988084e-01_rb, &
6150 9.987783e-01_rb,9.987485e-01_rb,9.987187e-01_rb,9.986891e-01_rb, &
6151 9.986598e-01_rb,9.986306e-01_rb,9.986017e-01_rb,9.985729e-01_rb, &
6152 9.985443e-01_rb,9.985160e-01_rb,9.984879e-01_rb,9.984600e-01_rb, &
6153 9.984324e-01_rb,9.984050e-01_rb,9.983778e-01_rb,9.983509e-01_rb, &
6154 9.983243e-01_rb,9.982980e-01_rb,9.982719e-01_rb,9.982461e-01_rb, &
6155 9.982206e-01_rb,9.9820e-01_rb /)
6156 ssaliq1(:, 24) = (/ &
6157 9.999985e-01_rb,9.999979e-01_rb,9.999972e-01_rb,9.999966e-01_rb, &
6158 9.999961e-01_rb,9.999955e-01_rb,9.999950e-01_rb,9.999944e-01_rb, &
6159 9.999938e-01_rb,9.999933e-01_rb,9.999927e-01_rb,9.999921e-01_rb, &
6160 9.999915e-01_rb,9.999910e-01_rb,9.999904e-01_rb,9.999899e-01_rb, &
6161 9.999893e-01_rb,9.999888e-01_rb,9.999882e-01_rb,9.999877e-01_rb, &
6162 9.999871e-01_rb,9.999866e-01_rb,9.999861e-01_rb,9.999855e-01_rb, &
6163 9.999850e-01_rb,9.999844e-01_rb,9.999839e-01_rb,9.999833e-01_rb, &
6164 9.999828e-01_rb,9.999823e-01_rb,9.999817e-01_rb,9.999812e-01_rb, &
6165 9.999807e-01_rb,9.999801e-01_rb,9.999796e-01_rb,9.999791e-01_rb, &
6166 9.999786e-01_rb,9.999781e-01_rb,9.999776e-01_rb,9.999770e-01_rb, &
6167 9.999765e-01_rb,9.999761e-01_rb,9.999756e-01_rb,9.999751e-01_rb, &
6168 9.999746e-01_rb,9.999741e-01_rb,9.999736e-01_rb,9.999732e-01_rb, &
6169 9.999727e-01_rb,9.999722e-01_rb,9.999718e-01_rb,9.999713e-01_rb, &
6170 9.999709e-01_rb,9.999705e-01_rb,9.999701e-01_rb,9.999697e-01_rb, &
6171 9.999692e-01_rb,9.9997e-01_rb /)
6172 ssaliq1(:, 25) = (/ &
6173 9.999999e-01_rb,9.999998e-01_rb,9.999997e-01_rb,9.999997e-01_rb, &
6174 9.999997e-01_rb,9.999996e-01_rb,9.999996e-01_rb,9.999995e-01_rb, &
6175 9.999995e-01_rb,9.999994e-01_rb,9.999994e-01_rb,9.999993e-01_rb, &
6176 9.999993e-01_rb,9.999992e-01_rb,9.999992e-01_rb,9.999991e-01_rb, &
6177 9.999991e-01_rb,9.999991e-01_rb,9.999990e-01_rb,9.999989e-01_rb, &
6178 9.999989e-01_rb,9.999989e-01_rb,9.999988e-01_rb,9.999988e-01_rb, &
6179 9.999987e-01_rb,9.999987e-01_rb,9.999986e-01_rb,9.999986e-01_rb, &
6180 9.999985e-01_rb,9.999985e-01_rb,9.999984e-01_rb,9.999984e-01_rb, &
6181 9.999984e-01_rb,9.999983e-01_rb,9.999983e-01_rb,9.999982e-01_rb, &
6182 9.999982e-01_rb,9.999982e-01_rb,9.999981e-01_rb,9.999980e-01_rb, &
6183 9.999980e-01_rb,9.999980e-01_rb,9.999979e-01_rb,9.999979e-01_rb, &
6184 9.999978e-01_rb,9.999978e-01_rb,9.999977e-01_rb,9.999977e-01_rb, &
6185 9.999977e-01_rb,9.999976e-01_rb,9.999976e-01_rb,9.999975e-01_rb, &
6186 9.999975e-01_rb,9.999974e-01_rb,9.999974e-01_rb,9.999974e-01_rb, &
6187 9.999973e-01_rb,1.0000e+00_rb /)
6188 ssaliq1(:, 26) = (/ &
6189 9.999997e-01_rb,9.999995e-01_rb,9.999993e-01_rb,9.999992e-01_rb, &
6190 9.999990e-01_rb,9.999989e-01_rb,9.999988e-01_rb,9.999987e-01_rb, &
6191 9.999986e-01_rb,9.999985e-01_rb,9.999984e-01_rb,9.999983e-01_rb, &
6192 9.999982e-01_rb,9.999981e-01_rb,9.999980e-01_rb,9.999978e-01_rb, &
6193 9.999977e-01_rb,9.999976e-01_rb,9.999975e-01_rb,9.999974e-01_rb, &
6194 9.999973e-01_rb,9.999972e-01_rb,9.999970e-01_rb,9.999969e-01_rb, &
6195 9.999968e-01_rb,9.999967e-01_rb,9.999966e-01_rb,9.999965e-01_rb, &
6196 9.999964e-01_rb,9.999963e-01_rb,9.999962e-01_rb,9.999961e-01_rb, &
6197 9.999959e-01_rb,9.999958e-01_rb,9.999957e-01_rb,9.999956e-01_rb, &
6198 9.999955e-01_rb,9.999954e-01_rb,9.999953e-01_rb,9.999952e-01_rb, &
6199 9.999951e-01_rb,9.999949e-01_rb,9.999949e-01_rb,9.999947e-01_rb, &
6200 9.999946e-01_rb,9.999945e-01_rb,9.999944e-01_rb,9.999943e-01_rb, &
6201 9.999942e-01_rb,9.999941e-01_rb,9.999940e-01_rb,9.999939e-01_rb, &
6202 9.999938e-01_rb,9.999937e-01_rb,9.999936e-01_rb,9.999935e-01_rb, &
6203 9.999934e-01_rb,9.9999e-01_rb /)
6204 ssaliq1(:, 27) = (/ &
6205 9.999984e-01_rb,9.999976e-01_rb,9.999969e-01_rb,9.999962e-01_rb, &
6206 9.999956e-01_rb,9.999950e-01_rb,9.999945e-01_rb,9.999940e-01_rb, &
6207 9.999935e-01_rb,9.999931e-01_rb,9.999926e-01_rb,9.999920e-01_rb, &
6208 9.999914e-01_rb,9.999908e-01_rb,9.999903e-01_rb,9.999897e-01_rb, &
6209 9.999891e-01_rb,9.999886e-01_rb,9.999880e-01_rb,9.999874e-01_rb, &
6210 9.999868e-01_rb,9.999863e-01_rb,9.999857e-01_rb,9.999851e-01_rb, &
6211 9.999846e-01_rb,9.999840e-01_rb,9.999835e-01_rb,9.999829e-01_rb, &
6212 9.999824e-01_rb,9.999818e-01_rb,9.999812e-01_rb,9.999806e-01_rb, &
6213 9.999800e-01_rb,9.999795e-01_rb,9.999789e-01_rb,9.999783e-01_rb, &
6214 9.999778e-01_rb,9.999773e-01_rb,9.999767e-01_rb,9.999761e-01_rb, &
6215 9.999756e-01_rb,9.999750e-01_rb,9.999745e-01_rb,9.999739e-01_rb, &
6216 9.999734e-01_rb,9.999729e-01_rb,9.999723e-01_rb,9.999718e-01_rb, &
6217 9.999713e-01_rb,9.999708e-01_rb,9.999703e-01_rb,9.999697e-01_rb, &
6218 9.999692e-01_rb,9.999687e-01_rb,9.999683e-01_rb,9.999678e-01_rb, &
6219 9.999673e-01_rb,9.9997e-01_rb /)
6220 ssaliq1(:, 28) = (/ &
6221 9.999981e-01_rb,9.999973e-01_rb,9.999965e-01_rb,9.999958e-01_rb, &
6222 9.999951e-01_rb,9.999943e-01_rb,9.999937e-01_rb,9.999930e-01_rb, &
6223 9.999924e-01_rb,9.999918e-01_rb,9.999912e-01_rb,9.999905e-01_rb, &
6224 9.999897e-01_rb,9.999890e-01_rb,9.999883e-01_rb,9.999876e-01_rb, &
6225 9.999869e-01_rb,9.999862e-01_rb,9.999855e-01_rb,9.999847e-01_rb, &
6226 9.999840e-01_rb,9.999834e-01_rb,9.999827e-01_rb,9.999819e-01_rb, &
6227 9.999812e-01_rb,9.999805e-01_rb,9.999799e-01_rb,9.999791e-01_rb, &
6228 9.999785e-01_rb,9.999778e-01_rb,9.999771e-01_rb,9.999764e-01_rb, &
6229 9.999757e-01_rb,9.999750e-01_rb,9.999743e-01_rb,9.999736e-01_rb, &
6230 9.999729e-01_rb,9.999722e-01_rb,9.999715e-01_rb,9.999709e-01_rb, &
6231 9.999701e-01_rb,9.999695e-01_rb,9.999688e-01_rb,9.999682e-01_rb, &
6232 9.999675e-01_rb,9.999669e-01_rb,9.999662e-01_rb,9.999655e-01_rb, &
6233 9.999649e-01_rb,9.999642e-01_rb,9.999636e-01_rb,9.999630e-01_rb, &
6234 9.999624e-01_rb,9.999618e-01_rb,9.999612e-01_rb,9.999606e-01_rb, &
6235 9.999600e-01_rb,9.9996e-01_rb /)
6236 ssaliq1(:, 29) = (/ &
6237 8.505737e-01_rb,8.465102e-01_rb,8.394829e-01_rb,8.279508e-01_rb, &
6238 8.110806e-01_rb,7.900397e-01_rb,7.669615e-01_rb,7.444422e-01_rb, &
6239 7.253055e-01_rb,7.124831e-01_rb,7.016434e-01_rb,6.885485e-01_rb, &
6240 6.767340e-01_rb,6.661029e-01_rb,6.565577e-01_rb,6.480013e-01_rb, &
6241 6.403373e-01_rb,6.334697e-01_rb,6.273034e-01_rb,6.217440e-01_rb, &
6242 6.166983e-01_rb,6.120740e-01_rb,6.077796e-01_rb,6.037249e-01_rb, &
6243 5.998207e-01_rb,5.959788e-01_rb,5.921123e-01_rb,5.881354e-01_rb, &
6244 5.891285e-01_rb,5.851143e-01_rb,5.814653e-01_rb,5.781606e-01_rb, &
6245 5.751792e-01_rb,5.724998e-01_rb,5.701016e-01_rb,5.679634e-01_rb, &
6246 5.660642e-01_rb,5.643829e-01_rb,5.628984e-01_rb,5.615898e-01_rb, &
6247 5.604359e-01_rb,5.594158e-01_rb,5.585083e-01_rb,5.576924e-01_rb, &
6248 5.569470e-01_rb,5.562512e-01_rb,5.555838e-01_rb,5.549239e-01_rb, &
6249 5.542503e-01_rb,5.535420e-01_rb,5.527781e-01_rb,5.519374e-01_rb, &
6250 5.509989e-01_rb,5.499417e-01_rb,5.487445e-01_rb,5.473865e-01_rb, &
6251 5.458466e-01_rb,5.4410e-01_rb /)
6253 ! asymmetry parameter
6255 asyliq1(:, 16) = (/ &
6256 8.133297e-01_rb,8.133528e-01_rb,8.173865e-01_rb,8.243205e-01_rb, &
6257 8.333063e-01_rb,8.436317e-01_rb,8.546611e-01_rb,8.657934e-01_rb, &
6258 8.764345e-01_rb,8.859837e-01_rb,8.627394e-01_rb,8.824569e-01_rb, &
6259 8.976887e-01_rb,9.089541e-01_rb,9.167699e-01_rb,9.216517e-01_rb, &
6260 9.241147e-01_rb,9.246743e-01_rb,9.238469e-01_rb,9.221504e-01_rb, &
6261 9.201045e-01_rb,9.182299e-01_rb,9.170491e-01_rb,9.170862e-01_rb, &
6262 9.188653e-01_rb,9.229111e-01_rb,9.297468e-01_rb,9.398950e-01_rb, &
6263 9.203269e-01_rb,9.260693e-01_rb,9.309373e-01_rb,9.349918e-01_rb, &
6264 9.382935e-01_rb,9.409030e-01_rb,9.428809e-01_rb,9.442881e-01_rb, &
6265 9.451851e-01_rb,9.456331e-01_rb,9.456926e-01_rb,9.454247e-01_rb, &
6266 9.448902e-01_rb,9.441503e-01_rb,9.432661e-01_rb,9.422987e-01_rb, &
6267 9.413094e-01_rb,9.403594e-01_rb,9.395102e-01_rb,9.388230e-01_rb, &
6268 9.383594e-01_rb,9.381810e-01_rb,9.383489e-01_rb,9.389251e-01_rb, &
6269 9.399707e-01_rb,9.415475e-01_rb,9.437167e-01_rb,9.465399e-01_rb, &
6270 9.500786e-01_rb,9.5439e-01_rb /)
6271 asyliq1(:, 17) = (/ &
6272 8.794448e-01_rb,8.819306e-01_rb,8.837667e-01_rb,8.853832e-01_rb, &
6273 8.871010e-01_rb,8.892675e-01_rb,8.922584e-01_rb,8.964666e-01_rb, &
6274 9.022940e-01_rb,9.101456e-01_rb,8.839999e-01_rb,9.035610e-01_rb, &
6275 9.184568e-01_rb,9.292315e-01_rb,9.364282e-01_rb,9.405887e-01_rb, &
6276 9.422554e-01_rb,9.419703e-01_rb,9.402759e-01_rb,9.377159e-01_rb, &
6277 9.348345e-01_rb,9.321769e-01_rb,9.302888e-01_rb,9.297166e-01_rb, &
6278 9.310075e-01_rb,9.347080e-01_rb,9.413643e-01_rb,9.515216e-01_rb, &
6279 9.306286e-01_rb,9.361781e-01_rb,9.408374e-01_rb,9.446692e-01_rb, &
6280 9.477363e-01_rb,9.501013e-01_rb,9.518268e-01_rb,9.529756e-01_rb, &
6281 9.536105e-01_rb,9.537938e-01_rb,9.535886e-01_rb,9.530574e-01_rb, &
6282 9.522633e-01_rb,9.512688e-01_rb,9.501370e-01_rb,9.489306e-01_rb, &
6283 9.477126e-01_rb,9.465459e-01_rb,9.454934e-01_rb,9.446183e-01_rb, &
6284 9.439833e-01_rb,9.436519e-01_rb,9.436866e-01_rb,9.441508e-01_rb, &
6285 9.451073e-01_rb,9.466195e-01_rb,9.487501e-01_rb,9.515621e-01_rb, &
6286 9.551185e-01_rb,9.5948e-01_rb /)
6287 asyliq1(:, 18) = (/ &
6288 8.478817e-01_rb,8.269312e-01_rb,8.161352e-01_rb,8.135960e-01_rb, &
6289 8.173586e-01_rb,8.254167e-01_rb,8.357072e-01_rb,8.461167e-01_rb, &
6290 8.544952e-01_rb,8.586776e-01_rb,8.335562e-01_rb,8.524273e-01_rb, &
6291 8.669052e-01_rb,8.775014e-01_rb,8.847277e-01_rb,8.890958e-01_rb, &
6292 8.911173e-01_rb,8.913038e-01_rb,8.901669e-01_rb,8.882182e-01_rb, &
6293 8.859692e-01_rb,8.839315e-01_rb,8.826164e-01_rb,8.825356e-01_rb, &
6294 8.842004e-01_rb,8.881223e-01_rb,8.948131e-01_rb,9.047837e-01_rb, &
6295 8.855951e-01_rb,8.911796e-01_rb,8.959229e-01_rb,8.998837e-01_rb, &
6296 9.031209e-01_rb,9.056939e-01_rb,9.076609e-01_rb,9.090812e-01_rb, &
6297 9.100134e-01_rb,9.105167e-01_rb,9.106496e-01_rb,9.104712e-01_rb, &
6298 9.100404e-01_rb,9.094159e-01_rb,9.086568e-01_rb,9.078218e-01_rb, &
6299 9.069697e-01_rb,9.061595e-01_rb,9.054499e-01_rb,9.048999e-01_rb, &
6300 9.045683e-01_rb,9.045142e-01_rb,9.047962e-01_rb,9.054730e-01_rb, &
6301 9.066037e-01_rb,9.082472e-01_rb,9.104623e-01_rb,9.133079e-01_rb, &
6302 9.168427e-01_rb,9.2113e-01_rb /)
6303 asyliq1(:, 19) = (/ &
6304 8.216697e-01_rb,7.982871e-01_rb,7.891147e-01_rb,7.909083e-01_rb, &
6305 8.003833e-01_rb,8.142516e-01_rb,8.292290e-01_rb,8.420356e-01_rb, &
6306 8.493945e-01_rb,8.480316e-01_rb,8.212381e-01_rb,8.394984e-01_rb, &
6307 8.534095e-01_rb,8.634813e-01_rb,8.702242e-01_rb,8.741483e-01_rb, &
6308 8.757638e-01_rb,8.755808e-01_rb,8.741095e-01_rb,8.718604e-01_rb, &
6309 8.693433e-01_rb,8.670686e-01_rb,8.655464e-01_rb,8.652872e-01_rb, &
6310 8.668006e-01_rb,8.705973e-01_rb,8.771874e-01_rb,8.870809e-01_rb, &
6311 8.678284e-01_rb,8.732315e-01_rb,8.778084e-01_rb,8.816166e-01_rb, &
6312 8.847146e-01_rb,8.871603e-01_rb,8.890116e-01_rb,8.903266e-01_rb, &
6313 8.911632e-01_rb,8.915796e-01_rb,8.916337e-01_rb,8.913834e-01_rb, &
6314 8.908869e-01_rb,8.902022e-01_rb,8.893873e-01_rb,8.885001e-01_rb, &
6315 8.875986e-01_rb,8.867411e-01_rb,8.859852e-01_rb,8.853891e-01_rb, &
6316 8.850111e-01_rb,8.849089e-01_rb,8.851405e-01_rb,8.857639e-01_rb, &
6317 8.868372e-01_rb,8.884185e-01_rb,8.905656e-01_rb,8.933368e-01_rb, &
6318 8.967899e-01_rb,9.0098e-01_rb /)
6319 asyliq1(:, 20) = (/ &
6320 8.063610e-01_rb,7.938147e-01_rb,7.921304e-01_rb,7.985092e-01_rb, &
6321 8.101339e-01_rb,8.242175e-01_rb,8.379913e-01_rb,8.486920e-01_rb, &
6322 8.535547e-01_rb,8.498083e-01_rb,8.224849e-01_rb,8.405509e-01_rb, &
6323 8.542436e-01_rb,8.640770e-01_rb,8.705653e-01_rb,8.742227e-01_rb, &
6324 8.755630e-01_rb,8.751004e-01_rb,8.733491e-01_rb,8.708231e-01_rb, &
6325 8.680365e-01_rb,8.655035e-01_rb,8.637381e-01_rb,8.632544e-01_rb, &
6326 8.645665e-01_rb,8.681885e-01_rb,8.746346e-01_rb,8.844188e-01_rb, &
6327 8.648180e-01_rb,8.700563e-01_rb,8.744672e-01_rb,8.781087e-01_rb, &
6328 8.810393e-01_rb,8.833174e-01_rb,8.850011e-01_rb,8.861485e-01_rb, &
6329 8.868183e-01_rb,8.870687e-01_rb,8.869579e-01_rb,8.865441e-01_rb, &
6330 8.858857e-01_rb,8.850412e-01_rb,8.840686e-01_rb,8.830263e-01_rb, &
6331 8.819726e-01_rb,8.809658e-01_rb,8.800642e-01_rb,8.793260e-01_rb, &
6332 8.788099e-01_rb,8.785737e-01_rb,8.786758e-01_rb,8.791746e-01_rb, &
6333 8.801283e-01_rb,8.815955e-01_rb,8.836340e-01_rb,8.863024e-01_rb, &
6334 8.896592e-01_rb,8.9376e-01_rb /)
6335 asyliq1(:, 21) = (/ &
6336 7.885899e-01_rb,7.937172e-01_rb,8.020658e-01_rb,8.123971e-01_rb, &
6337 8.235502e-01_rb,8.343776e-01_rb,8.437336e-01_rb,8.504711e-01_rb, &
6338 8.534421e-01_rb,8.514978e-01_rb,8.238888e-01_rb,8.417463e-01_rb, &
6339 8.552057e-01_rb,8.647853e-01_rb,8.710038e-01_rb,8.743798e-01_rb, &
6340 8.754319e-01_rb,8.746786e-01_rb,8.726386e-01_rb,8.698303e-01_rb, &
6341 8.667724e-01_rb,8.639836e-01_rb,8.619823e-01_rb,8.612870e-01_rb, &
6342 8.624165e-01_rb,8.658893e-01_rb,8.722241e-01_rb,8.819394e-01_rb, &
6343 8.620216e-01_rb,8.671239e-01_rb,8.713983e-01_rb,8.749032e-01_rb, &
6344 8.776970e-01_rb,8.798385e-01_rb,8.813860e-01_rb,8.823980e-01_rb, &
6345 8.829332e-01_rb,8.830500e-01_rb,8.828068e-01_rb,8.822623e-01_rb, &
6346 8.814750e-01_rb,8.805031e-01_rb,8.794056e-01_rb,8.782407e-01_rb, &
6347 8.770672e-01_rb,8.759432e-01_rb,8.749275e-01_rb,8.740784e-01_rb, &
6348 8.734547e-01_rb,8.731146e-01_rb,8.731170e-01_rb,8.735199e-01_rb, &
6349 8.743823e-01_rb,8.757625e-01_rb,8.777191e-01_rb,8.803105e-01_rb, &
6350 8.835953e-01_rb,8.8763e-01_rb /)
6351 asyliq1(:, 22) = (/ &
6352 7.811516e-01_rb,7.962229e-01_rb,8.096199e-01_rb,8.212996e-01_rb, &
6353 8.312212e-01_rb,8.393430e-01_rb,8.456236e-01_rb,8.500214e-01_rb, &
6354 8.524950e-01_rb,8.530031e-01_rb,8.251485e-01_rb,8.429043e-01_rb, &
6355 8.562461e-01_rb,8.656954e-01_rb,8.717737e-01_rb,8.750020e-01_rb, &
6356 8.759022e-01_rb,8.749953e-01_rb,8.728027e-01_rb,8.698461e-01_rb, &
6357 8.666466e-01_rb,8.637257e-01_rb,8.616047e-01_rb,8.608051e-01_rb, &
6358 8.618483e-01_rb,8.652557e-01_rb,8.715487e-01_rb,8.812485e-01_rb, &
6359 8.611645e-01_rb,8.662052e-01_rb,8.704173e-01_rb,8.738594e-01_rb, &
6360 8.765901e-01_rb,8.786678e-01_rb,8.801517e-01_rb,8.810999e-01_rb, &
6361 8.815713e-01_rb,8.816246e-01_rb,8.813185e-01_rb,8.807114e-01_rb, &
6362 8.798621e-01_rb,8.788290e-01_rb,8.776713e-01_rb,8.764470e-01_rb, &
6363 8.752152e-01_rb,8.740343e-01_rb,8.729631e-01_rb,8.720602e-01_rb, &
6364 8.713842e-01_rb,8.709936e-01_rb,8.709475e-01_rb,8.713041e-01_rb, &
6365 8.721221e-01_rb,8.734602e-01_rb,8.753774e-01_rb,8.779319e-01_rb, &
6366 8.811825e-01_rb,8.8519e-01_rb /)
6367 asyliq1(:, 23) = (/ &
6368 7.865744e-01_rb,8.093340e-01_rb,8.257596e-01_rb,8.369940e-01_rb, &
6369 8.441574e-01_rb,8.483602e-01_rb,8.507096e-01_rb,8.523139e-01_rb, &
6370 8.542834e-01_rb,8.577321e-01_rb,8.288960e-01_rb,8.465308e-01_rb, &
6371 8.597175e-01_rb,8.689830e-01_rb,8.748542e-01_rb,8.778584e-01_rb, &
6372 8.785222e-01_rb,8.773728e-01_rb,8.749370e-01_rb,8.717419e-01_rb, &
6373 8.683145e-01_rb,8.651816e-01_rb,8.628704e-01_rb,8.619077e-01_rb, &
6374 8.628205e-01_rb,8.661356e-01_rb,8.723803e-01_rb,8.820815e-01_rb, &
6375 8.616715e-01_rb,8.666389e-01_rb,8.707753e-01_rb,8.741398e-01_rb, &
6376 8.767912e-01_rb,8.787885e-01_rb,8.801908e-01_rb,8.810570e-01_rb, &
6377 8.814460e-01_rb,8.814167e-01_rb,8.810283e-01_rb,8.803395e-01_rb, &
6378 8.794095e-01_rb,8.782971e-01_rb,8.770613e-01_rb,8.757610e-01_rb, &
6379 8.744553e-01_rb,8.732031e-01_rb,8.720634e-01_rb,8.710951e-01_rb, &
6380 8.703572e-01_rb,8.699086e-01_rb,8.698084e-01_rb,8.701155e-01_rb, &
6381 8.708887e-01_rb,8.721872e-01_rb,8.740698e-01_rb,8.765957e-01_rb, &
6382 8.798235e-01_rb,8.8381e-01_rb /)
6383 asyliq1(:, 24) = (/ &
6384 8.069513e-01_rb,8.262939e-01_rb,8.398241e-01_rb,8.486352e-01_rb, &
6385 8.538213e-01_rb,8.564743e-01_rb,8.576854e-01_rb,8.585455e-01_rb, &
6386 8.601452e-01_rb,8.635755e-01_rb,8.337383e-01_rb,8.512655e-01_rb, &
6387 8.643049e-01_rb,8.733896e-01_rb,8.790535e-01_rb,8.818295e-01_rb, &
6388 8.822518e-01_rb,8.808533e-01_rb,8.781676e-01_rb,8.747284e-01_rb, &
6389 8.710690e-01_rb,8.677229e-01_rb,8.652236e-01_rb,8.641047e-01_rb, &
6390 8.648993e-01_rb,8.681413e-01_rb,8.743640e-01_rb,8.841007e-01_rb, &
6391 8.633558e-01_rb,8.682719e-01_rb,8.723543e-01_rb,8.756621e-01_rb, &
6392 8.782547e-01_rb,8.801915e-01_rb,8.815318e-01_rb,8.823347e-01_rb, &
6393 8.826598e-01_rb,8.825663e-01_rb,8.821135e-01_rb,8.813608e-01_rb, &
6394 8.803674e-01_rb,8.791928e-01_rb,8.778960e-01_rb,8.765366e-01_rb, &
6395 8.751738e-01_rb,8.738670e-01_rb,8.726755e-01_rb,8.716585e-01_rb, &
6396 8.708755e-01_rb,8.703856e-01_rb,8.702483e-01_rb,8.705229e-01_rb, &
6397 8.712687e-01_rb,8.725448e-01_rb,8.744109e-01_rb,8.769260e-01_rb, &
6398 8.801496e-01_rb,8.8414e-01_rb /)
6399 asyliq1(:, 25) = (/ &
6400 8.252182e-01_rb,8.379244e-01_rb,8.471709e-01_rb,8.535760e-01_rb, &
6401 8.577540e-01_rb,8.603183e-01_rb,8.618820e-01_rb,8.630578e-01_rb, &
6402 8.644587e-01_rb,8.666970e-01_rb,8.362159e-01_rb,8.536817e-01_rb, &
6403 8.666387e-01_rb,8.756240e-01_rb,8.811746e-01_rb,8.838273e-01_rb, &
6404 8.841191e-01_rb,8.825871e-01_rb,8.797681e-01_rb,8.761992e-01_rb, &
6405 8.724174e-01_rb,8.689593e-01_rb,8.663623e-01_rb,8.651632e-01_rb, &
6406 8.658988e-01_rb,8.691064e-01_rb,8.753226e-01_rb,8.850847e-01_rb, &
6407 8.641620e-01_rb,8.690500e-01_rb,8.731026e-01_rb,8.763795e-01_rb, &
6408 8.789400e-01_rb,8.808438e-01_rb,8.821503e-01_rb,8.829191e-01_rb, &
6409 8.832095e-01_rb,8.830813e-01_rb,8.825938e-01_rb,8.818064e-01_rb, &
6410 8.807787e-01_rb,8.795704e-01_rb,8.782408e-01_rb,8.768493e-01_rb, &
6411 8.754557e-01_rb,8.741193e-01_rb,8.728995e-01_rb,8.718561e-01_rb, &
6412 8.710484e-01_rb,8.705360e-01_rb,8.703782e-01_rb,8.706347e-01_rb, &
6413 8.713650e-01_rb,8.726285e-01_rb,8.744849e-01_rb,8.769933e-01_rb, &
6414 8.802136e-01_rb,8.8421e-01_rb /)
6415 asyliq1(:, 26) = (/ &
6416 8.370583e-01_rb,8.467920e-01_rb,8.537769e-01_rb,8.585136e-01_rb, &
6417 8.615034e-01_rb,8.632474e-01_rb,8.642468e-01_rb,8.650026e-01_rb, &
6418 8.660161e-01_rb,8.677882e-01_rb,8.369760e-01_rb,8.543821e-01_rb, &
6419 8.672699e-01_rb,8.761782e-01_rb,8.816454e-01_rb,8.842103e-01_rb, &
6420 8.844114e-01_rb,8.827872e-01_rb,8.798766e-01_rb,8.762179e-01_rb, &
6421 8.723500e-01_rb,8.688112e-01_rb,8.661403e-01_rb,8.648758e-01_rb, &
6422 8.655563e-01_rb,8.687206e-01_rb,8.749072e-01_rb,8.846546e-01_rb, &
6423 8.636289e-01_rb,8.684849e-01_rb,8.725054e-01_rb,8.757501e-01_rb, &
6424 8.782785e-01_rb,8.801503e-01_rb,8.814249e-01_rb,8.821620e-01_rb, &
6425 8.824211e-01_rb,8.822620e-01_rb,8.817440e-01_rb,8.809268e-01_rb, &
6426 8.798699e-01_rb,8.786330e-01_rb,8.772756e-01_rb,8.758572e-01_rb, &
6427 8.744374e-01_rb,8.730760e-01_rb,8.718323e-01_rb,8.707660e-01_rb, &
6428 8.699366e-01_rb,8.694039e-01_rb,8.692271e-01_rb,8.694661e-01_rb, &
6429 8.701803e-01_rb,8.714293e-01_rb,8.732727e-01_rb,8.757702e-01_rb, &
6430 8.789811e-01_rb,8.8297e-01_rb /)
6431 asyliq1(:, 27) = (/ &
6432 8.430819e-01_rb,8.510060e-01_rb,8.567270e-01_rb,8.606533e-01_rb, &
6433 8.631934e-01_rb,8.647554e-01_rb,8.657471e-01_rb,8.665760e-01_rb, &
6434 8.676496e-01_rb,8.693754e-01_rb,8.384298e-01_rb,8.557913e-01_rb, &
6435 8.686214e-01_rb,8.774605e-01_rb,8.828495e-01_rb,8.853287e-01_rb, &
6436 8.854393e-01_rb,8.837215e-01_rb,8.807161e-01_rb,8.769639e-01_rb, &
6437 8.730053e-01_rb,8.693812e-01_rb,8.666321e-01_rb,8.652988e-01_rb, &
6438 8.659219e-01_rb,8.690419e-01_rb,8.751999e-01_rb,8.849360e-01_rb, &
6439 8.638013e-01_rb,8.686371e-01_rb,8.726369e-01_rb,8.758605e-01_rb, &
6440 8.783674e-01_rb,8.802176e-01_rb,8.814705e-01_rb,8.821859e-01_rb, &
6441 8.824234e-01_rb,8.822429e-01_rb,8.817038e-01_rb,8.808658e-01_rb, &
6442 8.797887e-01_rb,8.785323e-01_rb,8.771560e-01_rb,8.757196e-01_rb, &
6443 8.742828e-01_rb,8.729052e-01_rb,8.716467e-01_rb,8.705666e-01_rb, &
6444 8.697250e-01_rb,8.691812e-01_rb,8.689950e-01_rb,8.692264e-01_rb, &
6445 8.699346e-01_rb,8.711795e-01_rb,8.730209e-01_rb,8.755181e-01_rb, &
6446 8.787312e-01_rb,8.8272e-01_rb /)
6447 asyliq1(:, 28) = (/ &
6448 8.452284e-01_rb,8.522700e-01_rb,8.572973e-01_rb,8.607031e-01_rb, &
6449 8.628802e-01_rb,8.642215e-01_rb,8.651198e-01_rb,8.659679e-01_rb, &
6450 8.671588e-01_rb,8.690853e-01_rb,8.383803e-01_rb,8.557485e-01_rb, &
6451 8.685851e-01_rb,8.774303e-01_rb,8.828245e-01_rb,8.853077e-01_rb, &
6452 8.854207e-01_rb,8.837034e-01_rb,8.806962e-01_rb,8.769398e-01_rb, &
6453 8.729740e-01_rb,8.693393e-01_rb,8.665761e-01_rb,8.652247e-01_rb, &
6454 8.658253e-01_rb,8.689182e-01_rb,8.750438e-01_rb,8.847424e-01_rb, &
6455 8.636140e-01_rb,8.684449e-01_rb,8.724400e-01_rb,8.756589e-01_rb, &
6456 8.781613e-01_rb,8.800072e-01_rb,8.812559e-01_rb,8.819671e-01_rb, &
6457 8.822007e-01_rb,8.820165e-01_rb,8.814737e-01_rb,8.806322e-01_rb, &
6458 8.795518e-01_rb,8.782923e-01_rb,8.769129e-01_rb,8.754737e-01_rb, &
6459 8.740342e-01_rb,8.726542e-01_rb,8.713934e-01_rb,8.703111e-01_rb, &
6460 8.694677e-01_rb,8.689222e-01_rb,8.687344e-01_rb,8.689646e-01_rb, &
6461 8.696715e-01_rb,8.709156e-01_rb,8.727563e-01_rb,8.752531e-01_rb, &
6462 8.784659e-01_rb,8.8245e-01_rb /)
6463 asyliq1(:, 29) = (/ &
6464 7.800869e-01_rb,8.091120e-01_rb,8.325369e-01_rb,8.466266e-01_rb, &
6465 8.515495e-01_rb,8.499371e-01_rb,8.456203e-01_rb,8.430521e-01_rb, &
6466 8.470286e-01_rb,8.625431e-01_rb,8.402261e-01_rb,8.610822e-01_rb, &
6467 8.776608e-01_rb,8.904485e-01_rb,8.999294e-01_rb,9.065860e-01_rb, &
6468 9.108995e-01_rb,9.133503e-01_rb,9.144187e-01_rb,9.145855e-01_rb, &
6469 9.143320e-01_rb,9.141402e-01_rb,9.144933e-01_rb,9.158754e-01_rb, &
6470 9.187716e-01_rb,9.236677e-01_rb,9.310503e-01_rb,9.414058e-01_rb, &
6471 9.239108e-01_rb,9.300719e-01_rb,9.353612e-01_rb,9.398378e-01_rb, &
6472 9.435609e-01_rb,9.465895e-01_rb,9.489829e-01_rb,9.508000e-01_rb, &
6473 9.521002e-01_rb,9.529424e-01_rb,9.533860e-01_rb,9.534902e-01_rb, &
6474 9.533143e-01_rb,9.529177e-01_rb,9.523596e-01_rb,9.516997e-01_rb, &
6475 9.509973e-01_rb,9.503121e-01_rb,9.497037e-01_rb,9.492317e-01_rb, &
6476 9.489558e-01_rb,9.489356e-01_rb,9.492311e-01_rb,9.499019e-01_rb, &
6477 9.510077e-01_rb,9.526084e-01_rb,9.547636e-01_rb,9.575331e-01_rb, &
6478 9.609766e-01_rb,9.6515e-01_rb /)
6480 ! Spherical Ice Particle Parameterization
6481 ! extinction units (ext coef/iwc): [(m^-1)/(g m^-3)]
6483 extice2(:, 16) = (/ &
6485 4.101824e-01_rb,2.435514e-01_rb,1.713697e-01_rb,1.314865e-01_rb, &
6486 1.063406e-01_rb,8.910701e-02_rb,7.659480e-02_rb,6.711784e-02_rb, &
6487 5.970353e-02_rb,5.375249e-02_rb,4.887577e-02_rb,4.481025e-02_rb, &
6488 4.137171e-02_rb,3.842744e-02_rb,3.587948e-02_rb,3.365396e-02_rb, &
6489 3.169419e-02_rb,2.995593e-02_rb,2.840419e-02_rb,2.701091e-02_rb, &
6490 2.575336e-02_rb,2.461293e-02_rb,2.357423e-02_rb,2.262443e-02_rb, &
6491 2.175276e-02_rb,2.095012e-02_rb,2.020875e-02_rb,1.952199e-02_rb, &
6492 1.888412e-02_rb,1.829018e-02_rb,1.773586e-02_rb,1.721738e-02_rb, &
6493 1.673144e-02_rb,1.627510e-02_rb,1.584579e-02_rb,1.544122e-02_rb, &
6494 1.505934e-02_rb,1.469833e-02_rb,1.435654e-02_rb,1.403251e-02_rb, &
6495 1.372492e-02_rb,1.343255e-02_rb,1.315433e-02_rb /)
6496 extice2(:, 17) = (/ &
6498 3.836650e-01_rb,2.304055e-01_rb,1.637265e-01_rb,1.266681e-01_rb, &
6499 1.031602e-01_rb,8.695191e-02_rb,7.511544e-02_rb,6.610009e-02_rb, &
6500 5.900909e-02_rb,5.328833e-02_rb,4.857728e-02_rb,4.463133e-02_rb, &
6501 4.127880e-02_rb,3.839567e-02_rb,3.589013e-02_rb,3.369280e-02_rb, &
6502 3.175027e-02_rb,3.002079e-02_rb,2.847121e-02_rb,2.707493e-02_rb, &
6503 2.581031e-02_rb,2.465962e-02_rb,2.360815e-02_rb,2.264363e-02_rb, &
6504 2.175571e-02_rb,2.093563e-02_rb,2.017592e-02_rb,1.947015e-02_rb, &
6505 1.881278e-02_rb,1.819901e-02_rb,1.762463e-02_rb,1.708598e-02_rb, &
6506 1.657982e-02_rb,1.610330e-02_rb,1.565390e-02_rb,1.522937e-02_rb, &
6507 1.482768e-02_rb,1.444706e-02_rb,1.408588e-02_rb,1.374270e-02_rb, &
6508 1.341619e-02_rb,1.310517e-02_rb,1.280857e-02_rb /)
6509 extice2(:, 18) = (/ &
6511 4.152673e-01_rb,2.436816e-01_rb,1.702243e-01_rb,1.299704e-01_rb, &
6512 1.047528e-01_rb,8.756039e-02_rb,7.513327e-02_rb,6.575690e-02_rb, &
6513 5.844616e-02_rb,5.259609e-02_rb,4.781531e-02_rb,4.383980e-02_rb, &
6514 4.048517e-02_rb,3.761891e-02_rb,3.514342e-02_rb,3.298525e-02_rb, &
6515 3.108814e-02_rb,2.940825e-02_rb,2.791096e-02_rb,2.656858e-02_rb, &
6516 2.535869e-02_rb,2.426297e-02_rb,2.326627e-02_rb,2.235602e-02_rb, &
6517 2.152164e-02_rb,2.075420e-02_rb,2.004613e-02_rb,1.939091e-02_rb, &
6518 1.878296e-02_rb,1.821744e-02_rb,1.769015e-02_rb,1.719741e-02_rb, &
6519 1.673600e-02_rb,1.630308e-02_rb,1.589615e-02_rb,1.551298e-02_rb, &
6520 1.515159e-02_rb,1.481021e-02_rb,1.448726e-02_rb,1.418131e-02_rb, &
6521 1.389109e-02_rb,1.361544e-02_rb,1.335330e-02_rb /)
6522 extice2(:, 19) = (/ &
6524 3.873250e-01_rb,2.331609e-01_rb,1.655002e-01_rb,1.277753e-01_rb, &
6525 1.038247e-01_rb,8.731780e-02_rb,7.527638e-02_rb,6.611873e-02_rb, &
6526 5.892850e-02_rb,5.313885e-02_rb,4.838068e-02_rb,4.440356e-02_rb, &
6527 4.103167e-02_rb,3.813804e-02_rb,3.562870e-02_rb,3.343269e-02_rb, &
6528 3.149539e-02_rb,2.977414e-02_rb,2.823510e-02_rb,2.685112e-02_rb, &
6529 2.560015e-02_rb,2.446411e-02_rb,2.342805e-02_rb,2.247948e-02_rb, &
6530 2.160789e-02_rb,2.080438e-02_rb,2.006139e-02_rb,1.937238e-02_rb, &
6531 1.873177e-02_rb,1.813469e-02_rb,1.757689e-02_rb,1.705468e-02_rb, &
6532 1.656479e-02_rb,1.610435e-02_rb,1.567081e-02_rb,1.526192e-02_rb, &
6533 1.487565e-02_rb,1.451020e-02_rb,1.416396e-02_rb,1.383546e-02_rb, &
6534 1.352339e-02_rb,1.322657e-02_rb,1.294392e-02_rb /)
6535 extice2(:, 20) = (/ &
6537 3.784280e-01_rb,2.291396e-01_rb,1.632551e-01_rb,1.263775e-01_rb, &
6538 1.028944e-01_rb,8.666975e-02_rb,7.480952e-02_rb,6.577335e-02_rb, &
6539 5.866714e-02_rb,5.293694e-02_rb,4.822153e-02_rb,4.427547e-02_rb, &
6540 4.092626e-02_rb,3.804918e-02_rb,3.555184e-02_rb,3.336440e-02_rb, &
6541 3.143307e-02_rb,2.971577e-02_rb,2.817912e-02_rb,2.679632e-02_rb, &
6542 2.554558e-02_rb,2.440903e-02_rb,2.337187e-02_rb,2.242173e-02_rb, &
6543 2.154821e-02_rb,2.074249e-02_rb,1.999706e-02_rb,1.930546e-02_rb, &
6544 1.866212e-02_rb,1.806221e-02_rb,1.750152e-02_rb,1.697637e-02_rb, &
6545 1.648352e-02_rb,1.602010e-02_rb,1.558358e-02_rb,1.517172e-02_rb, &
6546 1.478250e-02_rb,1.441413e-02_rb,1.406498e-02_rb,1.373362e-02_rb, &
6547 1.341872e-02_rb,1.311911e-02_rb,1.283371e-02_rb /)
6548 extice2(:, 21) = (/ &
6550 3.719909e-01_rb,2.259490e-01_rb,1.613144e-01_rb,1.250648e-01_rb, &
6551 1.019462e-01_rb,8.595358e-02_rb,7.425064e-02_rb,6.532618e-02_rb, &
6552 5.830218e-02_rb,5.263421e-02_rb,4.796697e-02_rb,4.405891e-02_rb, &
6553 4.074013e-02_rb,3.788776e-02_rb,3.541071e-02_rb,3.324008e-02_rb, &
6554 3.132280e-02_rb,2.961733e-02_rb,2.809071e-02_rb,2.671645e-02_rb, &
6555 2.547302e-02_rb,2.434276e-02_rb,2.331102e-02_rb,2.236558e-02_rb, &
6556 2.149614e-02_rb,2.069397e-02_rb,1.995163e-02_rb,1.926272e-02_rb, &
6557 1.862174e-02_rb,1.802389e-02_rb,1.746500e-02_rb,1.694142e-02_rb, &
6558 1.644994e-02_rb,1.598772e-02_rb,1.555225e-02_rb,1.514129e-02_rb, &
6559 1.475286e-02_rb,1.438515e-02_rb,1.403659e-02_rb,1.370572e-02_rb, &
6560 1.339124e-02_rb,1.309197e-02_rb,1.280685e-02_rb /)
6561 extice2(:, 22) = (/ &
6563 3.713158e-01_rb,2.253816e-01_rb,1.608461e-01_rb,1.246718e-01_rb, &
6564 1.016109e-01_rb,8.566332e-02_rb,7.399666e-02_rb,6.510199e-02_rb, &
6565 5.810290e-02_rb,5.245608e-02_rb,4.780702e-02_rb,4.391478e-02_rb, &
6566 4.060989e-02_rb,3.776982e-02_rb,3.530374e-02_rb,3.314296e-02_rb, &
6567 3.123458e-02_rb,2.953719e-02_rb,2.801794e-02_rb,2.665043e-02_rb, &
6568 2.541321e-02_rb,2.428868e-02_rb,2.326224e-02_rb,2.232173e-02_rb, &
6569 2.145688e-02_rb,2.065899e-02_rb,1.992067e-02_rb,1.923552e-02_rb, &
6570 1.859808e-02_rb,1.800356e-02_rb,1.744782e-02_rb,1.692721e-02_rb, &
6571 1.643855e-02_rb,1.597900e-02_rb,1.554606e-02_rb,1.513751e-02_rb, &
6572 1.475137e-02_rb,1.438586e-02_rb,1.403938e-02_rb,1.371050e-02_rb, &
6573 1.339793e-02_rb,1.310050e-02_rb,1.281713e-02_rb /)
6574 extice2(:, 23) = (/ &
6576 3.605883e-01_rb,2.204388e-01_rb,1.580431e-01_rb,1.229033e-01_rb, &
6577 1.004203e-01_rb,8.482616e-02_rb,7.338941e-02_rb,6.465105e-02_rb, &
6578 5.776176e-02_rb,5.219398e-02_rb,4.760288e-02_rb,4.375369e-02_rb, &
6579 4.048111e-02_rb,3.766539e-02_rb,3.521771e-02_rb,3.307079e-02_rb, &
6580 3.117277e-02_rb,2.948303e-02_rb,2.796929e-02_rb,2.660560e-02_rb, &
6581 2.537086e-02_rb,2.424772e-02_rb,2.322182e-02_rb,2.228114e-02_rb, &
6582 2.141556e-02_rb,2.061649e-02_rb,1.987661e-02_rb,1.918962e-02_rb, &
6583 1.855009e-02_rb,1.795330e-02_rb,1.739514e-02_rb,1.687199e-02_rb, &
6584 1.638069e-02_rb,1.591845e-02_rb,1.548276e-02_rb,1.507143e-02_rb, &
6585 1.468249e-02_rb,1.431416e-02_rb,1.396486e-02_rb,1.363318e-02_rb, &
6586 1.331781e-02_rb,1.301759e-02_rb,1.273147e-02_rb /)
6587 extice2(:, 24) = (/ &
6589 3.527890e-01_rb,2.168469e-01_rb,1.560090e-01_rb,1.216216e-01_rb, &
6590 9.955787e-02_rb,8.421942e-02_rb,7.294827e-02_rb,6.432192e-02_rb, &
6591 5.751081e-02_rb,5.199888e-02_rb,4.744835e-02_rb,4.362899e-02_rb, &
6592 4.037847e-02_rb,3.757910e-02_rb,3.514351e-02_rb,3.300546e-02_rb, &
6593 3.111382e-02_rb,2.942853e-02_rb,2.791775e-02_rb,2.655584e-02_rb, &
6594 2.532195e-02_rb,2.419892e-02_rb,2.317255e-02_rb,2.223092e-02_rb, &
6595 2.136402e-02_rb,2.056334e-02_rb,1.982160e-02_rb,1.913258e-02_rb, &
6596 1.849087e-02_rb,1.789178e-02_rb,1.733124e-02_rb,1.680565e-02_rb, &
6597 1.631187e-02_rb,1.584711e-02_rb,1.540889e-02_rb,1.499502e-02_rb, &
6598 1.460354e-02_rb,1.423269e-02_rb,1.388088e-02_rb,1.354670e-02_rb, &
6599 1.322887e-02_rb,1.292620e-02_rb,1.263767e-02_rb /)
6600 extice2(:, 25) = (/ &
6602 3.477874e-01_rb,2.143515e-01_rb,1.544887e-01_rb,1.205942e-01_rb, &
6603 9.881779e-02_rb,8.366261e-02_rb,7.251586e-02_rb,6.397790e-02_rb, &
6604 5.723183e-02_rb,5.176908e-02_rb,4.725658e-02_rb,4.346715e-02_rb, &
6605 4.024055e-02_rb,3.746055e-02_rb,3.504080e-02_rb,3.291583e-02_rb, &
6606 3.103507e-02_rb,2.935891e-02_rb,2.785582e-02_rb,2.650042e-02_rb, &
6607 2.527206e-02_rb,2.415376e-02_rb,2.313142e-02_rb,2.219326e-02_rb, &
6608 2.132934e-02_rb,2.053122e-02_rb,1.979169e-02_rb,1.910456e-02_rb, &
6609 1.846448e-02_rb,1.786680e-02_rb,1.730745e-02_rb,1.678289e-02_rb, &
6610 1.628998e-02_rb,1.582595e-02_rb,1.538835e-02_rb,1.497499e-02_rb, &
6611 1.458393e-02_rb,1.421341e-02_rb,1.386187e-02_rb,1.352788e-02_rb, &
6612 1.321019e-02_rb,1.290762e-02_rb,1.261913e-02_rb /)
6613 extice2(:, 26) = (/ &
6615 3.453721e-01_rb,2.130744e-01_rb,1.536698e-01_rb,1.200140e-01_rb, &
6616 9.838078e-02_rb,8.331940e-02_rb,7.223803e-02_rb,6.374775e-02_rb, &
6617 5.703770e-02_rb,5.160290e-02_rb,4.711259e-02_rb,4.334110e-02_rb, &
6618 4.012923e-02_rb,3.736150e-02_rb,3.495208e-02_rb,3.283589e-02_rb, &
6619 3.096267e-02_rb,2.929302e-02_rb,2.779560e-02_rb,2.644517e-02_rb, &
6620 2.522119e-02_rb,2.410677e-02_rb,2.308788e-02_rb,2.215281e-02_rb, &
6621 2.129165e-02_rb,2.049602e-02_rb,1.975874e-02_rb,1.907365e-02_rb, &
6622 1.843542e-02_rb,1.783943e-02_rb,1.728162e-02_rb,1.675847e-02_rb, &
6623 1.626685e-02_rb,1.580401e-02_rb,1.536750e-02_rb,1.495515e-02_rb, &
6624 1.456502e-02_rb,1.419537e-02_rb,1.384463e-02_rb,1.351139e-02_rb, &
6625 1.319438e-02_rb,1.289246e-02_rb,1.260456e-02_rb /)
6626 extice2(:, 27) = (/ &
6628 3.417883e-01_rb,2.113379e-01_rb,1.526395e-01_rb,1.193347e-01_rb, &
6629 9.790253e-02_rb,8.296715e-02_rb,7.196979e-02_rb,6.353806e-02_rb, &
6630 5.687024e-02_rb,5.146670e-02_rb,4.700001e-02_rb,4.324667e-02_rb, &
6631 4.004894e-02_rb,3.729233e-02_rb,3.489172e-02_rb,3.278257e-02_rb, &
6632 3.091499e-02_rb,2.924987e-02_rb,2.775609e-02_rb,2.640859e-02_rb, &
6633 2.518695e-02_rb,2.407439e-02_rb,2.305697e-02_rb,2.212303e-02_rb, &
6634 2.126273e-02_rb,2.046774e-02_rb,1.973090e-02_rb,1.904610e-02_rb, &
6635 1.840801e-02_rb,1.781204e-02_rb,1.725417e-02_rb,1.673086e-02_rb, &
6636 1.623902e-02_rb,1.577590e-02_rb,1.533906e-02_rb,1.492634e-02_rb, &
6637 1.453580e-02_rb,1.416571e-02_rb,1.381450e-02_rb,1.348078e-02_rb, &
6638 1.316327e-02_rb,1.286082e-02_rb,1.257240e-02_rb /)
6639 extice2(:, 28) = (/ &
6641 3.416111e-01_rb,2.114124e-01_rb,1.527734e-01_rb,1.194809e-01_rb, &
6642 9.804612e-02_rb,8.310287e-02_rb,7.209595e-02_rb,6.365442e-02_rb, &
6643 5.697710e-02_rb,5.156460e-02_rb,4.708957e-02_rb,4.332850e-02_rb, &
6644 4.012361e-02_rb,3.736037e-02_rb,3.495364e-02_rb,3.283879e-02_rb, &
6645 3.096593e-02_rb,2.929589e-02_rb,2.779751e-02_rb,2.644571e-02_rb, &
6646 2.522004e-02_rb,2.410369e-02_rb,2.308271e-02_rb,2.214542e-02_rb, &
6647 2.128195e-02_rb,2.048396e-02_rb,1.974429e-02_rb,1.905679e-02_rb, &
6648 1.841614e-02_rb,1.781774e-02_rb,1.725754e-02_rb,1.673203e-02_rb, &
6649 1.623807e-02_rb,1.577293e-02_rb,1.533416e-02_rb,1.491958e-02_rb, &
6650 1.452727e-02_rb,1.415547e-02_rb,1.380262e-02_rb,1.346732e-02_rb, &
6651 1.314830e-02_rb,1.284439e-02_rb,1.255456e-02_rb /)
6652 extice2(:, 29) = (/ &
6654 4.196611e-01_rb,2.493642e-01_rb,1.761261e-01_rb,1.357197e-01_rb, &
6655 1.102161e-01_rb,9.269376e-02_rb,7.992985e-02_rb,7.022538e-02_rb, &
6656 6.260168e-02_rb,5.645603e-02_rb,5.139732e-02_rb,4.716088e-02_rb, &
6657 4.356133e-02_rb,4.046498e-02_rb,3.777303e-02_rb,3.541094e-02_rb, &
6658 3.332137e-02_rb,3.145954e-02_rb,2.978998e-02_rb,2.828419e-02_rb, &
6659 2.691905e-02_rb,2.567559e-02_rb,2.453811e-02_rb,2.349350e-02_rb, &
6660 2.253072e-02_rb,2.164042e-02_rb,2.081464e-02_rb,2.004652e-02_rb, &
6661 1.933015e-02_rb,1.866041e-02_rb,1.803283e-02_rb,1.744348e-02_rb, &
6662 1.688894e-02_rb,1.636616e-02_rb,1.587244e-02_rb,1.540539e-02_rb, &
6663 1.496287e-02_rb,1.454295e-02_rb,1.414392e-02_rb,1.376423e-02_rb, &
6664 1.340247e-02_rb,1.305739e-02_rb,1.272784e-02_rb /)
6666 ! single-scattering albedo: unitless
6668 ssaice2(:, 16) = (/ &
6670 6.630615e-01_rb,6.451169e-01_rb,6.333696e-01_rb,6.246927e-01_rb, &
6671 6.178420e-01_rb,6.121976e-01_rb,6.074069e-01_rb,6.032505e-01_rb, &
6672 5.995830e-01_rb,5.963030e-01_rb,5.933372e-01_rb,5.906311e-01_rb, &
6673 5.881427e-01_rb,5.858395e-01_rb,5.836955e-01_rb,5.816896e-01_rb, &
6674 5.798046e-01_rb,5.780264e-01_rb,5.763429e-01_rb,5.747441e-01_rb, &
6675 5.732213e-01_rb,5.717672e-01_rb,5.703754e-01_rb,5.690403e-01_rb, &
6676 5.677571e-01_rb,5.665215e-01_rb,5.653297e-01_rb,5.641782e-01_rb, &
6677 5.630643e-01_rb,5.619850e-01_rb,5.609381e-01_rb,5.599214e-01_rb, &
6678 5.589328e-01_rb,5.579707e-01_rb,5.570333e-01_rb,5.561193e-01_rb, &
6679 5.552272e-01_rb,5.543558e-01_rb,5.535041e-01_rb,5.526708e-01_rb, &
6680 5.518551e-01_rb,5.510561e-01_rb,5.502729e-01_rb /)
6681 ssaice2(:, 17) = (/ &
6683 7.689749e-01_rb,7.398171e-01_rb,7.205819e-01_rb,7.065690e-01_rb, &
6684 6.956928e-01_rb,6.868989e-01_rb,6.795813e-01_rb,6.733606e-01_rb, &
6685 6.679838e-01_rb,6.632742e-01_rb,6.591036e-01_rb,6.553766e-01_rb, &
6686 6.520197e-01_rb,6.489757e-01_rb,6.461991e-01_rb,6.436531e-01_rb, &
6687 6.413075e-01_rb,6.391375e-01_rb,6.371221e-01_rb,6.352438e-01_rb, &
6688 6.334876e-01_rb,6.318406e-01_rb,6.302918e-01_rb,6.288315e-01_rb, &
6689 6.274512e-01_rb,6.261436e-01_rb,6.249022e-01_rb,6.237211e-01_rb, &
6690 6.225953e-01_rb,6.215201e-01_rb,6.204914e-01_rb,6.195055e-01_rb, &
6691 6.185592e-01_rb,6.176492e-01_rb,6.167730e-01_rb,6.159280e-01_rb, &
6692 6.151120e-01_rb,6.143228e-01_rb,6.135587e-01_rb,6.128177e-01_rb, &
6693 6.120984e-01_rb,6.113993e-01_rb,6.107189e-01_rb /)
6694 ssaice2(:, 18) = (/ &
6696 9.956167e-01_rb,9.814770e-01_rb,9.716104e-01_rb,9.639746e-01_rb, &
6697 9.577179e-01_rb,9.524010e-01_rb,9.477672e-01_rb,9.436527e-01_rb, &
6698 9.399467e-01_rb,9.365708e-01_rb,9.334672e-01_rb,9.305921e-01_rb, &
6699 9.279118e-01_rb,9.253993e-01_rb,9.230330e-01_rb,9.207954e-01_rb, &
6700 9.186719e-01_rb,9.166501e-01_rb,9.147199e-01_rb,9.128722e-01_rb, &
6701 9.110997e-01_rb,9.093956e-01_rb,9.077544e-01_rb,9.061708e-01_rb, &
6702 9.046406e-01_rb,9.031598e-01_rb,9.017248e-01_rb,9.003326e-01_rb, &
6703 8.989804e-01_rb,8.976655e-01_rb,8.963857e-01_rb,8.951389e-01_rb, &
6704 8.939233e-01_rb,8.927370e-01_rb,8.915785e-01_rb,8.904464e-01_rb, &
6705 8.893392e-01_rb,8.882559e-01_rb,8.871951e-01_rb,8.861559e-01_rb, &
6706 8.851373e-01_rb,8.841383e-01_rb,8.831581e-01_rb /)
6707 ssaice2(:, 19) = (/ &
6709 9.723177e-01_rb,9.452119e-01_rb,9.267592e-01_rb,9.127393e-01_rb, &
6710 9.014238e-01_rb,8.919334e-01_rb,8.837584e-01_rb,8.765773e-01_rb, &
6711 8.701736e-01_rb,8.643950e-01_rb,8.591299e-01_rb,8.542942e-01_rb, &
6712 8.498230e-01_rb,8.456651e-01_rb,8.417794e-01_rb,8.381324e-01_rb, &
6713 8.346964e-01_rb,8.314484e-01_rb,8.283687e-01_rb,8.254408e-01_rb, &
6714 8.226505e-01_rb,8.199854e-01_rb,8.174348e-01_rb,8.149891e-01_rb, &
6715 8.126403e-01_rb,8.103808e-01_rb,8.082041e-01_rb,8.061044e-01_rb, &
6716 8.040765e-01_rb,8.021156e-01_rb,8.002174e-01_rb,7.983781e-01_rb, &
6717 7.965941e-01_rb,7.948622e-01_rb,7.931795e-01_rb,7.915432e-01_rb, &
6718 7.899508e-01_rb,7.884002e-01_rb,7.868891e-01_rb,7.854156e-01_rb, &
6719 7.839779e-01_rb,7.825742e-01_rb,7.812031e-01_rb /)
6720 ssaice2(:, 20) = (/ &
6722 9.933294e-01_rb,9.860917e-01_rb,9.811564e-01_rb,9.774008e-01_rb, &
6723 9.743652e-01_rb,9.718155e-01_rb,9.696159e-01_rb,9.676810e-01_rb, &
6724 9.659531e-01_rb,9.643915e-01_rb,9.629667e-01_rb,9.616561e-01_rb, &
6725 9.604426e-01_rb,9.593125e-01_rb,9.582548e-01_rb,9.572607e-01_rb, &
6726 9.563227e-01_rb,9.554347e-01_rb,9.545915e-01_rb,9.537888e-01_rb, &
6727 9.530226e-01_rb,9.522898e-01_rb,9.515874e-01_rb,9.509130e-01_rb, &
6728 9.502643e-01_rb,9.496394e-01_rb,9.490366e-01_rb,9.484542e-01_rb, &
6729 9.478910e-01_rb,9.473456e-01_rb,9.468169e-01_rb,9.463039e-01_rb, &
6730 9.458056e-01_rb,9.453212e-01_rb,9.448499e-01_rb,9.443910e-01_rb, &
6731 9.439438e-01_rb,9.435077e-01_rb,9.430821e-01_rb,9.426666e-01_rb, &
6732 9.422607e-01_rb,9.418638e-01_rb,9.414756e-01_rb /)
6733 ssaice2(:, 21) = (/ &
6735 9.900787e-01_rb,9.828880e-01_rb,9.779258e-01_rb,9.741173e-01_rb, &
6736 9.710184e-01_rb,9.684012e-01_rb,9.661332e-01_rb,9.641301e-01_rb, &
6737 9.623352e-01_rb,9.607083e-01_rb,9.592198e-01_rb,9.578474e-01_rb, &
6738 9.565739e-01_rb,9.553856e-01_rb,9.542715e-01_rb,9.532226e-01_rb, &
6739 9.522314e-01_rb,9.512919e-01_rb,9.503986e-01_rb,9.495472e-01_rb, &
6740 9.487337e-01_rb,9.479549e-01_rb,9.472077e-01_rb,9.464897e-01_rb, &
6741 9.457985e-01_rb,9.451322e-01_rb,9.444890e-01_rb,9.438673e-01_rb, &
6742 9.432656e-01_rb,9.426826e-01_rb,9.421173e-01_rb,9.415684e-01_rb, &
6743 9.410351e-01_rb,9.405164e-01_rb,9.400115e-01_rb,9.395198e-01_rb, &
6744 9.390404e-01_rb,9.385728e-01_rb,9.381164e-01_rb,9.376707e-01_rb, &
6745 9.372350e-01_rb,9.368091e-01_rb,9.363923e-01_rb /)
6746 ssaice2(:, 22) = (/ &
6748 9.986793e-01_rb,9.985239e-01_rb,9.983911e-01_rb,9.982715e-01_rb, &
6749 9.981606e-01_rb,9.980562e-01_rb,9.979567e-01_rb,9.978613e-01_rb, &
6750 9.977691e-01_rb,9.976798e-01_rb,9.975929e-01_rb,9.975081e-01_rb, &
6751 9.974251e-01_rb,9.973438e-01_rb,9.972640e-01_rb,9.971855e-01_rb, &
6752 9.971083e-01_rb,9.970322e-01_rb,9.969571e-01_rb,9.968830e-01_rb, &
6753 9.968099e-01_rb,9.967375e-01_rb,9.966660e-01_rb,9.965951e-01_rb, &
6754 9.965250e-01_rb,9.964555e-01_rb,9.963867e-01_rb,9.963185e-01_rb, &
6755 9.962508e-01_rb,9.961836e-01_rb,9.961170e-01_rb,9.960508e-01_rb, &
6756 9.959851e-01_rb,9.959198e-01_rb,9.958550e-01_rb,9.957906e-01_rb, &
6757 9.957266e-01_rb,9.956629e-01_rb,9.955997e-01_rb,9.955367e-01_rb, &
6758 9.954742e-01_rb,9.954119e-01_rb,9.953500e-01_rb /)
6759 ssaice2(:, 23) = (/ &
6761 9.997944e-01_rb,9.997791e-01_rb,9.997664e-01_rb,9.997547e-01_rb, &
6762 9.997436e-01_rb,9.997327e-01_rb,9.997219e-01_rb,9.997110e-01_rb, &
6763 9.996999e-01_rb,9.996886e-01_rb,9.996771e-01_rb,9.996653e-01_rb, &
6764 9.996533e-01_rb,9.996409e-01_rb,9.996282e-01_rb,9.996152e-01_rb, &
6765 9.996019e-01_rb,9.995883e-01_rb,9.995743e-01_rb,9.995599e-01_rb, &
6766 9.995453e-01_rb,9.995302e-01_rb,9.995149e-01_rb,9.994992e-01_rb, &
6767 9.994831e-01_rb,9.994667e-01_rb,9.994500e-01_rb,9.994329e-01_rb, &
6768 9.994154e-01_rb,9.993976e-01_rb,9.993795e-01_rb,9.993610e-01_rb, &
6769 9.993422e-01_rb,9.993230e-01_rb,9.993035e-01_rb,9.992837e-01_rb, &
6770 9.992635e-01_rb,9.992429e-01_rb,9.992221e-01_rb,9.992008e-01_rb, &
6771 9.991793e-01_rb,9.991574e-01_rb,9.991352e-01_rb /)
6772 ssaice2(:, 24) = (/ &
6774 9.999949e-01_rb,9.999947e-01_rb,9.999943e-01_rb,9.999939e-01_rb, &
6775 9.999934e-01_rb,9.999927e-01_rb,9.999920e-01_rb,9.999913e-01_rb, &
6776 9.999904e-01_rb,9.999895e-01_rb,9.999885e-01_rb,9.999874e-01_rb, &
6777 9.999863e-01_rb,9.999851e-01_rb,9.999838e-01_rb,9.999824e-01_rb, &
6778 9.999810e-01_rb,9.999795e-01_rb,9.999780e-01_rb,9.999764e-01_rb, &
6779 9.999747e-01_rb,9.999729e-01_rb,9.999711e-01_rb,9.999692e-01_rb, &
6780 9.999673e-01_rb,9.999653e-01_rb,9.999632e-01_rb,9.999611e-01_rb, &
6781 9.999589e-01_rb,9.999566e-01_rb,9.999543e-01_rb,9.999519e-01_rb, &
6782 9.999495e-01_rb,9.999470e-01_rb,9.999444e-01_rb,9.999418e-01_rb, &
6783 9.999392e-01_rb,9.999364e-01_rb,9.999336e-01_rb,9.999308e-01_rb, &
6784 9.999279e-01_rb,9.999249e-01_rb,9.999219e-01_rb /)
6785 ssaice2(:, 25) = (/ &
6787 9.999997e-01_rb,9.999997e-01_rb,9.999997e-01_rb,9.999996e-01_rb, &
6788 9.999996e-01_rb,9.999995e-01_rb,9.999994e-01_rb,9.999993e-01_rb, &
6789 9.999993e-01_rb,9.999992e-01_rb,9.999991e-01_rb,9.999989e-01_rb, &
6790 9.999988e-01_rb,9.999987e-01_rb,9.999986e-01_rb,9.999984e-01_rb, &
6791 9.999983e-01_rb,9.999981e-01_rb,9.999980e-01_rb,9.999978e-01_rb, &
6792 9.999976e-01_rb,9.999974e-01_rb,9.999972e-01_rb,9.999971e-01_rb, &
6793 9.999969e-01_rb,9.999966e-01_rb,9.999964e-01_rb,9.999962e-01_rb, &
6794 9.999960e-01_rb,9.999957e-01_rb,9.999955e-01_rb,9.999953e-01_rb, &
6795 9.999950e-01_rb,9.999947e-01_rb,9.999945e-01_rb,9.999942e-01_rb, &
6796 9.999939e-01_rb,9.999936e-01_rb,9.999934e-01_rb,9.999931e-01_rb, &
6797 9.999928e-01_rb,9.999925e-01_rb,9.999921e-01_rb /)
6798 ssaice2(:, 26) = (/ &
6800 9.999997e-01_rb,9.999996e-01_rb,9.999996e-01_rb,9.999995e-01_rb, &
6801 9.999994e-01_rb,9.999993e-01_rb,9.999992e-01_rb,9.999991e-01_rb, &
6802 9.999990e-01_rb,9.999989e-01_rb,9.999987e-01_rb,9.999986e-01_rb, &
6803 9.999984e-01_rb,9.999982e-01_rb,9.999980e-01_rb,9.999978e-01_rb, &
6804 9.999976e-01_rb,9.999974e-01_rb,9.999972e-01_rb,9.999970e-01_rb, &
6805 9.999967e-01_rb,9.999965e-01_rb,9.999962e-01_rb,9.999959e-01_rb, &
6806 9.999956e-01_rb,9.999954e-01_rb,9.999951e-01_rb,9.999947e-01_rb, &
6807 9.999944e-01_rb,9.999941e-01_rb,9.999938e-01_rb,9.999934e-01_rb, &
6808 9.999931e-01_rb,9.999927e-01_rb,9.999923e-01_rb,9.999920e-01_rb, &
6809 9.999916e-01_rb,9.999912e-01_rb,9.999908e-01_rb,9.999904e-01_rb, &
6810 9.999899e-01_rb,9.999895e-01_rb,9.999891e-01_rb /)
6811 ssaice2(:, 27) = (/ &
6813 9.999987e-01_rb,9.999987e-01_rb,9.999985e-01_rb,9.999984e-01_rb, &
6814 9.999982e-01_rb,9.999980e-01_rb,9.999978e-01_rb,9.999976e-01_rb, &
6815 9.999973e-01_rb,9.999970e-01_rb,9.999967e-01_rb,9.999964e-01_rb, &
6816 9.999960e-01_rb,9.999956e-01_rb,9.999952e-01_rb,9.999948e-01_rb, &
6817 9.999944e-01_rb,9.999939e-01_rb,9.999934e-01_rb,9.999929e-01_rb, &
6818 9.999924e-01_rb,9.999918e-01_rb,9.999913e-01_rb,9.999907e-01_rb, &
6819 9.999901e-01_rb,9.999894e-01_rb,9.999888e-01_rb,9.999881e-01_rb, &
6820 9.999874e-01_rb,9.999867e-01_rb,9.999860e-01_rb,9.999853e-01_rb, &
6821 9.999845e-01_rb,9.999837e-01_rb,9.999829e-01_rb,9.999821e-01_rb, &
6822 9.999813e-01_rb,9.999804e-01_rb,9.999796e-01_rb,9.999787e-01_rb, &
6823 9.999778e-01_rb,9.999768e-01_rb,9.999759e-01_rb /)
6824 ssaice2(:, 28) = (/ &
6826 9.999989e-01_rb,9.999989e-01_rb,9.999987e-01_rb,9.999986e-01_rb, &
6827 9.999984e-01_rb,9.999982e-01_rb,9.999980e-01_rb,9.999978e-01_rb, &
6828 9.999975e-01_rb,9.999972e-01_rb,9.999969e-01_rb,9.999966e-01_rb, &
6829 9.999962e-01_rb,9.999958e-01_rb,9.999954e-01_rb,9.999950e-01_rb, &
6830 9.999945e-01_rb,9.999941e-01_rb,9.999936e-01_rb,9.999931e-01_rb, &
6831 9.999925e-01_rb,9.999920e-01_rb,9.999914e-01_rb,9.999908e-01_rb, &
6832 9.999902e-01_rb,9.999896e-01_rb,9.999889e-01_rb,9.999883e-01_rb, &
6833 9.999876e-01_rb,9.999869e-01_rb,9.999861e-01_rb,9.999854e-01_rb, &
6834 9.999846e-01_rb,9.999838e-01_rb,9.999830e-01_rb,9.999822e-01_rb, &
6835 9.999814e-01_rb,9.999805e-01_rb,9.999796e-01_rb,9.999787e-01_rb, &
6836 9.999778e-01_rb,9.999769e-01_rb,9.999759e-01_rb /)
6837 ssaice2(:, 29) = (/ &
6839 7.042143e-01_rb,6.691161e-01_rb,6.463240e-01_rb,6.296590e-01_rb, &
6840 6.166381e-01_rb,6.060183e-01_rb,5.970908e-01_rb,5.894144e-01_rb, &
6841 5.826968e-01_rb,5.767343e-01_rb,5.713804e-01_rb,5.665256e-01_rb, &
6842 5.620867e-01_rb,5.579987e-01_rb,5.542101e-01_rb,5.506794e-01_rb, &
6843 5.473727e-01_rb,5.442620e-01_rb,5.413239e-01_rb,5.385389e-01_rb, &
6844 5.358901e-01_rb,5.333633e-01_rb,5.309460e-01_rb,5.286277e-01_rb, &
6845 5.263988e-01_rb,5.242512e-01_rb,5.221777e-01_rb,5.201719e-01_rb, &
6846 5.182280e-01_rb,5.163410e-01_rb,5.145062e-01_rb,5.127197e-01_rb, &
6847 5.109776e-01_rb,5.092766e-01_rb,5.076137e-01_rb,5.059860e-01_rb, &
6848 5.043911e-01_rb,5.028266e-01_rb,5.012904e-01_rb,4.997805e-01_rb, &
6849 4.982951e-01_rb,4.968326e-01_rb,4.953913e-01_rb /)
6851 ! asymmetry factor: unitless
6853 asyice2(:, 16) = (/ &
6855 7.946655e-01_rb,8.547685e-01_rb,8.806016e-01_rb,8.949880e-01_rb, &
6856 9.041676e-01_rb,9.105399e-01_rb,9.152249e-01_rb,9.188160e-01_rb, &
6857 9.216573e-01_rb,9.239620e-01_rb,9.258695e-01_rb,9.274745e-01_rb, &
6858 9.288441e-01_rb,9.300267e-01_rb,9.310584e-01_rb,9.319665e-01_rb, &
6859 9.327721e-01_rb,9.334918e-01_rb,9.341387e-01_rb,9.347236e-01_rb, &
6860 9.352551e-01_rb,9.357402e-01_rb,9.361850e-01_rb,9.365942e-01_rb, &
6861 9.369722e-01_rb,9.373225e-01_rb,9.376481e-01_rb,9.379516e-01_rb, &
6862 9.382352e-01_rb,9.385010e-01_rb,9.387505e-01_rb,9.389854e-01_rb, &
6863 9.392070e-01_rb,9.394163e-01_rb,9.396145e-01_rb,9.398024e-01_rb, &
6864 9.399809e-01_rb,9.401508e-01_rb,9.403126e-01_rb,9.404670e-01_rb, &
6865 9.406144e-01_rb,9.407555e-01_rb,9.408906e-01_rb /)
6866 asyice2(:, 17) = (/ &
6868 9.078091e-01_rb,9.195850e-01_rb,9.267250e-01_rb,9.317083e-01_rb, &
6869 9.354632e-01_rb,9.384323e-01_rb,9.408597e-01_rb,9.428935e-01_rb, &
6870 9.446301e-01_rb,9.461351e-01_rb,9.474555e-01_rb,9.486259e-01_rb, &
6871 9.496722e-01_rb,9.506146e-01_rb,9.514688e-01_rb,9.522476e-01_rb, &
6872 9.529612e-01_rb,9.536181e-01_rb,9.542251e-01_rb,9.547883e-01_rb, &
6873 9.553124e-01_rb,9.558019e-01_rb,9.562601e-01_rb,9.566904e-01_rb, &
6874 9.570953e-01_rb,9.574773e-01_rb,9.578385e-01_rb,9.581806e-01_rb, &
6875 9.585054e-01_rb,9.588142e-01_rb,9.591083e-01_rb,9.593888e-01_rb, &
6876 9.596569e-01_rb,9.599135e-01_rb,9.601593e-01_rb,9.603952e-01_rb, &
6877 9.606219e-01_rb,9.608399e-01_rb,9.610499e-01_rb,9.612523e-01_rb, &
6878 9.614477e-01_rb,9.616365e-01_rb,9.618192e-01_rb /)
6879 asyice2(:, 18) = (/ &
6881 8.322045e-01_rb,8.528693e-01_rb,8.648167e-01_rb,8.729163e-01_rb, &
6882 8.789054e-01_rb,8.835845e-01_rb,8.873819e-01_rb,8.905511e-01_rb, &
6883 8.932532e-01_rb,8.955965e-01_rb,8.976567e-01_rb,8.994887e-01_rb, &
6884 9.011334e-01_rb,9.026221e-01_rb,9.039791e-01_rb,9.052237e-01_rb, &
6885 9.063715e-01_rb,9.074349e-01_rb,9.084245e-01_rb,9.093489e-01_rb, &
6886 9.102154e-01_rb,9.110303e-01_rb,9.117987e-01_rb,9.125253e-01_rb, &
6887 9.132140e-01_rb,9.138682e-01_rb,9.144910e-01_rb,9.150850e-01_rb, &
6888 9.156524e-01_rb,9.161955e-01_rb,9.167160e-01_rb,9.172157e-01_rb, &
6889 9.176959e-01_rb,9.181581e-01_rb,9.186034e-01_rb,9.190330e-01_rb, &
6890 9.194478e-01_rb,9.198488e-01_rb,9.202368e-01_rb,9.206126e-01_rb, &
6891 9.209768e-01_rb,9.213301e-01_rb,9.216731e-01_rb /)
6892 asyice2(:, 19) = (/ &
6894 8.116560e-01_rb,8.488278e-01_rb,8.674331e-01_rb,8.788148e-01_rb, &
6895 8.865810e-01_rb,8.922595e-01_rb,8.966149e-01_rb,9.000747e-01_rb, &
6896 9.028980e-01_rb,9.052513e-01_rb,9.072468e-01_rb,9.089632e-01_rb, &
6897 9.104574e-01_rb,9.117713e-01_rb,9.129371e-01_rb,9.139793e-01_rb, &
6898 9.149174e-01_rb,9.157668e-01_rb,9.165400e-01_rb,9.172473e-01_rb, &
6899 9.178970e-01_rb,9.184962e-01_rb,9.190508e-01_rb,9.195658e-01_rb, &
6900 9.200455e-01_rb,9.204935e-01_rb,9.209130e-01_rb,9.213067e-01_rb, &
6901 9.216771e-01_rb,9.220262e-01_rb,9.223560e-01_rb,9.226680e-01_rb, &
6902 9.229636e-01_rb,9.232443e-01_rb,9.235112e-01_rb,9.237652e-01_rb, &
6903 9.240074e-01_rb,9.242385e-01_rb,9.244594e-01_rb,9.246708e-01_rb, &
6904 9.248733e-01_rb,9.250674e-01_rb,9.252536e-01_rb /)
6905 asyice2(:, 20) = (/ &
6907 8.047113e-01_rb,8.402864e-01_rb,8.570332e-01_rb,8.668455e-01_rb, &
6908 8.733206e-01_rb,8.779272e-01_rb,8.813796e-01_rb,8.840676e-01_rb, &
6909 8.862225e-01_rb,8.879904e-01_rb,8.894682e-01_rb,8.907228e-01_rb, &
6910 8.918019e-01_rb,8.927404e-01_rb,8.935645e-01_rb,8.942943e-01_rb, &
6911 8.949452e-01_rb,8.955296e-01_rb,8.960574e-01_rb,8.965366e-01_rb, &
6912 8.969736e-01_rb,8.973740e-01_rb,8.977422e-01_rb,8.980820e-01_rb, &
6913 8.983966e-01_rb,8.986889e-01_rb,8.989611e-01_rb,8.992153e-01_rb, &
6914 8.994533e-01_rb,8.996766e-01_rb,8.998865e-01_rb,9.000843e-01_rb, &
6915 9.002709e-01_rb,9.004474e-01_rb,9.006146e-01_rb,9.007731e-01_rb, &
6916 9.009237e-01_rb,9.010670e-01_rb,9.012034e-01_rb,9.013336e-01_rb, &
6917 9.014579e-01_rb,9.015767e-01_rb,9.016904e-01_rb /)
6918 asyice2(:, 21) = (/ &
6920 8.179122e-01_rb,8.480726e-01_rb,8.621945e-01_rb,8.704354e-01_rb, &
6921 8.758555e-01_rb,8.797007e-01_rb,8.825750e-01_rb,8.848078e-01_rb, &
6922 8.865939e-01_rb,8.880564e-01_rb,8.892765e-01_rb,8.903105e-01_rb, &
6923 8.911982e-01_rb,8.919689e-01_rb,8.926446e-01_rb,8.932419e-01_rb, &
6924 8.937738e-01_rb,8.942506e-01_rb,8.946806e-01_rb,8.950702e-01_rb, &
6925 8.954251e-01_rb,8.957497e-01_rb,8.960477e-01_rb,8.963223e-01_rb, &
6926 8.965762e-01_rb,8.968116e-01_rb,8.970306e-01_rb,8.972347e-01_rb, &
6927 8.974255e-01_rb,8.976042e-01_rb,8.977720e-01_rb,8.979298e-01_rb, &
6928 8.980784e-01_rb,8.982188e-01_rb,8.983515e-01_rb,8.984771e-01_rb, &
6929 8.985963e-01_rb,8.987095e-01_rb,8.988171e-01_rb,8.989195e-01_rb, &
6930 8.990172e-01_rb,8.991104e-01_rb,8.991994e-01_rb /)
6931 asyice2(:, 22) = (/ &
6933 8.169789e-01_rb,8.455024e-01_rb,8.586925e-01_rb,8.663283e-01_rb, &
6934 8.713217e-01_rb,8.748488e-01_rb,8.774765e-01_rb,8.795122e-01_rb, &
6935 8.811370e-01_rb,8.824649e-01_rb,8.835711e-01_rb,8.845073e-01_rb, &
6936 8.853103e-01_rb,8.860068e-01_rb,8.866170e-01_rb,8.871560e-01_rb, &
6937 8.876358e-01_rb,8.880658e-01_rb,8.884533e-01_rb,8.888044e-01_rb, &
6938 8.891242e-01_rb,8.894166e-01_rb,8.896851e-01_rb,8.899324e-01_rb, &
6939 8.901612e-01_rb,8.903733e-01_rb,8.905706e-01_rb,8.907545e-01_rb, &
6940 8.909265e-01_rb,8.910876e-01_rb,8.912388e-01_rb,8.913812e-01_rb, &
6941 8.915153e-01_rb,8.916419e-01_rb,8.917617e-01_rb,8.918752e-01_rb, &
6942 8.919829e-01_rb,8.920851e-01_rb,8.921824e-01_rb,8.922751e-01_rb, &
6943 8.923635e-01_rb,8.924478e-01_rb,8.925284e-01_rb /)
6944 asyice2(:, 23) = (/ &
6946 8.387642e-01_rb,8.569979e-01_rb,8.658630e-01_rb,8.711825e-01_rb, &
6947 8.747605e-01_rb,8.773472e-01_rb,8.793129e-01_rb,8.808621e-01_rb, &
6948 8.821179e-01_rb,8.831583e-01_rb,8.840361e-01_rb,8.847875e-01_rb, &
6949 8.854388e-01_rb,8.860094e-01_rb,8.865138e-01_rb,8.869634e-01_rb, &
6950 8.873668e-01_rb,8.877310e-01_rb,8.880617e-01_rb,8.883635e-01_rb, &
6951 8.886401e-01_rb,8.888947e-01_rb,8.891298e-01_rb,8.893477e-01_rb, &
6952 8.895504e-01_rb,8.897393e-01_rb,8.899159e-01_rb,8.900815e-01_rb, &
6953 8.902370e-01_rb,8.903833e-01_rb,8.905214e-01_rb,8.906518e-01_rb, &
6954 8.907753e-01_rb,8.908924e-01_rb,8.910036e-01_rb,8.911094e-01_rb, &
6955 8.912101e-01_rb,8.913062e-01_rb,8.913979e-01_rb,8.914856e-01_rb, &
6956 8.915695e-01_rb,8.916498e-01_rb,8.917269e-01_rb /)
6957 asyice2(:, 24) = (/ &
6959 8.522208e-01_rb,8.648132e-01_rb,8.711224e-01_rb,8.749901e-01_rb, &
6960 8.776354e-01_rb,8.795743e-01_rb,8.810649e-01_rb,8.822518e-01_rb, &
6961 8.832225e-01_rb,8.840333e-01_rb,8.847224e-01_rb,8.853162e-01_rb, &
6962 8.858342e-01_rb,8.862906e-01_rb,8.866962e-01_rb,8.870595e-01_rb, &
6963 8.873871e-01_rb,8.876842e-01_rb,8.879551e-01_rb,8.882032e-01_rb, &
6964 8.884316e-01_rb,8.886425e-01_rb,8.888380e-01_rb,8.890199e-01_rb, &
6965 8.891895e-01_rb,8.893481e-01_rb,8.894968e-01_rb,8.896366e-01_rb, &
6966 8.897683e-01_rb,8.898926e-01_rb,8.900102e-01_rb,8.901215e-01_rb, &
6967 8.902272e-01_rb,8.903276e-01_rb,8.904232e-01_rb,8.905144e-01_rb, &
6968 8.906014e-01_rb,8.906845e-01_rb,8.907640e-01_rb,8.908402e-01_rb, &
6969 8.909132e-01_rb,8.909834e-01_rb,8.910507e-01_rb /)
6970 asyice2(:, 25) = (/ &
6972 8.578202e-01_rb,8.683033e-01_rb,8.735431e-01_rb,8.767488e-01_rb, &
6973 8.789378e-01_rb,8.805399e-01_rb,8.817701e-01_rb,8.827485e-01_rb, &
6974 8.835480e-01_rb,8.842152e-01_rb,8.847817e-01_rb,8.852696e-01_rb, &
6975 8.856949e-01_rb,8.860694e-01_rb,8.864020e-01_rb,8.866997e-01_rb, &
6976 8.869681e-01_rb,8.872113e-01_rb,8.874330e-01_rb,8.876360e-01_rb, &
6977 8.878227e-01_rb,8.879951e-01_rb,8.881548e-01_rb,8.883033e-01_rb, &
6978 8.884418e-01_rb,8.885712e-01_rb,8.886926e-01_rb,8.888066e-01_rb, &
6979 8.889139e-01_rb,8.890152e-01_rb,8.891110e-01_rb,8.892017e-01_rb, &
6980 8.892877e-01_rb,8.893695e-01_rb,8.894473e-01_rb,8.895214e-01_rb, &
6981 8.895921e-01_rb,8.896597e-01_rb,8.897243e-01_rb,8.897862e-01_rb, &
6982 8.898456e-01_rb,8.899025e-01_rb,8.899572e-01_rb /)
6983 asyice2(:, 26) = (/ &
6985 8.625615e-01_rb,8.713831e-01_rb,8.755799e-01_rb,8.780560e-01_rb, &
6986 8.796983e-01_rb,8.808714e-01_rb,8.817534e-01_rb,8.824420e-01_rb, &
6987 8.829953e-01_rb,8.834501e-01_rb,8.838310e-01_rb,8.841549e-01_rb, &
6988 8.844338e-01_rb,8.846767e-01_rb,8.848902e-01_rb,8.850795e-01_rb, &
6989 8.852484e-01_rb,8.854002e-01_rb,8.855374e-01_rb,8.856620e-01_rb, &
6990 8.857758e-01_rb,8.858800e-01_rb,8.859759e-01_rb,8.860644e-01_rb, &
6991 8.861464e-01_rb,8.862225e-01_rb,8.862935e-01_rb,8.863598e-01_rb, &
6992 8.864218e-01_rb,8.864800e-01_rb,8.865347e-01_rb,8.865863e-01_rb, &
6993 8.866349e-01_rb,8.866809e-01_rb,8.867245e-01_rb,8.867658e-01_rb, &
6994 8.868050e-01_rb,8.868423e-01_rb,8.868778e-01_rb,8.869117e-01_rb, &
6995 8.869440e-01_rb,8.869749e-01_rb,8.870044e-01_rb /)
6996 asyice2(:, 27) = (/ &
6998 8.587495e-01_rb,8.684764e-01_rb,8.728189e-01_rb,8.752872e-01_rb, &
6999 8.768846e-01_rb,8.780060e-01_rb,8.788386e-01_rb,8.794824e-01_rb, &
7000 8.799960e-01_rb,8.804159e-01_rb,8.807660e-01_rb,8.810626e-01_rb, &
7001 8.813175e-01_rb,8.815390e-01_rb,8.817335e-01_rb,8.819057e-01_rb, &
7002 8.820593e-01_rb,8.821973e-01_rb,8.823220e-01_rb,8.824353e-01_rb, &
7003 8.825387e-01_rb,8.826336e-01_rb,8.827209e-01_rb,8.828016e-01_rb, &
7004 8.828764e-01_rb,8.829459e-01_rb,8.830108e-01_rb,8.830715e-01_rb, &
7005 8.831283e-01_rb,8.831817e-01_rb,8.832320e-01_rb,8.832795e-01_rb, &
7006 8.833244e-01_rb,8.833668e-01_rb,8.834071e-01_rb,8.834454e-01_rb, &
7007 8.834817e-01_rb,8.835164e-01_rb,8.835495e-01_rb,8.835811e-01_rb, &
7008 8.836113e-01_rb,8.836402e-01_rb,8.836679e-01_rb /)
7009 asyice2(:, 28) = (/ &
7011 8.561110e-01_rb,8.678583e-01_rb,8.727554e-01_rb,8.753892e-01_rb, &
7012 8.770154e-01_rb,8.781109e-01_rb,8.788949e-01_rb,8.794812e-01_rb, &
7013 8.799348e-01_rb,8.802952e-01_rb,8.805880e-01_rb,8.808300e-01_rb, &
7014 8.810331e-01_rb,8.812058e-01_rb,8.813543e-01_rb,8.814832e-01_rb, &
7015 8.815960e-01_rb,8.816956e-01_rb,8.817839e-01_rb,8.818629e-01_rb, &
7016 8.819339e-01_rb,8.819979e-01_rb,8.820560e-01_rb,8.821089e-01_rb, &
7017 8.821573e-01_rb,8.822016e-01_rb,8.822425e-01_rb,8.822801e-01_rb, &
7018 8.823150e-01_rb,8.823474e-01_rb,8.823775e-01_rb,8.824056e-01_rb, &
7019 8.824318e-01_rb,8.824564e-01_rb,8.824795e-01_rb,8.825011e-01_rb, &
7020 8.825215e-01_rb,8.825408e-01_rb,8.825589e-01_rb,8.825761e-01_rb, &
7021 8.825924e-01_rb,8.826078e-01_rb,8.826224e-01_rb /)
7022 asyice2(:, 29) = (/ &
7024 8.311124e-01_rb,8.688197e-01_rb,8.900274e-01_rb,9.040696e-01_rb, &
7025 9.142334e-01_rb,9.220181e-01_rb,9.282195e-01_rb,9.333048e-01_rb, &
7026 9.375689e-01_rb,9.412085e-01_rb,9.443604e-01_rb,9.471230e-01_rb, &
7027 9.495694e-01_rb,9.517549e-01_rb,9.537224e-01_rb,9.555057e-01_rb, &
7028 9.571316e-01_rb,9.586222e-01_rb,9.599952e-01_rb,9.612656e-01_rb, &
7029 9.624458e-01_rb,9.635461e-01_rb,9.645756e-01_rb,9.655418e-01_rb, &
7030 9.664513e-01_rb,9.673098e-01_rb,9.681222e-01_rb,9.688928e-01_rb, &
7031 9.696256e-01_rb,9.703237e-01_rb,9.709903e-01_rb,9.716280e-01_rb, &
7032 9.722391e-01_rb,9.728258e-01_rb,9.733901e-01_rb,9.739336e-01_rb, &
7033 9.744579e-01_rb,9.749645e-01_rb,9.754546e-01_rb,9.759294e-01_rb, &
7034 9.763901e-01_rb,9.768376e-01_rb,9.772727e-01_rb /)
7036 ! Hexagonal Ice Particle Parameterization
7037 ! extinction units (ext coef/iwc): [(m^-1)/(g m^-3)]
7039 extice3(:, 16) = (/ &
7041 5.194013e-01_rb,3.215089e-01_rb,2.327917e-01_rb,1.824424e-01_rb, &
7042 1.499977e-01_rb,1.273492e-01_rb,1.106421e-01_rb,9.780982e-02_rb, &
7043 8.764435e-02_rb,7.939266e-02_rb,7.256081e-02_rb,6.681137e-02_rb, &
7044 6.190600e-02_rb,5.767154e-02_rb,5.397915e-02_rb,5.073102e-02_rb, &
7045 4.785151e-02_rb,4.528125e-02_rb,4.297296e-02_rb,4.088853e-02_rb, &
7046 3.899690e-02_rb,3.727251e-02_rb,3.569411e-02_rb,3.424393e-02_rb, &
7047 3.290694e-02_rb,3.167040e-02_rb,3.052340e-02_rb,2.945654e-02_rb, &
7048 2.846172e-02_rb,2.753188e-02_rb,2.666085e-02_rb,2.584322e-02_rb, &
7049 2.507423e-02_rb,2.434967e-02_rb,2.366579e-02_rb,2.301926e-02_rb, &
7050 2.240711e-02_rb,2.182666e-02_rb,2.127551e-02_rb,2.075150e-02_rb, &
7051 2.025267e-02_rb,1.977725e-02_rb,1.932364e-02_rb,1.889035e-02_rb, &
7052 1.847607e-02_rb,1.807956e-02_rb /)
7053 extice3(:, 17) = (/ &
7055 4.901155e-01_rb,3.065286e-01_rb,2.230800e-01_rb,1.753951e-01_rb, &
7056 1.445402e-01_rb,1.229417e-01_rb,1.069777e-01_rb,9.469760e-02_rb, &
7057 8.495824e-02_rb,7.704501e-02_rb,7.048834e-02_rb,6.496693e-02_rb, &
7058 6.025353e-02_rb,5.618286e-02_rb,5.263186e-02_rb,4.950698e-02_rb, &
7059 4.673585e-02_rb,4.426164e-02_rb,4.203904e-02_rb,4.003153e-02_rb, &
7060 3.820932e-02_rb,3.654790e-02_rb,3.502688e-02_rb,3.362919e-02_rb, &
7061 3.234041e-02_rb,3.114829e-02_rb,3.004234e-02_rb,2.901356e-02_rb, &
7062 2.805413e-02_rb,2.715727e-02_rb,2.631705e-02_rb,2.552828e-02_rb, &
7063 2.478637e-02_rb,2.408725e-02_rb,2.342734e-02_rb,2.280343e-02_rb, &
7064 2.221264e-02_rb,2.165242e-02_rb,2.112043e-02_rb,2.061461e-02_rb, &
7065 2.013308e-02_rb,1.967411e-02_rb,1.923616e-02_rb,1.881783e-02_rb, &
7066 1.841781e-02_rb,1.803494e-02_rb /)
7067 extice3(:, 18) = (/ &
7069 5.056264e-01_rb,3.160261e-01_rb,2.298442e-01_rb,1.805973e-01_rb, &
7070 1.487318e-01_rb,1.264258e-01_rb,1.099389e-01_rb,9.725656e-02_rb, &
7071 8.719819e-02_rb,7.902576e-02_rb,7.225433e-02_rb,6.655206e-02_rb, &
7072 6.168427e-02_rb,5.748028e-02_rb,5.381296e-02_rb,5.058572e-02_rb, &
7073 4.772383e-02_rb,4.516857e-02_rb,4.287317e-02_rb,4.079990e-02_rb, &
7074 3.891801e-02_rb,3.720217e-02_rb,3.563133e-02_rb,3.418786e-02_rb, &
7075 3.285686e-02_rb,3.162569e-02_rb,3.048352e-02_rb,2.942104e-02_rb, &
7076 2.843018e-02_rb,2.750395e-02_rb,2.663621e-02_rb,2.582160e-02_rb, &
7077 2.505539e-02_rb,2.433337e-02_rb,2.365185e-02_rb,2.300750e-02_rb, &
7078 2.239736e-02_rb,2.181878e-02_rb,2.126937e-02_rb,2.074699e-02_rb, &
7079 2.024968e-02_rb,1.977567e-02_rb,1.932338e-02_rb,1.889134e-02_rb, &
7080 1.847823e-02_rb,1.808281e-02_rb /)
7081 extice3(:, 19) = (/ &
7083 4.881605e-01_rb,3.055237e-01_rb,2.225070e-01_rb,1.750688e-01_rb, &
7084 1.443736e-01_rb,1.228869e-01_rb,1.070054e-01_rb,9.478893e-02_rb, &
7085 8.509997e-02_rb,7.722769e-02_rb,7.070495e-02_rb,6.521211e-02_rb, &
7086 6.052311e-02_rb,5.647351e-02_rb,5.294088e-02_rb,4.983217e-02_rb, &
7087 4.707539e-02_rb,4.461398e-02_rb,4.240288e-02_rb,4.040575e-02_rb, &
7088 3.859298e-02_rb,3.694016e-02_rb,3.542701e-02_rb,3.403655e-02_rb, &
7089 3.275444e-02_rb,3.156849e-02_rb,3.046827e-02_rb,2.944481e-02_rb, &
7090 2.849034e-02_rb,2.759812e-02_rb,2.676226e-02_rb,2.597757e-02_rb, &
7091 2.523949e-02_rb,2.454400e-02_rb,2.388750e-02_rb,2.326682e-02_rb, &
7092 2.267909e-02_rb,2.212176e-02_rb,2.159253e-02_rb,2.108933e-02_rb, &
7093 2.061028e-02_rb,2.015369e-02_rb,1.971801e-02_rb,1.930184e-02_rb, &
7094 1.890389e-02_rb,1.852300e-02_rb /)
7095 extice3(:, 20) = (/ &
7097 5.103703e-01_rb,3.188144e-01_rb,2.317435e-01_rb,1.819887e-01_rb, &
7098 1.497944e-01_rb,1.272584e-01_rb,1.106013e-01_rb,9.778822e-02_rb, &
7099 8.762610e-02_rb,7.936938e-02_rb,7.252809e-02_rb,6.676701e-02_rb, &
7100 6.184901e-02_rb,5.760165e-02_rb,5.389651e-02_rb,5.063598e-02_rb, &
7101 4.774457e-02_rb,4.516295e-02_rb,4.284387e-02_rb,4.074922e-02_rb, &
7102 3.884792e-02_rb,3.711438e-02_rb,3.552734e-02_rb,3.406898e-02_rb, &
7103 3.272425e-02_rb,3.148038e-02_rb,3.032643e-02_rb,2.925299e-02_rb, &
7104 2.825191e-02_rb,2.731612e-02_rb,2.643943e-02_rb,2.561642e-02_rb, &
7105 2.484230e-02_rb,2.411284e-02_rb,2.342429e-02_rb,2.277329e-02_rb, &
7106 2.215686e-02_rb,2.157231e-02_rb,2.101724e-02_rb,2.048946e-02_rb, &
7107 1.998702e-02_rb,1.950813e-02_rb,1.905118e-02_rb,1.861468e-02_rb, &
7108 1.819730e-02_rb,1.779781e-02_rb /)
7109 extice3(:, 21) = (/ &
7111 5.031161e-01_rb,3.144511e-01_rb,2.286942e-01_rb,1.796903e-01_rb, &
7112 1.479819e-01_rb,1.257860e-01_rb,1.093803e-01_rb,9.676059e-02_rb, &
7113 8.675183e-02_rb,7.861971e-02_rb,7.188168e-02_rb,6.620754e-02_rb, &
7114 6.136376e-02_rb,5.718050e-02_rb,5.353127e-02_rb,5.031995e-02_rb, &
7115 4.747218e-02_rb,4.492952e-02_rb,4.264544e-02_rb,4.058240e-02_rb, &
7116 3.870979e-02_rb,3.700242e-02_rb,3.543933e-02_rb,3.400297e-02_rb, &
7117 3.267854e-02_rb,3.145345e-02_rb,3.031691e-02_rb,2.925967e-02_rb, &
7118 2.827370e-02_rb,2.735203e-02_rb,2.648858e-02_rb,2.567798e-02_rb, &
7119 2.491555e-02_rb,2.419710e-02_rb,2.351893e-02_rb,2.287776e-02_rb, &
7120 2.227063e-02_rb,2.169491e-02_rb,2.114821e-02_rb,2.062840e-02_rb, &
7121 2.013354e-02_rb,1.966188e-02_rb,1.921182e-02_rb,1.878191e-02_rb, &
7122 1.837083e-02_rb,1.797737e-02_rb /)
7123 extice3(:, 22) = (/ &
7125 4.949453e-01_rb,3.095918e-01_rb,2.253402e-01_rb,1.771964e-01_rb, &
7126 1.460446e-01_rb,1.242383e-01_rb,1.081206e-01_rb,9.572235e-02_rb, &
7127 8.588928e-02_rb,7.789990e-02_rb,7.128013e-02_rb,6.570559e-02_rb, &
7128 6.094684e-02_rb,5.683701e-02_rb,5.325183e-02_rb,5.009688e-02_rb, &
7129 4.729909e-02_rb,4.480106e-02_rb,4.255708e-02_rb,4.053025e-02_rb, &
7130 3.869051e-02_rb,3.701310e-02_rb,3.547745e-02_rb,3.406631e-02_rb, &
7131 3.276512e-02_rb,3.156153e-02_rb,3.044494e-02_rb,2.940626e-02_rb, &
7132 2.843759e-02_rb,2.753211e-02_rb,2.668381e-02_rb,2.588744e-02_rb, &
7133 2.513839e-02_rb,2.443255e-02_rb,2.376629e-02_rb,2.313637e-02_rb, &
7134 2.253990e-02_rb,2.197428e-02_rb,2.143718e-02_rb,2.092649e-02_rb, &
7135 2.044032e-02_rb,1.997694e-02_rb,1.953478e-02_rb,1.911241e-02_rb, &
7136 1.870855e-02_rb,1.832199e-02_rb /)
7137 extice3(:, 23) = (/ &
7139 5.052816e-01_rb,3.157665e-01_rb,2.296233e-01_rb,1.803986e-01_rb, &
7140 1.485473e-01_rb,1.262514e-01_rb,1.097718e-01_rb,9.709524e-02_rb, &
7141 8.704139e-02_rb,7.887264e-02_rb,7.210424e-02_rb,6.640454e-02_rb, &
7142 6.153894e-02_rb,5.733683e-02_rb,5.367116e-02_rb,5.044537e-02_rb, &
7143 4.758477e-02_rb,4.503066e-02_rb,4.273629e-02_rb,4.066395e-02_rb, &
7144 3.878291e-02_rb,3.706784e-02_rb,3.549771e-02_rb,3.405488e-02_rb, &
7145 3.272448e-02_rb,3.149387e-02_rb,3.035221e-02_rb,2.929020e-02_rb, &
7146 2.829979e-02_rb,2.737397e-02_rb,2.650663e-02_rb,2.569238e-02_rb, &
7147 2.492651e-02_rb,2.420482e-02_rb,2.352361e-02_rb,2.287954e-02_rb, &
7148 2.226968e-02_rb,2.169136e-02_rb,2.114220e-02_rb,2.062005e-02_rb, &
7149 2.012296e-02_rb,1.964917e-02_rb,1.919709e-02_rb,1.876524e-02_rb, &
7150 1.835231e-02_rb,1.795707e-02_rb /)
7151 extice3(:, 24) = (/ &
7153 5.042067e-01_rb,3.151195e-01_rb,2.291708e-01_rb,1.800573e-01_rb, &
7154 1.482779e-01_rb,1.260324e-01_rb,1.095900e-01_rb,9.694202e-02_rb, &
7155 8.691087e-02_rb,7.876056e-02_rb,7.200745e-02_rb,6.632062e-02_rb, &
7156 6.146600e-02_rb,5.727338e-02_rb,5.361599e-02_rb,5.039749e-02_rb, &
7157 4.754334e-02_rb,4.499500e-02_rb,4.270580e-02_rb,4.063815e-02_rb, &
7158 3.876135e-02_rb,3.705016e-02_rb,3.548357e-02_rb,3.404400e-02_rb, &
7159 3.271661e-02_rb,3.148877e-02_rb,3.034969e-02_rb,2.929008e-02_rb, &
7160 2.830191e-02_rb,2.737818e-02_rb,2.651279e-02_rb,2.570039e-02_rb, &
7161 2.493624e-02_rb,2.421618e-02_rb,2.353650e-02_rb,2.289390e-02_rb, &
7162 2.228541e-02_rb,2.170840e-02_rb,2.116048e-02_rb,2.063950e-02_rb, &
7163 2.014354e-02_rb,1.967082e-02_rb,1.921975e-02_rb,1.878888e-02_rb, &
7164 1.837688e-02_rb,1.798254e-02_rb /)
7165 extice3(:, 25) = (/ &
7167 5.022507e-01_rb,3.139246e-01_rb,2.283218e-01_rb,1.794059e-01_rb, &
7168 1.477544e-01_rb,1.255984e-01_rb,1.092222e-01_rb,9.662516e-02_rb, &
7169 8.663439e-02_rb,7.851688e-02_rb,7.179095e-02_rb,6.612700e-02_rb, &
7170 6.129193e-02_rb,5.711618e-02_rb,5.347351e-02_rb,5.026796e-02_rb, &
7171 4.742530e-02_rb,4.488721e-02_rb,4.260724e-02_rb,4.054790e-02_rb, &
7172 3.867866e-02_rb,3.697435e-02_rb,3.541407e-02_rb,3.398029e-02_rb, &
7173 3.265824e-02_rb,3.143535e-02_rb,3.030085e-02_rb,2.924551e-02_rb, &
7174 2.826131e-02_rb,2.734130e-02_rb,2.647939e-02_rb,2.567026e-02_rb, &
7175 2.490919e-02_rb,2.419203e-02_rb,2.351509e-02_rb,2.287507e-02_rb, &
7176 2.226903e-02_rb,2.169434e-02_rb,2.114862e-02_rb,2.062975e-02_rb, &
7177 2.013578e-02_rb,1.966496e-02_rb,1.921571e-02_rb,1.878658e-02_rb, &
7178 1.837623e-02_rb,1.798348e-02_rb /)
7179 extice3(:, 26) = (/ &
7181 5.068316e-01_rb,3.166869e-01_rb,2.302576e-01_rb,1.808693e-01_rb, &
7182 1.489122e-01_rb,1.265423e-01_rb,1.100080e-01_rb,9.728926e-02_rb, &
7183 8.720201e-02_rb,7.900612e-02_rb,7.221524e-02_rb,6.649660e-02_rb, &
7184 6.161484e-02_rb,5.739877e-02_rb,5.372093e-02_rb,5.048442e-02_rb, &
7185 4.761431e-02_rb,4.505172e-02_rb,4.274972e-02_rb,4.067050e-02_rb, &
7186 3.878321e-02_rb,3.706244e-02_rb,3.548710e-02_rb,3.403948e-02_rb, &
7187 3.270466e-02_rb,3.146995e-02_rb,3.032450e-02_rb,2.925897e-02_rb, &
7188 2.826527e-02_rb,2.733638e-02_rb,2.646615e-02_rb,2.564920e-02_rb, &
7189 2.488078e-02_rb,2.415670e-02_rb,2.347322e-02_rb,2.282702e-02_rb, &
7190 2.221513e-02_rb,2.163489e-02_rb,2.108390e-02_rb,2.056002e-02_rb, &
7191 2.006128e-02_rb,1.958591e-02_rb,1.913232e-02_rb,1.869904e-02_rb, &
7192 1.828474e-02_rb,1.788819e-02_rb /)
7193 extice3(:, 27) = (/ &
7195 5.077707e-01_rb,3.172636e-01_rb,2.306695e-01_rb,1.811871e-01_rb, &
7196 1.491691e-01_rb,1.267565e-01_rb,1.101907e-01_rb,9.744773e-02_rb, &
7197 8.734125e-02_rb,7.912973e-02_rb,7.232591e-02_rb,6.659637e-02_rb, &
7198 6.170530e-02_rb,5.748120e-02_rb,5.379634e-02_rb,5.055367e-02_rb, &
7199 4.767809e-02_rb,4.511061e-02_rb,4.280423e-02_rb,4.072104e-02_rb, &
7200 3.883015e-02_rb,3.710611e-02_rb,3.552776e-02_rb,3.407738e-02_rb, &
7201 3.274002e-02_rb,3.150296e-02_rb,3.035532e-02_rb,2.928776e-02_rb, &
7202 2.829216e-02_rb,2.736150e-02_rb,2.648961e-02_rb,2.567111e-02_rb, &
7203 2.490123e-02_rb,2.417576e-02_rb,2.349098e-02_rb,2.284354e-02_rb, &
7204 2.223049e-02_rb,2.164914e-02_rb,2.109711e-02_rb,2.057222e-02_rb, &
7205 2.007253e-02_rb,1.959626e-02_rb,1.914181e-02_rb,1.870770e-02_rb, &
7206 1.829261e-02_rb,1.789531e-02_rb /)
7207 extice3(:, 28) = (/ &
7209 5.062281e-01_rb,3.163402e-01_rb,2.300275e-01_rb,1.807060e-01_rb, &
7210 1.487921e-01_rb,1.264523e-01_rb,1.099403e-01_rb,9.723879e-02_rb, &
7211 8.716516e-02_rb,7.898034e-02_rb,7.219863e-02_rb,6.648771e-02_rb, &
7212 6.161254e-02_rb,5.740217e-02_rb,5.372929e-02_rb,5.049716e-02_rb, &
7213 4.763092e-02_rb,4.507179e-02_rb,4.277290e-02_rb,4.069649e-02_rb, &
7214 3.881175e-02_rb,3.709331e-02_rb,3.552008e-02_rb,3.407442e-02_rb, &
7215 3.274141e-02_rb,3.150837e-02_rb,3.036447e-02_rb,2.930037e-02_rb, &
7216 2.830801e-02_rb,2.738037e-02_rb,2.651132e-02_rb,2.569547e-02_rb, &
7217 2.492810e-02_rb,2.420499e-02_rb,2.352243e-02_rb,2.287710e-02_rb, &
7218 2.226604e-02_rb,2.168658e-02_rb,2.113634e-02_rb,2.061316e-02_rb, &
7219 2.011510e-02_rb,1.964038e-02_rb,1.918740e-02_rb,1.875471e-02_rb, &
7220 1.834096e-02_rb,1.794495e-02_rb /)
7221 extice3(:, 29) = (/ &
7223 1.338834e-01_rb,1.924912e-01_rb,1.755523e-01_rb,1.534793e-01_rb, &
7224 1.343937e-01_rb,1.187883e-01_rb,1.060654e-01_rb,9.559106e-02_rb, &
7225 8.685880e-02_rb,7.948698e-02_rb,7.319086e-02_rb,6.775669e-02_rb, &
7226 6.302215e-02_rb,5.886236e-02_rb,5.517996e-02_rb,5.189810e-02_rb, &
7227 4.895539e-02_rb,4.630225e-02_rb,4.389823e-02_rb,4.171002e-02_rb, &
7228 3.970998e-02_rb,3.787493e-02_rb,3.618537e-02_rb,3.462471e-02_rb, &
7229 3.317880e-02_rb,3.183547e-02_rb,3.058421e-02_rb,2.941590e-02_rb, &
7230 2.832256e-02_rb,2.729724e-02_rb,2.633377e-02_rb,2.542675e-02_rb, &
7231 2.457136e-02_rb,2.376332e-02_rb,2.299882e-02_rb,2.227443e-02_rb, &
7232 2.158707e-02_rb,2.093400e-02_rb,2.031270e-02_rb,1.972091e-02_rb, &
7233 1.915659e-02_rb,1.861787e-02_rb,1.810304e-02_rb,1.761055e-02_rb, &
7234 1.713899e-02_rb,1.668704e-02_rb /)
7236 ! single-scattering albedo: unitless
7238 ssaice3(:, 16) = (/ &
7240 6.749442e-01_rb,6.649947e-01_rb,6.565828e-01_rb,6.489928e-01_rb, &
7241 6.420046e-01_rb,6.355231e-01_rb,6.294964e-01_rb,6.238901e-01_rb, &
7242 6.186783e-01_rb,6.138395e-01_rb,6.093543e-01_rb,6.052049e-01_rb, &
7243 6.013742e-01_rb,5.978457e-01_rb,5.946030e-01_rb,5.916302e-01_rb, &
7244 5.889115e-01_rb,5.864310e-01_rb,5.841731e-01_rb,5.821221e-01_rb, &
7245 5.802624e-01_rb,5.785785e-01_rb,5.770549e-01_rb,5.756759e-01_rb, &
7246 5.744262e-01_rb,5.732901e-01_rb,5.722524e-01_rb,5.712974e-01_rb, &
7247 5.704097e-01_rb,5.695739e-01_rb,5.687747e-01_rb,5.679964e-01_rb, &
7248 5.672238e-01_rb,5.664415e-01_rb,5.656340e-01_rb,5.647860e-01_rb, &
7249 5.638821e-01_rb,5.629070e-01_rb,5.618452e-01_rb,5.606815e-01_rb, &
7250 5.594006e-01_rb,5.579870e-01_rb,5.564255e-01_rb,5.547008e-01_rb, &
7251 5.527976e-01_rb,5.507005e-01_rb /)
7252 ssaice3(:, 17) = (/ &
7254 7.628550e-01_rb,7.567297e-01_rb,7.508463e-01_rb,7.451972e-01_rb, &
7255 7.397745e-01_rb,7.345705e-01_rb,7.295775e-01_rb,7.247881e-01_rb, &
7256 7.201945e-01_rb,7.157894e-01_rb,7.115652e-01_rb,7.075145e-01_rb, &
7257 7.036300e-01_rb,6.999044e-01_rb,6.963304e-01_rb,6.929007e-01_rb, &
7258 6.896083e-01_rb,6.864460e-01_rb,6.834067e-01_rb,6.804833e-01_rb, &
7259 6.776690e-01_rb,6.749567e-01_rb,6.723397e-01_rb,6.698109e-01_rb, &
7260 6.673637e-01_rb,6.649913e-01_rb,6.626870e-01_rb,6.604441e-01_rb, &
7261 6.582561e-01_rb,6.561163e-01_rb,6.540182e-01_rb,6.519554e-01_rb, &
7262 6.499215e-01_rb,6.479099e-01_rb,6.459145e-01_rb,6.439289e-01_rb, &
7263 6.419468e-01_rb,6.399621e-01_rb,6.379686e-01_rb,6.359601e-01_rb, &
7264 6.339306e-01_rb,6.318740e-01_rb,6.297845e-01_rb,6.276559e-01_rb, &
7265 6.254825e-01_rb,6.232583e-01_rb /)
7266 ssaice3(:, 18) = (/ &
7268 9.924147e-01_rb,9.882792e-01_rb,9.842257e-01_rb,9.802522e-01_rb, &
7269 9.763566e-01_rb,9.725367e-01_rb,9.687905e-01_rb,9.651157e-01_rb, &
7270 9.615104e-01_rb,9.579725e-01_rb,9.544997e-01_rb,9.510901e-01_rb, &
7271 9.477416e-01_rb,9.444520e-01_rb,9.412194e-01_rb,9.380415e-01_rb, &
7272 9.349165e-01_rb,9.318421e-01_rb,9.288164e-01_rb,9.258373e-01_rb, &
7273 9.229027e-01_rb,9.200106e-01_rb,9.171589e-01_rb,9.143457e-01_rb, &
7274 9.115688e-01_rb,9.088263e-01_rb,9.061161e-01_rb,9.034362e-01_rb, &
7275 9.007846e-01_rb,8.981592e-01_rb,8.955581e-01_rb,8.929792e-01_rb, &
7276 8.904206e-01_rb,8.878803e-01_rb,8.853562e-01_rb,8.828464e-01_rb, &
7277 8.803488e-01_rb,8.778616e-01_rb,8.753827e-01_rb,8.729102e-01_rb, &
7278 8.704421e-01_rb,8.679764e-01_rb,8.655112e-01_rb,8.630445e-01_rb, &
7279 8.605744e-01_rb,8.580989e-01_rb /)
7280 ssaice3(:, 19) = (/ &
7282 9.629413e-01_rb,9.517182e-01_rb,9.409209e-01_rb,9.305366e-01_rb, &
7283 9.205529e-01_rb,9.109569e-01_rb,9.017362e-01_rb,8.928780e-01_rb, &
7284 8.843699e-01_rb,8.761992e-01_rb,8.683536e-01_rb,8.608204e-01_rb, &
7285 8.535873e-01_rb,8.466417e-01_rb,8.399712e-01_rb,8.335635e-01_rb, &
7286 8.274062e-01_rb,8.214868e-01_rb,8.157932e-01_rb,8.103129e-01_rb, &
7287 8.050336e-01_rb,7.999432e-01_rb,7.950294e-01_rb,7.902798e-01_rb, &
7288 7.856825e-01_rb,7.812250e-01_rb,7.768954e-01_rb,7.726815e-01_rb, &
7289 7.685711e-01_rb,7.645522e-01_rb,7.606126e-01_rb,7.567404e-01_rb, &
7290 7.529234e-01_rb,7.491498e-01_rb,7.454074e-01_rb,7.416844e-01_rb, &
7291 7.379688e-01_rb,7.342485e-01_rb,7.305118e-01_rb,7.267468e-01_rb, &
7292 7.229415e-01_rb,7.190841e-01_rb,7.151628e-01_rb,7.111657e-01_rb, &
7293 7.070811e-01_rb,7.028972e-01_rb /)
7294 ssaice3(:, 20) = (/ &
7296 9.942270e-01_rb,9.909206e-01_rb,9.876775e-01_rb,9.844960e-01_rb, &
7297 9.813746e-01_rb,9.783114e-01_rb,9.753049e-01_rb,9.723535e-01_rb, &
7298 9.694553e-01_rb,9.666088e-01_rb,9.638123e-01_rb,9.610641e-01_rb, &
7299 9.583626e-01_rb,9.557060e-01_rb,9.530928e-01_rb,9.505211e-01_rb, &
7300 9.479895e-01_rb,9.454961e-01_rb,9.430393e-01_rb,9.406174e-01_rb, &
7301 9.382288e-01_rb,9.358717e-01_rb,9.335446e-01_rb,9.312456e-01_rb, &
7302 9.289731e-01_rb,9.267255e-01_rb,9.245010e-01_rb,9.222980e-01_rb, &
7303 9.201147e-01_rb,9.179496e-01_rb,9.158008e-01_rb,9.136667e-01_rb, &
7304 9.115457e-01_rb,9.094359e-01_rb,9.073358e-01_rb,9.052436e-01_rb, &
7305 9.031577e-01_rb,9.010763e-01_rb,8.989977e-01_rb,8.969203e-01_rb, &
7306 8.948423e-01_rb,8.927620e-01_rb,8.906778e-01_rb,8.885879e-01_rb, &
7307 8.864907e-01_rb,8.843843e-01_rb /)
7308 ssaice3(:, 21) = (/ &
7310 9.934014e-01_rb,9.899331e-01_rb,9.865537e-01_rb,9.832610e-01_rb, &
7311 9.800523e-01_rb,9.769254e-01_rb,9.738777e-01_rb,9.709069e-01_rb, &
7312 9.680106e-01_rb,9.651862e-01_rb,9.624315e-01_rb,9.597439e-01_rb, &
7313 9.571212e-01_rb,9.545608e-01_rb,9.520605e-01_rb,9.496177e-01_rb, &
7314 9.472301e-01_rb,9.448954e-01_rb,9.426111e-01_rb,9.403749e-01_rb, &
7315 9.381843e-01_rb,9.360370e-01_rb,9.339307e-01_rb,9.318629e-01_rb, &
7316 9.298313e-01_rb,9.278336e-01_rb,9.258673e-01_rb,9.239302e-01_rb, &
7317 9.220198e-01_rb,9.201338e-01_rb,9.182700e-01_rb,9.164258e-01_rb, &
7318 9.145991e-01_rb,9.127874e-01_rb,9.109884e-01_rb,9.091999e-01_rb, &
7319 9.074194e-01_rb,9.056447e-01_rb,9.038735e-01_rb,9.021033e-01_rb, &
7320 9.003320e-01_rb,8.985572e-01_rb,8.967766e-01_rb,8.949879e-01_rb, &
7321 8.931888e-01_rb,8.913770e-01_rb /)
7322 ssaice3(:, 22) = (/ &
7324 9.994833e-01_rb,9.992055e-01_rb,9.989278e-01_rb,9.986500e-01_rb, &
7325 9.983724e-01_rb,9.980947e-01_rb,9.978172e-01_rb,9.975397e-01_rb, &
7326 9.972623e-01_rb,9.969849e-01_rb,9.967077e-01_rb,9.964305e-01_rb, &
7327 9.961535e-01_rb,9.958765e-01_rb,9.955997e-01_rb,9.953230e-01_rb, &
7328 9.950464e-01_rb,9.947699e-01_rb,9.944936e-01_rb,9.942174e-01_rb, &
7329 9.939414e-01_rb,9.936656e-01_rb,9.933899e-01_rb,9.931144e-01_rb, &
7330 9.928390e-01_rb,9.925639e-01_rb,9.922889e-01_rb,9.920141e-01_rb, &
7331 9.917396e-01_rb,9.914652e-01_rb,9.911911e-01_rb,9.909171e-01_rb, &
7332 9.906434e-01_rb,9.903700e-01_rb,9.900967e-01_rb,9.898237e-01_rb, &
7333 9.895510e-01_rb,9.892784e-01_rb,9.890062e-01_rb,9.887342e-01_rb, &
7334 9.884625e-01_rb,9.881911e-01_rb,9.879199e-01_rb,9.876490e-01_rb, &
7335 9.873784e-01_rb,9.871081e-01_rb /)
7336 ssaice3(:, 23) = (/ &
7338 9.999343e-01_rb,9.998917e-01_rb,9.998492e-01_rb,9.998067e-01_rb, &
7339 9.997642e-01_rb,9.997218e-01_rb,9.996795e-01_rb,9.996372e-01_rb, &
7340 9.995949e-01_rb,9.995528e-01_rb,9.995106e-01_rb,9.994686e-01_rb, &
7341 9.994265e-01_rb,9.993845e-01_rb,9.993426e-01_rb,9.993007e-01_rb, &
7342 9.992589e-01_rb,9.992171e-01_rb,9.991754e-01_rb,9.991337e-01_rb, &
7343 9.990921e-01_rb,9.990505e-01_rb,9.990089e-01_rb,9.989674e-01_rb, &
7344 9.989260e-01_rb,9.988846e-01_rb,9.988432e-01_rb,9.988019e-01_rb, &
7345 9.987606e-01_rb,9.987194e-01_rb,9.986782e-01_rb,9.986370e-01_rb, &
7346 9.985959e-01_rb,9.985549e-01_rb,9.985139e-01_rb,9.984729e-01_rb, &
7347 9.984319e-01_rb,9.983910e-01_rb,9.983502e-01_rb,9.983094e-01_rb, &
7348 9.982686e-01_rb,9.982279e-01_rb,9.981872e-01_rb,9.981465e-01_rb, &
7349 9.981059e-01_rb,9.980653e-01_rb /)
7350 ssaice3(:, 24) = (/ &
7352 9.999978e-01_rb,9.999965e-01_rb,9.999952e-01_rb,9.999939e-01_rb, &
7353 9.999926e-01_rb,9.999913e-01_rb,9.999900e-01_rb,9.999887e-01_rb, &
7354 9.999873e-01_rb,9.999860e-01_rb,9.999847e-01_rb,9.999834e-01_rb, &
7355 9.999821e-01_rb,9.999808e-01_rb,9.999795e-01_rb,9.999782e-01_rb, &
7356 9.999769e-01_rb,9.999756e-01_rb,9.999743e-01_rb,9.999730e-01_rb, &
7357 9.999717e-01_rb,9.999704e-01_rb,9.999691e-01_rb,9.999678e-01_rb, &
7358 9.999665e-01_rb,9.999652e-01_rb,9.999639e-01_rb,9.999626e-01_rb, &
7359 9.999613e-01_rb,9.999600e-01_rb,9.999587e-01_rb,9.999574e-01_rb, &
7360 9.999561e-01_rb,9.999548e-01_rb,9.999535e-01_rb,9.999522e-01_rb, &
7361 9.999509e-01_rb,9.999496e-01_rb,9.999483e-01_rb,9.999470e-01_rb, &
7362 9.999457e-01_rb,9.999444e-01_rb,9.999431e-01_rb,9.999418e-01_rb, &
7363 9.999405e-01_rb,9.999392e-01_rb /)
7364 ssaice3(:, 25) = (/ &
7366 9.999994e-01_rb,9.999993e-01_rb,9.999991e-01_rb,9.999990e-01_rb, &
7367 9.999989e-01_rb,9.999987e-01_rb,9.999986e-01_rb,9.999984e-01_rb, &
7368 9.999983e-01_rb,9.999982e-01_rb,9.999980e-01_rb,9.999979e-01_rb, &
7369 9.999977e-01_rb,9.999976e-01_rb,9.999975e-01_rb,9.999973e-01_rb, &
7370 9.999972e-01_rb,9.999970e-01_rb,9.999969e-01_rb,9.999967e-01_rb, &
7371 9.999966e-01_rb,9.999965e-01_rb,9.999963e-01_rb,9.999962e-01_rb, &
7372 9.999960e-01_rb,9.999959e-01_rb,9.999957e-01_rb,9.999956e-01_rb, &
7373 9.999954e-01_rb,9.999953e-01_rb,9.999952e-01_rb,9.999950e-01_rb, &
7374 9.999949e-01_rb,9.999947e-01_rb,9.999946e-01_rb,9.999944e-01_rb, &
7375 9.999943e-01_rb,9.999941e-01_rb,9.999940e-01_rb,9.999939e-01_rb, &
7376 9.999937e-01_rb,9.999936e-01_rb,9.999934e-01_rb,9.999933e-01_rb, &
7377 9.999931e-01_rb,9.999930e-01_rb /)
7378 ssaice3(:, 26) = (/ &
7380 9.999997e-01_rb,9.999995e-01_rb,9.999992e-01_rb,9.999990e-01_rb, &
7381 9.999987e-01_rb,9.999985e-01_rb,9.999983e-01_rb,9.999980e-01_rb, &
7382 9.999978e-01_rb,9.999976e-01_rb,9.999973e-01_rb,9.999971e-01_rb, &
7383 9.999969e-01_rb,9.999967e-01_rb,9.999965e-01_rb,9.999963e-01_rb, &
7384 9.999960e-01_rb,9.999958e-01_rb,9.999956e-01_rb,9.999954e-01_rb, &
7385 9.999952e-01_rb,9.999950e-01_rb,9.999948e-01_rb,9.999946e-01_rb, &
7386 9.999944e-01_rb,9.999942e-01_rb,9.999939e-01_rb,9.999937e-01_rb, &
7387 9.999935e-01_rb,9.999933e-01_rb,9.999931e-01_rb,9.999929e-01_rb, &
7388 9.999927e-01_rb,9.999925e-01_rb,9.999923e-01_rb,9.999920e-01_rb, &
7389 9.999918e-01_rb,9.999916e-01_rb,9.999914e-01_rb,9.999911e-01_rb, &
7390 9.999909e-01_rb,9.999907e-01_rb,9.999905e-01_rb,9.999902e-01_rb, &
7391 9.999900e-01_rb,9.999897e-01_rb /)
7392 ssaice3(:, 27) = (/ &
7394 9.999991e-01_rb,9.999985e-01_rb,9.999980e-01_rb,9.999974e-01_rb, &
7395 9.999968e-01_rb,9.999963e-01_rb,9.999957e-01_rb,9.999951e-01_rb, &
7396 9.999946e-01_rb,9.999940e-01_rb,9.999934e-01_rb,9.999929e-01_rb, &
7397 9.999923e-01_rb,9.999918e-01_rb,9.999912e-01_rb,9.999907e-01_rb, &
7398 9.999901e-01_rb,9.999896e-01_rb,9.999891e-01_rb,9.999885e-01_rb, &
7399 9.999880e-01_rb,9.999874e-01_rb,9.999869e-01_rb,9.999863e-01_rb, &
7400 9.999858e-01_rb,9.999853e-01_rb,9.999847e-01_rb,9.999842e-01_rb, &
7401 9.999836e-01_rb,9.999831e-01_rb,9.999826e-01_rb,9.999820e-01_rb, &
7402 9.999815e-01_rb,9.999809e-01_rb,9.999804e-01_rb,9.999798e-01_rb, &
7403 9.999793e-01_rb,9.999787e-01_rb,9.999782e-01_rb,9.999776e-01_rb, &
7404 9.999770e-01_rb,9.999765e-01_rb,9.999759e-01_rb,9.999754e-01_rb, &
7405 9.999748e-01_rb,9.999742e-01_rb /)
7406 ssaice3(:, 28) = (/ &
7408 9.999975e-01_rb,9.999961e-01_rb,9.999946e-01_rb,9.999931e-01_rb, &
7409 9.999917e-01_rb,9.999903e-01_rb,9.999888e-01_rb,9.999874e-01_rb, &
7410 9.999859e-01_rb,9.999845e-01_rb,9.999831e-01_rb,9.999816e-01_rb, &
7411 9.999802e-01_rb,9.999788e-01_rb,9.999774e-01_rb,9.999759e-01_rb, &
7412 9.999745e-01_rb,9.999731e-01_rb,9.999717e-01_rb,9.999702e-01_rb, &
7413 9.999688e-01_rb,9.999674e-01_rb,9.999660e-01_rb,9.999646e-01_rb, &
7414 9.999631e-01_rb,9.999617e-01_rb,9.999603e-01_rb,9.999589e-01_rb, &
7415 9.999574e-01_rb,9.999560e-01_rb,9.999546e-01_rb,9.999532e-01_rb, &
7416 9.999517e-01_rb,9.999503e-01_rb,9.999489e-01_rb,9.999474e-01_rb, &
7417 9.999460e-01_rb,9.999446e-01_rb,9.999431e-01_rb,9.999417e-01_rb, &
7418 9.999403e-01_rb,9.999388e-01_rb,9.999374e-01_rb,9.999359e-01_rb, &
7419 9.999345e-01_rb,9.999330e-01_rb /)
7420 ssaice3(:, 29) = (/ &
7422 4.526500e-01_rb,5.287890e-01_rb,5.410487e-01_rb,5.459865e-01_rb, &
7423 5.485149e-01_rb,5.498914e-01_rb,5.505895e-01_rb,5.508310e-01_rb, &
7424 5.507364e-01_rb,5.503793e-01_rb,5.498090e-01_rb,5.490612e-01_rb, &
7425 5.481637e-01_rb,5.471395e-01_rb,5.460083e-01_rb,5.447878e-01_rb, &
7426 5.434946e-01_rb,5.421442e-01_rb,5.407514e-01_rb,5.393309e-01_rb, &
7427 5.378970e-01_rb,5.364641e-01_rb,5.350464e-01_rb,5.336582e-01_rb, &
7428 5.323140e-01_rb,5.310283e-01_rb,5.298158e-01_rb,5.286914e-01_rb, &
7429 5.276704e-01_rb,5.267680e-01_rb,5.260000e-01_rb,5.253823e-01_rb, &
7430 5.249311e-01_rb,5.246629e-01_rb,5.245946e-01_rb,5.247434e-01_rb, &
7431 5.251268e-01_rb,5.257626e-01_rb,5.266693e-01_rb,5.278653e-01_rb, &
7432 5.293698e-01_rb,5.312022e-01_rb,5.333823e-01_rb,5.359305e-01_rb, &
7433 5.388676e-01_rb,5.422146e-01_rb /)
7435 ! asymmetry factor: unitless
7437 asyice3(:, 16) = (/ &
7439 8.340752e-01_rb,8.435170e-01_rb,8.517487e-01_rb,8.592064e-01_rb, &
7440 8.660387e-01_rb,8.723204e-01_rb,8.780997e-01_rb,8.834137e-01_rb, &
7441 8.882934e-01_rb,8.927662e-01_rb,8.968577e-01_rb,9.005914e-01_rb, &
7442 9.039899e-01_rb,9.070745e-01_rb,9.098659e-01_rb,9.123836e-01_rb, &
7443 9.146466e-01_rb,9.166734e-01_rb,9.184817e-01_rb,9.200886e-01_rb, &
7444 9.215109e-01_rb,9.227648e-01_rb,9.238661e-01_rb,9.248304e-01_rb, &
7445 9.256727e-01_rb,9.264078e-01_rb,9.270505e-01_rb,9.276150e-01_rb, &
7446 9.281156e-01_rb,9.285662e-01_rb,9.289806e-01_rb,9.293726e-01_rb, &
7447 9.297557e-01_rb,9.301435e-01_rb,9.305491e-01_rb,9.309859e-01_rb, &
7448 9.314671e-01_rb,9.320055e-01_rb,9.326140e-01_rb,9.333053e-01_rb, &
7449 9.340919e-01_rb,9.349861e-01_rb,9.360000e-01_rb,9.371451e-01_rb, &
7450 9.384329e-01_rb,9.398744e-01_rb /)
7451 asyice3(:, 17) = (/ &
7453 8.728160e-01_rb,8.777333e-01_rb,8.823754e-01_rb,8.867535e-01_rb, &
7454 8.908785e-01_rb,8.947611e-01_rb,8.984118e-01_rb,9.018408e-01_rb, &
7455 9.050582e-01_rb,9.080739e-01_rb,9.108976e-01_rb,9.135388e-01_rb, &
7456 9.160068e-01_rb,9.183106e-01_rb,9.204595e-01_rb,9.224620e-01_rb, &
7457 9.243271e-01_rb,9.260632e-01_rb,9.276788e-01_rb,9.291822e-01_rb, &
7458 9.305817e-01_rb,9.318853e-01_rb,9.331012e-01_rb,9.342372e-01_rb, &
7459 9.353013e-01_rb,9.363013e-01_rb,9.372450e-01_rb,9.381400e-01_rb, &
7460 9.389939e-01_rb,9.398145e-01_rb,9.406092e-01_rb,9.413856e-01_rb, &
7461 9.421511e-01_rb,9.429131e-01_rb,9.436790e-01_rb,9.444561e-01_rb, &
7462 9.452517e-01_rb,9.460729e-01_rb,9.469270e-01_rb,9.478209e-01_rb, &
7463 9.487617e-01_rb,9.497562e-01_rb,9.508112e-01_rb,9.519335e-01_rb, &
7464 9.531294e-01_rb,9.544055e-01_rb /)
7465 asyice3(:, 18) = (/ &
7467 7.897566e-01_rb,7.948704e-01_rb,7.998041e-01_rb,8.045623e-01_rb, &
7468 8.091495e-01_rb,8.135702e-01_rb,8.178290e-01_rb,8.219305e-01_rb, &
7469 8.258790e-01_rb,8.296792e-01_rb,8.333355e-01_rb,8.368524e-01_rb, &
7470 8.402343e-01_rb,8.434856e-01_rb,8.466108e-01_rb,8.496143e-01_rb, &
7471 8.525004e-01_rb,8.552737e-01_rb,8.579384e-01_rb,8.604990e-01_rb, &
7472 8.629597e-01_rb,8.653250e-01_rb,8.675992e-01_rb,8.697867e-01_rb, &
7473 8.718916e-01_rb,8.739185e-01_rb,8.758715e-01_rb,8.777551e-01_rb, &
7474 8.795734e-01_rb,8.813308e-01_rb,8.830315e-01_rb,8.846799e-01_rb, &
7475 8.862802e-01_rb,8.878366e-01_rb,8.893534e-01_rb,8.908350e-01_rb, &
7476 8.922854e-01_rb,8.937090e-01_rb,8.951099e-01_rb,8.964925e-01_rb, &
7477 8.978609e-01_rb,8.992192e-01_rb,9.005718e-01_rb,9.019229e-01_rb, &
7478 9.032765e-01_rb,9.046369e-01_rb /)
7479 asyice3(:, 19) = (/ &
7481 7.812615e-01_rb,7.887764e-01_rb,7.959664e-01_rb,8.028413e-01_rb, &
7482 8.094109e-01_rb,8.156849e-01_rb,8.216730e-01_rb,8.273846e-01_rb, &
7483 8.328294e-01_rb,8.380166e-01_rb,8.429556e-01_rb,8.476556e-01_rb, &
7484 8.521258e-01_rb,8.563753e-01_rb,8.604131e-01_rb,8.642481e-01_rb, &
7485 8.678893e-01_rb,8.713455e-01_rb,8.746254e-01_rb,8.777378e-01_rb, &
7486 8.806914e-01_rb,8.834948e-01_rb,8.861566e-01_rb,8.886854e-01_rb, &
7487 8.910897e-01_rb,8.933779e-01_rb,8.955586e-01_rb,8.976402e-01_rb, &
7488 8.996311e-01_rb,9.015398e-01_rb,9.033745e-01_rb,9.051436e-01_rb, &
7489 9.068555e-01_rb,9.085185e-01_rb,9.101410e-01_rb,9.117311e-01_rb, &
7490 9.132972e-01_rb,9.148476e-01_rb,9.163905e-01_rb,9.179340e-01_rb, &
7491 9.194864e-01_rb,9.210559e-01_rb,9.226505e-01_rb,9.242784e-01_rb, &
7492 9.259476e-01_rb,9.276661e-01_rb /)
7493 asyice3(:, 20) = (/ &
7495 7.640720e-01_rb,7.691119e-01_rb,7.739941e-01_rb,7.787222e-01_rb, &
7496 7.832998e-01_rb,7.877304e-01_rb,7.920177e-01_rb,7.961652e-01_rb, &
7497 8.001765e-01_rb,8.040551e-01_rb,8.078044e-01_rb,8.114280e-01_rb, &
7498 8.149294e-01_rb,8.183119e-01_rb,8.215791e-01_rb,8.247344e-01_rb, &
7499 8.277812e-01_rb,8.307229e-01_rb,8.335629e-01_rb,8.363046e-01_rb, &
7500 8.389514e-01_rb,8.415067e-01_rb,8.439738e-01_rb,8.463560e-01_rb, &
7501 8.486568e-01_rb,8.508795e-01_rb,8.530274e-01_rb,8.551039e-01_rb, &
7502 8.571122e-01_rb,8.590558e-01_rb,8.609378e-01_rb,8.627618e-01_rb, &
7503 8.645309e-01_rb,8.662485e-01_rb,8.679178e-01_rb,8.695423e-01_rb, &
7504 8.711251e-01_rb,8.726697e-01_rb,8.741792e-01_rb,8.756571e-01_rb, &
7505 8.771065e-01_rb,8.785307e-01_rb,8.799331e-01_rb,8.813169e-01_rb, &
7506 8.826854e-01_rb,8.840419e-01_rb /)
7507 asyice3(:, 21) = (/ &
7509 7.602598e-01_rb,7.651572e-01_rb,7.699014e-01_rb,7.744962e-01_rb, &
7510 7.789452e-01_rb,7.832522e-01_rb,7.874205e-01_rb,7.914538e-01_rb, &
7511 7.953555e-01_rb,7.991290e-01_rb,8.027777e-01_rb,8.063049e-01_rb, &
7512 8.097140e-01_rb,8.130081e-01_rb,8.161906e-01_rb,8.192645e-01_rb, &
7513 8.222331e-01_rb,8.250993e-01_rb,8.278664e-01_rb,8.305374e-01_rb, &
7514 8.331153e-01_rb,8.356030e-01_rb,8.380037e-01_rb,8.403201e-01_rb, &
7515 8.425553e-01_rb,8.447121e-01_rb,8.467935e-01_rb,8.488022e-01_rb, &
7516 8.507412e-01_rb,8.526132e-01_rb,8.544210e-01_rb,8.561675e-01_rb, &
7517 8.578554e-01_rb,8.594875e-01_rb,8.610665e-01_rb,8.625951e-01_rb, &
7518 8.640760e-01_rb,8.655119e-01_rb,8.669055e-01_rb,8.682594e-01_rb, &
7519 8.695763e-01_rb,8.708587e-01_rb,8.721094e-01_rb,8.733308e-01_rb, &
7520 8.745255e-01_rb,8.756961e-01_rb /)
7521 asyice3(:, 22) = (/ &
7523 7.568957e-01_rb,7.606995e-01_rb,7.644072e-01_rb,7.680204e-01_rb, &
7524 7.715402e-01_rb,7.749682e-01_rb,7.783057e-01_rb,7.815541e-01_rb, &
7525 7.847148e-01_rb,7.877892e-01_rb,7.907786e-01_rb,7.936846e-01_rb, &
7526 7.965084e-01_rb,7.992515e-01_rb,8.019153e-01_rb,8.045011e-01_rb, &
7527 8.070103e-01_rb,8.094444e-01_rb,8.118048e-01_rb,8.140927e-01_rb, &
7528 8.163097e-01_rb,8.184571e-01_rb,8.205364e-01_rb,8.225488e-01_rb, &
7529 8.244958e-01_rb,8.263789e-01_rb,8.281993e-01_rb,8.299586e-01_rb, &
7530 8.316580e-01_rb,8.332991e-01_rb,8.348831e-01_rb,8.364115e-01_rb, &
7531 8.378857e-01_rb,8.393071e-01_rb,8.406770e-01_rb,8.419969e-01_rb, &
7532 8.432682e-01_rb,8.444923e-01_rb,8.456706e-01_rb,8.468044e-01_rb, &
7533 8.478952e-01_rb,8.489444e-01_rb,8.499533e-01_rb,8.509234e-01_rb, &
7534 8.518561e-01_rb,8.527528e-01_rb /)
7535 asyice3(:, 23) = (/ &
7537 7.575066e-01_rb,7.606912e-01_rb,7.638236e-01_rb,7.669035e-01_rb, &
7538 7.699306e-01_rb,7.729046e-01_rb,7.758254e-01_rb,7.786926e-01_rb, &
7539 7.815060e-01_rb,7.842654e-01_rb,7.869705e-01_rb,7.896211e-01_rb, &
7540 7.922168e-01_rb,7.947574e-01_rb,7.972428e-01_rb,7.996726e-01_rb, &
7541 8.020466e-01_rb,8.043646e-01_rb,8.066262e-01_rb,8.088313e-01_rb, &
7542 8.109796e-01_rb,8.130709e-01_rb,8.151049e-01_rb,8.170814e-01_rb, &
7543 8.190001e-01_rb,8.208608e-01_rb,8.226632e-01_rb,8.244071e-01_rb, &
7544 8.260924e-01_rb,8.277186e-01_rb,8.292856e-01_rb,8.307932e-01_rb, &
7545 8.322411e-01_rb,8.336291e-01_rb,8.349570e-01_rb,8.362244e-01_rb, &
7546 8.374312e-01_rb,8.385772e-01_rb,8.396621e-01_rb,8.406856e-01_rb, &
7547 8.416476e-01_rb,8.425479e-01_rb,8.433861e-01_rb,8.441620e-01_rb, &
7548 8.448755e-01_rb,8.455263e-01_rb /)
7549 asyice3(:, 24) = (/ &
7551 7.568829e-01_rb,7.597947e-01_rb,7.626745e-01_rb,7.655212e-01_rb, &
7552 7.683337e-01_rb,7.711111e-01_rb,7.738523e-01_rb,7.765565e-01_rb, &
7553 7.792225e-01_rb,7.818494e-01_rb,7.844362e-01_rb,7.869819e-01_rb, &
7554 7.894854e-01_rb,7.919459e-01_rb,7.943623e-01_rb,7.967337e-01_rb, &
7555 7.990590e-01_rb,8.013373e-01_rb,8.035676e-01_rb,8.057488e-01_rb, &
7556 8.078802e-01_rb,8.099605e-01_rb,8.119890e-01_rb,8.139645e-01_rb, &
7557 8.158862e-01_rb,8.177530e-01_rb,8.195641e-01_rb,8.213183e-01_rb, &
7558 8.230149e-01_rb,8.246527e-01_rb,8.262308e-01_rb,8.277483e-01_rb, &
7559 8.292042e-01_rb,8.305976e-01_rb,8.319275e-01_rb,8.331929e-01_rb, &
7560 8.343929e-01_rb,8.355265e-01_rb,8.365928e-01_rb,8.375909e-01_rb, &
7561 8.385197e-01_rb,8.393784e-01_rb,8.401659e-01_rb,8.408815e-01_rb, &
7562 8.415240e-01_rb,8.420926e-01_rb /)
7563 asyice3(:, 25) = (/ &
7565 7.548616e-01_rb,7.575454e-01_rb,7.602153e-01_rb,7.628696e-01_rb, &
7566 7.655067e-01_rb,7.681249e-01_rb,7.707225e-01_rb,7.732978e-01_rb, &
7567 7.758492e-01_rb,7.783750e-01_rb,7.808735e-01_rb,7.833430e-01_rb, &
7568 7.857819e-01_rb,7.881886e-01_rb,7.905612e-01_rb,7.928983e-01_rb, &
7569 7.951980e-01_rb,7.974588e-01_rb,7.996789e-01_rb,8.018567e-01_rb, &
7570 8.039905e-01_rb,8.060787e-01_rb,8.081196e-01_rb,8.101115e-01_rb, &
7571 8.120527e-01_rb,8.139416e-01_rb,8.157764e-01_rb,8.175557e-01_rb, &
7572 8.192776e-01_rb,8.209405e-01_rb,8.225427e-01_rb,8.240826e-01_rb, &
7573 8.255585e-01_rb,8.269688e-01_rb,8.283117e-01_rb,8.295856e-01_rb, &
7574 8.307889e-01_rb,8.319198e-01_rb,8.329767e-01_rb,8.339579e-01_rb, &
7575 8.348619e-01_rb,8.356868e-01_rb,8.364311e-01_rb,8.370930e-01_rb, &
7576 8.376710e-01_rb,8.381633e-01_rb /)
7577 asyice3(:, 26) = (/ &
7579 7.491854e-01_rb,7.518523e-01_rb,7.545089e-01_rb,7.571534e-01_rb, &
7580 7.597839e-01_rb,7.623987e-01_rb,7.649959e-01_rb,7.675737e-01_rb, &
7581 7.701303e-01_rb,7.726639e-01_rb,7.751727e-01_rb,7.776548e-01_rb, &
7582 7.801084e-01_rb,7.825318e-01_rb,7.849230e-01_rb,7.872804e-01_rb, &
7583 7.896020e-01_rb,7.918862e-01_rb,7.941309e-01_rb,7.963345e-01_rb, &
7584 7.984951e-01_rb,8.006109e-01_rb,8.026802e-01_rb,8.047009e-01_rb, &
7585 8.066715e-01_rb,8.085900e-01_rb,8.104546e-01_rb,8.122636e-01_rb, &
7586 8.140150e-01_rb,8.157072e-01_rb,8.173382e-01_rb,8.189063e-01_rb, &
7587 8.204096e-01_rb,8.218464e-01_rb,8.232148e-01_rb,8.245130e-01_rb, &
7588 8.257391e-01_rb,8.268915e-01_rb,8.279682e-01_rb,8.289675e-01_rb, &
7589 8.298875e-01_rb,8.307264e-01_rb,8.314824e-01_rb,8.321537e-01_rb, &
7590 8.327385e-01_rb,8.332350e-01_rb /)
7591 asyice3(:, 27) = (/ &
7593 7.397086e-01_rb,7.424069e-01_rb,7.450955e-01_rb,7.477725e-01_rb, &
7594 7.504362e-01_rb,7.530846e-01_rb,7.557159e-01_rb,7.583283e-01_rb, &
7595 7.609199e-01_rb,7.634888e-01_rb,7.660332e-01_rb,7.685512e-01_rb, &
7596 7.710411e-01_rb,7.735009e-01_rb,7.759288e-01_rb,7.783229e-01_rb, &
7597 7.806814e-01_rb,7.830024e-01_rb,7.852841e-01_rb,7.875246e-01_rb, &
7598 7.897221e-01_rb,7.918748e-01_rb,7.939807e-01_rb,7.960380e-01_rb, &
7599 7.980449e-01_rb,7.999995e-01_rb,8.019000e-01_rb,8.037445e-01_rb, &
7600 8.055311e-01_rb,8.072581e-01_rb,8.089235e-01_rb,8.105255e-01_rb, &
7601 8.120623e-01_rb,8.135319e-01_rb,8.149326e-01_rb,8.162626e-01_rb, &
7602 8.175198e-01_rb,8.187025e-01_rb,8.198089e-01_rb,8.208371e-01_rb, &
7603 8.217852e-01_rb,8.226514e-01_rb,8.234338e-01_rb,8.241306e-01_rb, &
7604 8.247399e-01_rb,8.252599e-01_rb /)
7605 asyice3(:, 28) = (/ &
7607 7.224533e-01_rb,7.251681e-01_rb,7.278728e-01_rb,7.305654e-01_rb, &
7608 7.332444e-01_rb,7.359078e-01_rb,7.385539e-01_rb,7.411808e-01_rb, &
7609 7.437869e-01_rb,7.463702e-01_rb,7.489291e-01_rb,7.514616e-01_rb, &
7610 7.539661e-01_rb,7.564408e-01_rb,7.588837e-01_rb,7.612933e-01_rb, &
7611 7.636676e-01_rb,7.660049e-01_rb,7.683034e-01_rb,7.705612e-01_rb, &
7612 7.727767e-01_rb,7.749480e-01_rb,7.770733e-01_rb,7.791509e-01_rb, &
7613 7.811789e-01_rb,7.831556e-01_rb,7.850791e-01_rb,7.869478e-01_rb, &
7614 7.887597e-01_rb,7.905131e-01_rb,7.922062e-01_rb,7.938372e-01_rb, &
7615 7.954044e-01_rb,7.969059e-01_rb,7.983399e-01_rb,7.997047e-01_rb, &
7616 8.009985e-01_rb,8.022195e-01_rb,8.033658e-01_rb,8.044357e-01_rb, &
7617 8.054275e-01_rb,8.063392e-01_rb,8.071692e-01_rb,8.079157e-01_rb, &
7618 8.085768e-01_rb,8.091507e-01_rb /)
7619 asyice3(:, 29) = (/ &
7621 8.850026e-01_rb,9.005489e-01_rb,9.069242e-01_rb,9.121799e-01_rb, &
7622 9.168987e-01_rb,9.212259e-01_rb,9.252176e-01_rb,9.289028e-01_rb, &
7623 9.323000e-01_rb,9.354235e-01_rb,9.382858e-01_rb,9.408985e-01_rb, &
7624 9.432734e-01_rb,9.454218e-01_rb,9.473557e-01_rb,9.490871e-01_rb, &
7625 9.506282e-01_rb,9.519917e-01_rb,9.531904e-01_rb,9.542374e-01_rb, &
7626 9.551461e-01_rb,9.559298e-01_rb,9.566023e-01_rb,9.571775e-01_rb, &
7627 9.576692e-01_rb,9.580916e-01_rb,9.584589e-01_rb,9.587853e-01_rb, &
7628 9.590851e-01_rb,9.593729e-01_rb,9.596632e-01_rb,9.599705e-01_rb, &
7629 9.603096e-01_rb,9.606954e-01_rb,9.611427e-01_rb,9.616667e-01_rb, &
7630 9.622826e-01_rb,9.630060e-01_rb,9.638524e-01_rb,9.648379e-01_rb, &
7631 9.659788e-01_rb,9.672916e-01_rb,9.687933e-01_rb,9.705014e-01_rb, &
7632 9.724337e-01_rb,9.746084e-01_rb /)
7636 fdlice3(:, 16) = (/ &
7638 4.959277e-02_rb,4.685292e-02_rb,4.426104e-02_rb,4.181231e-02_rb, &
7639 3.950191e-02_rb,3.732500e-02_rb,3.527675e-02_rb,3.335235e-02_rb, &
7640 3.154697e-02_rb,2.985578e-02_rb,2.827395e-02_rb,2.679666e-02_rb, &
7641 2.541909e-02_rb,2.413640e-02_rb,2.294378e-02_rb,2.183639e-02_rb, &
7642 2.080940e-02_rb,1.985801e-02_rb,1.897736e-02_rb,1.816265e-02_rb, &
7643 1.740905e-02_rb,1.671172e-02_rb,1.606585e-02_rb,1.546661e-02_rb, &
7644 1.490917e-02_rb,1.438870e-02_rb,1.390038e-02_rb,1.343939e-02_rb, &
7645 1.300089e-02_rb,1.258006e-02_rb,1.217208e-02_rb,1.177212e-02_rb, &
7646 1.137536e-02_rb,1.097696e-02_rb,1.057210e-02_rb,1.015596e-02_rb, &
7647 9.723704e-03_rb,9.270516e-03_rb,8.791565e-03_rb,8.282026e-03_rb, &
7648 7.737072e-03_rb,7.151879e-03_rb,6.521619e-03_rb,5.841467e-03_rb, &
7649 5.106597e-03_rb,4.312183e-03_rb /)
7650 fdlice3(:, 17) = (/ &
7652 5.071224e-02_rb,5.000217e-02_rb,4.933872e-02_rb,4.871992e-02_rb, &
7653 4.814380e-02_rb,4.760839e-02_rb,4.711170e-02_rb,4.665177e-02_rb, &
7654 4.622662e-02_rb,4.583426e-02_rb,4.547274e-02_rb,4.514007e-02_rb, &
7655 4.483428e-02_rb,4.455340e-02_rb,4.429544e-02_rb,4.405844e-02_rb, &
7656 4.384041e-02_rb,4.363939e-02_rb,4.345340e-02_rb,4.328047e-02_rb, &
7657 4.311861e-02_rb,4.296586e-02_rb,4.282024e-02_rb,4.267977e-02_rb, &
7658 4.254248e-02_rb,4.240640e-02_rb,4.226955e-02_rb,4.212995e-02_rb, &
7659 4.198564e-02_rb,4.183462e-02_rb,4.167494e-02_rb,4.150462e-02_rb, &
7660 4.132167e-02_rb,4.112413e-02_rb,4.091003e-02_rb,4.067737e-02_rb, &
7661 4.042420e-02_rb,4.014854e-02_rb,3.984840e-02_rb,3.952183e-02_rb, &
7662 3.916683e-02_rb,3.878144e-02_rb,3.836368e-02_rb,3.791158e-02_rb, &
7663 3.742316e-02_rb,3.689645e-02_rb /)
7664 fdlice3(:, 18) = (/ &
7666 1.062938e-01_rb,1.065234e-01_rb,1.067822e-01_rb,1.070682e-01_rb, &
7667 1.073793e-01_rb,1.077137e-01_rb,1.080693e-01_rb,1.084442e-01_rb, &
7668 1.088364e-01_rb,1.092439e-01_rb,1.096647e-01_rb,1.100970e-01_rb, &
7669 1.105387e-01_rb,1.109878e-01_rb,1.114423e-01_rb,1.119004e-01_rb, &
7670 1.123599e-01_rb,1.128190e-01_rb,1.132757e-01_rb,1.137279e-01_rb, &
7671 1.141738e-01_rb,1.146113e-01_rb,1.150385e-01_rb,1.154534e-01_rb, &
7672 1.158540e-01_rb,1.162383e-01_rb,1.166045e-01_rb,1.169504e-01_rb, &
7673 1.172741e-01_rb,1.175738e-01_rb,1.178472e-01_rb,1.180926e-01_rb, &
7674 1.183080e-01_rb,1.184913e-01_rb,1.186405e-01_rb,1.187538e-01_rb, &
7675 1.188291e-01_rb,1.188645e-01_rb,1.188580e-01_rb,1.188076e-01_rb, &
7676 1.187113e-01_rb,1.185672e-01_rb,1.183733e-01_rb,1.181277e-01_rb, &
7677 1.178282e-01_rb,1.174731e-01_rb /)
7678 fdlice3(:, 19) = (/ &
7680 1.076195e-01_rb,1.065195e-01_rb,1.054696e-01_rb,1.044673e-01_rb, &
7681 1.035099e-01_rb,1.025951e-01_rb,1.017203e-01_rb,1.008831e-01_rb, &
7682 1.000808e-01_rb,9.931116e-02_rb,9.857151e-02_rb,9.785939e-02_rb, &
7683 9.717230e-02_rb,9.650774e-02_rb,9.586322e-02_rb,9.523623e-02_rb, &
7684 9.462427e-02_rb,9.402484e-02_rb,9.343544e-02_rb,9.285358e-02_rb, &
7685 9.227675e-02_rb,9.170245e-02_rb,9.112818e-02_rb,9.055144e-02_rb, &
7686 8.996974e-02_rb,8.938056e-02_rb,8.878142e-02_rb,8.816981e-02_rb, &
7687 8.754323e-02_rb,8.689919e-02_rb,8.623517e-02_rb,8.554869e-02_rb, &
7688 8.483724e-02_rb,8.409832e-02_rb,8.332943e-02_rb,8.252807e-02_rb, &
7689 8.169175e-02_rb,8.081795e-02_rb,7.990419e-02_rb,7.894796e-02_rb, &
7690 7.794676e-02_rb,7.689809e-02_rb,7.579945e-02_rb,7.464834e-02_rb, &
7691 7.344227e-02_rb,7.217872e-02_rb /)
7692 fdlice3(:, 20) = (/ &
7694 1.119014e-01_rb,1.122706e-01_rb,1.126690e-01_rb,1.130947e-01_rb, &
7695 1.135456e-01_rb,1.140199e-01_rb,1.145154e-01_rb,1.150302e-01_rb, &
7696 1.155623e-01_rb,1.161096e-01_rb,1.166703e-01_rb,1.172422e-01_rb, &
7697 1.178233e-01_rb,1.184118e-01_rb,1.190055e-01_rb,1.196025e-01_rb, &
7698 1.202008e-01_rb,1.207983e-01_rb,1.213931e-01_rb,1.219832e-01_rb, &
7699 1.225665e-01_rb,1.231411e-01_rb,1.237050e-01_rb,1.242561e-01_rb, &
7700 1.247926e-01_rb,1.253122e-01_rb,1.258132e-01_rb,1.262934e-01_rb, &
7701 1.267509e-01_rb,1.271836e-01_rb,1.275896e-01_rb,1.279669e-01_rb, &
7702 1.283134e-01_rb,1.286272e-01_rb,1.289063e-01_rb,1.291486e-01_rb, &
7703 1.293522e-01_rb,1.295150e-01_rb,1.296351e-01_rb,1.297104e-01_rb, &
7704 1.297390e-01_rb,1.297189e-01_rb,1.296480e-01_rb,1.295244e-01_rb, &
7705 1.293460e-01_rb,1.291109e-01_rb /)
7706 fdlice3(:, 21) = (/ &
7708 1.133298e-01_rb,1.136777e-01_rb,1.140556e-01_rb,1.144615e-01_rb, &
7709 1.148934e-01_rb,1.153492e-01_rb,1.158269e-01_rb,1.163243e-01_rb, &
7710 1.168396e-01_rb,1.173706e-01_rb,1.179152e-01_rb,1.184715e-01_rb, &
7711 1.190374e-01_rb,1.196108e-01_rb,1.201897e-01_rb,1.207720e-01_rb, &
7712 1.213558e-01_rb,1.219389e-01_rb,1.225194e-01_rb,1.230951e-01_rb, &
7713 1.236640e-01_rb,1.242241e-01_rb,1.247733e-01_rb,1.253096e-01_rb, &
7714 1.258309e-01_rb,1.263352e-01_rb,1.268205e-01_rb,1.272847e-01_rb, &
7715 1.277257e-01_rb,1.281415e-01_rb,1.285300e-01_rb,1.288893e-01_rb, &
7716 1.292173e-01_rb,1.295118e-01_rb,1.297710e-01_rb,1.299927e-01_rb, &
7717 1.301748e-01_rb,1.303154e-01_rb,1.304124e-01_rb,1.304637e-01_rb, &
7718 1.304673e-01_rb,1.304212e-01_rb,1.303233e-01_rb,1.301715e-01_rb, &
7719 1.299638e-01_rb,1.296983e-01_rb /)
7720 fdlice3(:, 22) = (/ &
7722 1.145360e-01_rb,1.153256e-01_rb,1.161453e-01_rb,1.169929e-01_rb, &
7723 1.178666e-01_rb,1.187641e-01_rb,1.196835e-01_rb,1.206227e-01_rb, &
7724 1.215796e-01_rb,1.225522e-01_rb,1.235383e-01_rb,1.245361e-01_rb, &
7725 1.255433e-01_rb,1.265579e-01_rb,1.275779e-01_rb,1.286011e-01_rb, &
7726 1.296257e-01_rb,1.306494e-01_rb,1.316703e-01_rb,1.326862e-01_rb, &
7727 1.336951e-01_rb,1.346950e-01_rb,1.356838e-01_rb,1.366594e-01_rb, &
7728 1.376198e-01_rb,1.385629e-01_rb,1.394866e-01_rb,1.403889e-01_rb, &
7729 1.412678e-01_rb,1.421212e-01_rb,1.429469e-01_rb,1.437430e-01_rb, &
7730 1.445074e-01_rb,1.452381e-01_rb,1.459329e-01_rb,1.465899e-01_rb, &
7731 1.472069e-01_rb,1.477819e-01_rb,1.483128e-01_rb,1.487976e-01_rb, &
7732 1.492343e-01_rb,1.496207e-01_rb,1.499548e-01_rb,1.502346e-01_rb, &
7733 1.504579e-01_rb,1.506227e-01_rb /)
7734 fdlice3(:, 23) = (/ &
7736 1.153263e-01_rb,1.161445e-01_rb,1.169932e-01_rb,1.178703e-01_rb, &
7737 1.187738e-01_rb,1.197016e-01_rb,1.206516e-01_rb,1.216217e-01_rb, &
7738 1.226099e-01_rb,1.236141e-01_rb,1.246322e-01_rb,1.256621e-01_rb, &
7739 1.267017e-01_rb,1.277491e-01_rb,1.288020e-01_rb,1.298584e-01_rb, &
7740 1.309163e-01_rb,1.319736e-01_rb,1.330281e-01_rb,1.340778e-01_rb, &
7741 1.351207e-01_rb,1.361546e-01_rb,1.371775e-01_rb,1.381873e-01_rb, &
7742 1.391820e-01_rb,1.401593e-01_rb,1.411174e-01_rb,1.420540e-01_rb, &
7743 1.429671e-01_rb,1.438547e-01_rb,1.447146e-01_rb,1.455449e-01_rb, &
7744 1.463433e-01_rb,1.471078e-01_rb,1.478364e-01_rb,1.485270e-01_rb, &
7745 1.491774e-01_rb,1.497857e-01_rb,1.503497e-01_rb,1.508674e-01_rb, &
7746 1.513367e-01_rb,1.517554e-01_rb,1.521216e-01_rb,1.524332e-01_rb, &
7747 1.526880e-01_rb,1.528840e-01_rb /)
7748 fdlice3(:, 24) = (/ &
7750 1.160842e-01_rb,1.169118e-01_rb,1.177697e-01_rb,1.186556e-01_rb, &
7751 1.195676e-01_rb,1.205036e-01_rb,1.214616e-01_rb,1.224394e-01_rb, &
7752 1.234349e-01_rb,1.244463e-01_rb,1.254712e-01_rb,1.265078e-01_rb, &
7753 1.275539e-01_rb,1.286075e-01_rb,1.296664e-01_rb,1.307287e-01_rb, &
7754 1.317923e-01_rb,1.328550e-01_rb,1.339149e-01_rb,1.349699e-01_rb, &
7755 1.360179e-01_rb,1.370567e-01_rb,1.380845e-01_rb,1.390991e-01_rb, &
7756 1.400984e-01_rb,1.410803e-01_rb,1.420429e-01_rb,1.429840e-01_rb, &
7757 1.439016e-01_rb,1.447936e-01_rb,1.456579e-01_rb,1.464925e-01_rb, &
7758 1.472953e-01_rb,1.480642e-01_rb,1.487972e-01_rb,1.494923e-01_rb, &
7759 1.501472e-01_rb,1.507601e-01_rb,1.513287e-01_rb,1.518511e-01_rb, &
7760 1.523252e-01_rb,1.527489e-01_rb,1.531201e-01_rb,1.534368e-01_rb, &
7761 1.536969e-01_rb,1.538984e-01_rb /)
7762 fdlice3(:, 25) = (/ &
7764 1.168725e-01_rb,1.177088e-01_rb,1.185747e-01_rb,1.194680e-01_rb, &
7765 1.203867e-01_rb,1.213288e-01_rb,1.222923e-01_rb,1.232750e-01_rb, &
7766 1.242750e-01_rb,1.252903e-01_rb,1.263187e-01_rb,1.273583e-01_rb, &
7767 1.284069e-01_rb,1.294626e-01_rb,1.305233e-01_rb,1.315870e-01_rb, &
7768 1.326517e-01_rb,1.337152e-01_rb,1.347756e-01_rb,1.358308e-01_rb, &
7769 1.368788e-01_rb,1.379175e-01_rb,1.389449e-01_rb,1.399590e-01_rb, &
7770 1.409577e-01_rb,1.419389e-01_rb,1.429007e-01_rb,1.438410e-01_rb, &
7771 1.447577e-01_rb,1.456488e-01_rb,1.465123e-01_rb,1.473461e-01_rb, &
7772 1.481483e-01_rb,1.489166e-01_rb,1.496492e-01_rb,1.503439e-01_rb, &
7773 1.509988e-01_rb,1.516118e-01_rb,1.521808e-01_rb,1.527038e-01_rb, &
7774 1.531788e-01_rb,1.536037e-01_rb,1.539764e-01_rb,1.542951e-01_rb, &
7775 1.545575e-01_rb,1.547617e-01_rb /)
7776 fdlice3(:, 26) = (/ &
7778 1.180509e-01_rb,1.189025e-01_rb,1.197820e-01_rb,1.206875e-01_rb, &
7779 1.216171e-01_rb,1.225687e-01_rb,1.235404e-01_rb,1.245303e-01_rb, &
7780 1.255363e-01_rb,1.265564e-01_rb,1.275888e-01_rb,1.286313e-01_rb, &
7781 1.296821e-01_rb,1.307392e-01_rb,1.318006e-01_rb,1.328643e-01_rb, &
7782 1.339284e-01_rb,1.349908e-01_rb,1.360497e-01_rb,1.371029e-01_rb, &
7783 1.381486e-01_rb,1.391848e-01_rb,1.402095e-01_rb,1.412208e-01_rb, &
7784 1.422165e-01_rb,1.431949e-01_rb,1.441539e-01_rb,1.450915e-01_rb, &
7785 1.460058e-01_rb,1.468947e-01_rb,1.477564e-01_rb,1.485888e-01_rb, &
7786 1.493900e-01_rb,1.501580e-01_rb,1.508907e-01_rb,1.515864e-01_rb, &
7787 1.522428e-01_rb,1.528582e-01_rb,1.534305e-01_rb,1.539578e-01_rb, &
7788 1.544380e-01_rb,1.548692e-01_rb,1.552494e-01_rb,1.555767e-01_rb, &
7789 1.558490e-01_rb,1.560645e-01_rb /)
7790 fdlice3(:, 27) = (/ &
7792 1.200480e-01_rb,1.209267e-01_rb,1.218304e-01_rb,1.227575e-01_rb, &
7793 1.237059e-01_rb,1.246739e-01_rb,1.256595e-01_rb,1.266610e-01_rb, &
7794 1.276765e-01_rb,1.287041e-01_rb,1.297420e-01_rb,1.307883e-01_rb, &
7795 1.318412e-01_rb,1.328988e-01_rb,1.339593e-01_rb,1.350207e-01_rb, &
7796 1.360813e-01_rb,1.371393e-01_rb,1.381926e-01_rb,1.392396e-01_rb, &
7797 1.402783e-01_rb,1.413069e-01_rb,1.423235e-01_rb,1.433263e-01_rb, &
7798 1.443134e-01_rb,1.452830e-01_rb,1.462332e-01_rb,1.471622e-01_rb, &
7799 1.480681e-01_rb,1.489490e-01_rb,1.498032e-01_rb,1.506286e-01_rb, &
7800 1.514236e-01_rb,1.521863e-01_rb,1.529147e-01_rb,1.536070e-01_rb, &
7801 1.542614e-01_rb,1.548761e-01_rb,1.554491e-01_rb,1.559787e-01_rb, &
7802 1.564629e-01_rb,1.568999e-01_rb,1.572879e-01_rb,1.576249e-01_rb, &
7803 1.579093e-01_rb,1.581390e-01_rb /)
7804 fdlice3(:, 28) = (/ &
7806 1.247813e-01_rb,1.256496e-01_rb,1.265417e-01_rb,1.274560e-01_rb, &
7807 1.283905e-01_rb,1.293436e-01_rb,1.303135e-01_rb,1.312983e-01_rb, &
7808 1.322964e-01_rb,1.333060e-01_rb,1.343252e-01_rb,1.353523e-01_rb, &
7809 1.363855e-01_rb,1.374231e-01_rb,1.384632e-01_rb,1.395042e-01_rb, &
7810 1.405441e-01_rb,1.415813e-01_rb,1.426140e-01_rb,1.436404e-01_rb, &
7811 1.446587e-01_rb,1.456672e-01_rb,1.466640e-01_rb,1.476475e-01_rb, &
7812 1.486157e-01_rb,1.495671e-01_rb,1.504997e-01_rb,1.514117e-01_rb, &
7813 1.523016e-01_rb,1.531673e-01_rb,1.540073e-01_rb,1.548197e-01_rb, &
7814 1.556026e-01_rb,1.563545e-01_rb,1.570734e-01_rb,1.577576e-01_rb, &
7815 1.584054e-01_rb,1.590149e-01_rb,1.595843e-01_rb,1.601120e-01_rb, &
7816 1.605962e-01_rb,1.610349e-01_rb,1.614266e-01_rb,1.617693e-01_rb, &
7817 1.620614e-01_rb,1.623011e-01_rb /)
7818 fdlice3(:, 29) = (/ &
7820 1.006055e-01_rb,9.549582e-02_rb,9.063960e-02_rb,8.602900e-02_rb, &
7821 8.165612e-02_rb,7.751308e-02_rb,7.359199e-02_rb,6.988496e-02_rb, &
7822 6.638412e-02_rb,6.308156e-02_rb,5.996942e-02_rb,5.703979e-02_rb, &
7823 5.428481e-02_rb,5.169657e-02_rb,4.926719e-02_rb,4.698880e-02_rb, &
7824 4.485349e-02_rb,4.285339e-02_rb,4.098061e-02_rb,3.922727e-02_rb, &
7825 3.758547e-02_rb,3.604733e-02_rb,3.460497e-02_rb,3.325051e-02_rb, &
7826 3.197604e-02_rb,3.077369e-02_rb,2.963558e-02_rb,2.855381e-02_rb, &
7827 2.752050e-02_rb,2.652776e-02_rb,2.556772e-02_rb,2.463247e-02_rb, &
7828 2.371415e-02_rb,2.280485e-02_rb,2.189670e-02_rb,2.098180e-02_rb, &
7829 2.005228e-02_rb,1.910024e-02_rb,1.811781e-02_rb,1.709709e-02_rb, &
7830 1.603020e-02_rb,1.490925e-02_rb,1.372635e-02_rb,1.247363e-02_rb, &
7831 1.114319e-02_rb,9.727157e-03_rb /)
7833 end subroutine swcldpr
7834 !-------------------------------------------------------------------------------
7837 !-------------------------------------------------------------------------------
7838 end module rrtmg_sw_init_k
7839 !-------------------------------------------------------------------------------
7842 !-------------------------------------------------------------------------------
7843 module rrtmg_sw_vrtqdr_k
7844 !-------------------------------------------------------------------------------
7845 ! --------------------------------------------------------------------------
7847 ! | Copyright 2002-2008, Atmospheric & Environmental Research, Inc. (AER). |
7848 ! | This software may be used, copied, or redistributed as long as it is |
7849 ! | not sold and this copyright notice is reproduced on each copy made. |
7850 ! | This model is provided as is without any express or implied warranties. |
7851 ! | (http://www.rtweb.aer.com/) |
7853 ! --------------------------------------------------------------------------
7854 ! ------- Modules -------
7856 use parkind_k, only: im => kind_im, rb => kind_rb
7857 ! use parrrsw, only: ngptsw
7862 !-------------------------------------------------------------------------------
7865 !-------------------------------------------------------------------------------
7866 subroutine vrtqdr_sw(klev, kw, &
7867 pref, prefd, ptra, ptrad, &
7868 pdbt, prdnd, prup, prupd, ptdbt, &
7870 !-------------------------------------------------------------------------------
7873 ! This routine performs the vertical quadrature integration
7875 ! Interface: *vrtqdr_sw* is called from *spcvrt_sw* and *spcvmc_sw*
7879 ! H. Barker Original
7880 ! 2002-10 J.-J. Morcrette, ECMWF Integrated with rrtmg_sw
7881 ! 2006-06 MJIacono, AER Reformatted for consistency with rrtmg_lw
7884 ! klev : number of model layers
7885 ! kw : g-point index
7886 ! pref(nlayers+1) : direct beam reflectivity
7887 ! prefd(nlayers+1) : diffuse beam reflectivity
7888 ! ptra(nlayers+1) : direct beam transmissivity
7889 ! ptrad(nlayers+1) : diffuse beam transmissivity
7890 ! pdbt(nlayers+1) : layer mean direct beam transmittance
7891 ! ptdbt(nlayers+1) : total direct beam transmittance at levels
7897 ! pfd(nlayers+1,ngptsw) : downwelling flux (W/m2),
7898 ! unadjusted for earth/sun distance or zenith angle
7899 ! pfu(nlayers+1,ngptsw) : upwelling flux (W/m2)
7900 ! unadjusted for earth/sun distance or zenith angle
7902 !-------------------------------------------------------------------------------
7904 ! ------- Declarations -------
7908 integer(kind=im), intent(in ) :: klev
7909 integer(kind=im), intent(in ) :: kw
7910 real(kind=rb), dimension(:), intent(in ) :: pref
7911 real(kind=rb), dimension(:), intent(in ) :: prefd
7912 real(kind=rb), dimension(:), intent(in ) :: ptra
7913 real(kind=rb), dimension(:), intent(in ) :: ptrad
7914 real(kind=rb), dimension(:), intent(in ) :: pdbt
7915 real(kind=rb), dimension(:), intent(in ) :: ptdbt
7916 real(kind=rb), dimension(:), intent(inout) :: prdnd
7917 real(kind=rb), dimension(:), intent(inout) :: prup
7918 real(kind=rb), dimension(:), intent(inout) :: prupd
7922 real(kind=rb), dimension(:,:), intent( out) :: pfd
7923 real(kind=rb), dimension(:,:), intent( out) :: pfu
7927 integer(kind=im) :: ikp, ikx, jk
7929 real(kind=rb) :: zreflect
7930 real(kind=rb),dimension(klev+1) :: ztdn
7932 !-----------------------------------------------------------------------------
7934 ! Link lowest layer with surface
7936 zreflect = 1._rb / (1._rb - prefd(klev+1) * prefd(klev))
7937 prup(klev) = pref(klev) + (ptrad(klev) * &
7938 ((ptra(klev) - pdbt(klev)) * prefd(klev+1) + &
7939 pdbt(klev) * pref(klev+1))) * zreflect
7940 prupd(klev) = prefd(klev) + ptrad(klev) * ptrad(klev) * &
7941 prefd(klev+1) * zreflect
7943 ! Pass from bottom to top
7948 zreflect = 1._rb / (1._rb -prupd(ikp) * prefd(ikx))
7949 prup(ikx) = pref(ikx) + (ptrad(ikx) * &
7950 ((ptra(ikx) - pdbt(ikx)) * prupd(ikp) + &
7951 pdbt(ikx) * prup(ikp))) * zreflect
7952 prupd(ikx) = prefd(ikx) + ptrad(ikx) * ptrad(ikx) * &
7953 prupd(ikp) * zreflect
7956 ! Upper boundary conditions
7963 ! Pass from top to bottom
7967 zreflect = 1._rb / (1._rb - prefd(jk) * prdnd(jk))
7968 ztdn(ikp) = ptdbt(jk) * ptra(jk) + &
7969 (ptrad(jk) * ((ztdn(jk) - ptdbt(jk)) + &
7970 ptdbt(jk) * pref(jk) * prdnd(jk))) * zreflect
7971 prdnd(ikp) = prefd(jk) + ptrad(jk) * ptrad(jk) * &
7972 prdnd(jk) * zreflect
7975 ! Up and down-welling fluxes at levels
7978 zreflect = 1._rb / (1._rb - prdnd(jk) * prupd(jk))
7979 pfu(jk,kw) = (ptdbt(jk) * prup(jk) + &
7980 (ztdn(jk) - ptdbt(jk)) * prupd(jk)) * zreflect
7981 pfd(jk,kw) = ptdbt(jk) + (ztdn(jk) - ptdbt(jk)+ &
7982 ptdbt(jk) * prup(jk) * prdnd(jk)) * zreflect
7985 end subroutine vrtqdr_sw
7986 !-------------------------------------------------------------------------------
7989 !-------------------------------------------------------------------------------
7990 end module rrtmg_sw_vrtqdr_k
7991 !-------------------------------------------------------------------------------
7994 !-------------------------------------------------------------------------------
7995 module rrtmg_sw_spcvmc_k
7996 !-------------------------------------------------------------------------------
7997 ! --------------------------------------------------------------------------
7999 ! | Copyright 2002-2008, Atmospheric & Environmental Research, Inc. (AER). |
8000 ! | This software may be used, copied, or redistributed as long as it is |
8001 ! | not sold and this copyright notice is reproduced on each copy made. |
8002 ! | This model is provided as is without any express or implied warranties. |
8003 ! | (http://www.rtweb.aer.com/) |
8005 ! --------------------------------------------------------------------------
8006 ! ------- Modules -------
8008 use parkind_k, only : im => kind_im, rb => kind_rb
8009 use parrrsw_k, only : nbndsw, ngptsw, mxmol, jpband
8010 use rrsw_tbl_k, only : tblint, bpade, od_lo, exp_tbl
8011 use rrsw_vsn_k, only : hvrspc, hnamspc
8012 use rrsw_wvn_k, only : ngc, ngs
8013 use rrtmg_sw_reftra_k, only: reftra_sw
8014 use rrtmg_sw_taumol_k, only: taumol_sw
8015 use rrtmg_sw_vrtqdr_k, only: vrtqdr_sw
8020 !-------------------------------------------------------------------------------
8023 !-------------------------------------------------------------------------------
8024 subroutine spcvmc_sw &
8025 (nlayers, istart, iend, icpr, iout, &
8026 pavel, tavel, pz, tz, tbound, palbd, palbp, &
8027 pcldfmc, ptaucmc, pasycmc, pomgcmc, ptaormc, &
8028 ptaua, pasya, pomga, prmu0, coldry, wkl, adjflux, &
8029 laytrop, layswtch, laylow, jp, jt, jt1, &
8030 co2mult, colch4, colco2, colh2o, colmol, coln2o, colo2, colo3, &
8031 fac00, fac01, fac10, fac11, &
8032 selffac, selffrac, indself, forfac, forfrac, indfor, &
8033 dtliq,dtice,dtsno,dwliq,dwice,dwsno,daliq,daice,dasno, &
8034 pbbfd, pbbfu, pbbcd, pbbcu, puvfd, puvcd, pnifd, pnicd, &
8035 pbbfddir, pbbcddir, puvfddir, puvcddir, pnifddir, pnicddir)
8036 !-------------------------------------------------------------------------------
8039 ! Contains spectral loop to compute the shortwave radiative fluxes,
8040 ! using the two-stream method of H. Barker and McICA, the Monte-Carlo
8041 ! Independent Column Approximation, for the representation of
8042 ! sub-grid cloud variability (i.e. cloud overlap).
8044 ! Interface: *spcvmc_sw* is called from *rrtmg_sw.F90* or rrtmg_sw.1col.F90*
8047 ! Adapted from two-stream model of H. Barker;
8048 ! Two-stream model options (selected with kmodts in rrtmg_sw_reftra.F90):
8049 ! 1: Eddington, 2: PIFM, Zdunkowski et al., 3: discret ordinates
8053 ! H. Barker Original
8054 ! 2003-12 J.-J.Morcrette Merge with RRTMG_SW
8055 ! 2003-10 MJIacono, AER Add adjustment for Earth/Sun distance
8056 ! 2003-11 MJIacono, AER Bug fix for use of PALBP and PALBD
8057 ! 2004-12 MJIacono, AER Bug fix to apply delta scaling to clear sky
8058 ! 2005-01 MJIacono, AER Code modified so that delta scaling is not done in
8059 ! cloudy profiles if routine cldprop is used; delta
8060 ! scaling can be applied by swithcing code below if
8061 ! cldprop is used; delta scaling can be applied by
8062 ! swithcing code below if cldprop is not used to get
8064 ! 2005-11 MJIacono, AER Modified to use McICA
8065 ! 2006-07 MJIacono, AER Uniform formatting for RRTMG
8066 ! 2007-08 MJIacono, AER se exponential lookup table for transmittance
8067 ! 2016-10 Sungghye Baek Revised Two Stream Approximaiton (TSA)
8075 ! pavel(nlayers) : layer pressure (hPa, mb)
8076 ! tavel(nlayers) : layer temperature (K)
8077 ! pz(0:nlayers) : level (interface) pressure (hPa, mb)
8078 ! tz(0:nlayers) : level temperatures (hPa, mb)
8079 ! tbound : surface temperature (K)
8080 ! wkl(mxmol,nlayers) : molecular amounts (mol/cm2)
8081 ! coldry(nlayers) : dry air column density (mol/cm2)
8083 ! adjflux(jpband) : Earth/Sun distance adjustment
8085 ! palbd(nbndsw) : surface albedo (diffuse)
8086 ! palbp(nbndsw) : surface albedo (direct)
8087 ! prmu0 : cosine of solar zenith angle
8088 ! pcldfmc(nlayers,ngptsw) : cloud fraction [mcica]
8089 ! ptaucmc(nlayers,ngptsw) : cloud optical depth [mcica]
8090 ! pasycmc(nlayers,ngptsw) : cloud asymmetry parameter [mcica]
8091 ! pomgcmc(nlayers,ngptsw) : cloud single scattering albedo [mcica]
8092 ! ptaormc(nlayers,ngptsw) : cloud optical depth, non-delta scaled [mcica]
8093 ! ptaua(nlayers,nbndsw) : aerosol optical depth
8094 ! pasya(nlayers,nbndsw) : aerosol asymmetry parameter
8095 ! pomga(nlayers,nbndsw) : aerosol single scattering albedo
8114 ! dtliq (ngptsw,nlayers) : delta-scaled liquid cloud optical depth
8115 ! dtice (ngptsw,nlayers) : delta-scaled ice cloud optical depth
8116 ! dtsno (ngptsw,nlayers) : delta-scaled snow cloud optical depth
8117 ! dwliq (ngptsw,nlayers) : delta-scaled liquid cloud single scattering albedo
8118 ! dwice (ngptsw,nlayers) : delta-scaled ice cloud single scattering albedo
8119 ! dwsno (ngptsw,nlayers) : delta-scaled snow cloud single scattering albedo
8120 ! daliq (ngptsw,nlayers) : delta-scaled liquid cloud asymmetry factor
8121 ! daice (ngptsw,nlayers) : delta-scaled ice cloud asymmetry factor
8122 ! dasno (ngptsw,nlayers) : delta-scaled snow cloud asymmetry factor
8127 ! pbbfddir(nlayers+1)
8128 ! pbbcddir(nlayers+1)
8131 ! puvcddir(nlayers+1)
8132 ! puvfddir(nlayers+1)
8135 ! pnicddir(nlayers+1)
8136 ! pnifddir(nlayers+1)
8137 !-------------------------------------------------------------------------------
8138 ! ------- Declarations ------
8140 ! ------- Input -------
8142 integer(kind=im), intent(in ) :: nlayers
8143 integer(kind=im), intent(in ) :: istart
8144 integer(kind=im), intent(in ) :: iend
8145 integer(kind=im), intent(in ) :: icpr
8146 integer(kind=im), intent(in ) :: iout
8147 integer(kind=im), intent(in ) :: laytrop
8148 integer(kind=im), intent(in ) :: layswtch
8149 integer(kind=im), intent(in ) :: laylow
8151 integer(kind=im), dimension(:), intent(in ) :: indfor
8152 integer(kind=im), dimension(:), intent(in ) :: indself
8153 integer(kind=im), dimension(:), intent(in ) :: jp
8154 integer(kind=im), dimension(:), intent(in ) :: jt
8155 integer(kind=im), dimension(:), intent(in ) :: jt1
8157 real(kind=rb), dimension(:), intent(in ) :: pavel
8158 real(kind=rb), dimension(:), intent(in ) :: tavel
8159 real(kind=rb), dimension(0:), intent(in ) :: pz
8160 real(kind=rb), dimension(0:), intent(in ) :: tz
8161 real(kind=rb), intent(in ) :: tbound
8162 real(kind=rb), dimension(:,:),intent(in ) :: wkl
8163 real(kind=rb), dimension(:), intent(in ) :: coldry
8164 real(kind=rb), dimension(:), intent(in ) :: colmol
8165 real(kind=rb), dimension(:), intent(in ) :: adjflux
8167 real(kind=rb), dimension(:), intent(in ) :: palbd
8168 real(kind=rb), dimension(:), intent(in ) :: palbp
8169 real(kind=rb), intent(in ) :: prmu0
8170 real(kind=rb), dimension(:,:), intent(in ) :: pcldfmc
8171 real(kind=rb), dimension(:,:), intent(in ) :: ptaucmc
8172 real(kind=rb), dimension(:,:), intent(in ) :: pasycmc
8173 real(kind=rb), dimension(:,:), intent(in ) :: pomgcmc
8174 real(kind=rb), dimension(:,:), intent(in ) :: ptaormc
8175 real(kind=rb), dimension(:,:), intent(in ) :: ptaua
8176 real(kind=rb), dimension(:,:), intent(in ) :: pasya
8177 real(kind=rb), dimension(:,:), intent(in ) :: pomga
8179 real(kind=rb), dimension(:), intent(in ) :: colh2o
8180 real(kind=rb), dimension(:), intent(in ) :: colco2
8181 real(kind=rb), dimension(:), intent(in ) :: colch4
8182 real(kind=rb), dimension(:), intent(in ) :: co2mult
8183 real(kind=rb), dimension(:), intent(in ) :: colo3
8184 real(kind=rb), dimension(:), intent(in ) :: colo2
8185 real(kind=rb), dimension(:), intent(in ) :: coln2o
8187 real(kind=rb), dimension(:), intent(in ) :: forfac
8188 real(kind=rb), dimension(:), intent(in ) :: forfrac
8189 real(kind=rb), dimension(:), intent(in ) :: selffac
8190 real(kind=rb), dimension(:), intent(in ) :: selffrac
8191 real(kind=rb), dimension(:), intent(in ) :: fac00
8192 real(kind=rb), dimension(:), intent(in ) :: fac01
8193 real(kind=rb), dimension(:), intent(in ) :: fac10
8194 real(kind=rb), dimension(:), intent(in ) :: fac11
8196 real(kind=rb), dimension(:,:), intent(in ) :: dtliq, dtice, dtsno
8197 real(kind=rb), dimension(:,:), intent(in ) :: dwliq, dwice, dwsno
8198 real(kind=rb), dimension(:,:), intent(in ) :: daliq, daice, dasno
8200 ! ------- Output -------
8201 ! All Dimensions: (nlayers+1)
8203 real(kind=rb), dimension(:), intent( out) :: pbbcd
8204 real(kind=rb), dimension(:), intent( out) :: pbbcu
8205 real(kind=rb), dimension(:), intent( out) :: pbbfd
8206 real(kind=rb), dimension(:), intent( out) :: pbbfu
8207 real(kind=rb), dimension(:), intent( out) :: pbbfddir
8208 real(kind=rb), dimension(:), intent( out) :: pbbcddir
8210 real(kind=rb), dimension(:), intent( out) :: puvcd
8211 real(kind=rb), dimension(:), intent( out) :: puvfd
8212 real(kind=rb), dimension(:), intent( out) :: puvcddir
8213 real(kind=rb), dimension(:), intent( out) :: puvfddir
8215 real(kind=rb), dimension(:), intent( out) :: pnicd
8216 real(kind=rb), dimension(:), intent( out) :: pnifd
8217 real(kind=rb), dimension(:), intent( out) :: pnicddir
8218 real(kind=rb), dimension(:), intent( out) :: pnifddir
8220 ! Output - inactive All Dimensions: (nlayers+1)
8221 ! real(kind=rb), intent(out) :: puvcu(:)
8222 ! real(kind=rb), intent(out) :: puvfu(:)
8223 ! real(kind=rb), intent(out) :: pnicu(:)
8224 ! real(kind=rb), intent(out) :: pnifu(:)
8225 ! real(kind=rb), intent(out) :: pvscd(:)
8226 ! real(kind=rb), intent(out) :: pvscu(:)
8227 ! real(kind=rb), intent(out) :: pvsfd(:)
8228 ! real(kind=rb), intent(out) :: pvsfu(:)
8230 ! ------- Local -------
8232 logical, dimension(nlayers) :: lrtchkclr,lrtchkcld
8234 integer(kind=im) :: klev
8235 integer(kind=im) :: ib1, ib2, ibm, igt, ikl, ikp, ikx
8236 integer(kind=im) :: iw, jb, jg, jl, jk
8237 ! integer(kind=im), parameter :: nuv = ??
8238 ! integer(kind=im), parameter :: nvs = ??
8239 integer(kind=im) :: itind
8241 real(kind=rb) :: tblind, ze1
8242 real(kind=rb) :: zclear, zcloud
8243 real(kind=rb), dimension(nlayers+1) :: zdbt, zdbt_nodel
8244 real(kind=rb), dimension(nlayers ) :: zgc, zgcc, zgco
8245 real(kind=rb), dimension(nlayers ) :: zomc, zomcc, zomco
8246 real(kind=rb), dimension(nlayers+1) :: zrdnd, zrdndc
8247 real(kind=rb), dimension(nlayers+1) :: zref, zrefc, zrefo
8248 real(kind=rb), dimension(nlayers+1) :: zrefd, zrefdc, zrefdo
8249 real(kind=rb), dimension(nlayers+1) :: zrup, zrupd
8250 real(kind=rb), dimension(nlayers+1) :: zrupc, zrupdc
8251 real(kind=rb), dimension(nlayers+1) :: zs1
8252 real(kind=rb), dimension(nlayers ) :: ztauc, ztauo
8253 real(kind=rb), dimension(nlayers+1) :: ztdn, ztdnd, ztdbt
8254 real(kind=rb), dimension(nlayers ) :: ztoc, ztor
8255 real(kind=rb), dimension(nlayers+1) :: ztra, ztrac, ztrao
8256 real(kind=rb), dimension(nlayers+1) :: ztrad, ztradc, ztrado
8257 real(kind=rb), dimension(nlayers+1) :: zdbtc, ztdbtc, zdbtc_nodel
8258 real(kind=rb), dimension(ngptsw ) :: zincflx
8259 real(kind=rb), dimension(nlayers+1) :: ztdbt_nodel, ztdbtc_nodel
8261 real(kind=rb) :: zdbtmc, zdbtmo, zf, zgw, zreflect
8262 real(kind=rb) :: zwf, tauorig, repclc
8263 ! real(kind=rb) :: zincflux ! inactive
8265 ! Arrays from rrtmg_sw_taumoln routines
8267 ! real(kind=rb) :: ztaug(nlayers,16), ztaur(nlayers,16)
8268 ! real(kind=rb) :: zsflxzen(16)
8269 real(kind=rb), dimension(nlayers,ngptsw) :: ztaug, ztaur
8270 real(kind=rb), dimension(ngptsw) :: zsflxzen
8272 ! Arrays from rrtmg_sw_vrtqdr routine
8274 real(kind=rb), dimension(nlayers+1,ngptsw) :: zcd, zcu, zfd, zfu
8277 ! real(kind=rb) :: zbbcd(nlayers+1), zbbcu(nlayers+1)
8278 ! real(kind=rb) :: zbbfd(nlayers+1), zbbfu(nlayers+1)
8279 ! real(kind=rb) :: zbbfddir(nlayers+1), zbbcddir(nlayers+1)
8281 real(kind=rb), dimension(nlayers) :: al1c, al2c, al3c
8282 real(kind=rb), dimension(nlayers) :: al1o, al2o, al3o
8284 real(kind=rb), dimension(nlayers) :: f_ray, f_aer
8286 real(kind=rb), dimension(nlayers) :: ts_ray, ts_aer
8287 real(kind=rb), dimension(nlayers) :: ts_liq, ts_ice, ts_sno
8288 real(kind=rb), dimension(nlayers) :: ta_ray, ta_gas, ta_aer(nlayers)
8289 real(kind=rb), dimension(nlayers) :: ta_liq, ta_ice, ta_sno
8290 real(kind=rb), dimension(nlayers) :: tt_ray, tt_aer
8292 real(kind=rb), dimension(nlayers) :: w_ray, w_aer
8293 real(kind=rb), dimension(nlayers) :: g_ray, g_aer
8295 real(kind=rb), dimension(nlayers) :: b0_ray, b0_aer
8296 real(kind=rb), dimension(nlayers) :: b0_liq, b0_ice, b0_sno
8298 real(kind=rb), dimension(nlayers) :: b0mu_ray, b0mu_aer
8299 real(kind=rb), dimension(nlayers) :: b0mu_liq, b0mu_ice, b0mu_sno
8301 real(kind=rb) :: ua_aer=2., ua_gas=2., ua_ray=2.
8302 real(kind=rb) :: ua_liq=2., ua_ice=2., ua_sno=2.
8304 real(kind=rb) :: us_aer=2., us_gas=2., us_ray=2.
8305 real(kind=rb) :: us_liq=2., us_ice=2., us_sno=2.
8308 logical :: kmodts_4 = .false.
8310 ! ------------------------------------------------------------------------------
8338 ! Calculate the optical depths for gaseous absorption and Rayleigh scattering
8340 call taumol_sw(klev, &
8341 colh2o, colco2, colch4, colo2, colo3, colmol, &
8342 laytrop, jp, jt, jt1, &
8343 fac00, fac01, fac10, fac11, &
8344 selffac, selffrac, indself, forfac, forfrac, indfor, &
8345 zsflxzen, ztaug, ztaur)
8347 ! Top of shortwave spectral band loop, jb = 16 -> 29; ibm = 1 -> 14
8353 ! Reinitialize g-point counter for each band if output for each band is
8356 if (iout.gt.0.and.ibm.ge.2) iw = ngs(ibm-1)
8365 ! Top of g-point interval loop within each band (iw is cumulative counter)
8370 ! Apply adjustment for correct Earth/Sun distance and zenith angle to incoming
8373 zincflx(iw) = adjflux(jb) * zsflxzen(iw) * prmu0
8374 ! zincflux = zincflux + adjflux(jb) * zsflxzen(iw) * prmu0 ! inactive
8376 ! Compute layer reflectances and transmittances for direct and diffuse sources,
8377 ! first clear then cloudy
8379 ! zrefc(jk) direct albedo for clear
8380 ! zrefo(jk) direct albedo for cloud
8381 ! zrefdc(jk) diffuse albedo for clear
8382 ! zrefdo(jk) diffuse albedo for cloud
8383 ! ztrac(jk) direct transmittance for clear
8384 ! ztrao(jk) direct transmittance for cloudy
8385 ! ztradc(jk) diffuse transmittance for clear
8386 ! ztrado(jk) diffuse transmittance for cloudy
8388 ! zref(jk) direct reflectance
8389 ! zrefd(jk) diffuse reflectance
8390 ! ztra(jk) direct transmittance
8391 ! ztrad(jk) diffuse transmittance
8393 ! zdbtc(jk) clear direct beam transmittance
8394 ! zdbto(jk) cloudy direct beam transmittance
8395 ! zdbt(jk) layer mean direct beam transmittance
8396 ! ztdbt(jk) total direct beam transmittance at levels
8403 ztdbtc_nodel(1)=1.0_rb
8407 zdbtc(klev+1) =0.0_rb
8408 ztrac(klev+1) =0.0_rb
8409 ztradc(klev+1)=0.0_rb
8410 zrefc(klev+1) =palbp(ibm)
8411 zrefdc(klev+1)=palbd(ibm)
8412 zrupc(klev+1) =palbp(ibm)
8413 zrupdc(klev+1)=palbd(ibm)
8419 ztdbt_nodel(1)=1.0_rb
8423 zdbt(klev+1) =0.0_rb
8424 ztra(klev+1) =0.0_rb
8425 ztrad(klev+1)=0.0_rb
8426 zref(klev+1) =palbp(ibm)
8427 zrefd(klev+1)=palbd(ibm)
8428 zrup(klev+1) =palbp(ibm)
8429 zrupd(klev+1)=palbd(ibm)
8435 ! Note: two-stream calculations proceed from top to bottom;
8436 ! RRTMG_SW quantities are given bottom to top and are reversed here
8440 ! Set logical flag to do REFTRA calculation
8441 ! Do REFTRA for all clear layers
8443 lrtchkclr(jk)=.true.
8445 ! Do REFTRA only for cloudy layers in profile, since already done for clear
8448 lrtchkcld(jk)=.false.
8449 lrtchkcld(jk)=(pcldfmc(ikl,iw) > repclc)
8451 ! Clear-sky optical parameters - this section inactive
8453 ! ztauc(jk) = ztaur(ikl,iw) + ztaug(ikl,iw)
8454 ! zomcc(jk) = ztaur(ikl,iw) / ztauc(jk)
8455 ! zgcc(jk) = 0.0001_rb
8456 ! Total sky optical parameters
8457 ! ztauo(jk) = ztaur(ikl,iw) + ztaug(ikl,iw) + ptaucmc(ikl,iw)
8458 ! zomco(jk) = ptaucmc(ikl,iw) * pomgcmc(ikl,iw) + ztaur(ikl,iw)
8459 ! zgco (jk) = (ptaucmc(ikl,iw) * pomgcmc(ikl,iw) * pasycmc(ikl,iw) + &
8460 ! ztaur(ikl,iw) * 0.0001_rb) / zomco(jk)
8461 ! zomco(jk) = zomco(jk) / ztauo(jk)
8463 ! Clear-sky optical parameters including aerosols
8465 if(ztaug(ikl,iw)<=0.) ztaug(ikl,iw)=0.
8466 ztauc(jk) = ztaur(ikl,iw) + ztaug(ikl,iw) + ptaua(ikl,ibm)
8467 zomcc(jk) = ztaur(ikl,iw) * 1.0_rb + ptaua(ikl,ibm) * pomga(ikl,ibm)
8468 zgcc(jk) = pasya(ikl,ibm) * pomga(ikl,ibm) * ptaua(ikl,ibm) / zomcc(jk)
8469 zomcc(jk) = zomcc(jk) / ztauc(jk)
8471 zf = pasya(ikl,ibm)*pasya(ikl,ibm)
8472 if(prmu0<0.5) zf = pasya(ikl,ibm)**1.5
8473 zwf = pomga(ikl,ibm)*zf
8476 g_aer(jk) = (pasya(ikl,ibm)-zf)/(1.e0-zf)
8477 tt_aer(jk) = (1.e0-zwf)*ptaua(ikl,ibm)
8478 w_aer(jk) = (pomga(ikl,ibm)-zwf)/(1.e0-zwf)
8480 ts_aer(jk) = tt_aer(jk)*w_aer(jk)
8481 ta_aer(jk) = tt_aer(jk)*(1.e0-w_aer(jk))
8482 b0mu_aer(jk) = 0.25e0*(2.e0-3.e0*g_aer(jk)*prmu0)
8483 ! b0_aer(jk) = 0.375e0*(1.e0-g_aer(jk))
8485 ts_liq(jk) = dtliq(iw,ikl)*dwliq(iw,ikl)
8486 ta_liq(jk) = dtliq(iw,ikl)*(1.e0-dwliq(iw,ikl))
8487 b0mu_liq(jk) = 0.25e0*(2.e0-3.e0*daliq(iw,ikl)*prmu0)
8488 b0_liq(jk) = 0.375e0*(1.e0-daliq(iw,ikl))
8490 ts_ice(jk) = dtice(iw,ikl)*dwice(iw,ikl)
8491 ta_ice(jk) = dtice(iw,ikl)*(1.e0-dwice(iw,ikl))
8492 b0mu_ice(jk) = 0.25e0*(2.e0-3.e0*daice(iw,ikl)*prmu0)
8493 b0_ice(jk) = 0.375e0*(1.e0-daice(iw,ikl))
8495 ts_sno(jk) = dtsno(iw,ikl)*dwsno(iw,ikl)
8496 ta_sno(jk) = dtsno(iw,ikl)*(1.e0-dwsno(iw,ikl))
8497 b0mu_sno(jk) = 0.25e0*(2.e0-3.e0*dasno(iw,ikl)*prmu0)
8498 b0_sno(jk) = 0.375e0*(1.e0-dasno(iw,ikl))
8502 b0mu_aer(jk) = 0.35e0*(2.e0-3.e0*g_aer(jk)*prmu0)
8503 elseif(prmu0<0.5)then
8504 b0mu_aer(jk) = 0.3e0*(2.e0-3.e0*g_aer(jk)*prmu0)
8505 elseif(prmu0>0.7)then
8506 b0mu_aer(jk) = 0.22e0*(2.e0-3.e0*g_aer(jk)*prmu0)
8508 b0_aer(jk) = 0.5e0*(1.e0-g_aer(jk))
8511 b0mu_liq(jk) = 0.3e0*(2.e0-3.e0*daliq(iw,ikl)*prmu0)
8512 elseif(prmu0<0.8)then
8513 b0mu_liq(jk) = 0.28e0*(2.e0-3.e0*daliq(iw,ikl)*prmu0)
8517 b0mu_ice(jk) = 0.3e0*(2.e0-3.e0*daice(iw,ikl)*prmu0)
8518 elseif(prmu0>0.9)then
8519 b0mu_ice(jk) = 0.18e0*(2.e0-3.e0*daice(iw,ikl)*prmu0)
8523 b0mu_sno(jk) = 0.3e0*(2.e0-3.e0*dasno(iw,ikl)*prmu0)
8527 ! Pre-delta-scaling clear and cloudy direct beam transmittance
8528 ! (must use 'orig', unscaled cloud OD)
8529 ! \/\/\/ This block of code is only needed for direct beam calculation
8531 zclear = 1.0_rb - pcldfmc(ikl,iw)
8532 zcloud = pcldfmc(ikl,iw)
8535 ! zdbtmc = exp(-ztauc(jk) / prmu0)
8537 ! Use exponential lookup table for transmittance, or expansion of
8538 ! exponential for low tau
8540 ze1 = ztauc(jk) / prmu0
8541 if (ze1 .le. od_lo) then
8542 zdbtmc = 1._rb - ze1 + 0.5_rb * ze1 * ze1
8544 tblind = ze1 / (bpade + ze1)
8545 itind = tblint * tblind + 0.5_rb
8546 zdbtmc = exp_tbl(itind)
8549 zdbtc_nodel(jk) = zdbtmc
8550 ztdbtc_nodel(jk+1) = zdbtc_nodel(jk) * ztdbtc_nodel(jk)
8554 tauorig = ztauc(jk) + ptaormc(ikl,iw)
8555 ! zdbtmo = exp(-tauorig / prmu0)
8557 ! Use exponential lookup table for transmittance, or expansion of
8558 ! exponential for low tau
8560 ze1 = tauorig / prmu0
8561 if (ze1 .le. od_lo) then
8562 zdbtmo = 1._rb - ze1 + 0.5_rb * ze1 * ze1
8564 tblind = ze1 / (bpade + ze1)
8565 itind = tblint * tblind + 0.5_rb
8566 zdbtmo = exp_tbl(itind)
8568 zdbt_nodel(jk) = zclear*zdbtmc + zcloud*zdbtmo
8569 ztdbt_nodel(jk+1) = zdbt_nodel(jk) * ztdbt_nodel(jk)
8571 ! /\/\/\ Above code only needed for direct beam calculation
8573 ! Delta scaling - clear
8575 ztauc(jk) = ztaur(ikl,iw) + ztaug(ikl,iw) + tt_aer(jk)
8576 zomcc(jk) = ztaur(ikl,iw) * 1.0_rb + tt_aer(jk) * w_aer(jk)
8577 zgcc(jk) = g_aer(jk) * w_aer(jk) * tt_aer(jk) / zomcc(jk)
8578 zomcc(jk) = zomcc(jk) / ztauc(jk)
8580 tt = 1.e0 / ztauc(jk)
8581 al1c(jk) = (ua_gas*ztaug(ikl,iw) &
8582 + ua_aer*ta_aer(jk) + us_ray*0.375e0*ztaur(ikl,iw) &
8583 + us_aer*b0_aer(jk)*ts_aer(jk)) * tt
8584 al2c(jk) = (us_ray*0.375e0*ztaur(ikl,iw) &
8585 + us_aer*b0_aer(jk)*ts_aer(jk)) * tt
8586 al3c(jk) = (0.5e0*ztaur(ikl,iw) + b0mu_aer(jk)*ts_aer(jk)) * tt
8588 ! Total sky optical parameters (cloud properties already delta-scaled)
8589 ! Use this code if cloud properties are derived in rrtmg_sw_cldprop
8591 if (icpr .ge. 1) then
8592 ztauo(jk) = ztauc(jk) + ptaucmc(ikl,iw)
8593 zomco(jk) = ztauc(jk) * zomcc(jk) + ptaucmc(ikl,iw) * pomgcmc(ikl,iw)
8594 zgco (jk) = (ptaucmc(ikl,iw) * pomgcmc(ikl,iw) * pasycmc(ikl,iw) + &
8595 ztauc(jk) * zomcc(jk) * zgcc(jk)) / zomco(jk)
8596 zomco(jk) = zomco(jk) / ztauo(jk)
8599 al1o(jk) = (ua_gas*ztaug(ikl,iw) + ua_aer*ta_aer(jk) &
8600 + ua_liq*ta_liq(jk) + ua_ice*ta_ice(jk) &
8601 + ua_sno*ta_sno(jk) &
8603 + us_ray*0.375e0*ztaur(ikl,iw) &
8604 + us_aer*b0_aer(jk)*ts_aer(jk) &
8605 + us_liq*b0_liq(jk)*ts_liq(jk) &
8606 + us_ice*b0_ice(jk)*ts_ice(jk) &
8607 + us_sno*b0_sno(jk)*ts_sno(jk)) * tt
8609 al2o(jk) = (us_ray*0.375e0*ztaur(ikl,iw) &
8610 + us_aer*b0_aer(jk)*ts_aer(jk) &
8611 + us_liq*b0_liq(jk)*ts_liq(jk) &
8612 + us_ice*b0_ice(jk)*ts_ice(jk) &
8613 + us_sno*b0_sno(jk)*ts_sno(jk)) * tt
8615 al3o(jk) = (0.5e0*ztaur(ikl,iw) + b0mu_aer(jk)*ts_aer(jk) &
8616 + b0mu_liq(jk)*ts_liq(jk) + b0mu_ice(jk)*ts_ice(jk) &
8617 + b0mu_sno(jk)*ts_sno(jk) ) * tt
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
8622 elseif (icpr .eq. 0) then
8623 ztauo(jk) = ztaur(ikl,iw) + ztaug(ikl,iw) + &
8624 ptaua(ikl,ibm) + ptaucmc(ikl,iw)
8625 zomco(jk) = ptaua(ikl,ibm) * pomga(ikl,ibm) + &
8626 ptaucmc(ikl,iw) * pomgcmc(ikl,iw) + &
8627 ztaur(ikl,iw) * 1.0_rb
8628 zgco (jk) = (ptaucmc(ikl,iw) * pomgcmc(ikl,iw) * pasycmc(ikl,iw) + &
8629 ptaua(ikl,ibm)*pomga(ikl,ibm)*pasya(ikl,ibm)) / zomco(jk)
8630 zomco(jk) = zomco(jk) / ztauo(jk)
8632 ! Delta scaling - clouds
8633 ! Use only if subroutine rrtmg_sw_cldprop is not used to get cloud properties
8634 ! and to apply delta scaling
8636 zf = zgco(jk) * zgco(jk)
8637 zwf = zomco(jk) * zf
8638 ztauo(jk) = (1._rb - zwf) * ztauo(jk)
8639 zomco(jk) = (zomco(jk) - zwf) / (1.0_rb - zwf)
8640 zgco (jk) = (zgco(jk) - zf) / (1.0_rb - zf)
8647 ! Clear sky reflectivities
8649 call reftra_sw (klev, &
8650 lrtchkclr, zgcc, prmu0, ztauc, zomcc, &
8652 zrefc, zrefdc, ztrac, ztradc)
8654 ! Total sky reflectivities
8656 call reftra_sw (klev, &
8657 lrtchkcld, zgco, prmu0, ztauo, zomco, &
8659 zrefo, zrefdo, ztrao, ztrado)
8663 ! Combine clear and cloudy contributions for total sky
8666 zclear = 1.0_rb - pcldfmc(ikl,iw)
8667 zcloud = pcldfmc(ikl,iw)
8669 zref(jk) = zclear*zrefc(jk) + zcloud*zrefo(jk)
8670 zrefd(jk) = zclear*zrefdc(jk) + zcloud*zrefdo(jk)
8671 ztra(jk) = zclear*ztrac(jk) + zcloud*ztrao(jk)
8672 ztrad(jk) = zclear*ztradc(jk) + zcloud*ztrado(jk)
8674 ! Direct beam transmittance
8677 ! zdbtmc = exp(-ztauc(jk) / prmu0)
8679 ! Use exponential lookup table for transmittance, or expansion of
8680 ! exponential for low tau
8682 ze1 = ztauc(jk) / prmu0
8683 if (ze1 .le. od_lo) then
8684 zdbtmc = 1._rb - ze1 + 0.5_rb * ze1 * ze1
8686 tblind = ze1 / (bpade + ze1)
8687 itind = tblint * tblind + 0.5_rb
8688 zdbtmc = exp_tbl(itind)
8692 ztdbtc(jk+1) = zdbtc(jk)*ztdbtc(jk)
8695 ! zdbtmo = exp(-ztauo(jk) / prmu0)
8696 ! Use exponential lookup table for transmittance, or expansion of
8697 ! exponential for low tau
8699 ze1 = ztauo(jk) / prmu0
8700 if (ze1 .le. od_lo) then
8701 zdbtmo = 1._rb - ze1 + 0.5_rb * ze1 * ze1
8703 tblind = ze1 / (bpade + ze1)
8704 itind = tblint * tblind + 0.5_rb
8705 zdbtmo = exp_tbl(itind)
8707 zdbt(jk) = zclear*zdbtmc + zcloud*zdbtmo
8708 ztdbt(jk+1) = zdbt(jk)*ztdbt(jk)
8711 ! Vertical quadrature for clear-sky fluxes
8713 call vrtqdr_sw(klev, iw, &
8714 zrefc, zrefdc, ztrac, ztradc, &
8715 zdbtc, zrdndc, zrupc, zrupdc, ztdbtc, &
8718 ! Vertical quadrature for cloudy fluxes
8720 call vrtqdr_sw(klev, iw, &
8721 zref, zrefd, ztra, ztrad, &
8722 zdbt, zrdnd, zrup, zrupd, ztdbt, &
8725 ! Upwelling and downwelling fluxes at levels
8726 ! Two-stream calculations go from top to bottom;
8727 ! layer indexing is reversed to go bottom to top for output arrays
8732 ! Accumulate spectral fluxes over bands - inactive
8733 ! zbbfu(ikl) = zbbfu(ikl) + zincflx(iw)*zfu(jk,iw)
8734 ! zbbfd(ikl) = zbbfd(ikl) + zincflx(iw)*zfd(jk,iw)
8735 ! zbbcu(ikl) = zbbcu(ikl) + zincflx(iw)*zcu(jk,iw)
8736 ! zbbcd(ikl) = zbbcd(ikl) + zincflx(iw)*zcd(jk,iw)
8737 ! zbbfddir(ikl) = zbbfddir(ikl) + zincflx(iw)*ztdbt_nodel(jk)
8738 ! zbbcddir(ikl) = zbbcddir(ikl) + zincflx(iw)*ztdbtc_nodel(jk)
8740 ! Accumulate spectral fluxes over whole spectrum
8742 pbbfu(ikl) = pbbfu(ikl) + zincflx(iw)*zfu(jk,iw)
8743 pbbfd(ikl) = pbbfd(ikl) + zincflx(iw)*zfd(jk,iw)
8744 pbbcu(ikl) = pbbcu(ikl) + zincflx(iw)*zcu(jk,iw)
8745 pbbcd(ikl) = pbbcd(ikl) + zincflx(iw)*zcd(jk,iw)
8746 pbbfddir(ikl) = pbbfddir(ikl) + zincflx(iw)*ztdbt_nodel(jk)
8747 pbbcddir(ikl) = pbbcddir(ikl) + zincflx(iw)*ztdbtc_nodel(jk)
8749 ! Accumulate direct fluxes for UV/visible bands
8751 if (ibm >= 10 .and. ibm <= 13) then
8752 puvcd(ikl) = puvcd(ikl) + zincflx(iw)*zcd(jk,iw)
8753 puvfd(ikl) = puvfd(ikl) + zincflx(iw)*zfd(jk,iw)
8754 puvcddir(ikl) = puvcddir(ikl) + zincflx(iw)*ztdbtc_nodel(jk)
8755 puvfddir(ikl) = puvfddir(ikl) + zincflx(iw)*ztdbt_nodel(jk)
8757 ! Accumulate direct fluxes for near-IR bands
8759 else if (ibm == 14 .or. ibm <= 9) then
8760 pnicd(ikl) = pnicd(ikl) + zincflx(iw)*zcd(jk,iw)
8761 pnifd(ikl) = pnifd(ikl) + zincflx(iw)*zfd(jk,iw)
8762 pnicddir(ikl) = pnicddir(ikl) + zincflx(iw)*ztdbtc_nodel(jk)
8763 pnifddir(ikl) = pnifddir(ikl) + zincflx(iw)*ztdbt_nodel(jk)
8767 ! End loop on jg, g-point interval
8771 ! End loop on jb, spectral band
8775 end subroutine spcvmc_sw
8776 !-------------------------------------------------------------------------------
8779 !-------------------------------------------------------------------------------
8780 end module rrtmg_sw_spcvmc_k
8781 !-------------------------------------------------------------------------------
8784 !-------------------------------------------------------------------------------
8785 module rrtmg_sw_rad_k
8786 !-------------------------------------------------------------------------------
8787 ! --------------------------------------------------------------------------
8789 ! | Copyright 2002-2008, Atmospheric & Environmental Research, Inc. (AER). |
8790 ! | This software may be used, copied, or redistributed as long as it is |
8791 ! | not sold and this copyright notice is reproduced on each copy made. |
8792 ! | This model is provided as is without any express or implied warranties. |
8793 ! | (http://www.rtweb.aer.com/) |
8795 ! --------------------------------------------------------------------------
8797 ! ****************************************************************************
8803 ! * a rapid radiative transfer model *
8804 ! * for the solar spectral region *
8805 ! * for application to general circulation models *
8808 ! * Atmospheric and Environmental Research, Inc. *
8809 ! * 131 Hartwell Avenue *
8810 ! * Lexington, MA 02421 *
8814 ! * Jennifer S. Delamere *
8815 ! * Michael J. Iacono *
8816 ! * Shepard A. Clough *
8823 ! * email: miacono@aer.com *
8824 ! * email: emlawer@aer.com *
8825 ! * email: jdelamer@aer.com *
8827 ! * The authors wish to acknowledge the contributions of the *
8828 ! * following people: Steven J. Taubman, Patrick D. Brown, *
8829 ! * Ronald E. Farren, Luke Chen, Robert Bergstrom. *
8831 ! ****************************************************************************
8833 ! --------- Modules ---------
8835 use parkind_k, only : im => kind_im, rb => kind_rb
8837 use rrtmg_sw_cldprmc_k, only: cldprmc_sw
8839 ! *** Move the required call to rrtmg_sw_ini below and the following
8840 ! use association to GCM initialization area ***
8841 ! use rrtmg_sw_init, only: rrtmg_sw_ini
8843 use rrtmg_sw_setcoef_k, only: setcoef_sw
8844 use rrtmg_sw_spcvmc_k, only: spcvmc_sw
8848 ! public interfaces/functions/subroutines
8850 public :: rrtmg_sw, inatm_sw, earth_sun
8853 !-------------------------------------------------------------------------------
8856 !-------------------------------------------------------------------------------
8857 ! Public subroutines
8858 !-------------------------------------------------------------------------------
8859 subroutine rrtmg_sw &
8860 ( ncol ,nlay ,icld , &
8861 play ,plev ,tlay ,tlev ,tsfc , &
8862 h2ovmr , o3vmr ,co2vmr ,ch4vmr ,n2ovmr ,o2vmr , &
8863 asdir ,asdif ,aldir ,aldif , &
8864 coszen ,adjes ,dyofyr ,scon , &
8865 inflgsw ,iceflgsw,liqflgsw,cldfmcl , &
8866 taucmcl ,ssacmcl ,asmcmcl ,fsfcmcl , &
8867 ciwpmcl ,clwpmcl ,reicmcl ,relqmcl , &
8869 tauaer ,ssaaer ,asmaer ,ecaer , &
8870 swuflx ,swdflx ,swhr ,swuflxc ,swdflxc ,swhrc, &
8871 visdir ,visdif ,nirdir ,nirdif &
8873 !-------------------------------------------------------------------------------
8875 ! ------- Description -------
8876 ! This program is the driver for RRTMG_SW, the AER SW radiation model for
8877 ! application to GCMs, that has been adapted from RRTM_SW for improved
8878 ! efficiency and to provide fractional cloudiness and cloud overlap
8879 ! capability using McICA.
8881 ! Note: The call to RRTMG_SW_INI should be moved to the GCM initialization
8882 ! area, since this has to be called only once.
8885 ! b) calls INATM_SW to read in the atmospheric profile;
8886 ! all layering in RRTMG is ordered from surface to toa.
8887 ! c) calls CLDPRMC_SW to set cloud optical depth for McICA based
8888 ! on input cloud properties
8889 ! d) calls SETCOEF_SW to calculate various quantities needed for
8890 ! the radiative transfer algorithm
8891 ! e) calls SPCVMC to call the two-stream model that in turn
8892 ! calls TAUMOL to calculate gaseous optical depths for each
8893 ! of the 16 spectral bands and to perform the radiative transfer
8894 ! using McICA, the Monte-Carlo Independent Column Approximation,
8895 ! to represent sub-grid scale cloud variability
8896 ! f) passes the calculated fluxes and cooling rates back to GCM
8898 ! Two modes of operation are possible:
8899 ! The mode is chosen by using either rrtmg_sw.nomcica.f90 (to not use
8900 ! McICA) or rrtmg_sw.f90 (to use McICA) to interface with a GCM.
8902 ! 1) Standard, single forward model calculation (imca = 0); this is
8903 ! valid only for clear sky or fully overcast clouds
8904 ! 2) Monte Carlo Independent Column Approximation (McICA, Pincus et al.,
8905 ! JC, 2003) method is applied to the forward model calculation (imca = 1)
8906 ! This method is valid for clear sky or partial cloud conditions.
8908 ! This call to RRTMG_SW must be preceeded by a call to the module
8909 ! mcica_subcol_gen_sw.f90 to run the McICA sub-column cloud generator,
8910 ! which will provide the cloud physical or cloud optical properties
8911 ! on the RRTMG quadrature point (ngptsw) dimension.
8913 ! Two methods of cloud property input are possible:
8914 ! Cloud properties can be input in one of two ways (controlled by input
8915 ! flags inflag, iceflag and liqflag; see text file rrtmg_sw_instructions
8916 ! and subroutine rrtmg_sw_cldprop.f90 for further details):
8918 ! 1) Input cloud fraction, cloud optical depth, single scattering albedo
8919 ! and asymmetry parameter directly (inflgsw = 0)
8920 ! 2) Input cloud fraction and cloud physical properties: ice fracion,
8921 ! ice and liquid particle sizes (inflgsw = 1 or 2);
8922 ! cloud optical properties are calculated by cldprop or cldprmc based
8923 ! on input settings of iceflgsw and liqflgsw
8925 ! Two methods of aerosol property input are possible:
8926 ! Aerosol properties can be input in one of two ways (controlled by input
8927 ! flag iaer, see text file rrtmg_sw_instructions for further details):
8929 ! 1) Input aerosol optical depth, single scattering albedo and asymmetry
8930 ! parameter directly by layer and spectral band (iaer=10)
8931 ! 2) Input aerosol optical depth and 0.55 micron directly by layer and use
8932 ! one or more of six ECMWF aerosol types (iaer=6)
8935 ! ------- Modifications -------
8937 ! This version of RRTMG_SW has been modified from RRTM_SW to use a reduced
8938 ! set of g-point intervals and a two-stream model for application to GCMs.
8940 !-- Original version (derived from RRTM_SW)
8942 !-- Conversion to F90 formatting; addition of 2-stream radiative transfer
8943 ! Feb 2003: J.-J. Morcrette, ECMWF
8944 !-- Additional modifications for GCM application
8945 ! Aug 2003: M. J. Iacono, AER Inc.
8946 !-- Total number of g-points reduced from 224 to 112. Original
8947 ! set of 224 can be restored by exchanging code in module parrrsw.f90
8948 ! and in file rrtmg_sw_init.f90.
8949 ! Apr 2004: M. J. Iacono, AER, Inc.
8950 !-- Modifications to include output for direct and diffuse
8951 ! downward fluxes. There are output as "true" fluxes without
8952 ! any delta scaling applied. Code can be commented to exclude
8953 ! this calculation in source file rrtmg_sw_spcvrt.f90.
8954 ! Jan 2005: E. J. Mlawer, M. J. Iacono, AER, Inc.
8955 !-- Revised to add McICA capability.
8956 ! Nov 2005: M. J. Iacono, AER, Inc.
8957 !-- Reformatted for consistency with rrtmg_lw.
8958 ! Feb 2007: M. J. Iacono, AER, Inc.
8959 !-- Modifications to formatting to use assumed-shape arrays.
8960 ! Aug 2007: M. J. Iacono, AER, Inc.
8963 ! ncol - Number of horizontal columns
8964 ! nlay - Number of model layers
8965 ! icld - Cloud overlap method
8966 ! 0: Clear only 1: Random 2: Maximum/random 3: Maximum
8967 ! play(ncol,nlay) - Layer pressures (hPa, mb)
8968 ! plev(ncol,nlay+1) - Interface pressures (hPa, mb)
8969 ! tlay(ncol,nlay) - Layer temperatures (K)
8970 ! tlev(ncol,nlay+1) - Interface temperatures (K)
8971 ! tsfc(ncol) - Surface temperature (K)
8972 ! h2ovmr(ncol,nlay) - H2O volume mixing ratio
8973 ! o3vmr(ncol,nlay) - O3 volume mixing ratio
8974 ! co2vmr(ncol,nlay) - co2 volume mixing ratio
8975 ! ch4vmr(ncol,nlay) - ch4 volume mixing ratio
8976 ! n2ovmr(ncol,nlay) - n2o volume mixing ratio
8977 ! o2vmr(ncol,nlay) - o2 volume mixing ratio
8978 ! asdir(ncol) - UV/vis surface albedo direct rad
8979 ! aldir(ncol) - Near-IR surface albedo direct rad
8980 ! asdif(ncol) - UV/vis surface albedo diffuse rad
8981 ! aldif(ncol) - Near-IR surface albedo diffuse rad
8982 ! dyofyr - Day of the year (used to get Earth/Sun distance if
8983 ! adjflx not provided)
8985 ! adjes - Flux adjustment for Earth/Sun distance
8986 ! coszen(ncol) - Cosine of solar zenith angle
8987 ! scon - Solar constant (W/m2)
8988 ! inflgsw - Flag for cloud optical properties
8989 ! iceflgsw - Flag for ice particle specification
8990 ! liqflgsw - Flag for liquid droplet specification
8992 ! cldfmcl(ngptsw,ncol,nlay) - Cloud fraction
8993 ! taucmcl(ngptsw,ncol,nlay) - In-cloud optical depth
8994 ! ssacmcl(ngptsw,ncol,nlay) - In-cloud single scattering albedo
8995 ! asmcmcl(ngptsw,ncol,nlay) - In-cloud asymmetry parameter
8996 ! fsfcmcl(ngptsw,ncol,nlay) - In-cloud forward scattering fraction
8997 ! ciwpmcl(ngptsw,ncol,nlay) - In-cloud water path (g/m2)
8998 ! clwpmcl(ngptsw,ncol,nlay) - In-cloud liquid water path (g/m2)
8999 ! cswpmcl(ngptsw,ncol,nlay) - In-cloud snow water path (g/m2)
9000 ! reicmcl(ncol,nlay) - Cloud ice effective radius (microns)
9002 ! specific definition of reicmcl depends on setting of iceflglw:
9003 ! iceflglw = 0: ice effective radius, r_ec, (Ebert and Curry, 1992),
9004 ! r_ec must be >= 10.0 microns
9005 ! iceflglw = 1: ice effective radius, r_ec, (Ebert and Curry, 1992),
9006 ! r_ec range is limited to 13.0 to 130.0 microns
9007 ! iceflglw = 2: ice effective radius, r_k, (Key, Streamer Ref. Manual, 1996)
9008 ! r_k range is limited to 5.0 to 131.0 microns
9009 ! iceflglw = 3: generalized effective size, dge, (Fu, 1996),
9010 ! dge range is limited to 5.0 to 140.0 microns
9011 ! [dge = 1.0315 * r_ec]
9013 ! relqmcl(ncol,nlay) - Cloud water drop effective radius (microns)
9014 ! resnmcl(ncol,nlay) - Cloud snow effective radius (microns)
9015 ! tauaer(ncol,nlay,nbndsw) - Aerosol optical depth (iaer=10 only)
9016 ! (non-delta scaled)
9017 ! ssaaer(ncol,nlay,nbndsw) - Aerosol Aerosol single scattering albedo
9018 ! (iaer=10 only) (non-delta scaled)
9019 ! asmaer(ncol,nlay,nbndsw) - Aerosol Aerosol asymmetry parameters
9020 ! (iaer=10 only) (non-delta scaled)
9021 ! ecaer(ncol,nlay,naerec) - Aerosol optical depth at 0.55 micron
9022 ! (iaer=6 only) (non-delta scaled)
9025 ! swuflx(ncol,nlay+1) - Total sky shortwave upward flux (W/m2)
9026 ! swdflx(ncol,nlay+1) - Total sky shortwave downward flux (W/m2)
9027 ! swhr(ncol,nlay) - Total sky shortwave radiative heating rate (K/d)
9028 ! swuflxc(ncol,nlay+1) - Clear sky shortwave upward flux (W/m2)
9029 ! swdflxc(ncol,nlay+1) - Clear sky shortwave downward flux (W/m2)
9030 ! swhrc(ncol,nlay) - Clear sky shortwave radiative heating rate (K/d)
9031 ! sibvisdir(ncol,nlay+1) - visible direct downward flux (W/m2)
9032 ! sibvisdif(ncol,nlay+1) - visible diffusion downward flux (W/m2)
9033 ! sibnirdir(ncol,nlay+1) - Near IR direct downward flux (W/m2)
9034 ! sibnirdif(ncol,nlay+1) - Near IR diffusion downward flux (W/m2)
9035 ! swdkdir(ncol,nlay) - Total shortwave downward direct flux (W/m2)
9036 ! swdkdif(ncol,nlay) - Total shortwave downward diffuse flux (W/m2)
9037 ! visdir(ncol) - Direct downward surface shortwave flux, UV/vis
9038 ! visdif(ncol) - Diffuse downward surface shortwave flux, UV/vis
9039 ! nirdir(ncol) - Direct downward surface shortwave flux, Near-IR
9040 ! nirdif(ncol) - Diffuse downward surface shortwave flux, Near-IR
9043 ! nlayers - total number of layers
9044 ! istart - beginning band of calculation
9045 ! iend - ending band of calculation
9046 ! icpr - cldprop/cldprmc use flag
9047 ! iout - output option flag (inactive)
9048 ! iaer - aerosol option flag
9049 ! idelm - delta-m scaling flag (inactive)
9050 ! isccos - instrumental cosine response flag (inactive)
9051 ! iplon - column loop index
9052 ! i - layer loop index ! jk
9053 ! ib - band loop index ! jsw
9055 ! k - layer loop index
9056 ! ims - value for changing mcica permute seed
9057 ! imca - flag for mcica [0=off, 1=on]
9058 ! zepsec, zepzen- epsilon
9059 ! zdpgcp - flux to heating conversion ratio
9061 ! pavel(nlay+1) - layer pressures (mb)
9062 ! tavel(nlay+1) - layer temperatures (K)
9063 ! pz(0:nlay+1) - level (interface) pressures (hPa, mb)
9064 ! tz(0:nlay+1) - level (interface) temperatures (K)
9065 ! tbound - surface temperature (K)
9066 ! pdp(nlay+1) - layer pressure thickness (hPa, mb)
9067 ! coldry(nlay+1) - dry air column amount
9068 ! wkl(mxmol,nlay+1)- molecular amounts (mol/cm-2)
9069 ! cossza - Cosine of solar zenith angle
9070 ! adjflux(jpband) - adjustment for current Earth/Sun distance
9071 ! solvar(jpband) - solar constant scaling factor from rrtmg_sw
9072 ! - default value of 1368.22 Wm-2 at 1 AU
9073 ! albdir(nbndsw) - surface albedo, direct ! zalbp
9074 ! albdif(nbndsw) - surface albedo, diffuse ! zalbd
9076 ! taua(nlay+1,nbndsw) - Aerosol optical depth
9077 ! ssaa(nlay+1,nbndsw) - Aerosol single scattering albedo
9078 ! asma(nlay+1,nbndsw) - Aerosol asymmetry parameter
9080 ! laytrop - tropopause layer index
9081 ! layswtch - tropopause layer index
9082 ! laylow - tropopause layer index
9087 ! colh2o(nlay+1) - column amount (h2o)
9088 ! colco2(nlay+1) - column amount (co2)
9089 ! colo3(nlay+1) - column amount (o3)
9090 ! coln2o(nlay+1) - column amount (n2o)
9091 ! colch4(nlay+1) - column amount (ch4)
9092 ! colo2(nlay+1) - column amount (o2)
9093 ! colmol(nlay+1) - column amount
9094 ! co2mult(nlay+1) - column amount
9096 ! ncbands - number of cloud spectral bands
9097 ! inflag - flag for cloud property method
9098 ! iceflag - flag for ice cloud properties
9099 ! liqflag - flag for liquid cloud properties
9101 ! cldfrac(nlay+1) - layer cloud fraction
9102 ! tauc(nlay+1) - in-cloud optical depth (non-delta scaled)
9103 ! ssac(nlay+1) - in-cloud single scattering albedo (non-delta scaled)
9104 ! asmc(nlay+1) - in-cloud asymmetry parameter (non-delta scaled)
9105 ! fsfc(nlay+1) - in-cloud forward scattering fraction (non-delta scaled)
9106 ! ciwp(nlay+1) - in-cloud ice water path
9107 ! clwp(nlay+1) - in-cloud liquid water path
9108 ! rei(nlay+1) - cloud ice particle size
9109 ! rel(nlay+1) - cloud liquid particle size
9111 ! taucloud(nlay+1,jpband) - in-cloud optical depth
9112 ! taucldorig(nlay+1,jpband)- in-cloud optical depth (non-delta scaled)
9113 ! ssacloud(nlay+1,jpband) - in-cloud single scattering albedo
9114 ! asmcloud(nlay+1,jpband) - in-cloud asymmetry parameter
9116 ! cldfmc(ngptsw,nlay+1) - cloud fraction [mcica]
9117 ! ciwpmc(ngptsw,nlay+1) - in-cloud ice water path [mcica]
9118 ! clwpmc(ngptsw,nlay+1) - in-cloud liquid water path [mcica]
9119 ! cswpmc(ngptsw,nlay+1) - in-cloud snow water path [mcica]
9120 ! relqmc(nlay+1) - liquid particle effective radius (microns)
9121 ! reicmc(nlay+1) - ice particle effective size (microns)
9122 ! resnmc(nlay+1) - snow particle effective size (microns)
9123 ! taucmc(ngptsw,nlay+1) - in-cloud optical depth [mcica]
9124 ! taormc(ngptsw,nlay+1) - unscaled in-cloud optical depth [mcica]
9125 ! ssacmc(ngptsw,nlay+1) - in-cloud single scattering albedo [mcica]
9126 ! asmcmc(ngptsw,nlay+1) - in-cloud asymmetry parameter [mcica]
9127 ! fsfcmc(ngptsw,nlay+1) - in-cloud forward scattering fraction [mcica]
9129 ! ztauc(nlay+1,nbndsw) - cloud optical depth
9130 ! ztaucorig(nlay+1,nbndsw) - unscaled cloud optical depth
9131 ! zasyc(nlay+1,nbndsw) - cloud asymmetry parameter
9132 ! (first moment of phase function)
9133 ! zomgc(nlay+1,nbndsw) - cloud single scattering albedo
9134 ! ztaua(nlay+1,nbndsw) - total aerosol optical depth
9135 ! zasya(nlay+1,nbndsw) - total aerosol asymmetry parameter
9136 ! zomga(nlay+1,nbndsw) - total aerosol single scattering albedo
9138 ! zcldfmc(nlay+1,ngptsw) -cloud fraction [mcica]
9139 ! ztaucmc(nlay+1,ngptsw) -cloud optical depth [mcica]
9140 ! ztaormc(nlay+1,ngptsw) -unscaled cloud optical depth [mcica]
9141 ! zasycmc(nlay+1,ngptsw) -cloud asymmetry parameter [mcica]
9142 ! zomgcmc(nlay+1,ngptsw) -cloud single scattering albedo [mcica]
9144 ! zbbfu(nlay+2) - temporary upward shortwave flux (w/m2)
9145 ! zbbfd(nlay+2) - temporary downward shortwave flux (w/m2)
9146 ! zbbcu(nlay+2) - temporary clear sky upward shortwave flux (w/m2)
9147 ! zbbcd(nlay+2) - temporary clear sky downward shortwave flux (w/m2)
9148 ! zbbfddir(nlay+2)- temporary downward direct shortwave flux (w/m2)
9149 ! zbbcddir(nlay+2)- temporary clear sky downward direct shortwave flux (w/m2)
9150 ! zuvfd(nlay+2) - temporary UV downward shortwave flux (w/m2)
9151 ! zuvcd(nlay+2) - temporary clear sky UV downward shortwave flux (w/m2)
9152 ! zuvfddir(nlay+2)- temporary UV downward direct shortwave flux (w/m2)
9153 ! zuvcddir(nlay+2)- temporary clear sky UV downward direct shortwave flux
9154 ! znifd(nlay+2) - temporary near-IR downward shortwave flux (w/m2)
9155 ! znicd(nlay+2) - temporary clear sky near-IR downward shortwave flux (w/m2)
9156 ! znifddir(nlay+2)- temporary near-IR downward direct shortwave flux (w/m2)
9157 ! znicddir(nlay+2)- temporary clear sky near-IR downward direct shortwave flux
9159 ! swnflx(nlay+2) - Total sky shortwave net flux (W/m2)
9160 ! swnflxc(nlay+2) - Clear sky shortwave net flux (W/m2)
9161 ! dirdflux(nlay+2) - Direct downward shortwave surface flux
9162 ! difdflux(nlay+2) - Diffuse downward shortwave surface flux
9163 ! uvdflx(nlay+2) - Total sky downward shortwave flux, UV/vis
9164 ! nidflx(nlay+2) - Total sky downward shortwave flux, near-IR
9165 ! dirdnuv(nlay+2) - Direct downward shortwave flux, UV/vis
9166 ! difdnuv(nlay+2) - Diffuse downward shortwave flux, UV/vis
9167 ! dirdnir(nlay+2) - Direct downward shortwave flux, near-IR
9168 ! difdnir(nlay+2) - Diffuse downward shortwave flux, near-IR
9170 ! zuvfu(nlay+2) - temporary upward UV shortwave flux (w/m2)
9171 ! zuvfd(nlay+2) - temporary downward UV shortwave flux (w/m2)
9172 ! zuvcu(nlay+2) - temporary clear sky upward UV shortwave flux (w/m2)
9173 ! zuvcd(nlay+2) - temporary clear sky downward UV shortwave flux (w/m2)
9174 ! zvsfu(nlay+2) - temporary upward visible shortwave flux (w/m2)
9175 ! zvsfd(nlay+2) - temporary downward visible shortwave flux (w/m2)
9176 ! zvscu(nlay+2) - temporary clear sky upward visible shortwave flux (w/m2)
9177 ! zvscd(nlay+2) - temporary clear sky downward visible shortwave flux (w/m2)
9178 ! znifu(nlay+2) - temporary upward near-IR shortwave flux (w/m2)
9179 ! znifd(nlay+2) - temporary downward near-IR shortwave flux (w/m2)
9180 ! znicu(nlay+2) - temporary clear sky upward near-IR shortwave flux (w/m2)
9181 ! znicd(nlay+2) - temporary clear sky downward near-IR shortwave flux (w/m2)
9183 !-------------------------------------------------------------------------------
9184 ! --------- Modules ---------
9186 use parrrsw_k, only : nbndsw, ngptsw, naerec, nstr, nmol, mxmol, &
9188 use rrsw_aer_k, only : rsrtaua, rsrpiza, rsrasya
9189 use rrsw_con_k, only : heatfac, oneminus, pi
9190 use rrsw_wvn_k, only : wavenum1, wavenum2
9192 ! ------- Declarations
9196 integer(kind=im), intent(in ) :: ncol
9197 integer(kind=im), intent(in ) :: nlay
9198 integer(kind=im), intent(inout) :: icld
9199 real(kind=rb), dimension(:,:), intent(in ) :: play
9200 real(kind=rb), dimension(:,:), intent(in ) :: plev
9201 real(kind=rb), dimension(:,:), intent(in ) :: tlay
9202 real(kind=rb), dimension(:,:), intent(in ) :: tlev
9203 real(kind=rb), dimension(:), intent(in ) :: tsfc
9204 real(kind=rb), dimension(:,:), intent(in ) :: h2ovmr
9205 real(kind=rb), dimension(:,:), intent(in ) :: o3vmr
9206 real(kind=rb), dimension(:,:), intent(in ) :: co2vmr
9207 real(kind=rb), dimension(:,:), intent(in ) :: ch4vmr
9208 real(kind=rb), dimension(:,:), intent(in ) :: n2ovmr
9209 real(kind=rb), dimension(:,:), intent(in ) :: o2vmr
9210 real(kind=rb), dimension(:), intent(in ) :: asdir
9211 real(kind=rb), dimension(:), intent(in ) :: aldir
9212 real(kind=rb), dimension(:), intent(in ) :: asdif
9213 real(kind=rb), dimension(:), intent(in ) :: aldif
9214 integer(kind=im), intent(in ) :: dyofyr
9215 real(kind=rb), intent(in ) :: adjes
9216 real(kind=rb), dimension(:), intent(in ) :: coszen
9217 real(kind=rb), intent(in ) :: scon
9218 integer(kind=im), intent(in ) :: inflgsw
9219 integer(kind=im), intent(in ) :: iceflgsw
9220 integer(kind=im), intent(in ) :: liqflgsw
9221 real(kind=rb), dimension(:,:,:), intent(in ) :: cldfmcl
9222 real(kind=rb), dimension(:,:,:), intent(in ) :: taucmcl
9223 real(kind=rb), dimension(:,:,:), intent(in ) :: ssacmcl
9224 real(kind=rb), dimension(:,:,:), intent(in ) :: asmcmcl
9225 real(kind=rb), dimension(:,:,:), intent(in ) :: fsfcmcl
9226 real(kind=rb), dimension(:,:,:), intent(in ) :: ciwpmcl
9227 real(kind=rb), dimension(:,:,:), intent(in ) :: clwpmcl
9228 real(kind=rb), dimension(:,:,:), intent(in ) :: cswpmcl
9229 real(kind=rb), dimension(:,:), intent(in ) :: reicmcl
9230 real(kind=rb), dimension(:,:), intent(in ) :: relqmcl
9231 real(kind=rb), dimension(:,:), intent(in ) :: resnmcl
9232 real(kind=rb), dimension(:,:,:), intent(in ) :: tauaer
9233 real(kind=rb), dimension(:,:,:), intent(in ) :: ssaaer
9234 real(kind=rb), dimension(:,:,:), intent(in ) :: asmaer
9235 real(kind=rb), dimension(:,:,:), intent(in ) :: ecaer
9237 ! ----- Output -----
9239 real(kind=rb), dimension(:,:), intent( out) :: swuflx
9240 real(kind=rb), dimension(:,:), intent( out) :: swdflx
9241 real(kind=rb), dimension(:,:), intent( out) :: swhr
9242 real(kind=rb), dimension(:,:), intent( out) :: swuflxc
9243 real(kind=rb), dimension(:,:), intent( out) :: swdflxc
9244 real(kind=rb), dimension(:,:), intent( out) :: swhrc
9245 real(kind=rb), dimension(:), intent( out) :: visdir
9246 real(kind=rb), dimension(:), intent( out) :: visdif
9247 real(kind=rb), dimension(:), intent( out) :: nirdir
9248 real(kind=rb), dimension(:), intent( out) :: nirdif
9254 integer(kind=im) :: nlayers
9255 integer(kind=im) :: istart
9256 integer(kind=im) :: iend
9257 integer(kind=im) :: icpr
9258 integer(kind=im) :: iout
9259 integer(kind=im) :: iaer
9260 integer(kind=im) :: idelm
9261 integer(kind=im) :: isccos
9262 integer(kind=im) :: iplon
9263 integer(kind=im) :: i
9264 integer(kind=im) :: ib
9265 integer(kind=im) :: ia, ig
9266 integer(kind=im) :: k
9267 integer(kind=im) :: ims
9268 integer(kind=im) :: imca
9269 real(kind=rb) :: zepsec, zepzen
9270 real(kind=rb) :: zdpgcp
9274 real(kind=rb), dimension(nlay+1) :: pavel
9275 real(kind=rb), dimension(nlay+1) :: tavel
9276 real(kind=rb), dimension(0:nlay+1) :: pz
9277 real(kind=rb), dimension(0:nlay+1) :: tz
9278 real(kind=rb) :: tbound
9279 real(kind=rb), dimension(nlay+1) :: pdp
9280 real(kind=rb), dimension(nlay+1) :: coldry
9281 real(kind=rb), dimension(mxmol,nlay+1) :: wkl
9283 ! real(kind=rb) :: earth_sun
9284 real(kind=rb) :: cossza
9285 real(kind=rb), dimension(jpband) :: adjflux
9286 real(kind=rb), dimension(jpband) :: solvar
9287 real(kind=rb), dimension(nbndsw) :: albdir
9288 real(kind=rb), dimension(nbndsw) :: albdif
9290 real(kind=rb), dimension(nlay+1,nbndsw) :: taua
9291 real(kind=rb), dimension(nlay+1,nbndsw) :: ssaa
9292 real(kind=rb), dimension(nlay+1,nbndsw) :: asma
9294 ! Atmosphere - setcoef
9296 integer(kind=im) :: laytrop
9297 integer(kind=im) :: layswtch
9298 integer(kind=im) :: laylow
9299 integer(kind=im), dimension(nlay+1) :: jp
9300 integer(kind=im), dimension(nlay+1) :: jt
9301 integer(kind=im), dimension(nlay+1) :: jt1
9303 real(kind=rb), dimension(nlay+1) :: colh2o
9304 real(kind=rb), dimension(nlay+1) :: colco2
9305 real(kind=rb), dimension(nlay+1) :: colo3
9306 real(kind=rb), dimension(nlay+1) :: coln2o
9307 real(kind=rb), dimension(nlay+1) :: colch4
9308 real(kind=rb), dimension(nlay+1) :: colo2
9309 real(kind=rb), dimension(nlay+1) :: colmol
9310 real(kind=rb), dimension(nlay+1) :: co2mult
9312 integer(kind=im), dimension(nlay+1) :: indself
9313 integer(kind=im), dimension(nlay+1) :: indfor
9314 real(kind=rb), dimension(nlay+1) :: selffac
9315 real(kind=rb), dimension(nlay+1) :: selffrac
9316 real(kind=rb), dimension(nlay+1) :: forfac
9317 real(kind=rb), dimension(nlay+1):: forfrac
9318 real(kind=rb), dimension(nlay+1) :: fac00, fac01, fac10, fac11
9320 ! Atmosphere/clouds - cldprop
9322 integer(kind=im) :: ncbands
9323 integer(kind=im) :: inflag
9324 integer(kind=im) :: iceflag
9325 integer(kind=im) :: liqflag
9327 ! real(kind=rb) :: cldfrac(nlay+1)
9328 ! real(kind=rb) :: tauc(nlay+1)
9329 ! real(kind=rb) :: ssac(nlay+1)
9330 ! real(kind=rb) :: asmc(nlay+1)
9331 ! real(kind=rb) :: fsfc(nlay+1)
9332 ! real(kind=rb) :: ciwp(nlay+1)
9333 ! real(kind=rb) :: clwp(nlay+1)
9334 ! real(kind=rb) :: rei(nlay+1)
9335 ! real(kind=rb) :: rel(nlay+1)
9337 ! real(kind=rb) :: taucloud(nlay+1,jpband)
9338 ! real(kind=rb) :: taucldorig(nlay+1,jpband)
9339 ! real(kind=rb) :: ssacloud(nlay+1,jpband)
9340 ! real(kind=rb) :: asmcloud(nlay+1,jpband)
9342 ! Atmosphere/clouds - cldprmc [mcica]
9344 real(kind=rb), dimension(ngptsw,nlay+1) :: cldfmc
9345 real(kind=rb), dimension(ngptsw,nlay+1) :: ciwpmc
9346 real(kind=rb), dimension(ngptsw,nlay+1) :: clwpmc
9347 real(kind=rb), dimension(ngptsw,nlay+1) :: cswpmc
9348 real(kind=rb), dimension(nlay+1) :: relqmc
9349 real(kind=rb), dimension(nlay+1) :: reicmc
9350 real(kind=rb), dimension(nlay+1) :: resnmc
9351 real(kind=rb), dimension(ngptsw,nlay+1) :: taucmc
9352 real(kind=rb), dimension(ngptsw,nlay+1) :: taormc
9353 real(kind=rb), dimension(ngptsw,nlay+1) :: ssacmc
9354 real(kind=rb), dimension(ngptsw,nlay+1) :: asmcmc
9355 real(kind=rb), dimension(ngptsw,nlay+1) :: fsfcmc
9356 real(kind=rb), dimension(ngptsw,nlay+1) :: dtliq
9357 real(kind=rb), dimension(ngptsw,nlay+1) :: dtice
9358 real(kind=rb), dimension(ngptsw,nlay+1) :: dtsno
9359 real(kind=rb), dimension(ngptsw,nlay+1) :: dwliq
9360 real(kind=rb), dimension(ngptsw,nlay+1) :: dwice
9361 real(kind=rb), dimension(ngptsw,nlay+1) :: dwsno
9362 real(kind=rb), dimension(ngptsw,nlay+1) :: daliq
9363 real(kind=rb), dimension(ngptsw,nlay+1) :: daice
9364 real(kind=rb), dimension(ngptsw,nlay+1) :: dasno
9366 ! Atmosphere/clouds/aerosol - spcvrt,spcvmc
9368 real(kind=rb), dimension(nlay+1,nbndsw) :: ztauc
9369 real(kind=rb), dimension(nlay+1,nbndsw) :: ztaucorig
9370 real(kind=rb), dimension(nlay+1,nbndsw) :: zasyc
9371 real(kind=rb), dimension(nlay+1,nbndsw) :: zomgc
9372 real(kind=rb), dimension(nlay+1,nbndsw) :: ztaua
9373 real(kind=rb), dimension(nlay+1,nbndsw) :: zasya
9374 real(kind=rb), dimension(nlay+1,nbndsw) :: zomga
9376 real(kind=rb), dimension(nlay+1,ngptsw) :: zcldfmc
9377 real(kind=rb), dimension(nlay+1,ngptsw) :: ztaucmc
9378 real(kind=rb), dimension(nlay+1,ngptsw) :: ztaormc
9379 real(kind=rb), dimension(nlay+1,ngptsw) :: zasycmc
9380 real(kind=rb), dimension(nlay+1,ngptsw) :: zomgcmc
9382 real(kind=rb), dimension(nlay+2) :: zbbfu
9383 real(kind=rb), dimension(nlay+2) :: zbbfd
9384 real(kind=rb), dimension(nlay+2) :: zbbcu
9385 real(kind=rb), dimension(nlay+2) :: zbbcd
9386 real(kind=rb), dimension(nlay+2) :: zbbfddir
9387 real(kind=rb), dimension(nlay+2) :: zbbcddir
9388 real(kind=rb), dimension(nlay+2) :: zuvfd
9389 real(kind=rb), dimension(nlay+2) :: zuvcd
9390 real(kind=rb), dimension(nlay+2) :: zuvfddir
9391 real(kind=rb), dimension(nlay+2) :: zuvcddir
9392 real(kind=rb), dimension(nlay+2) :: znifd
9393 real(kind=rb), dimension(nlay+2) :: znicd
9394 real(kind=rb), dimension(nlay+2) :: znifddir
9395 real(kind=rb), dimension(nlay+2) :: znicddir
9397 ! Optional output fields
9399 real(kind=rb), dimension(nlay+2) :: swnflx
9400 real(kind=rb), dimension(nlay+2) :: swnflxc
9401 real(kind=rb), dimension(nlay+2) :: dirdflux
9402 real(kind=rb), dimension(nlay+2) :: difdflux
9403 real(kind=rb), dimension(nlay+2) :: uvdflx
9404 real(kind=rb), dimension(nlay+2) :: nidflx
9405 real(kind=rb), dimension(nlay+2) :: dirdnuv
9406 real(kind=rb), dimension(nlay+2) :: difdnuv
9407 real(kind=rb), dimension(nlay+2) :: dirdnir
9408 real(kind=rb), dimension(nlay+2) :: difdnir
9412 ! real(kind=rb) :: zuvfu(nlay+2)
9413 ! real(kind=rb) :: zuvfd(nlay+2)
9414 ! real(kind=rb) :: zuvcu(nlay+2)
9415 ! real(kind=rb) :: zuvcd(nlay+2)
9416 ! real(kind=rb) :: zvsfu(nlay+2)
9417 ! real(kind=rb) :: zvsfd(nlay+2)
9418 ! real(kind=rb) :: zvscu(nlay+2)
9419 ! real(kind=rb) :: zvscd(nlay+2)
9420 ! real(kind=rb) :: znifu(nlay+2)
9421 ! real(kind=rb) :: znifd(nlay+2)
9422 ! real(kind=rb) :: znicu(nlay+2)
9423 ! real(kind=rb) :: znicd(nlay+2)
9430 oneminus = 1.0_rb - zepsec
9431 pi = 2._rb * asin(1._rb)
9438 ! In a GCM with or without McICA, set nlon to the longitude dimension
9440 ! Set imca to select calculation type:
9441 ! imca = 0, use standard forward model calculation (clear and overcast only)
9442 ! imca = 1, use McICA for Monte Carlo treatment of sub-grid cloud variability
9443 ! (clear, overcast or partial cloud conditions)
9445 ! *** This version uses McICA (imca = 1) ***
9447 ! Set icld to select of clear or cloud calculation and cloud
9448 ! overlap method (read by subroutine readprof from input file INPUT_RRTM):
9449 ! icld = 0, clear only
9450 ! icld = 1, with clouds using random cloud overlap (McICA only)
9451 ! icld = 2, with clouds using maximum/random cloud overlap (McICA only)
9452 ! icld = 3, with clouds using maximum cloud overlap (McICA only)
9453 if (icld.lt.0.or.icld.gt.3) icld = 2
9455 ! Set iaer to select aerosol option
9456 ! iaer = 0, no aerosols
9457 ! iaer = 6, use six ECMWF aerosol types
9458 ! input aerosol optical depth at 0.55 microns for each
9459 ! aerosol type (ecaer)
9460 ! iaer = 10, input total aerosol optical depth, single scattering albedo
9461 ! and asymmetry parameter (tauaer, ssaaer, asmaer) directly
9464 ! Call model and data initialization, compute lookup tables, perform
9465 ! reduction of g-points from 224 to 112 for input absorption
9466 ! coefficient data and other arrays.
9468 ! In a GCM this call should be placed in the model initialization
9469 ! area, since this has to be called only once.
9470 ! call rrtmg_sw_ini(cpdair)
9472 ! This is the main longitude/column loop in RRTMG.
9473 ! Modify to loop over all columns (nlon) or over daylight columns
9476 if(coszen(iplon).gt.0.0)then
9478 ! Prepare atmosphere profile from GCM for use in RRTMG, and define
9479 ! other input parameters
9481 call inatm_sw (iplon, nlay, icld, iaer, &
9482 play, plev, tlay, tlev, tsfc, h2ovmr, &
9483 o3vmr, co2vmr, ch4vmr, n2ovmr, o2vmr, &
9484 adjes, dyofyr, scon, inflgsw, iceflgsw, liqflgsw, &
9485 cldfmcl, taucmcl, ssacmcl, asmcmcl, fsfcmcl, &
9486 ciwpmcl, clwpmcl, reicmcl, relqmcl, &
9488 tauaer, ssaaer, asmaer, &
9489 nlayers, pavel, pz, pdp, tavel, tz, tbound, coldry, wkl, &
9490 adjflux, solvar, inflag, iceflag, liqflag, cldfmc, taucmc, &
9491 ssacmc, asmcmc, fsfcmc, &
9492 ciwpmc, clwpmc, reicmc, relqmc, &
9496 ! For cloudy atmosphere, use cldprop to set cloud optical properties based on
9497 ! input cloud physical properties. Select method based on choices described
9498 ! in cldprop. Cloud fraction, water path, liquid droplet and ice particle
9499 ! effective radius must be passed in cldprop. Cloud fraction and cloud
9500 ! optical properties are transferred to rrtmg_sw arrays in cldprop.
9502 dtliq=0._rb ; dtice=0._rb ; dtsno=0._rb
9503 dwliq=1._rb ; dwice=1._rb ; dwsno=1._rb
9504 daliq=0._rb ; daice=0._rb ; dasno=0._rb
9505 call cldprmc_sw(nlayers, inflag, iceflag, liqflag, cldfmc, &
9506 ciwpmc, clwpmc, reicmc, relqmc, &
9508 dtliq, dtice, dtsno, dwliq, dwice, dwsno, &
9509 daliq, daice, dasno, &
9510 taormc, taucmc, ssacmc, asmcmc, fsfcmc)
9513 ! Calculate coefficients for the temperature and pressure dependence of the
9514 ! molecular absorption coefficients by interpolating data from stored
9515 ! reference atmospheres.
9517 call setcoef_sw(nlayers, pavel, tavel, pz, tz, tbound, coldry, wkl, &
9518 laytrop, layswtch, laylow, jp, jt, jt1, &
9519 co2mult, colch4, colco2, colh2o, colmol, coln2o, &
9520 colo2, colo3, fac00, fac01, fac10, fac11, &
9521 selffac, selffrac, indself, forfac, forfrac, indfor)
9523 ! Cosine of the solar zenith angle
9524 ! Prevent using value of zero; ideally,
9525 ! SW model is not called from host model when sun
9528 cossza = coszen(iplon)
9529 if (cossza .le. zepzen) cossza = zepzen
9531 ! Transfer albedo, cloud and aerosol properties into arrays for
9532 ! 2-stream radiative transfer
9535 ! Near-IR bands 16-24 and 29 (1-9 and 14), 820-16000 cm-1, 0.625-12.195 microns
9538 albdir(ib) = aldir(iplon)
9539 albdif(ib) = aldif(iplon)
9541 albdir(nbndsw) = aldir(iplon)
9542 albdif(nbndsw) = aldif(iplon)
9544 ! UV/visible bands 25-28 (10-13), 16000-50000 cm-1, 0.200-0.625 micron
9547 albdir(ib) = asdir(iplon)
9548 albdif(ib) = asdif(iplon)
9554 zcldfmc(:,:) = 0._rb
9555 ztaucmc(:,:) = 0._rb
9556 ztaormc(:,:) = 0._rb
9557 zasycmc(:,:) = 0._rb
9558 zomgcmc(:,:) = 1._rb
9559 elseif (icld.ge.1) then
9562 zcldfmc(i,ig) = cldfmc(ig,i)
9563 ztaucmc(i,ig) = taucmc(ig,i)
9564 ztaormc(i,ig) = taormc(ig,i)
9565 zasycmc(i,ig) = asmcmc(ig,i)
9566 zomgcmc(i,ig) = ssacmc(ig,i)
9572 ! IAER = 0: no aerosols
9579 ! IAER = 6: Use ECMWF six aerosol types. See rrsw_aer.f90 for details.
9580 ! Input aerosol optical thickness at 0.55 micron for each aerosol type (ecaer),
9581 ! or set manually here for each aerosol and layer.
9583 elseif(iaer.eq.6) then
9586 ! ecaer(iplon,i,ia) = 1.0e-15_rb
9595 ztaua(i,ib) = ztaua(i,ib)+rsrtaua(ib,ia)*ecaer(iplon,i,ia)
9596 zomga(i,ib) = zomga(i,ib)+rsrtaua(ib,ia)*ecaer(iplon,i,ia)* &
9598 zasya(i,ib) = zasya(i,ib)+rsrtaua(ib,ia)*ecaer(iplon,i,ia)* &
9599 rsrpiza(ib,ia) * rsrasya(ib,ia)
9601 if(zomga(i,ib).ne.0._rb) then
9602 zasya(i,ib) = zasya(i,ib)/zomga(i,ib)
9604 if(ztaua(i,ib).ne.0._rb) then
9605 zomga(i,ib) = zomga(i,ib)/ztaua(i,ib)
9610 ! IAER=10: Direct specification of aerosol optical properties from GCM
9612 elseif(iaer.eq.10) then
9615 ztaua(i,ib) = taua(i,ib)
9616 zasya(i,ib) = asma(i,ib)
9617 zomga(i,ib) = ssaa(i,ib)
9622 ! Call the 2-stream radiation transfer model
9642 (nlayers, istart, iend, icpr, iout, &
9643 pavel, tavel, pz, tz, tbound, albdif, albdir, &
9644 zcldfmc, ztaucmc, zasycmc, zomgcmc, ztaormc, &
9645 ztaua, zasya, zomga, cossza, coldry, wkl, adjflux, &
9646 laytrop, layswtch, laylow, jp, jt, jt1, &
9647 co2mult, colch4, colco2, colh2o, colmol, coln2o, colo2, colo3, &
9648 fac00, fac01, fac10, fac11, &
9649 selffac, selffrac, indself, forfac, forfrac, indfor, &
9650 dtliq,dtice,dtsno,dwliq,dwice,dwsno,daliq,daice,dasno, &
9651 zbbfd, zbbfu, zbbcd, zbbcu, zuvfd, zuvcd, znifd, znicd, &
9652 zbbfddir, zbbcddir, zuvfddir, zuvcddir, znifddir, znicddir)
9654 ! Transfer up and down, clear and total sky fluxes to output arrays.
9655 ! Vertical indexing goes from bottom to top; reverse here for GCM if necessary.
9658 swuflxc(iplon,i) = zbbcu(i)
9659 swdflxc(iplon,i) = zbbcd(i)
9660 swuflx(iplon,i) = zbbfu(i)
9661 swdflx(iplon,i) = zbbfd(i)
9662 uvdflx(i) = zuvfd(i)
9663 nidflx(i) = znifd(i)
9665 ! Direct/diffuse fluxes
9667 dirdflux(i) = zbbfddir(i)
9668 difdflux(i) = swdflx(iplon,i) - dirdflux(i)
9670 ! UV/visible direct/diffuse fluxes
9672 dirdnuv(i) = zuvfddir(i)
9673 difdnuv(i) = zuvfd(i) - dirdnuv(i)
9675 ! Near-IR direct/diffuse fluxes
9677 dirdnir(i) = znifddir(i)
9678 difdnir(i) = znifd(i) - dirdnir(i)
9681 ! Total and clear sky net fluxes
9684 swnflxc(i) = swdflxc(iplon,i) - swuflxc(iplon,i)
9685 swnflx(i) = swdflx(iplon,i) - swuflx(iplon,i)
9688 ! Total and clear sky heating rates
9691 zdpgcp = heatfac / pdp(i)
9692 swhrc(iplon,i) = (swnflxc(i+1) - swnflxc(i)) * zdpgcp
9693 swhr(iplon,i) = (swnflx(i+1) - swnflx(i)) * zdpgcp
9695 swhrc(iplon,nlayers) = 0._rb
9696 swhr(iplon,nlayers) = 0._rb
9698 ! End longitude loop
9703 end subroutine rrtmg_sw
9704 !-------------------------------------------------------------------------------
9707 !-------------------------------------------------------------------------------
9708 real(kind=rb) function earth_sun(idn)
9709 !-------------------------------------------------------------------------------
9712 ! Function to calculate the correction factor of Earth's orbit
9713 ! for current day of the year
9715 ! idn : Day of the year
9716 ! earth_sun : square of the ratio of mean to actual Earth-Sun distance
9718 !-------------------------------------------------------------------------------
9719 ! ------- Modules -------
9721 use rrsw_con_k, only : pi
9723 integer(kind=im), intent(in) :: idn
9724 real(kind=rb) :: gamma
9725 !-------------------------------------------------------------------------------
9726 gamma = 2._rb*pi*(idn-1)/365._rb
9728 ! Use Iqbal's equation 1.2.1
9730 earth_sun = 1.000110_rb+.034221_rb*cos(gamma) + &
9731 .001289_rb*sin(gamma) + &
9732 .000719_rb*cos(2._rb*gamma)+.000077_rb*sin(2._rb*gamma)
9734 end function earth_sun
9735 !-------------------------------------------------------------------------------
9738 !-------------------------------------------------------------------------------
9739 subroutine inatm_sw (iplon, nlay, icld, iaer, &
9740 play, plev, tlay, tlev, tsfc, h2ovmr, &
9741 o3vmr, co2vmr, ch4vmr, n2ovmr, o2vmr, &
9742 adjes, dyofyr, scon, inflgsw, iceflgsw, liqflgsw, &
9743 cldfmcl, taucmcl, ssacmcl, asmcmcl, fsfcmcl, &
9744 ciwpmcl, clwpmcl, reicmcl, relqmcl, &
9746 tauaer, ssaaer, asmaer, &
9747 nlayers, pavel, pz, pdp, tavel, tz, tbound, coldry, wkl, &
9748 adjflux, solvar, inflag, iceflag, liqflag, cldfmc, taucmc, &
9749 ssacmc, asmcmc, fsfcmc, &
9750 ciwpmc, clwpmc, reicmc, relqmc, &
9753 !-------------------------------------------------------------------------------
9756 ! Input atmospheric profile from GCM, and prepare it for use in RRTMG_SW.
9757 ! Set other RRTMG_SW input parameters.
9762 ! iplon - column loop index
9763 ! nlay - number of model layers
9764 ! icld - clear/cloud and cloud overlap flag
9765 ! iaer - aerosol option flag
9766 ! play(ncol,nlay) - Layer pressures (hPa, mb)
9767 ! plev(ncol,nlay+1) - Interface pressures (hPa, mb)
9768 ! tlay(ncol,nlay) - Layer temperatures (K)
9769 ! tlev(ncol,nlay+1) - Interface temperatures (K)
9770 ! tsfc(ncol) - Surface temperature (K)
9771 ! h2ovmr(ncol,nlay) - H2O volume mixing ratio
9772 ! o3vmr(ncol,nlay) - o3 volume mixing ratio
9773 ! co2vmr(ncol,nlay) - co2 volume mixing ratio
9774 ! ch4vmr(ncol,nlay) - ch4 volume mixing ratio
9775 ! n2ovmr(ncol,nlay) - n2o volume mixing ratio
9776 ! o2vmr(ncol,nlay) - o2 volume mixing ratio
9778 ! dyofyr - Day of the year (used to get Earth/Sun distance
9779 ! if adjflx not provided)
9780 ! adjes - Flux adjustment for Earth/Sun distance
9781 ! scon - Solar constant (W/m2)
9783 ! inflgsw - Flag for cloud optical properties
9784 ! iceflgsw - Flag for ice particle specification
9785 ! liqflgsw - Flag for liquid droplet specification
9787 ! cldfmcl(ngptsw,ncol,nlay) - cloud fraction
9788 ! taucmcl(ngptsw,ncol,nlay) - In-cloud optical depth (optional)
9789 ! ssacmcl(ngptsw,ncol,nlay) - In-cloud single scattering albedo (optional)
9790 ! asmcmcl(ngptsw,ncol,nlay) - In-cloud asymmetry parameter (optional)
9791 ! fsfcmcl(ngptsw,ncol,nlay) - In-cloud forward scattering fraction (optional)
9792 ! ciwpmcl(ngptsw,ncol,nlay) - In-cloud ice water path (g/m2)
9793 ! clwpmcl(ngptsw,ncol,nlay) - In-cloud liquid water path (g/m2)
9794 ! cswpmcl(ngptsw,ncol,nlay) - In-cloud snow water path (g/m2)
9795 ! reicmcl(ncol,nlay) - Cloud ice effective size (microns)
9796 ! relqmcl(ncol,nlay) - Cloud water drop effective radius (microns)
9797 ! resnmcl(ncol,nlay) - Cloud snow effective radius (microns)
9799 ! tauaer(ncol,nlay,nbndsw) - Aerosol optical depth
9800 ! ssaaer(ncol,nlay,nbndsw) - Aerosol single scattering albedo
9801 ! asmaer(ncol,nlay,nbndsw) - Aerosol asymmetry parameters
9803 ! nlayers - number of layers
9804 ! pavel(nlay) - layer pressures (mb)
9805 ! tavel(nlay) layer temperatures (K)
9806 ! pz(0:) - level (interface) pressures (hPa, mb)
9807 ! tz(0:) - level (interface) temperatures (K)
9808 ! tbound - surface temperature(K)
9809 ! pdp(nlay) - layer pressure thickness (hPa, mb)
9810 ! coldry(nlay) - dry air column density (mol/cm2)
9811 ! wkl(mxmol,nlay) - molecular amounts (mol/cm-2)
9812 ! adjflux(jpband) - adjustment for current Earth/Sun distance
9813 ! solvar(jpband) - solar constant scaling factor from rrtmg_sw
9814 ! default value of 1368.22 Wm-2 at 1 AU
9815 ! taua(nlay,nbndsw) - Aerosol optical depth
9816 ! ssaa(nlay,nbndsw) - Aerosol single scattering albedo
9817 ! asma(nlay,nbndsw) - Aerosol asymmtry parameter
9819 ! inflag - flag for cloud property method
9820 ! iceflag - flag for ice cloud properties
9821 ! liqflag - flag for liquid cloud properties
9823 ! cldfmc(ngptsw,nlay) - layer cloud fraction
9824 ! taucmc(ngptsw,nlay) - in-cloud optical depth (non-delta scaled)
9825 ! ssacmc(ngptsw,nlay) - in-cloud single scattering albedo (non-delta scaled)
9826 ! asmcmc(ngptsw,nlay) - in-cloud asymmetry parameter (non-delta scaled)
9827 ! fsfcmc(ngptsw,nlay) - in-cloud forward scattering fraction
9828 ! (non-delta scaled)
9829 ! ciwpmc(ngptsw,nlay) - in-cloud ice water path
9830 ! clwpmc(ngptsw,nlay) - in-cloud liquid water path
9831 ! cswpmc(ngptsw,nlay) - in-cloud snow water path
9832 ! relqmc(nlay) - liquid particle effective radius (microns)
9833 ! reicmc(nlay) - ice particle effective radius (microns)
9834 ! rescmc(nlay) - snow particle effective radius (microns)
9837 ! amd - Effective molecular weight of dry air (g/mol)
9838 ! amw - Molecular weight of water vapor (g/mol)
9839 ! amc - Molecular weight of carbon dioxide (g/mol)
9840 ! amo - Molecular weight of ozone (g/mol)
9841 ! amo2 - Molecular weight of oxygen (g/mol)
9842 ! amch4 - Molecular weight of methane (g/mol)
9843 ! amn2o - Molecular weight of nitrous oxide (g/mol)
9844 ! amdw - Molecular weight of dry air / water vapor
9845 ! amdc - Molecular weight of dry air / carbon dioxide
9846 ! amdo - Molecular weight of dry air / ozone
9847 ! amdm - Molecular weight of dry air / methane
9848 ! amdn - Molecular weight of dry air / nitrous oxide
9849 ! amdo2 - Molecular weight of dry air / oxygen
9850 ! sbc - Stefan-Boltzmann constant (W/m2K4)
9851 ! isp, l, ix, n, imol, ib, ig - Loop indices
9852 ! adjflx - flux adjustment for Earth/Sun distance
9853 ! earth_sun - function for Earth/Sun distance adjustment
9855 !-------------------------------------------------------------------------------
9856 use parrrsw_k, only : nbndsw, ngptsw, nstr, nmol, mxmol, &
9857 jpband, jpb1, jpb2, rrsw_scon
9858 use rrsw_con_k, only : heatfac, oneminus, pi, grav, avogad
9859 use rrsw_wvn_k, only : ng, nspa, nspb, wavenum1, wavenum2, delwave
9861 ! ------- Declarations -------
9864 integer(kind=im), intent(in ) :: iplon
9865 integer(kind=im), intent(in ) :: nlay
9866 integer(kind=im), intent(in ) :: icld
9867 integer(kind=im), intent(in ) :: iaer
9868 real(kind=rb), dimension(:,:), intent(in ) :: play
9869 real(kind=rb), dimension(:,:), intent(in ) :: plev
9870 real(kind=rb), dimension(:,:), intent(in ) :: tlay
9871 real(kind=rb), dimension(:,:), intent(in ) :: tlev
9872 real(kind=rb), dimension(:), intent(in ) :: tsfc
9873 real(kind=rb), dimension(:,:), intent(in ) :: h2ovmr
9874 real(kind=rb), dimension(:,:), intent(in ) :: o3vmr
9875 real(kind=rb), dimension(:,:), intent(in ) :: co2vmr
9876 real(kind=rb), dimension(:,:), intent(in ) :: ch4vmr
9877 real(kind=rb), dimension(:,:), intent(in ) :: n2ovmr
9878 real(kind=rb), dimension(:,:), intent(in ) :: o2vmr
9879 integer(kind=im), intent(in ) :: dyofyr
9880 real(kind=rb), intent(in ) :: adjes
9881 real(kind=rb), intent(in ) :: scon
9883 integer(kind=im), intent(in ) :: inflgsw
9884 integer(kind=im), intent(in ) :: iceflgsw
9885 integer(kind=im), intent(in ) :: liqflgsw
9887 real(kind=rb), dimension(:,:,:), intent(in ) :: cldfmcl
9888 real(kind=rb), dimension(:,:,:), intent(in ) :: taucmcl
9889 real(kind=rb), dimension(:,:,:), intent(in ) :: ssacmcl
9890 real(kind=rb), dimension(:,:,:), intent(in ) :: asmcmcl
9891 real(kind=rb), dimension(:,:,:), intent(in ) :: fsfcmcl
9892 real(kind=rb), dimension(:,:,:), intent(in ) :: ciwpmcl
9893 real(kind=rb), dimension(:,:,:), intent(in ) :: clwpmcl
9894 real(kind=rb), dimension(:,:,:), intent(in ) :: cswpmcl
9895 real(kind=rb), dimension(:,:), intent(in ) :: reicmcl
9896 real(kind=rb), dimension(:,:), intent(in ) :: relqmcl
9897 real(kind=rb), dimension(:,:), intent(in ) :: resnmcl
9899 real(kind=rb), dimension(:,:,:), intent(in ) :: tauaer
9900 real(kind=rb), dimension(:,:,:), intent(in ) :: ssaaer
9901 real(kind=rb), dimension(:,:,:), intent(in ) :: asmaer
9905 integer(kind=im), intent( out) :: nlayers
9906 real(kind=rb), dimension(:), intent( out) :: pavel
9907 real(kind=rb), dimension(:), intent( out) :: tavel
9908 real(kind=rb), dimension(0:), intent( out) :: pz
9909 real(kind=rb), dimension(0:), intent( out) :: tz
9910 real(kind=rb), intent( out) :: tbound
9911 real(kind=rb), dimension(:), intent( out) :: pdp
9912 real(kind=rb), dimension(:), intent( out) :: coldry
9913 real(kind=rb), dimension(:,:), intent( out) :: wkl
9914 real(kind=rb), dimension(:), intent( out) :: adjflux
9915 real(kind=rb), dimension(:), intent( out) :: solvar
9916 real(kind=rb), dimension(:,:), intent( out) :: taua
9917 real(kind=rb), dimension(:,:), intent( out) :: ssaa
9918 real(kind=rb), dimension(:,:), intent( out) :: asma
9920 ! Atmosphere/clouds - cldprop
9922 integer(kind=im), intent( out) :: inflag
9923 integer(kind=im), intent( out) :: iceflag
9924 integer(kind=im), intent( out) :: liqflag
9926 real(kind=rb), dimension(:,:), intent( out) :: cldfmc
9927 real(kind=rb), dimension(:,:), intent( out) :: taucmc
9928 real(kind=rb), dimension(:,:), intent( out) :: ssacmc
9929 real(kind=rb), dimension(:,:), intent( out) :: asmcmc
9930 real(kind=rb), dimension(:,:), intent( out) :: fsfcmc
9931 real(kind=rb), dimension(:,:), intent( out) :: ciwpmc
9932 real(kind=rb), dimension(:,:), intent( out) :: clwpmc
9933 real(kind=rb), dimension(:,:), intent( out) :: cswpmc
9934 real(kind=rb), dimension(:), intent( out) :: relqmc
9935 real(kind=rb), dimension(:), intent( out) :: reicmc
9936 real(kind=rb), dimension(:), intent( out) :: resnmc
9940 real(kind=rb), parameter :: amd = 28.9660_rb
9941 real(kind=rb), parameter :: amw = 18.0160_rb
9942 ! real(kind=rb), parameter :: amc = 44.0098_rb
9943 ! real(kind=rb), parameter :: amo = 47.9998_rb
9944 ! real(kind=rb), parameter :: amo2 = 31.9999_rb
9945 ! real(kind=rb), parameter :: amch4 = 16.0430_rb
9946 ! real(kind=rb), parameter :: amn2o = 44.0128_rb
9948 ! Set molecular weight ratios (for converting mmr to vmr)
9949 ! e.g. h2ovmr = h2ommr * amdw)
9951 real(kind=rb), parameter :: amdw = 1.607793_rb
9952 real(kind=rb), parameter :: amdc = 0.658114_rb
9953 real(kind=rb), parameter :: amdo = 0.603428_rb
9954 real(kind=rb), parameter :: amdm = 1.805423_rb
9955 real(kind=rb), parameter :: amdn = 0.658090_rb
9956 real(kind=rb), parameter :: amdo2 = 0.905140_rb
9958 real(kind=rb), parameter :: sbc = 5.67e-08_rb
9960 integer(kind=im) :: isp, l, ix, n, imol, ib, ig
9961 real(kind=rb) :: amm, summol
9962 real(kind=rb) :: adjflx
9963 ! real(kind=rb) :: earth_sun
9964 !-------------------------------------------------------------------------------
9967 ! Initialize all molecular amounts to zero here, then pass input amounts
9968 ! into RRTM array WKL below.
9971 cldfmc(:,:) = 0.0_rb
9972 taucmc(:,:) = 0.0_rb
9973 ssacmc(:,:) = 1.0_rb
9974 asmcmc(:,:) = 0.0_rb
9975 fsfcmc(:,:) = 0.0_rb
9976 ciwpmc(:,:) = 0.0_rb
9977 clwpmc(:,:) = 0.0_rb
9978 cswpmc(:,:) = 0.0_rb
9986 ! Set flux adjustment for current Earth/Sun distance (two options).
9987 ! 1) Use Earth/Sun distance flux adjustment provided by GCM (input as adjes);
9991 ! 2) Calculate Earth/Sun distance from DYOFYR, the cumulative day of the year.
9992 ! (Set adjflx to 1. to use constant Earth/Sun distance of 1 AU).
9994 if (dyofyr .gt. 0) then
9995 adjflx = earth_sun(dyofyr)
9998 ! Set incoming solar flux adjustment to include adjustment for
9999 ! current Earth/Sun distance (ADJFLX) and scaling of default internal
10000 ! solar constant (rrsw_scon = 1368.22 Wm-2) by band (SOLVAR). SOLVAR can be set
10001 ! to a single scaling factor as needed, or to a different value in each
10002 ! band, which may be necessary for paleoclimate simulations.
10005 ! solvar(ib) = 1._rb
10006 solvar(ib) = scon / rrsw_scon
10007 adjflux(ib) = adjflx * solvar(ib)
10010 ! Set surface temperature.
10012 tbound = tsfc(iplon)
10014 ! Install input GCM arrays into RRTMG_SW arrays for pressure, temperature,
10015 ! and molecular amounts.
10016 ! Pressures are input in mb, or are converted to mb here.
10017 ! Molecular amounts are input in volume mixing ratio, or are converted from
10018 ! mass mixing ratio (or specific humidity for h2o) to volume mixing ratio
10019 ! here. These are then converted to molecular amount (molec/cm2) below.
10020 ! The dry air column COLDRY (in molec/cm2) is calculated from the level
10021 ! pressures, pz (in mb), based on the hydrostatic equation and includes a
10022 ! correction to account for h2o in the layer. The molecular weight of moist
10023 ! air (amm) is calculated for each layer.
10024 ! Note: In RRTMG, layer indexing goes from bottom to top, and coding below
10025 ! assumes GCM input fields are also bottom to top. Input layer indexing
10026 ! from GCM fields should be reversed here if necessary.
10028 pz(0) = plev(iplon,1)
10029 tz(0) = tlev(iplon,1)
10031 pavel(l) = play(iplon,l)
10032 tavel(l) = tlay(iplon,l)
10033 pz(l) = plev(iplon,l+1)
10034 tz(l) = tlev(iplon,l+1)
10035 pdp(l) = pz(l-1) - pz(l)
10037 ! For h2o input in vmr:
10038 wkl(1,l) = h2ovmr(iplon,l)
10039 ! For h2o input in mmr:
10040 ! wkl(1,l) = h2o(iplon,l)*amdw
10041 ! For h2o input in specific humidity;
10042 ! wkl(1,l) = (h2o(iplon,l)/(1._rb - h2o(iplon,l)))*amdw
10044 wkl(2,l) = co2vmr(iplon,l)
10045 wkl(3,l) = o3vmr(iplon,l)
10046 wkl(4,l) = n2ovmr(iplon,l)
10047 wkl(6,l) = ch4vmr(iplon,l)
10048 wkl(7,l) = o2vmr(iplon,l)
10049 amm = (1._rb - wkl(1,l)) * amd + wkl(1,l) * amw
10050 coldry(l) = (pz(l-1)-pz(l)) * 1.e3_rb * avogad / &
10051 (1.e2_rb * grav * amm * (1._rb + wkl(1,l)))
10054 ! The following section can be used to set values for an additional layer (from
10055 ! the GCM top level to 1.e-4 mb) for improved calculation of TOA fluxes.
10056 ! Temperature and molecular amounts in the extra model layer are set to
10057 ! their values in the top GCM model layer, though these can be modified
10058 ! here if necessary.
10059 ! If this feature is utilized, increase nlayers by one above, limit the two
10060 ! loops above to (nlayers-1), and set the top most (nlayers) layer values here.
10062 ! pavel(nlayers) = 0.5_rb * pz(nlayers-1)
10063 ! tavel(nlayers) = tavel(nlayers-1)
10064 ! pz(nlayers) = 1.e-4_rb
10065 ! tz(nlayers-1) = 0.5_rb * (tavel(nlayers)+tavel(nlayers-1))
10066 ! tz(nlayers) = tz(nlayers-1)
10067 ! pdp(nlayers) = pz(nlayers-1) - pz(nlayers)
10068 ! wkl(1,nlayers) = wkl(1,nlayers-1)
10069 ! wkl(2,nlayers) = wkl(2,nlayers-1)
10070 ! wkl(3,nlayers) = wkl(3,nlayers-1)
10071 ! wkl(4,nlayers) = wkl(4,nlayers-1)
10072 ! wkl(6,nlayers) = wkl(6,nlayers-1)
10073 ! wkl(7,nlayers) = wkl(7,nlayers-1)
10074 ! amm = (1._rb - wkl(1,nlayers-1)) * amd + wkl(1,nlayers-1) * amw
10075 ! coldry(nlayers) = (pz(nlayers-1)) * 1.e3_rb * avogad / &
10076 ! (1.e2_rb * grav * amm * (1._rb + wkl(1,nlayers-1)))
10078 ! At this point all molecular amounts in wkl are in volume mixing ratio;
10079 ! convert to molec/cm2 based on coldry for use in rrtm.
10083 wkl(imol,l) = coldry(l) * wkl(imol,l)
10087 ! Transfer aerosol optical properties to RRTM variables;
10088 ! modify to reverse layer indexing here if necessary.
10090 if (iaer .ge. 1) then
10093 taua(l,ib) = tauaer(iplon,l,ib)
10094 ssaa(l,ib) = ssaaer(iplon,l,ib)
10095 asma(l,ib) = asmaer(iplon,l,ib)
10100 ! Transfer cloud fraction and cloud optical properties to RRTM variables;
10101 ! modify to reverse layer indexing here if necessary.
10103 if (icld .ge. 1) then
10108 ! Move incoming GCM cloud arrays to RRTMG cloud arrays.
10109 ! For GCM input, incoming reicmcl is defined based on selected ice
10110 ! parameterization (inflgsw)
10114 cldfmc(ig,l) = cldfmcl(ig,iplon,l)
10115 taucmc(ig,l) = taucmcl(ig,iplon,l)
10116 ssacmc(ig,l) = ssacmcl(ig,iplon,l)
10117 asmcmc(ig,l) = asmcmcl(ig,iplon,l)
10118 fsfcmc(ig,l) = fsfcmcl(ig,iplon,l)
10119 ciwpmc(ig,l) = ciwpmcl(ig,iplon,l)
10120 clwpmc(ig,l) = clwpmcl(ig,iplon,l)
10121 if(iceflag.eq.5) then
10122 cswpmc(ig,l) = cswpmcl(ig,iplon,l)
10125 reicmc(l) = reicmcl(iplon,l)
10126 relqmc(l) = relqmcl(iplon,l)
10127 if(iceflag.eq.5) then
10128 resnmc(l) = resnmcl(iplon,l)
10132 ! If an extra layer is being used in RRTMG, set all cloud properties to zero in
10135 ! cldfmc(:,nlayers) = 0.0_rb
10136 ! taucmc(:,nlayers) = 0.0_rb
10137 ! ssacmc(:,nlayers) = 1.0_rb
10138 ! asmcmc(:,nlayers) = 0.0_rb
10139 ! fsfcmc(:,nlayers) = 0.0_rb
10140 ! ciwpmc(:,nlayers) = 0.0_rb
10141 ! clwpmc(:,nlayers) = 0.0_rb
10142 ! reicmc(nlayers) = 0.0_rb
10143 ! relqmc(nlayers) = 0.0_rb
10147 end subroutine inatm_sw
10148 !-------------------------------------------------------------------------------
10151 !-------------------------------------------------------------------------------
10152 end module rrtmg_sw_rad_k
10153 !-------------------------------------------------------------------------------
10156 !-------------------------------------------------------------------------------
10157 module module_ra_rrtmg_swk
10158 !-------------------------------------------------------------------------------
10159 use module_model_constants, only: cp, rd=>r_d, t0c=>SVPT0
10160 use parrrsw_k, only : nbndsw, ngptsw, naerec
10161 use parrrtm_k, only : nbndlw, ngptlw
10162 use rrtmg_sw_init_k, only: rrtmg_sw_ini
10163 use rrtmg_sw_rad_k, only: rrtmg_sw
10164 use rrtmg_lw_rad_k, only :rrtmg_lw
10165 use mcica_subcol_gen_k, only: mcica_subcol
10166 use module_ra_rrtmg_lwk, only : inirad, relcalc, reicalc
10167 use module_ra_effective_radius
10170 !-------------------------------------------------------------------------------
10173 !-------------------------------------------------------------------------------
10174 subroutine rad_rrtmg_driver( &
10175 rthratenlw,rthratensw, &
10176 rthratenlwc,rthratenswc, &
10177 lwupflx, lwupflxc, lwdnflx, lwdnflxc, &
10178 swupflx, swupflxc, swdnflx, swdnflxc, &
10179 lwupt, lwuptc, lwdnt, lwdntc, &
10180 lwupb, lwupbc, lwdnb, lwdnbc, &
10182 swupt, swuptc, swdnt, swdntc, &
10183 swupb, swupbc, swdnb, swdnbc, &
10184 gsw, swcf, cosz, solcon, &
10189 p3d, p8w, cldfra3d, r, g, &
10191 f_qnc, f_qv, f_qc, f_qr, f_qi, f_qs, f_qg, &
10192 qv3d, qc3d, qr3d, qi3d, qs3d, qg3d, &
10195 aer_opt, aerod, no_src, &
10197 ids,ide, jds,jde, kds,kde, &
10198 ims,ime, jms,jme, kms,kme, &
10199 its,ite, jts,jte, kts,kte )
10200 !-------------------------------------------------------------------------------
10201 ! abstract : unified rrtmg sw lw driver
10204 ! 2016-3-10 sunghye baek initial setup
10205 ! 2017-1-15 sunghye baek wrf format correction
10206 !-------------------------------------------------------------------------------
10210 integer, parameter :: natype=5
10211 real, parameter :: qmin=0.
10213 logical, intent(in ) :: f_qnc, f_qv, f_qc, f_qr, f_qi, f_qs, f_qg
10214 integer, intent(in ) :: ids,ide, jds,jde, kds,kde
10215 integer, intent(in ) :: ims,ime, jms,jme, kms,kme
10216 integer, intent(in ) :: its,ite, jts,jte, kts,kte
10217 integer, intent(in ) :: no_src
10218 integer, optional, intent(in ) :: o3input, aer_opt
10220 real, dimension(ims:ime,kms:kme,jms:jme), intent(inout) :: rthratensw
10221 real, dimension(ims:ime,kms:kme,jms:jme), intent(inout) :: rthratenlw
10222 real, dimension(ims:ime,kms:kme,jms:jme), intent(inout) :: rthratenswc
10223 real, dimension(ims:ime,kms:kme,jms:jme), intent(inout) :: rthratenlwc
10224 real, dimension(ims:ime,kms:kme+2,jms:jme), optional, intent(inout) :: lwupflx
10225 real, dimension(ims:ime,kms:kme+2,jms:jme), optional, intent(inout) :: lwupflxc
10226 real, dimension(ims:ime,kms:kme+2,jms:jme), optional, intent(inout) :: lwdnflx
10227 real, dimension(ims:ime,kms:kme+2,jms:jme), optional, intent(inout) :: lwdnflxc
10228 real, dimension(ims:ime,kms:kme+2,jms:jme), optional, intent(inout) :: swupflx
10229 real, dimension(ims:ime,kms:kme+2,jms:jme), optional, intent(inout) :: swupflxc
10230 real, dimension(ims:ime,kms:kme+2,jms:jme), optional, intent(inout) :: swdnflx
10231 real, dimension(ims:ime,kms:kme+2,jms:jme), optional, intent(inout) :: swdnflxc
10232 real, dimension(ims:ime,jms:jme), intent(inout) :: lwupt, lwuptc
10233 real, dimension(ims:ime,jms:jme), intent(inout) :: lwdnt, lwdntc
10234 real, dimension(ims:ime,jms:jme), intent(inout) :: lwupb, lwupbc
10235 real, dimension(ims:ime,jms:jme), intent(inout) :: lwdnb, lwdnbc
10236 real, dimension(ims:ime,jms:jme), intent(inout) :: glw, olr, lwcf
10237 real, dimension(ims:ime,jms:jme), intent(inout) :: swupt, swuptc
10238 real, dimension(ims:ime,jms:jme), intent(inout) :: swdnt, swdntc
10239 real, dimension(ims:ime,jms:jme), intent(inout) :: swupb, swupbc
10240 real, dimension(ims:ime,jms:jme), intent(inout) :: swdnb, swdnbc
10241 real, dimension(ims:ime,jms:jme), intent(inout) :: gsw, swcf
10242 real, dimension(ims:ime,jms:jme), intent(in ) :: cosz
10243 real, intent(in ) :: solcon
10244 real, dimension(ims:ime,jms:jme), intent(in ) :: albedo, emiss
10245 real, dimension(ims:ime,kms:kme,jms:jme), intent(in ) :: t8w, p8w
10246 real, dimension(ims:ime,kms:kme,jms:jme), intent(in ) :: t3d, p3d
10247 real, dimension(ims:ime,kms:kme,jms:jme), intent(in ) :: rho3d
10248 real, dimension(ims:ime,kms:kme,jms:jme), intent(in ) :: nc3d
10249 real, dimension(ims:ime,jms:jme), intent(in ) :: xland, tsk
10250 real, intent(in ) :: r,g
10251 real, dimension(ims:ime,kms:kme,jms:jme), intent(in ) :: cldfra3d
10252 real, dimension(ims:ime,kms:kme,jms:jme), intent(in ) :: qv3d, qc3d, qr3d
10253 real, dimension(ims:ime,kms:kme,jms:jme), intent(in ) :: qi3d, qs3d, qg3d
10254 real, dimension(ims:ime,kms:kme,jms:jme), optional, intent(in ) :: o33d
10255 real, dimension(ims:ime,kms:kme,jms:jme,1:no_src), optional, intent(in )&
10259 ! xland 1 for land 2 for water
10261 ! real, dimension(ims:ime,jms:jme), intent(in ) :: aluvb, aluvd
10262 ! real, dimension(ims:ime,jms:jme), intent(in ) :: alnirb, alnird
10265 ! Added local arrays for RRTMG
10267 integer :: ncol, nlay, icld
10268 integer :: inflgsw, iceflgsw, liqflgsw
10269 integer :: inflglw, iceflglw, liqflglw
10271 ! Dimension with extra layer from model top to TOA
10273 real, dimension(1,kts:kte+2) :: plev
10274 real, dimension(1,kts:kte+2) :: tlev
10275 real, dimension(1,kts:kte+1) :: play
10276 real, dimension(1,kts:kte+1) :: tlay
10277 real, dimension(1,kts:kte+1) :: h2ovmr, o3vmr, co2vmr, o2vmr, ch4vmr, n2ovmr
10278 real, dimension(1,kts:kte+1) :: cfc11vmr, cfc12vmr, cfc22vmr, ccl4vmr
10279 real, dimension(kts:kte+1) :: o3mmr
10281 ! Surface albedo (for UV/visible and near-IR spectral regions,
10282 ! and for direct and diffuse radiation)
10284 real, dimension(1) :: asdir, asdif, aldir, aldif
10285 real, dimension(1) :: visdir, visdif, nirdir, nirdif
10287 ! Surface emissivity (for 16 LW spectral bands)
10289 real, dimension(1,nbndlw) :: emis
10291 ! Dimension with extra layer from model top to TOA,
10292 ! though no clouds are allowed in extra layer
10294 real, dimension(1,kts:kte+1) :: cldfrac
10295 real, dimension(1,kts:kte+1) :: clwpth, ciwpth
10296 real, dimension(1,kts:kte+1) :: rel, rei
10297 real, dimension(1,kts:kte+1) :: cswpth, res
10298 real, dimension(ngptsw,1,kts:kte+1) :: staucmcl, sssacmcl
10299 real, dimension(ngptsw,1,kts:kte+1) :: sasmcmcl, sfsfcmcl
10300 real, dimension(ngptlw,1,kts:kte+1) :: lcldfmcl, ltaucmcl
10301 real, dimension(ngptlw,1,kts:kte+1) :: lclwpmcl, lciwpmcl
10302 real, dimension(ngptlw,1,kts:kte+1) :: lcswpmcl
10303 real, dimension(1,kts:kte+1,nbndsw) :: stauaer, ssaaer, asmaer
10304 real, dimension(1,kts:kte+1,nbndlw) :: ltauaer
10305 real, dimension(1,kts:kte+1) :: qo31d
10306 real, dimension(1,kts:kte+1,naerec) :: ecaer
10307 real, dimension(1,kts:kte+1) :: co2_t
10308 integer, parameter :: has_reqc = 1
10309 integer, parameter :: has_reqi = 1
10310 integer, parameter :: has_reqs = 1
10311 real :: pi,third,relconst,lwpmin,rhoh2o
10313 ! Output arrays contain extra layer from model top to TOA
10315 real, dimension(1,kts:kte+2) :: swuflx
10316 real, dimension(1,kts:kte+2) :: swdflx
10317 real, dimension(1,kts:kte+2) :: swuflxc
10318 real, dimension(1,kts:kte+2) :: swdflxc
10319 real, dimension(1,kts:kte+1) :: swhr
10320 real, dimension(1,kts:kte+1) :: swhrc
10321 real, dimension(1) :: tsfc, ps, coszen
10322 real, dimension(1,kts:kte+2) :: uflx
10323 real, dimension(1,kts:kte+2) :: dflx
10324 real, dimension(1,kts:kte+2) :: uflxc
10325 real, dimension(1,kts:kte+2) :: dflxc
10326 real, dimension(1,kts:kte+1) :: hr
10327 real, dimension(1,kts:kte+1) :: hrc
10328 real :: ro, dz, adjes
10329 real :: landf, icef, snowd, scon
10330 real, dimension(kts:kte) :: re_qc, re_qi, re_qs
10331 real, dimension(kts:kte) :: o31d
10332 real :: snow_mass_factor
10333 real, dimension(kts:kte) :: qsum1d, qccps
10334 real, dimension(its:ite) :: xice
10339 ! Set trace gas volume mixing ratios, 2005 values, IPCC (2007)
10340 ! carbon dioxide (379 ppmv)
10343 data co2 / 379.e-6 /
10345 ! methane (1774 ppbv)
10348 data ch4 / 1774.e-9 /
10350 ! nitrous oxide (319 ppbv)
10353 data n2o / 319.e-9 /
10358 data cfc11 / 0.251e-9 /
10362 data cfc12 / 0.538e-9 /
10367 data cfc22 / 0.169e-9 /
10372 data ccl4 / 0.093e-9 /
10374 ! Set oxygen volume mixing ratio (for o2mmr=0.23143)
10377 data o2 / 0.209488 /
10379 integer :: iplon, irng, permuteseed
10382 ! For old cloud property specification for rrtm_lw
10383 ! Cloud and precipitation absorption coefficients
10385 real :: abcw, abice, abrn, absn
10387 data abice /0.0735/
10388 data abrn /0.330e-3/
10389 data absn /2.34e-3/
10390 real :: amdw ! Molecular weight of dry air / water vapor
10391 real :: amdo ! Molecular weight of dry air / ozone
10392 real :: amdo2 ! Molecular weight of dry air / oxygen
10393 data amdw / 1.607793 /
10394 data amdo / 0.603461 /
10395 data amdo2 / 0.905190 /
10397 real, dimension(kts:kte) :: pdel ! mb
10398 real, dimension(kts:kte) :: cicewp, cliqwp
10399 real, dimension(kts:kte) :: csnowp
10400 real, dimension(kts:kte) :: cldfra1d
10401 real :: gsnowp, gliqwp, gicewp, gravmks, gravdvd
10404 logical, dimension(its:ite, jts:jte) :: dorrsw
10406 real :: xt24, tloctm, hrang, xxlat
10407 integer :: i, j, k, na
10408 logical :: predicate
10410 !-------------------------------------------------------------------------------
10412 ! Zero out cloud optical properties here, calculated in radiation
10420 ! Aerosol effects. Added aerosol feedbacks from Chem , 03/2010 -czhao
10435 !---------------------------------------------------------------------------------
10438 !-----CALCULATE SHORT & LONG WAVE RADIATION
10440 ! All fields are ordered vertically from bottom to top
10441 ! Pressures are in mb
10444 ! Set solar constant
10448 ! For Earth/Sun distance adjustment in RRTMG
10451 ! solar constant is already provided with eccentricity adjustment,
10452 ! so do not do this in RRTMG
10457 pver = kte - kts + 1
10458 !SET CONST here for fast computation
10465 if(cosz(i,j).le.0.0) dorrsw(i,j) = .false.
10469 ! Add extra layer from top of model to top of atmosphere
10471 nlay = (kte - kts + 1) + 1
10473 ! For passing in cloud physical properties; cloud optics parameterized in RRTMG:
10484 ! START LOOP FOR SETTING CLOUD PROPERTY
10490 !-------------------------------------------------
10491 ! 1. SET SURFACE PROPERTY
10492 !----------------- --------------------------------
10496 !-------------------------------------------------
10497 ! 2. SET AEROSOL PROPERTY
10498 !-------------------------------------------------
10501 ! aod_t(1,kts:kte,na) = aod_t3d(i,kts:kte,na)
10502 ! aod_t(1,kte+1,na) = 0.
10505 !-------------------------------------------------
10506 ! 3. SET OZONE PROPERTY
10507 !-------------------------------------------------
10510 ! qo31d(1,k) = qo3_3d(i,k,j)
10513 ! qo31d(1,kte+1) = qo31d(1,kte,j)
10515 !-------------------------------------------------
10516 ! 4. SET CO2 PROPERTY
10517 !-------------------------------------------------
10520 ! co2_t(1,k) = co2_3d(i,k)
10523 ! co2_t(1,kte+1) = co2_t(1,kte)
10525 !-------------------------------------------------
10526 ! 5. SET OPTICAL CLOUD PROPERTY
10527 !-------------------------------------------------
10531 !-------------------------------------------------
10532 ! 5-1. SET EFFECTIVE RADIUS
10533 !-------------------------------------------------
10536 qsum1d(k) = qi3d(i,k,j)+qc3d(i,k,j)+qs3d(i,k,j)
10537 cldfra1d(k) = cldfra3d(i,k,j)
10546 inflgsw = 3 ; inflglw = 3
10550 inflgsw = 4 ; iceflgsw = 4
10551 inflglw = 4 ; iceflglw = 4
10555 inflgsw = 5 ; iceflgsw = 5
10556 inflglw = 5 ; iceflglw = 5
10562 call effectRad(t3d(i,kts:kte,j), qc3d(i,kts:kte,j), nc3d(i,kts:kte,j), &
10563 qi3d(i,kts:kte,j), qs3d(i,kts:kte,j), qg3d(i,kts:kte,j), &
10564 rho3d(i,kts:kte,j), qmin, t0c, qccps, f_qnc, &
10565 re_qc, re_qi, re_qs, kts, kte)
10567 re_qc = re_qc * 1.e+6
10568 re_qi = re_qi * 1.e+6
10569 re_qs = re_qs * 1.e+6
10571 re_qc(kts:kte) = max(2.51, min(re_qc(kts:kte), 50.))
10572 re_qi(kts:kte) = max(10.01, min(re_qi(kts:kte), 125.))
10573 re_qs(kts:kte) = max(25., min(re_qs(kts:kte), 999.))
10575 !-------------------------------------------------
10576 ! 5-2. SET CLOUD HYDROMETEOR PROPERTY
10577 !-------------------------------------------------
10579 ! From module_ra_cam: Convert liquid and ice mixing ratios to water paths;
10580 ! Water paths are in units of g/m2
10581 ! snow added as ice cloud (JD 091022)
10584 ! pdel is in Pa here <==========
10587 pdel(k) = p8w(i,k,j)-p8w(i,k+1,j)
10590 ! if (p8w(i,kte+1).eq.0.) pdel(kte) = p8w(i,kte) - 1.e-2
10593 ! Grid box ice water path.
10594 gicewp = (qi3d(i,k,j)+qs3d(i,k,j)) * pdel(k) * gravdvd
10595 ! Grid box liquid water path.
10596 gliqwp = qc3d(i,k,j) * pdel(k) * gravdvd
10597 ! in-cloud ice water path.
10598 cicewp(k) = gicewp / max(0.01,cldfra1d(k))
10599 ! In-cloud liquid water path.
10600 cliqwp(k) = gliqwp / max(0.01,cldfra1d(k))
10601 if(cldfra1d(k).gt.0. .and. qsum1d(k).lt.1.e-9) then
10602 gliqwp = 1.e-9* pdel(k) * gravdvd
10603 cliqwp(k) = gliqwp ! In-cloud liquid water path.
10606 ! The ice water path is already sum of cloud ice and snow, but when we have
10607 ! explicit ice effective radius, overwrite the ice path with only the cloud
10608 ! ice variable, leaving out the snow for its own effect.
10610 if (iceflgsw .ge. 4) then
10612 gicewp = qi3d(i,k,j)*pdel(k)* gravdvd ! Grid box ice water path.
10613 cicewp(k) = gicewp/max(0.01,cldfra1d(k)) ! In-cloud ice water path.
10614 if(cldfra1d(k).gt.0. .and. qsum1d(k).lt.1.e-9) then
10615 gicewp = 1.e-9*pdel(k)* gravdvd
10616 cicewp(k) = gicewp ! In-cloud ice water path.
10622 ! Here the snow path is adjusted if (radiation) effective radius of snow is
10623 ! larger than what we currently have in the lookup tables. Since mass goes
10624 ! rather close to diameter squared, adjust the mixing ratio of snow used
10625 ! to compute its water path in combination with the max diameter. Not a
10626 ! perfect fix, but certainly better than using all snow mass when diameter is
10627 ! far larger than table currently contains and crystal sizes much larger than
10628 ! about 140 microns have lesser impact than those much smaller sizes.
10631 if (iceflgsw.eq.5) then
10633 snow_mass_factor = 1.0
10634 if (re_qs(k).gt.130.)then
10635 snow_mass_factor =(130.0/re_qs(k))**2.
10638 ! Grid box snow water path.
10639 gsnowp = (qs3d(i,k,j)+qg3d(i,k,j))*snow_mass_factor*pdel(k)* gravdvd
10640 if (cldfra1d(k).gt.0. .and. qsum1d(k).lt.1.e-9) then
10643 csnowp(k) = gsnowp/max(0.01,cldfra1d(k))
10647 ! Limit upper bound of reice for Fu ice parameterization and convert
10648 ! from effective radius to generalized effective size (*1.0315; Fu, 1996)
10650 if (iceflgsw.eq.3) then
10652 re_qi(k) = re_qi(k)*1.0315
10653 re_qi(k) = min(140.0,re_qi(k))
10657 !-------------------------------------------------
10658 ! 6. FILLING ARRAYS FOR RRTMG_SW and RRTMG_LW
10659 !-------------------------------------------------
10661 play(ncol, kts:kte ) = p3d(i,kts:kte,j)*1.e-2
10662 plev(ncol, kts:kte+1 ) = p8w(i,kts:kte+1,j)*1.e-2
10663 tlay(ncol, kts:kte ) = t3d(i,kts:kte,j)
10664 tlev(ncol, kts:kte+1) = t8w(i,kts:kte+1,j)
10665 tsfc(ncol) = tsk(i,j)
10666 h2ovmr(ncol, kts:kte ) = amax1(max(0.,qv3d(i,kts:kte,j)),3.0e-6) * amdw
10667 co2vmr(ncol, kts:kte ) = co2
10668 o2vmr(ncol, kts:kte ) = o2
10669 ch4vmr(ncol, kts:kte ) = ch4
10670 n2ovmr(ncol, kts:kte ) = n2o
10671 cfc11vmr(ncol,kts:kte) = cfc11
10672 cfc12vmr(ncol,kts:kte) = cfc12
10673 cfc22vmr(ncol,kts:kte) = cfc22
10674 ccl4vmr(ncol,kts:kte) = ccl4
10675 ! Define profile values for extra layer from model top to top of atmosphere.
10676 ! The top layer temperature for all gridpoints is set to the top layer-1
10677 ! temperature plus a constant (0 K) that represents an isothermal layer
10678 ! above ptop. Top layer interface temperatures are linearly interpolated
10679 ! from the layer temperatures.
10680 play(ncol,kte+1) = 0.5 * plev(ncol,kte+1)
10681 tlay(ncol,kte+1) = tlev(ncol,kte+1) + 0.0
10682 plev(ncol,kte+2) = 1.0e-5
10683 tlev(ncol,kte+2) = tlev(ncol,kte+1) + 0.0
10684 h2ovmr(ncol,kte+1) = h2ovmr(ncol,kte)
10685 co2vmr(ncol,kte+1) = co2vmr(ncol,kte)
10686 o2vmr(ncol,kte+1) = o2vmr(ncol,kte)
10687 ch4vmr(ncol,kte+1) = ch4vmr(ncol,kte)
10688 n2ovmr(ncol,kte+1) = n2ovmr(ncol,kte)
10689 cfc11vmr(ncol,kte+1) = cfc11vmr(ncol,kte)
10690 cfc12vmr(ncol,kte+1) = cfc12vmr(ncol,kte)
10691 cfc22vmr(ncol,kte+1) = cfc22vmr(ncol,kte)
10692 ccl4vmr(ncol,kte+1) = ccl4vmr(ncol,kte)
10695 ! o3vmr(ncol,k) = qo31d(1,k)*amdo ! convert mmr to vmr
10698 ! o3vmr(ncol,kte+1) = o3vmr(ncol,kte)
10700 call inirad(o3mmr,plev,kts,kte)
10702 o3vmr(ncol,k) = o3mmr(k)*amdo
10705 if(present(o33d).and.o3input.eq.2) then
10707 o31d(k) = o33d(i,k,j)
10708 o3vmr(ncol,k) = o31d(k)
10711 o3vmr(ncol,kte+1) = o31d(kte) - o3mmr(kte)*amdo + o3mmr(kte+1)*amdo
10712 if(o3vmr(ncol,kte+1) .le. 0.) o3vmr(ncol,kte+1) = o3mmr(kte+1)*amdo
10717 ! co2vmr(ncol,k) = co2_t(1,k)
10719 ! co2vmr(ncol,kte+1) = co2vmr(ncol,kte)
10723 ! Set surface albedo for direct and diffuse radiation in UV/visible and
10724 ! near-IR spectral regions
10726 asdir(ncol) = albedo(i,j)
10727 asdif(ncol) = albedo(i,j)
10728 aldir(ncol) = albedo(i,j)
10729 aldif(ncol) = albedo(i,j)
10731 ! Set surface emissivity in each RRTMG longwave band
10733 emis(ncol,:) = emiss(i,j)
10735 ! Set cloud physical property arrays
10737 clwpth(ncol,kts:kte) = cliqwp(kts:kte)
10738 ciwpth(ncol,kts:kte) = cicewp(kts:kte)
10739 rel(ncol,kts:kte) = re_qc(kts:kte)
10740 rei(ncol,kts:kte) = re_qi(kts:kte)
10742 if (inflgsw .eq. 5) then
10743 cswpth(ncol,kts:kte) = csnowp(kts:kte)
10744 res(ncol,kts:kte) = re_qs(kts:kte)
10746 cswpth(ncol,kts:kte) = 0.0
10747 res(ncol,kts:kte) = 10.0
10749 ! Set cosine of solar zenith angle
10750 coszen(ncol) = cosz(i,j)
10751 ! Layer indexing goes bottom to top here for all fields.
10752 ! Water vapor and ozone are converted from mmr to vmr.
10753 ! Pressures are in units of mb here.
10754 cldfrac(ncol,kts:kte) = cldfra1d(kts:kte)
10756 ! No clouds are allowed in the extra layer from model top to TOA
10758 clwpth(ncol,kte+1) = 0.
10759 ciwpth(ncol,kte+1) = 0.
10760 cswpth(ncol,kte+1) = 0.
10761 rel(ncol,kte+1) = 10.
10762 rei(ncol,kte+1) = 10.
10763 res(ncol,kte+1) = 10.
10764 cldfrac(ncol,kte+1) = 0.
10770 call mcica_subcol (iplon, ncol, nlay, icld, permuteseed, irng, play, &
10771 cldfrac, ciwpth, clwpth, &
10772 lciwpmcl, lclwpmcl, &
10773 cswpth, lcswpmcl, &
10777 if (dorrsw(i,j)) then
10779 if (present(aerod)) then
10780 if (aer_opt.eq.1) then
10783 ecaer(ncol,k,na) = aerod(i,k,j,na)
10790 (ncol ,nlay ,icld , &
10791 play ,plev ,tlay ,tlev ,tsfc , &
10792 h2ovmr , o3vmr ,co2vmr ,ch4vmr ,n2ovmr ,o2vmr , &
10793 asdir ,asdif ,aldir ,aldif , &
10794 coszen ,adjes ,dyofyr ,scon , &
10795 inflgsw ,iceflgsw,liqflgsw,lcldfmcl(1:ngptsw,:,:) , &
10796 staucmcl ,sssacmcl ,sasmcmcl ,sfsfcmcl , &
10797 lciwpmcl(1:ngptsw,:,:) ,lclwpmcl(1:ngptsw,:,:), rei ,rel, &
10798 lcswpmcl(1:ngptsw,:,:), res, &
10799 stauaer ,ssaaer ,asmaer ,ecaer , &
10800 swuflx ,swdflx ,swhr ,swuflxc ,swdflxc ,swhrc , &
10801 visdir ,visdif ,nirdir ,nirdif )
10803 rthratensw(i,kts:kte,j) = swhr(1,kts:kte)/86400.
10804 rthratenswc(i,kts:kte,j) = swhrc(1,kts:kte)/86400.
10805 if(present(swupflx))then
10806 swupflx(i,kts:kte+2,j) = swuflx(1,kts:kte+2)
10807 swupflxc(i,kts:kte+2,j) = swuflxc(1,kts:kte+2)
10808 swdnflx(i,kts:kte+2,j) = swdflx(1,kts:kte+2)
10809 swdnflxc(i,kts:kte+2,j) = swdflxc(1,kts:kte+2)
10811 gsw(i,j) = swdflx(1,1) - swuflx(1,1)
10812 swcf(i,j) = (swdflx(1,kte+2) - swuflx(1,kte+2)) - (swdflxc(1,kte+2) &
10813 - swuflxc(1,kte+2))
10814 swupt(i,j) = swuflx(1,kte+2)
10815 swuptc(i,j) = swuflxc(1,kte+2)
10816 swdnt(i,j) = swdflx(1,kte+2)
10817 swdntc(i,j) = swdflxc(1,kte+2)
10818 swupb(i,j) = swuflx(1,1)
10819 swupbc(i,j) = swuflxc(1,1)
10820 swdnb(i,j) = swdflx(1,1)
10821 swdnbc(i,j) = swdflxc(1,1)
10824 ! Call RRTMG longwave radiation model
10827 (ncol, nlay, icld, play, plev , tlay, &
10828 tlev ,tsfc, h2ovmr, o3vmr, co2vmr, ch4vmr, &
10829 n2ovmr, o2vmr, cfc11vmr, cfc12vmr, cfc22vmr, ccl4vmr, &
10830 emis, inflglw, iceflglw, liqflglw, lcldfmcl, &
10831 ltaucmcl, lciwpmcl, lclwpmcl, rei, rel, &
10834 uflx, dflx, hr, uflxc, dflxc, hrc)
10836 rthratenlw(i,kts:kte,j) = hr(1,kts:kte)/86400.
10837 rthratenlwc(i,kts:kte,j) = hrc(1,kts:kte)/86400.
10838 if(present(lwupflx))then
10839 lwupflx(i,kts:kte+2,j) = uflx(1,kts:kte+2)
10840 lwupflxc(i,kts:kte+2,j) = uflxc(1,kts:kte+2)
10841 lwdnflx(i,kts:kte+2,j) = dflx(1,kts:kte+2)
10842 lwdnflxc(i,kts:kte+2,j) = dflxc(1,kts:kte+2)
10844 glw(i,j) = dflx(1,1)
10845 olr(i,j) = uflx(1,kte+2)
10846 lwcf(i,j) = uflxc(1,kte+2) - uflx(1,kte+2)
10847 lwupt(i,j) = uflx(1,kte+2)
10848 lwuptc(i,j) = uflxc(1,kte+2)
10849 lwdnt(i,j) = dflx(1,kte+2)
10850 lwdntc(i,j) = dflxc(1,kte+2)
10851 lwupb(i,j) = uflx(1,1)
10852 lwupbc(i,j) = uflxc(1,1)
10853 lwdnb(i,j) = dflx(1,1)
10854 lwdnbc(i,j) = dflxc(1,1)
10855 enddo ! jts:jte end j LOOP
10856 enddo ! its:ite end GRAND LOOP
10857 end subroutine rad_rrtmg_driver
10858 !-------------------------------------------------------------------------------
10859 !-------------------------------------------------------------------------------
10860 subroutine rrtmg_swinit_k( &
10861 allowed_to_read , &
10862 ids, ide, jds, jde, kds, kde, &
10863 ims, ime, jms, jme, kms, kme, &
10864 its, ite, jts, jte, kts, kte )
10865 !-------------------------------------------------------------------------------
10866 use rrtmg_sw_init_k
10870 logical, intent(in) :: allowed_to_read
10871 integer, intent(in) :: ids, ide, jds, jde, kds, kde, &
10872 ims, ime, jms, jme, kms, kme, &
10873 its, ite, jts, jte, kts, kte
10874 !-------------------------------------------------------------------------------
10876 ! Read in absorption coefficients and other data
10878 IF ( allowed_to_read ) then
10879 call rrtmg_swlookuptable
10882 ! Perform g-point reduction and other initializations
10883 ! Specific heat of dry air (cp) used in flux to heating rate conversion factor.
10885 call rrtmg_sw_ini(cp)
10887 end subroutine rrtmg_swinit_k
10888 !-------------------------------------------------------------------------------
10891 !-------------------------------------------------------------------------------
10892 subroutine rrtmg_swlookuptable
10900 logical , external :: wrf_dm_on_monitor
10901 character*80 errmess
10903 !-------------------------------------------------------------------------------
10904 if ( wrf_dm_on_monitor() ) then
10906 inquire ( i , opened = opened )
10907 if ( .not. opened ) then
10915 call wrf_dm_bcast_bytes ( rrtmg_unit , 4 )
10918 if ( wrf_dm_on_monitor() ) then
10919 open(rrtmg_unit,file='RRTMG_SW_DATA', &
10920 form='UNFORMATTED',status='OLD',err=9009)
10922 call sw_kgb16(rrtmg_unit)
10923 call sw_kgb17(rrtmg_unit)
10924 call sw_kgb18(rrtmg_unit)
10925 call sw_kgb19(rrtmg_unit)
10926 call sw_kgb20(rrtmg_unit)
10927 call sw_kgb21(rrtmg_unit)
10928 call sw_kgb22(rrtmg_unit)
10929 call sw_kgb23(rrtmg_unit)
10930 call sw_kgb24(rrtmg_unit)
10931 call sw_kgb25(rrtmg_unit)
10932 call sw_kgb26(rrtmg_unit)
10933 call sw_kgb27(rrtmg_unit)
10934 call sw_kgb28(rrtmg_unit)
10935 call sw_kgb29(rrtmg_unit)
10937 if ( wrf_dm_on_monitor() ) close (rrtmg_unit)
10941 write( errmess , '(A,I4)' ) &
10942 'module_ra_rrtmg_sw: error opening RRTMG_SW_DATA on unit ',rrtmg_unit
10944 end subroutine rrtmg_swlookuptable
10945 !-------------------------------------------------------------------------------
10948 !-------------------------------------------------------------------------------
10949 ! **************************************************************************
10950 ! RRTMG Shortwave Radiative Transfer Model
10951 ! Atmospheric and Environmental Research, Inc., Cambridge, MA
10953 ! Original by J.Delamere, Atmospheric & Environmental Research.
10954 ! Reformatted for F90: JJMorcrette, ECMWF
10955 ! Revision for GCMs: Michael J. Iacono, AER, July 2002
10956 ! Further F90 reformatting: Michael J. Iacono, AER, June 2006
10958 ! This file contains 14 READ statements that include the
10959 ! absorption coefficients and other data for each of the 14 shortwave
10960 ! spectral bands used in RRTMG_SW. Here, the data are defined for 16
10961 ! g-points, or sub-intervals, per band. These data are combined and
10962 ! weighted using a mapping procedure in module RRTMG_SW_INIT to reduce
10963 ! the total number of g-points from 224 to 112 for use in the GCM.
10964 ! **************************************************************************
10966 !-------------------------------------------------------------------------------
10967 subroutine sw_kgb16(rrtmg_unit)
10968 !-------------------------------------------------------------------------------
10969 ! Array sfluxrefo contains the Kurucz solar source function for this band.
10971 ! Array rayl contains the Rayleigh extinction coefficient at v = 2925 cm-1.
10973 ! The array KAO contains absorption coefs at the 16 chosen g-values
10974 ! for a range of pressure levels> ~100mb, temperatures, and binary
10975 ! species parameters (see taumol.f for definition). The first
10976 ! index in the array, JS, runs from 1 to 9, and corresponds to
10977 ! different values of the binary species parameter. For instance,
10978 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
10979 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
10980 ! in the array, JT, which runs from 1 to 5, corresponds to different
10981 ! temperatures. More specifically, JT = 3 means that the data are for
10982 ! the reference temperature TREF for this pressure level, JT = 2 refers
10983 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
10984 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
10985 ! to the JPth reference pressure level (see taumol.f for these levels
10986 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
10987 ! which g-interval the absorption coefficients are for.
10989 ! The array KBO contains absorption coefs at the 16 chosen g-values
10990 ! for a range of pressure levels < ~100mb and temperatures. The first
10991 ! index in the array, JT, which runs from 1 to 5, corresponds to
10992 ! different temperatures. More specifically, JT = 3 means that the
10993 ! data are for the reference temperature TREF for this pressure
10994 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
10995 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
10996 ! The second index, JP, runs from 13 to 59 and refers to the JPth
10997 ! reference pressure level (see taumol.f for the value of these
10998 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
10999 ! and tells us which g-interval the absorption coefficients are for.
11001 ! The array FORREFO contains the coefficient of the water vapor
11002 ! foreign-continuum (including the energy term). The first
11003 ! index refers to reference temperature (296,260,224,260) and
11004 ! pressure (970,475,219,3 mbar) levels. The second index
11005 ! runs over the g-channel (1 to 16).
11007 ! The array SELFREFO contains the coefficient of the water vapor
11008 ! self-continuum (including the energy term). The first index
11009 ! refers to temperature in 7.2 degree increments. For instance,
11010 ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8,
11011 ! etc. The second index runs over the g-channel (1 to 16).
11012 !-------------------------------------------------------------------------------
11013 use rrsw_kg16_k, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
11014 rayl, strrat1, layreffr
11022 integer, intent(in) :: rrtmg_unit
11026 character*80 errmess
11027 logical, external :: wrf_dm_on_monitor
11028 !-------------------------------------------------------------------------------
11030 if ( wrf_dm_on_monitor() ) read (rrtmg_unit,err=9010) &
11031 rayl, strrat1, layreffr, kao, kbo, selfrefo, forrefo, sfluxrefo
11032 call wrf_dm_bcast_real ( rayl , 1 )
11033 call wrf_dm_bcast_real ( strrat1 , 1 )
11034 call wrf_dm_bcast_integer ( layreffr , 1 )
11035 call wrf_dm_bcast_bytes ( kao , size ( kao ) * 4 )
11036 call wrf_dm_bcast_bytes ( kbo , size ( kbo ) * 4 )
11037 call wrf_dm_bcast_bytes ( selfrefo , size ( selfrefo ) * 4 )
11038 call wrf_dm_bcast_bytes ( forrefo , size ( forrefo ) * 4 )
11039 call wrf_dm_bcast_bytes ( sfluxrefo , size ( sfluxrefo ) * 4 )
11043 write( errmess , '(A,I4)' ) &
11044 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
11046 end subroutine sw_kgb16
11047 !-------------------------------------------------------------------------------
11050 !-------------------------------------------------------------------------------
11051 subroutine sw_kgb17(rrtmg_unit)
11052 !-------------------------------------------------------------------------------
11054 ! Array sfluxrefo contains the Kurucz solar source function for this band.
11056 ! Array rayl contains the Rayleigh extinction coefficient at v = 3625 cm-1.
11058 ! The array KAO contains absorption coefs at the 16 chosen g-values
11059 ! for a range of pressure levels> ~100mb, temperatures, and binary
11060 ! species parameters (see taumol.f for definition). The first
11061 ! index in the array, JS, runs from 1 to 9, and corresponds to
11062 ! different values of the binary species parameter. For instance,
11063 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
11064 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
11065 ! in the array, JT, which runs from 1 to 5, corresponds to different
11066 ! temperatures. More specifically, JT = 3 means that the data are for
11067 ! the reference temperature TREF for this pressure level, JT = 2 refers
11068 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
11069 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
11070 ! to the JPth reference pressure level (see taumol.f for these levels
11071 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
11072 ! which g-interval the absorption coefficients are for.
11074 ! The array KBO contains absorption coefs at the 16 chosen g-values
11075 ! for a range of pressure levels < ~100mb and temperatures. The first
11076 ! index in the array, JT, which runs from 1 to 5, corresponds to
11077 ! different temperatures. More specifically, JT = 3 means that the
11078 ! data are for the reference temperature TREF for this pressure
11079 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
11080 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
11081 ! The second index, JP, runs from 13 to 59 and refers to the JPth
11082 ! reference pressure level (see taumol.f for the value of these
11083 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
11084 ! and tells us which g-interval the absorption coefficients are for.
11086 ! The array FORREFO contains the coefficient of the water vapor
11087 ! foreign-continuum (including the energy term). The first
11088 ! index refers to reference temperature (296,260,224,260) and
11089 ! pressure (970,475,219,3 mbar) levels. The second index
11090 ! runs over the g-channel (1 to 16).
11092 ! The array SELFREFO contains the coefficient of the water vapor
11093 ! self-continuum (including the energy term). The first index
11094 ! refers to temperature in 7.2 degree increments. For instance,
11095 ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8,
11096 ! etc. The second index runs over the g-channel (1 to 16).
11097 !-------------------------------------------------------------------------------
11098 use rrsw_kg17_k, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
11099 rayl, strrat, layreffr
11107 integer, intent(in) :: rrtmg_unit
11111 character*80 errmess
11112 logical, external :: wrf_dm_on_monitor
11113 !-------------------------------------------------------------------------------
11115 if ( wrf_dm_on_monitor() ) read (rrtmg_unit,err=9010) &
11116 rayl, strrat, layreffr, kao, kbo, selfrefo, forrefo, sfluxrefo
11117 call wrf_dm_bcast_real ( rayl , 1 )
11118 call wrf_dm_bcast_real ( strrat , 1 )
11119 call wrf_dm_bcast_integer ( layreffr , 1 )
11120 call wrf_dm_bcast_bytes ( kao , size ( kao ) * 4 )
11121 call wrf_dm_bcast_bytes ( kbo , size ( kbo ) * 4 )
11122 call wrf_dm_bcast_bytes ( selfrefo , size ( selfrefo ) * 4 )
11123 call wrf_dm_bcast_bytes ( forrefo , size ( forrefo ) * 4 )
11124 call wrf_dm_bcast_bytes ( sfluxrefo , size ( sfluxrefo ) * 4 )
11128 write( errmess , '(A,I4)' ) &
11129 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
11131 end subroutine sw_kgb17
11132 !-------------------------------------------------------------------------------
11135 !-------------------------------------------------------------------------------
11136 subroutine sw_kgb18(rrtmg_unit)
11137 !-------------------------------------------------------------------------------
11138 ! Array sfluxrefo contains the Kurucz solar source function for this band.
11140 ! Array rayl contains the Rayleigh extinction coefficient at v = 4325 cm-1.
11142 ! The array KAO contains absorption coefs at the 16 chosen g-values
11143 ! for a range of pressure levels> ~100mb, temperatures, and binary
11144 ! species parameters (see taumol.f for definition). The first
11145 ! index in the array, JS, runs from 1 to 9, and corresponds to
11146 ! different values of the binary species parameter. For instance,
11147 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
11148 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
11149 ! in the array, JT, which runs from 1 to 5, corresponds to different
11150 ! temperatures. More specifically, JT = 3 means that the data are for
11151 ! the reference temperature TREF for this pressure level, JT = 2 refers
11152 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
11153 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
11154 ! to the JPth reference pressure level (see taumol.f for these levels
11155 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
11156 ! which g-interval the absorption coefficients are for.
11158 ! The array KBO contains absorption coefs at the 16 chosen g-values
11159 ! for a range of pressure levels < ~100mb and temperatures. The first
11160 ! index in the array, JT, which runs from 1 to 5, corresponds to
11161 ! different temperatures. More specifically, JT = 3 means that the
11162 ! data are for the reference temperature TREF for this pressure
11163 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
11164 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
11165 ! The second index, JP, runs from 13 to 59 and refers to the JPth
11166 ! reference pressure level (see taumol.f for the value of these
11167 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
11168 ! and tells us which g-interval the absorption coefficients are for.
11170 ! The array FORREFO contains the coefficient of the water vapor
11171 ! foreign-continuum (including the energy term). The first
11172 ! index refers to reference temperature (296,260,224,260) and
11173 ! pressure (970,475,219,3 mbar) levels. The second index
11174 ! runs over the g-channel (1 to 16).
11176 ! The array SELFREFO contains the coefficient of the water vapor
11177 ! self-continuum (including the energy term). The first index
11178 ! refers to temperature in 7.2 degree increments. For instance,
11179 ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8,
11180 ! etc. The second index runs over the g-channel (1 to 16).
11181 !-------------------------------------------------------------------------------
11182 use rrsw_kg18_k, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
11183 rayl, strrat, layreffr
11191 integer, intent(in) :: rrtmg_unit
11195 character*80 errmess
11196 logical, external :: wrf_dm_on_monitor
11197 !-------------------------------------------------------------------------------
11199 if ( wrf_dm_on_monitor() ) read (rrtmg_unit,err=9010) &
11200 rayl, strrat, layreffr, kao, kbo, selfrefo, forrefo, sfluxrefo
11201 call wrf_dm_bcast_real ( rayl , 1 )
11202 call wrf_dm_bcast_real ( strrat , 1 )
11203 call wrf_dm_bcast_integer ( layreffr , 1 )
11204 call wrf_dm_bcast_bytes ( kao , size ( kao ) * 4 )
11205 call wrf_dm_bcast_bytes ( kbo , size ( kbo ) * 4 )
11206 call wrf_dm_bcast_bytes ( selfrefo , size ( selfrefo ) * 4 )
11207 call wrf_dm_bcast_bytes ( forrefo , size ( forrefo ) * 4 )
11208 call wrf_dm_bcast_bytes ( sfluxrefo , size ( sfluxrefo ) * 4 )
11212 write( errmess , '(A,I4)' ) &
11213 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
11215 end subroutine sw_kgb18
11216 !-------------------------------------------------------------------------------
11219 !-------------------------------------------------------------------------------
11220 subroutine sw_kgb19(rrtmg_unit)
11221 !-------------------------------------------------------------------------------
11222 ! Array sfluxrefo contains the Kurucz solar source function for this band.
11224 ! Array rayl contains the Rayleigh extinction coefficient at v = 4900 cm-1.
11226 ! The array KAO contains absorption coefs at the 16 chosen g-values
11227 ! for a range of pressure levels> ~100mb, temperatures, and binary
11228 ! species parameters (see taumol.f for definition). The first
11229 ! index in the array, JS, runs from 1 to 9, and corresponds to
11230 ! different values of the binary species parameter. For instance,
11231 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
11232 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
11233 ! in the array, JT, which runs from 1 to 5, corresponds to different
11234 ! temperatures. More specifically, JT = 3 means that the data are for
11235 ! the reference temperature TREF for this pressure level, JT = 2 refers
11236 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
11237 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
11238 ! to the JPth reference pressure level (see taumol.f for these levels
11239 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
11240 ! which g-interval the absorption coefficients are for.
11242 ! The array KBO contains absorption coefs at the 16 chosen g-values
11243 ! for a range of pressure levels < ~100mb and temperatures. The first
11244 ! index in the array, JT, which runs from 1 to 5, corresponds to
11245 ! different temperatures. More specifically, JT = 3 means that the
11246 ! data are for the reference temperature TREF for this pressure
11247 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
11248 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
11249 ! The second index, JP, runs from 13 to 59 and refers to the JPth
11250 ! reference pressure level (see taumol.f for the value of these
11251 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
11252 ! and tells us which g-interval the absorption coefficients are for.
11254 ! The array FORREFO contains the coefficient of the water vapor
11255 ! foreign-continuum (including the energy term). The first
11256 ! index refers to reference temperature (296,260,224,260) and
11257 ! pressure (970,475,219,3 mbar) levels. The second index
11258 ! runs over the g-channel (1 to 16).
11260 ! The array SELFREFO contains the coefficient of the water vapor
11261 ! self-continuum (including the energy term). The first index
11262 ! refers to temperature in 7.2 degree increments. For instance,
11263 ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8,
11264 ! etc. The second index runs over the g-channel (1 to 16).
11265 !-------------------------------------------------------------------------------
11266 use rrsw_kg19_k, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
11267 rayl, strrat, layreffr
11275 integer, intent(in) :: rrtmg_unit
11279 character*80 errmess
11280 logical, external :: wrf_dm_on_monitor
11281 !-------------------------------------------------------------------------------
11283 if ( wrf_dm_on_monitor() ) read (rrtmg_unit,err=9010) &
11284 rayl, strrat, layreffr, kao, kbo, selfrefo, forrefo, sfluxrefo
11285 call wrf_dm_bcast_real ( rayl , 1 )
11286 call wrf_dm_bcast_real ( strrat , 1 )
11287 call wrf_dm_bcast_integer ( layreffr , 1 )
11288 call wrf_dm_bcast_bytes ( kao , size ( kao ) * 4 )
11289 call wrf_dm_bcast_bytes ( kbo , size ( kbo ) * 4 )
11290 call wrf_dm_bcast_bytes ( selfrefo , size ( selfrefo ) * 4 )
11291 call wrf_dm_bcast_bytes ( forrefo , size ( forrefo ) * 4 )
11292 call wrf_dm_bcast_bytes ( sfluxrefo , size ( sfluxrefo ) * 4 )
11296 write( errmess , '(A,I4)' ) &
11297 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
11299 end subroutine sw_kgb19
11300 !-------------------------------------------------------------------------------
11303 !-------------------------------------------------------------------------------
11304 subroutine sw_kgb20(rrtmg_unit)
11305 !-------------------------------------------------------------------------------
11307 ! Array sfluxrefo contains the Kurucz solar source function for this band.
11309 ! Array rayl contains the Rayleigh extinction coefficient at v = 5670 cm-1.
11311 ! Array absch4o contains the absorption coefficients for methane.
11313 ! The array KAO contains absorption coefs at the 16 chosen g-values
11314 ! for a range of pressure levels> ~100mb, temperatures, and binary
11315 ! species parameters (see taumol.f for definition). The first
11316 ! index in the array, JS, runs from 1 to 9, and corresponds to
11317 ! different values of the binary species parameter. For instance,
11318 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
11319 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
11320 ! in the array, JT, which runs from 1 to 5, corresponds to different
11321 ! temperatures. More specifically, JT = 3 means that the data are for
11322 ! the reference temperature TREF for this pressure level, JT = 2 refers
11323 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
11324 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
11325 ! to the JPth reference pressure level (see taumol.f for these levels
11326 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
11327 ! which g-interval the absorption coefficients are for.
11329 ! The array KBO contains absorption coefs at the 16 chosen g-values
11330 ! for a range of pressure levels < ~100mb and temperatures. The first
11331 ! index in the array, JT, which runs from 1 to 5, corresponds to
11332 ! different temperatures. More specifically, JT = 3 means that the
11333 ! data are for the reference temperature TREF for this pressure
11334 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
11335 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
11336 ! The second index, JP, runs from 13 to 59 and refers to the JPth
11337 ! reference pressure level (see taumol.f for the value of these
11338 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
11339 ! and tells us which g-interval the absorption coefficients are for.
11341 ! The array FORREFO contains the coefficient of the water vapor
11342 ! foreign-continuum (including the energy term). The first
11343 ! index refers to reference temperature (296,260,224,260) and
11344 ! pressure (970,475,219,3 mbar) levels. The second index
11345 ! runs over the g-channel (1 to 16).
11347 ! The array SELFREFO contains the coefficient of the water vapor
11348 ! self-continuum (including the energy term). The first index
11349 ! refers to temperature in 7.2 degree increments. For instance,
11350 ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8,
11351 ! etc. The second index runs over the g-channel (1 to 16).
11352 !-------------------------------------------------------------------------------
11353 use rrsw_kg20_k, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
11354 absch4o, rayl, layreffr
11362 integer, intent(in) :: rrtmg_unit
11366 character*80 errmess
11367 logical, external :: wrf_dm_on_monitor
11368 !-------------------------------------------------------------------------------
11370 if ( wrf_dm_on_monitor() ) read (rrtmg_unit,err=9010) &
11371 rayl, layreffr, absch4o, kao, kbo, selfrefo, forrefo, sfluxrefo
11372 call wrf_dm_bcast_real ( rayl , 1 )
11373 call wrf_dm_bcast_integer ( layreffr , 1 )
11374 call wrf_dm_bcast_bytes ( absch4o , size ( absch4o ) * 4 )
11375 call wrf_dm_bcast_bytes ( kao , size ( kao ) * 4 )
11376 call wrf_dm_bcast_bytes ( kbo , size ( kbo ) * 4 )
11377 call wrf_dm_bcast_bytes ( selfrefo , size ( selfrefo ) * 4 )
11378 call wrf_dm_bcast_bytes ( forrefo , size ( forrefo ) * 4 )
11379 call wrf_dm_bcast_bytes ( sfluxrefo , size ( sfluxrefo ) * 4 )
11383 write( errmess , '(A,I4)' ) &
11384 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
11386 end subroutine sw_kgb20
11387 !-------------------------------------------------------------------------------
11390 !-------------------------------------------------------------------------------
11391 subroutine sw_kgb21(rrtmg_unit)
11392 !-------------------------------------------------------------------------------
11394 ! Array sfluxrefo contains the Kurucz solar source function for this band.
11396 ! Array rayl contains the Rayleigh extinction coefficient at v = 6925 cm-1.
11398 ! The array KAO contains absorption coefs at the 16 chosen g-values
11399 ! for a range of pressure levels> ~100mb, temperatures, and binary
11400 ! species parameters (see taumol.f for definition). The first
11401 ! index in the array, JS, runs from 1 to 9, and corresponds to
11402 ! different values of the binary species parameter. For instance,
11403 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
11404 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
11405 ! in the array, JT, which runs from 1 to 5, corresponds to different
11406 ! temperatures. More specifically, JT = 3 means that the data are for
11407 ! the reference temperature TREF for this pressure level, JT = 2 refers
11408 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
11409 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
11410 ! to the JPth reference pressure level (see taumol.f for these levels
11411 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
11412 ! which g-interval the absorption coefficients are for.
11414 ! The array KBO contains absorption coefs at the 16 chosen g-values
11415 ! for a range of pressure levels < ~100mb and temperatures. The first
11416 ! index in the array, JT, which runs from 1 to 5, corresponds to
11417 ! different temperatures. More specifically, JT = 3 means that the
11418 ! data are for the reference temperature TREF for this pressure
11419 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
11420 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
11421 ! The second index, JP, runs from 13 to 59 and refers to the JPth
11422 ! reference pressure level (see taumol.f for the value of these
11423 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
11424 ! and tells us which g-interval the absorption coefficients are for.
11426 ! The array FORREFO contains the coefficient of the water vapor
11427 ! foreign-continuum (including the energy term). The first
11428 ! index refers to reference temperature (296,260,224,260) and
11429 ! pressure (970,475,219,3 mbar) levels. The second index
11430 ! runs over the g-channel (1 to 16).
11432 ! The array SELFREFO contains the coefficient of the water vapor
11433 ! self-continuum (including the energy term). The first index
11434 ! refers to temperature in 7.2 degree increments. For instance,
11435 ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8,
11436 ! etc. The second index runs over the g-channel (1 to 16).
11438 !-------------------------------------------------------------------------------
11439 use rrsw_kg21_k, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
11440 rayl, strrat, layreffr
11448 integer, intent(in) :: rrtmg_unit
11452 character*80 errmess
11453 logical, external :: wrf_dm_on_monitor
11454 !-------------------------------------------------------------------------------
11456 if ( wrf_dm_on_monitor() ) read (rrtmg_unit,err=9010) &
11457 rayl, strrat, layreffr, kao, kbo, selfrefo, forrefo, sfluxrefo
11458 call wrf_dm_bcast_real ( rayl , 1 )
11459 call wrf_dm_bcast_real ( strrat , 1 )
11460 call wrf_dm_bcast_integer ( layreffr , 1 )
11461 call wrf_dm_bcast_bytes ( kao , size ( kao ) * 4 )
11462 call wrf_dm_bcast_bytes ( kbo , size ( kbo ) * 4 )
11463 call wrf_dm_bcast_bytes ( selfrefo , size ( selfrefo ) * 4 )
11464 call wrf_dm_bcast_bytes ( forrefo , size ( forrefo ) * 4 )
11465 call wrf_dm_bcast_bytes ( sfluxrefo , size ( sfluxrefo ) * 4 )
11469 write( errmess , '(A,I4)' ) &
11470 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
11472 end subroutine sw_kgb21
11473 !-------------------------------------------------------------------------------
11476 !-------------------------------------------------------------------------------
11477 subroutine sw_kgb22(rrtmg_unit)
11478 !-------------------------------------------------------------------------------
11479 ! Array sfluxrefo contains the Kurucz solar source function for this band.
11481 ! Array rayl contains the Rayleigh extinction coefficient at v = 8000 cm-1.
11483 ! The array KAO contains absorption coefs at the 16 chosen g-values
11484 ! for a range of pressure levels> ~100mb, temperatures, and binary
11485 ! species parameters (see taumol.f for definition). The first
11486 ! index in the array, JS, runs from 1 to 9, and corresponds to
11487 ! different values of the binary species parameter. For instance,
11488 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
11489 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
11490 ! in the array, JT, which runs from 1 to 5, corresponds to different
11491 ! temperatures. More specifically, JT = 3 means that the data are for
11492 ! the reference temperature TREF for this pressure level, JT = 2 refers
11493 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
11494 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
11495 ! to the JPth reference pressure level (see taumol.f for these levels
11496 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
11497 ! which g-interval the absorption coefficients are for.
11499 ! The array KBO contains absorption coefs at the 16 chosen g-values
11500 ! for a range of pressure levels < ~100mb and temperatures. The first
11501 ! index in the array, JT, which runs from 1 to 5, corresponds to
11502 ! different temperatures. More specifically, JT = 3 means that the
11503 ! data are for the reference temperature TREF for this pressure
11504 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
11505 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
11506 ! The second index, JP, runs from 13 to 59 and refers to the JPth
11507 ! reference pressure level (see taumol.f for the value of these
11508 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
11509 ! and tells us which g-interval the absorption coefficients are for.
11511 ! The array FORREFO contains the coefficient of the water vapor
11512 ! foreign-continuum (including the energy term). The first
11513 ! index refers to reference temperature (296_rb,260_rb,224,260) and
11514 ! pressure (970,475,219,3 mbar) levels. The second index
11515 ! runs over the g-channel (1 to 16).
11517 ! The array SELFREFO contains the coefficient of the water vapor
11518 ! self-continuum (including the energy term). The first index
11519 ! refers to temperature in 7.2 degree increments. For instance,
11520 ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8,
11521 ! etc. The second index runs over the g-channel (1 to 16).
11522 !-------------------------------------------------------------------------------
11523 use rrsw_kg22_k, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
11524 rayl, strrat, layreffr
11532 integer, intent(in) :: rrtmg_unit
11536 character*80 errmess
11537 logical, external :: wrf_dm_on_monitor
11538 !-------------------------------------------------------------------------------
11540 if ( wrf_dm_on_monitor() ) read (rrtmg_unit,err=9010) &
11541 rayl, strrat, layreffr, kao, kbo, selfrefo, forrefo, sfluxrefo
11542 call wrf_dm_bcast_real ( rayl , 1 )
11543 call wrf_dm_bcast_real ( strrat , 1 )
11544 call wrf_dm_bcast_integer ( layreffr , 1 )
11545 call wrf_dm_bcast_bytes ( kao , size ( kao ) * 4 )
11546 call wrf_dm_bcast_bytes ( kbo , size ( kbo ) * 4 )
11547 call wrf_dm_bcast_bytes ( selfrefo , size ( selfrefo ) * 4 )
11548 call wrf_dm_bcast_bytes ( forrefo , size ( forrefo ) * 4 )
11549 call wrf_dm_bcast_bytes ( sfluxrefo , size ( sfluxrefo ) * 4 )
11553 write( errmess , '(A,I4)' ) &
11554 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
11556 end subroutine sw_kgb22
11557 !-------------------------------------------------------------------------------
11560 !-------------------------------------------------------------------------------
11561 subroutine sw_kgb23(rrtmg_unit)
11562 !-------------------------------------------------------------------------------
11563 ! Array sfluxrefo contains the Kurucz solar source function for this band.
11565 ! Array raylo contains the Rayleigh extinction coefficient at all v for
11568 ! Array givfac is the average Giver et al. correction factor for this band.
11570 ! The array KAO contains absorption coefs at the 16 chosen g-values
11571 ! for a range of pressure levels> ~100mb, temperatures, and binary
11572 ! species parameters (see taumol.f for definition). The first
11573 ! index in the array, JS, runs from 1 to 9, and corresponds to
11574 ! different values of the binary species parameter. For instance,
11575 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
11576 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
11577 ! in the array, JT, which runs from 1 to 5, corresponds to different
11578 ! temperatures. More specifically, JT = 3 means that the data are for
11579 ! the reference temperature TREF for this pressure level, JT = 2 refers
11580 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
11581 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
11582 ! to the JPth reference pressure level (see taumol.f for these levels
11583 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
11584 ! which g-interval the absorption coefficients are for.
11586 ! The array FORREFO contains the coefficient of the water vapor
11587 ! foreign-continuum (including the energy term). The first
11588 ! index refers to reference temperature (296,260,224,260) and
11589 ! pressure (970,475,219,3 mbar) levels. The second index
11590 ! runs over the g-channel (1 to 16).
11592 ! The array SELFREFO contains the coefficient of the water vapor
11593 ! self-continuum (including the energy term). The first index
11594 ! refers to temperature in 7.2 degree increments. For instance,
11595 ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8,
11596 ! etc. The second index runs over the g-channel (1 to 16).
11597 !-------------------------------------------------------------------------------
11598 use rrsw_kg23_k, only : kao, selfrefo, forrefo, sfluxrefo, &
11599 raylo, givfac, layreffr
11607 integer, intent(in) :: rrtmg_unit
11611 character*80 errmess
11612 logical, external :: wrf_dm_on_monitor
11613 !-------------------------------------------------------------------------------
11615 if ( wrf_dm_on_monitor() ) read (rrtmg_unit,err=9010) &
11616 raylo, givfac, layreffr, kao, selfrefo, forrefo, sfluxrefo
11617 call wrf_dm_bcast_bytes ( raylo , size ( raylo ) * 4 )
11618 call wrf_dm_bcast_real ( givfac , 1 )
11619 call wrf_dm_bcast_integer ( layreffr , 1 )
11620 call wrf_dm_bcast_bytes ( kao , size ( kao ) * 4 )
11621 call wrf_dm_bcast_bytes ( selfrefo , size ( selfrefo ) * 4 )
11622 call wrf_dm_bcast_bytes ( forrefo , size ( forrefo ) * 4 )
11623 call wrf_dm_bcast_bytes ( sfluxrefo , size ( sfluxrefo ) * 4 )
11626 write( errmess , '(A,I4)' ) &
11627 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
11629 end subroutine sw_kgb23
11630 !-------------------------------------------------------------------------------
11633 !-------------------------------------------------------------------------------
11634 subroutine sw_kgb24(rrtmg_unit)
11635 !-------------------------------------------------------------------------------
11636 ! Array sfluxrefo contains the Kurucz solar source function for this band.
11638 ! Arrays raylao and raylbo contain the Rayleigh extinction coefficient at
11639 ! all v for this band for the upper and lower atmosphere.
11641 ! Arrays abso3ao and abso3bo contain the ozone absorption coefficient at
11642 ! all v for this band for the upper and lower atmosphere.
11644 ! The array KAO contains absorption coefs at the 16 chosen g-values
11645 ! for a range of pressure levels> ~100mb, temperatures, and binary
11646 ! species parameters (see taumol.f for definition). The first
11647 ! index in the array, JS, runs from 1 to 9, and corresponds to
11648 ! different values of the binary species parameter. For instance,
11649 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
11650 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
11651 ! in the array, JT, which runs from 1 to 5, corresponds to different
11652 ! temperatures. More specifically, JT = 3 means that the data are for
11653 ! the reference temperature TREF for this pressure level, JT = 2 refers
11654 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
11655 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
11656 ! to the JPth reference pressure level (see taumol.f for these levels
11657 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
11658 ! which g-interval the absorption coefficients are for.
11660 ! The array KBO contains absorption coefs at the 16 chosen g-values
11661 ! for a range of pressure levels < ~100mb and temperatures. The first
11662 ! index in the array, JT, which runs from 1 to 5, corresponds to
11663 ! different temperatures. More specifically, JT = 3 means that the
11664 ! data are for the reference temperature TREF for this pressure
11665 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
11666 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
11667 ! The second index, JP, runs from 13 to 59 and refers to the JPth
11668 ! reference pressure level (see taumol.f for the value of these
11669 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
11670 ! and tells us which g-interval the absorption coefficients are for.
11672 ! The array FORREFO contains the coefficient of the water vapor
11673 ! foreign-continuum (including the energy term). The first
11674 ! index refers to reference temperature (296,260,224,260) and
11675 ! pressure (970,475,219,3 mbar) levels. The second index
11676 ! runs over the g-channel (1 to 16).
11678 ! The array SELFREFO contains the coefficient of the water vapor
11679 ! self-continuum (including the energy term). The first index
11680 ! refers to temperature in 7.2 degree increments. For instance,
11681 ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8,
11682 ! etc. The second index runs over the g-channel (1 to 16).
11683 !-------------------------------------------------------------------------------
11684 use rrsw_kg24_k, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
11685 raylao, raylbo, abso3ao, abso3bo, strrat, layreffr
11693 integer, intent(in) :: rrtmg_unit
11697 character*80 errmess
11698 logical, external :: wrf_dm_on_monitor
11699 !-------------------------------------------------------------------------------
11701 if ( wrf_dm_on_monitor() ) read (rrtmg_unit,err=9010) &
11702 raylao, raylbo, strrat, layreffr, abso3ao, abso3bo, kao, kbo, selfrefo, &
11704 call wrf_dm_bcast_bytes ( raylao , size ( raylao ) * 4 )
11705 call wrf_dm_bcast_bytes ( raylbo , size ( raylbo ) * 4 )
11706 call wrf_dm_bcast_real ( strrat , 1 )
11707 call wrf_dm_bcast_integer ( layreffr , 1 )
11708 call wrf_dm_bcast_bytes ( abso3ao , size ( abso3ao ) * 4 )
11709 call wrf_dm_bcast_bytes ( abso3bo , size ( abso3bo ) * 4 )
11710 call wrf_dm_bcast_bytes ( kao , size ( kao ) * 4 )
11711 call wrf_dm_bcast_bytes ( kbo , size ( kbo ) * 4 )
11712 call wrf_dm_bcast_bytes ( selfrefo , size ( selfrefo ) * 4 )
11713 call wrf_dm_bcast_bytes ( forrefo , size ( forrefo ) * 4 )
11714 call wrf_dm_bcast_bytes ( sfluxrefo , size ( sfluxrefo ) * 4 )
11718 write( errmess , '(A,I4)' ) &
11719 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
11721 end subroutine sw_kgb24
11722 !-------------------------------------------------------------------------------
11725 !-------------------------------------------------------------------------------
11726 subroutine sw_kgb25(rrtmg_unit)
11727 !-------------------------------------------------------------------------------
11728 ! Array sfluxrefo contains the Kurucz solar source function for this band.
11730 ! Array raylo contains the Rayleigh extinction coefficient at all
11733 ! Arrays abso3ao and abso3bo contain the ozone absorption coefficient at
11734 ! all v for this band for the upper and lower atmosphere.
11736 ! The array KAO contains absorption coefs at the 16 chosen g-values
11737 ! for a range of pressure levels> ~100mb, temperatures, and binary
11738 ! species parameters (see taumol.f for definition). The first
11739 ! index in the array, JS, runs from 1 to 9, and corresponds to
11740 ! different values of the binary species parameter. For instance,
11741 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
11742 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
11743 ! in the array, JT, which runs from 1 to 5, corresponds to different
11744 ! temperatures. More specifically, JT = 3 means that the data are for
11745 ! the reference temperature TREF for this pressure level, JT = 2 refers
11746 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
11747 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
11748 ! to the JPth reference pressure level (see taumol.f for these levels
11749 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
11750 ! which g-interval the absorption coefficients are for.
11751 !-------------------------------------------------------------------------------
11752 use rrsw_kg25_k, only : kao, sfluxrefo, &
11753 raylo, abso3ao, abso3bo, layreffr
11761 integer, intent(in) :: rrtmg_unit
11765 character*80 errmess
11766 logical, external :: wrf_dm_on_monitor
11767 !-------------------------------------------------------------------------------
11769 if ( wrf_dm_on_monitor() ) read (rrtmg_unit,err=9010) &
11770 raylo, layreffr, abso3ao, abso3bo, kao, sfluxrefo
11771 call wrf_dm_bcast_bytes ( raylo , size ( raylo ) * 4 )
11772 call wrf_dm_bcast_integer ( layreffr , 1 )
11773 call wrf_dm_bcast_bytes ( abso3ao , size ( abso3ao ) * 4 )
11774 call wrf_dm_bcast_bytes ( abso3bo , size ( abso3bo ) * 4 )
11775 call wrf_dm_bcast_bytes ( kao , size ( kao ) * 4 )
11776 call wrf_dm_bcast_bytes ( sfluxrefo , size ( sfluxrefo ) * 4 )
11780 write( errmess , '(A,I4)' ) &
11781 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
11783 end subroutine sw_kgb25
11784 !-------------------------------------------------------------------------------
11787 !-------------------------------------------------------------------------------
11788 subroutine sw_kgb26(rrtmg_unit)
11789 !-------------------------------------------------------------------------------
11790 use rrsw_kg26_k, only : sfluxrefo, raylo
11791 !-------------------------------------------------------------------------------
11792 ! Array sfluxrefo contains the Kurucz solar source function for this band.
11794 ! Array raylo contains the Rayleigh extinction coefficient at all v for
11797 !-------------------------------------------------------------------------------
11805 integer, intent(in) :: rrtmg_unit
11809 character*80 errmess
11810 logical, external :: wrf_dm_on_monitor
11811 !-------------------------------------------------------------------------------
11813 if ( wrf_dm_on_monitor() ) read (rrtmg_unit,err=9010) &
11815 call wrf_dm_bcast_bytes ( raylo , size ( raylo ) * 4 )
11816 call wrf_dm_bcast_bytes ( sfluxrefo , size ( sfluxrefo ) * 4 )
11820 write( errmess , '(A,I4)' ) &
11821 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
11823 end subroutine sw_kgb26
11824 !-------------------------------------------------------------------------------
11827 !-------------------------------------------------------------------------------
11828 subroutine sw_kgb27(rrtmg_unit)
11829 !-------------------------------------------------------------------------------
11830 use rrsw_kg27_k, only : kao, kbo, sfluxrefo, raylo, &
11832 !-------------------------------------------------------------------------------
11833 ! Array sfluxrefo contains the Kurucz solar source function for this band.
11834 ! The values in array sfluxrefo were obtained using the "low resolution"
11835 ! version of the Kurucz solar source function. For unknown reasons,
11836 ! the total irradiance in this band differs from the corresponding
11837 ! total in the "high-resolution" version of the Kurucz function.
11838 ! Therefore, these values are scaled by the factor SCALEKUR.
11840 ! Array raylo contains the Rayleigh extinction coefficient at all v = 2925
11843 ! The array KAO contains absorption coefs at the 16 chosen g-values
11844 ! for a range of pressure levels> ~100mb, temperatures, and binary
11845 ! species parameters (see taumol.f for definition). The first
11846 ! index in the array, JS, runs from 1 to 9, and corresponds to
11847 ! different values of the binary species parameter. For instance,
11848 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
11849 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
11850 ! in the array, JT, which runs from 1 to 5, corresponds to different
11851 ! temperatures. More specifically, JT = 3 means that the data are for
11852 ! the reference temperature TREF for this pressure level, JT = 2 refers
11853 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
11854 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
11855 ! to the JPth reference pressure level (see taumol.f for these levels
11856 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
11857 ! which g-interval the absorption coefficients are for.
11859 ! The array KBO contains absorption coefs at the 16 chosen g-values
11860 ! for a range of pressure levels < ~100mb and temperatures. The first
11861 ! index in the array, JT, which runs from 1 to 5, corresponds to
11862 ! different temperatures. More specifically, JT = 3 means that the
11863 ! data are for the reference temperature TREF for this pressure
11864 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
11865 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
11866 ! The second index, JP, runs from 13 to 59 and refers to the JPth
11867 ! reference pressure level (see taumol.f for the value of these
11868 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
11869 ! and tells us which g-interval the absorption coefficients are for.
11870 !-------------------------------------------------------------------------------
11871 use rrsw_kg27_k, only : kao, kbo, sfluxrefo, raylo, &
11880 integer, intent(in) :: rrtmg_unit
11884 character*80 errmess
11885 logical, external :: wrf_dm_on_monitor
11886 !-------------------------------------------------------------------------------
11888 if ( wrf_dm_on_monitor() ) read (rrtmg_unit,err=9010) &
11889 raylo, scalekur, layreffr, kao, kbo, sfluxrefo
11890 call wrf_dm_bcast_bytes ( raylo , size ( raylo ) * 4 )
11891 call wrf_dm_bcast_real ( scalekur , 1 )
11892 call wrf_dm_bcast_integer ( layreffr , 1 )
11893 call wrf_dm_bcast_bytes ( kao , size ( kao ) * 4 )
11894 call wrf_dm_bcast_bytes ( kbo , size ( kbo ) * 4 )
11895 call wrf_dm_bcast_bytes ( sfluxrefo , size ( sfluxrefo ) * 4 )
11899 write( errmess , '(A,I4)' ) &
11900 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
11902 end subroutine sw_kgb27
11903 !-------------------------------------------------------------------------------
11906 !-------------------------------------------------------------------------------
11907 subroutine sw_kgb28(rrtmg_unit)
11908 !-------------------------------------------------------------------------------
11909 ! Array sfluxrefo contains the Kurucz solar source function for this band.
11911 ! Array raylo contains the Rayleigh extinction coefficient at
11912 ! all v = ???? cm-1.
11914 ! The array KAO contains absorption coefs at the 16 chosen g-values
11915 ! for a range of pressure levels> ~100mb, temperatures, and binary
11916 ! species parameters (see taumol.f for definition). The first
11917 ! index in the array, JS, runs from 1 to 9, and corresponds to
11918 ! different values of the binary species parameter. For instance,
11919 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
11920 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
11921 ! in the array, JT, which runs from 1 to 5, corresponds to different
11922 ! temperatures. More specifically, JT = 3 means that the data are for
11923 ! the reference temperature TREF for this pressure level, JT = 2 refers
11924 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
11925 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
11926 ! to the JPth reference pressure level (see taumol.f for these levels
11927 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
11928 ! which g-interval the absorption coefficients are for.
11930 ! The array KBO contains absorption coefs at the 16 chosen g-values
11931 ! for a range of pressure levels < ~100mb and temperatures. The first
11932 ! index in the array, JT, which runs from 1 to 5, corresponds to
11933 ! different temperatures. More specifically, JT = 3 means that the
11934 ! data are for the reference temperature TREF for this pressure
11935 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
11936 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
11937 ! The second index, JP, runs from 13 to 59 and refers to the JPth
11938 ! reference pressure level (see taumol.f for the value of these
11939 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
11940 ! and tells us which g-interval the absorption coefficients are for.
11941 !-------------------------------------------------------------------------------
11942 use rrsw_kg28_k, only : kao, kbo, sfluxrefo, &
11943 rayl, strrat, layreffr
11951 integer, intent(in) :: rrtmg_unit
11955 character*80 errmess
11956 logical, external :: wrf_dm_on_monitor
11957 !-------------------------------------------------------------------------------
11959 if ( wrf_dm_on_monitor() ) read (rrtmg_unit,err=9010) &
11960 rayl, strrat, layreffr, kao, kbo, sfluxrefo
11961 call wrf_dm_bcast_real ( rayl , 1 )
11962 call wrf_dm_bcast_real ( strrat , 1 )
11963 call wrf_dm_bcast_integer ( layreffr , 1 )
11964 call wrf_dm_bcast_bytes ( kao , size ( kao ) * 4 )
11965 call wrf_dm_bcast_bytes ( kbo , size ( kbo ) * 4 )
11966 call wrf_dm_bcast_bytes ( sfluxrefo , size ( sfluxrefo ) * 4 )
11970 write( errmess , '(A,I4)' ) &
11971 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
11973 end subroutine sw_kgb28
11974 !-------------------------------------------------------------------------------
11977 !-------------------------------------------------------------------------------
11978 subroutine sw_kgb29(rrtmg_unit)
11979 !-------------------------------------------------------------------------------
11980 use rrsw_kg29_k, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
11981 absh2oo, absco2o, rayl, layreffr
11982 !-------------------------------------------------------------------------------
11984 ! Array sfluxrefo contains the Kurucz solar source function for this band.
11986 ! Array rayl contains the Rayleigh extinction coefficient at all
11989 ! Array absh2oo contains the water vapor absorption coefficient for
11992 ! Array absco2o contains the carbon dioxide absorption coefficient for
11995 ! The array KAO contains absorption coefs at the 16 chosen g-values
11996 ! for a range of pressure levels> ~100mb, temperatures, and binary
11997 ! species parameters (see taumol.f for definition). The first
11998 ! index in the array, JS, runs from 1 to 9, and corresponds to
11999 ! different values of the binary species parameter. For instance,
12000 ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8,
12001 ! JS = 3 corresponds to the parameter value 2/8, etc. The second index
12002 ! in the array, JT, which runs from 1 to 5, corresponds to different
12003 ! temperatures. More specifically, JT = 3 means that the data are for
12004 ! the reference temperature TREF for this pressure level, JT = 2 refers
12005 ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5
12006 ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers
12007 ! to the JPth reference pressure level (see taumol.f for these levels
12008 ! in mb). The fourth index, IG, goes from 1 to 16, and indicates
12009 ! which g-interval the absorption coefficients are for.
12011 ! The array KBO contains absorption coefs at the 16 chosen g-values
12012 ! for a range of pressure levels < ~100mb and temperatures. The first
12013 ! index in the array, JT, which runs from 1 to 5, corresponds to
12014 ! different temperatures. More specifically, JT = 3 means that the
12015 ! data are for the reference temperature TREF for this pressure
12016 ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for
12017 ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30.
12018 ! The second index, JP, runs from 13 to 59 and refers to the JPth
12019 ! reference pressure level (see taumol.f for the value of these
12020 ! pressure levels in mb). The third index, IG, goes from 1 to 16,
12021 ! and tells us which g-interval the absorption coefficients are for.
12023 ! The array FORREFO contains the coefficient of the water vapor
12024 ! foreign-continuum (including the energy term). The first
12025 ! index refers to reference temperature (296,260,224,260) and
12026 ! pressure (970,475,219,3 mbar) levels. The second index
12027 ! runs over the g-channel (1 to 16).
12029 ! The array SELFREFO contains the coefficient of the water vapor
12030 ! self-continuum (including the energy term). The first index
12031 ! refers to temperature in 7.2 degree increments. For instance,
12032 ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8,
12033 ! etc. The second index runs over the g-channel (1 to 16).
12034 !-------------------------------------------------------------------------------
12035 use rrsw_kg29_k, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
12036 absh2oo, absco2o, rayl, layreffr
12044 integer, intent(in) :: rrtmg_unit
12048 character*80 errmess
12049 logical, external :: wrf_dm_on_monitor
12050 !-------------------------------------------------------------------------------
12052 if ( wrf_dm_on_monitor() ) read (rrtmg_unit,err=9010) &
12053 rayl, layreffr, absh2oo, absco2o, kao, kbo, selfrefo, forrefo, sfluxrefo
12054 call wrf_dm_bcast_real ( rayl , 1 )
12055 call wrf_dm_bcast_integer ( layreffr , 1 )
12056 call wrf_dm_bcast_bytes ( absh2oo , size ( absh2oo ) * 4 )
12057 call wrf_dm_bcast_bytes ( absco2o , size ( absco2o ) * 4 )
12058 call wrf_dm_bcast_bytes ( kao , size ( kao ) * 4 )
12059 call wrf_dm_bcast_bytes ( kbo , size ( kbo ) * 4 )
12060 call wrf_dm_bcast_bytes ( selfrefo , size ( selfrefo ) * 4 )
12061 call wrf_dm_bcast_bytes ( forrefo , size ( forrefo ) * 4 )
12062 call wrf_dm_bcast_bytes ( sfluxrefo , size ( sfluxrefo ) * 4 )
12066 write( errmess , '(A,I4)' ) &
12067 'module_ra_rrtmg_sw: error reading RRTMG_SW_DATA on unit ',rrtmg_unit
12069 end subroutine sw_kgb29
12070 !-------------------------------------------------------------------------------
12073 !-------------------------------------------------------------------------------
12074 !-------------------------------------------------------------------------------
12077 !-------------------------------------------------------------------------------
12078 end module module_ra_rrtmg_swk
12079 !-------------------------------------------------------------------------------