LCOV - code coverage report
Current view: top level - physics/rrtmg/aer_src - rrtmg_sw_init.f90 (source / functions) Hit Total Coverage
Test: coverage.info Lines: 638 642 99.4 %
Date: 2025-03-13 18:42:46 Functions: 17 17 100.0 %

          Line data    Source code
       1             : !     path:      $Source: /storm/rc1/cvsroot/rc/rrtmg_sw/src/rrtmg_sw_init.f90,v $
       2             : !     author:    $Author: mike $
       3             : !     revision:  $Revision: 1.2 $
       4             : !     created:   $Date: 2007/08/23 20:40:13 $
       5             : 
       6             :       module rrtmg_sw_init
       7             : 
       8             : !  --------------------------------------------------------------------------
       9             : ! |                                                                          |
      10             : ! |  Copyright 2002-2007, Atmospheric & Environmental Research, Inc. (AER).  |
      11             : ! |  This software may be used, copied, or redistributed as long as it is    |
      12             : ! |  not sold and this copyright notice is reproduced on each copy made.     |
      13             : ! |  This model is provided as is without any express or implied warranties. |
      14             : ! |                       (http://www.rtweb.aer.com/)                        |
      15             : ! |                                                                          |
      16             : !  --------------------------------------------------------------------------
      17             : 
      18             : ! ------- Modules -------
      19             : 
      20             :       use shr_kind_mod, only: r8 => shr_kind_r8
      21             : 
      22             : !      use parkind, only : jpim, jprb 
      23             :       use rrsw_wvn
      24             :       use rrtmg_sw_setcoef, only: swatmref
      25             : 
      26             :       implicit none
      27             : 
      28             :       contains
      29             : 
      30             : ! **************************************************************************
      31        1536 :       subroutine rrtmg_sw_ini
      32             : ! **************************************************************************
      33             : !
      34             : !  Original version:   Michael J. Iacono; February, 2004
      35             : !  Revision for F90 formatting:  M. J. Iacono, July, 2006
      36             : !
      37             : !  This subroutine performs calculations necessary for the initialization
      38             : !  of the shortwave model.  Lookup tables are computed for use in the SW
      39             : !  radiative transfer, and input absorption coefficient data for each
      40             : !  spectral band are reduced from 224 g-point intervals to 112.
      41             : ! **************************************************************************
      42             : 
      43             :       use parrrsw, only : mg, nbndsw, ngptsw
      44             :       use rrsw_tbl, only: ntbl, tblint, pade, bpade, tau_tbl, exp_tbl
      45             : 
      46             : ! ------- Local -------
      47             : 
      48             :       integer :: ibnd, igc, ig, ind, ipr
      49             :       integer :: igcsm, iprsm
      50             :       integer :: itr
      51             : 
      52             :       real(kind=r8) :: wtsum, wtsm(mg)
      53             :       real(kind=r8) :: tfn
      54             : 
      55             : ! ------- Definitions -------
      56             : !     Arrays for 10000-point look-up tables:
      57             : !     TAU_TBL  Clear-sky optical depth 
      58             : !     EXP_TBL  Exponential lookup table for transmittance
      59             : !     PADE     Pade approximation constant (= 0.278)
      60             : !     BPADE    Inverse of the Pade approximation constant
      61             : !
      62             : 
      63             : ! Initialize model data
      64        1536 :       call swdatinit
      65        1536 :       call swcmbdat              ! g-point interval reduction data
      66        1536 :       call swatmref              ! reference MLS profile
      67        1536 :       call sw_kgb16              ! molecular absorption coefficients
      68        1536 :       call sw_kgb17
      69        1536 :       call sw_kgb18
      70        1536 :       call sw_kgb19
      71        1536 :       call sw_kgb20
      72        1536 :       call sw_kgb21
      73        1536 :       call sw_kgb22
      74        1536 :       call sw_kgb23
      75        1536 :       call sw_kgb24
      76        1536 :       call sw_kgb25
      77        1536 :       call sw_kgb26
      78        1536 :       call sw_kgb27
      79        1536 :       call sw_kgb28
      80        1536 :       call sw_kgb29
      81             : 
      82             : ! Define exponential lookup tables for transmittance. Tau is
      83             : ! computed as a function of the tau transition function, and transmittance 
      84             : ! is calculated as a function of tau.  All tables are computed at intervals 
      85             : ! of 0.0001.  The inverse of the constant used in the Pade approximation to 
      86             : ! the tau transition function is set to bpade.
      87             : 
      88        1536 :       exp_tbl(0) = 1.0_r8
      89        1536 :       exp_tbl(ntbl) = 0.0_r8
      90        1536 :       bpade = 1.0_r8 / pade
      91    15360000 :       do itr = 1, ntbl-1
      92    15358464 :          tfn = float(itr) / float(ntbl)
      93    15358464 :          tau_tbl = bpade * tfn / (1._r8 - tfn)
      94    15360000 :          exp_tbl(itr) = exp(-tau_tbl)
      95             :       enddo
      96             : 
      97             : ! Perform g-point reduction from 16 per band (224 total points) to
      98             : ! a band dependent number (112 total points) for all absorption
      99             : ! coefficient input data and Planck fraction input data.
     100             : ! Compute relative weighting for new g-point combinations.
     101             : 
     102             :       igcsm = 0
     103       23040 :       do ibnd = 1,nbndsw
     104       21504 :          iprsm = 0
     105       23040 :          if (ngc(ibnd).lt.mg) then
     106      193536 :             do igc = 1,ngc(ibnd)
     107      172032 :                igcsm = igcsm + 1
     108      172032 :                wtsum = 0.
     109      516096 :                do ipr = 1, ngn(igcsm)
     110      344064 :                   iprsm = iprsm + 1
     111      516096 :                   wtsum = wtsum + wt(iprsm)
     112             :                enddo
     113      193536 :                wtsm(igc) = wtsum
     114             :             enddo
     115      365568 :             do ig = 1, ng(ibnd+15)
     116      344064 :                ind = (ibnd-1)*mg + ig
     117      365568 :                rwgt(ind) = wt(ig)/wtsm(ngm(ind))
     118             :             enddo
     119             :          else
     120           0 :             do ig = 1, ng(ibnd+15)
     121           0 :                igcsm = igcsm + 1
     122           0 :                ind = (ibnd-1)*mg + ig
     123           0 :                rwgt(ind) = 1.0_r8
     124             :             enddo
     125             :          endif
     126             :       enddo
     127             : 
     128             : ! Reduce g-points for absorption coefficient data in each LW spectral band.
     129             : 
     130        1536 :       call cmbgb16s
     131        1536 :       call cmbgb17
     132        1536 :       call cmbgb18
     133        1536 :       call cmbgb19
     134        1536 :       call cmbgb20
     135        1536 :       call cmbgb21
     136        1536 :       call cmbgb22
     137        1536 :       call cmbgb23
     138        1536 :       call cmbgb24
     139        1536 :       call cmbgb25
     140        1536 :       call cmbgb26
     141        1536 :       call cmbgb27
     142        1536 :       call cmbgb28
     143        1536 :       call cmbgb29
     144             : 
     145        1536 :       end subroutine rrtmg_sw_ini
     146             : 
     147             : !***************************************************************************
     148        1536 :       subroutine swdatinit
     149             : !***************************************************************************
     150             : 
     151             : ! --------- Modules ----------
     152             : 
     153             :       use rrsw_con, only: heatfac, grav, planck, boltz, &
     154             :                           clight, avogad, alosmt, gascon, radcn1, radcn2 
     155             :       use rrsw_wvn, only: ng, nspa, nspb, wavenum1, wavenum2, delwave
     156             :       use shr_const_mod, only: shr_const_avogad
     157             :       use physconst,     only: cday, gravit, cpair
     158             : 
     159             :       save 
     160             :  
     161             : ! Shortwave spectral band limits (wavenumbers)
     162             :       wavenum1(:) = (/2600._r8, 3250._r8, 4000._r8, 4650._r8, 5150._r8, 6150._r8, 7700._r8, &
     163        1536 :                       8050._r8,12850._r8,16000._r8,22650._r8,29000._r8,38000._r8,  820._r8/)
     164             :       wavenum2(:) = (/3250._r8, 4000._r8, 4650._r8, 5150._r8, 6150._r8, 7700._r8, 8050._r8, &
     165        1536 :                      12850._r8,16000._r8,22650._r8,29000._r8,38000._r8,50000._r8, 2600._r8/)
     166             :       delwave(:) =  (/ 650._r8,  750._r8,  650._r8,  500._r8, 1000._r8, 1550._r8,  350._r8, &
     167        1536 :                       4800._r8, 3150._r8, 6650._r8, 6350._r8, 9000._r8,12000._r8, 1780._r8/)
     168             : 
     169             : ! Spectral band information
     170        1536 :       ng(:) = (/16,16,16,16,16,16,16,16,16,16,16,16,16,16/)
     171        1536 :       nspa(:) = (/9,9,9,9,1,9,9,1,9,1,0,1,9,1/)
     172        1536 :       nspb(:) = (/1,5,1,1,1,5,1,0,1,0,0,1,5,1/)
     173             : 
     174             : ! Use constants set in CAM for consistency
     175        1536 :       grav = gravit
     176        1536 :       avogad = shr_const_avogad * 1.e-3_r8
     177             : 
     178             : !     Heatfac is the factor by which one must multiply delta-flux/ 
     179             : !     delta-pressure, with flux in w/m-2 and pressure in mbar, to get 
     180             : !     the heating rate in units of degrees/day.  It is equal to 
     181             : !           (g)x(#sec/day)x(1e-5)/(specific heat of air at const. p)
     182             : !        =  (9.8066)(86400)(1e-5)/(1.004)
     183             : !      heatfac = 8.4391_r8
     184             : 
     185             : !     Modified values for consistency with CAM3:
     186             : !        =  (9.80616)(86400)(1e-5)/(1.00464)
     187             : !      heatfac = 8.43339130434_r8
     188             : 
     189             : !     Calculate heatfac directly from CAM constants:
     190        1536 :       heatfac = grav * cday * 1.e-5_r8 / (cpair * 1.e-3_r8)
     191             : 
     192             : !    Constants from NIST 01/11/2002
     193             : 
     194             : !      grav = 9.8066_r8
     195        1536 :       planck = 6.62606876e-27_r8
     196        1536 :       boltz = 1.3806503e-16_r8
     197        1536 :       clight = 2.99792458e+10_r8
     198             : !      avogad = 6.02214199e+23_r8
     199        1536 :       alosmt = 2.6867775e+19_r8
     200        1536 :       gascon = 8.31447200e+07_r8
     201        1536 :       radcn1 = 1.191042722e-12_r8
     202        1536 :       radcn2 = 1.4387752_r8
     203             : 
     204             : !
     205             : !     units are generally cgs
     206             : !
     207             : !     The first and second radiation constants are taken from NIST.
     208             : !     They were previously obtained from the relations:
     209             : !          radcn1 = 2.*planck*clight*clight*1.e-07
     210             : !          radcn2 = planck*clight/boltz
     211             : 
     212        1536 :       end subroutine swdatinit
     213             : 
     214             : !***************************************************************************
     215        1536 :       subroutine swcmbdat
     216             : !***************************************************************************
     217             : 
     218             :       use rrsw_wvn, only: ngc, ngs, ngn, ngb, ngm, wt
     219             : 
     220             :       save
     221             :  
     222             : ! ------- Definitions -------
     223             : !     Arrays for the g-point reduction from 224 to 112 for the 16 LW bands:
     224             : !     This mapping from 224 to 112 points has been carefully selected to 
     225             : !     minimize the effect on the resulting fluxes and cooling rates, and
     226             : !     caution should be used if the mapping is modified.  The full 224
     227             : !     g-point set can be restored with ngpt=224, ngc=16*16, ngn=224*1., etc.
     228             : !     ngpt    The total number of new g-points
     229             : !     ngc     The number of new g-points in each band
     230             : !     ngs     The cumulative sum of new g-points for each band
     231             : !     ngm     The index of each new g-point relative to the original
     232             : !             16 g-points for each band.  
     233             : !     ngn     The number of original g-points that are combined to make
     234             : !             each new g-point in each band.
     235             : !     ngb     The band index for each new g-point.
     236             : !     wt      RRTM weights for 16 g-points.
     237             : 
     238             : ! Use this set for 112 quadrature point (g-point) model
     239             : ! ------- Data statements -------
     240        1536 :       ngc(:) = (/ 6,12, 8, 8,10,10, 2,10, 8, 6, 6, 8, 6,12 /)
     241        1536 :       ngs(:) = (/ 6,18,26,34,44,54,56,66,74,80,86,94,100,112 /)
     242             :       ngm(:) = (/ 1,1,2,2,3,3,4,4,5,5,5,5,6,6,6,6, &           ! band 16
     243             :                   1,2,3,4,5,6,6,7,8,8,9,10,10,11,12,12, &      ! band 17
     244             :                   1,2,3,4,5,5,6,6,7,7,7,7,8,8,8,8, &           ! band 18
     245             :                   1,2,3,4,5,5,6,6,7,7,7,7,8,8,8,8, &           ! band 19
     246             :                   1,2,3,4,5,6,7,8,9,9,10,10,10,10,10,10, &     ! band 20
     247             :                   1,2,3,4,5,6,7,8,9,9,10,10,10,10,10,10, &     ! band 21
     248             :                   1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2, &           ! band 22
     249             :                   1,1,2,2,3,4,5,6,7,8,9,9,10,10,10,10, &       ! band 23
     250             :                   1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8, &           ! band 24
     251             :                   1,2,3,3,4,4,5,5,5,5,6,6,6,6,6,6, &           ! band 25
     252             :                   1,2,3,3,4,4,5,5,5,5,6,6,6,6,6,6, &           ! band 26
     253             :                   1,2,3,4,5,6,7,7,7,7,8,8,8,8,8,8, &           ! band 27
     254             :                   1,2,3,3,4,4,5,5,5,5,6,6,6,6,6,6, &           ! band 28
     255        1536 :                   1,2,3,4,5,5,6,6,7,7,8,8,9,10,11,12 /)        ! band 29
     256             :       ngn(:) = (/ 2,2,2,2,4,4, &                               ! band 16
     257             :                   1,1,1,1,1,2,1,2,1,2,1,2, &                   ! band 17
     258             :                   1,1,1,1,2,2,4,4, &                           ! band 18
     259             :                   1,1,1,1,2,2,4,4, &                           ! band 19
     260             :                   1,1,1,1,1,1,1,1,2,6, &                       ! band 20
     261             :                   1,1,1,1,1,1,1,1,2,6, &                       ! band 21
     262             :                   8,8, &                                       ! band 22
     263             :                   2,2,1,1,1,1,1,1,2,4, &                       ! band 23
     264             :                   2,2,2,2,2,2,2,2, &                           ! band 24
     265             :                   1,1,2,2,4,6, &                               ! band 25
     266             :                   1,1,2,2,4,6, &                               ! band 26
     267             :                   1,1,1,1,1,1,4,6, &                           ! band 27
     268             :                   1,1,2,2,4,6, &                               ! band 28
     269        1536 :                   1,1,1,1,2,2,2,2,1,1,1,1 /)                   ! band 29
     270             :       ngb(:) = (/ 16,16,16,16,16,16, &                         ! band 16
     271             :                   17,17,17,17,17,17,17,17,17,17,17,17, &       ! band 17
     272             :                   18,18,18,18,18,18,18,18, &                   ! band 18
     273             :                   19,19,19,19,19,19,19,19, &                   ! band 19
     274             :                   20,20,20,20,20,20,20,20,20,20, &             ! band 20
     275             :                   21,21,21,21,21,21,21,21,21,21, &             ! band 21
     276             :                   22,22, &                                     ! band 22
     277             :                   23,23,23,23,23,23,23,23,23,23, &             ! band 23
     278             :                   24,24,24,24,24,24,24,24, &                   ! band 24
     279             :                   25,25,25,25,25,25, &                         ! band 25
     280             :                   26,26,26,26,26,26, &                         ! band 26
     281             :                   27,27,27,27,27,27,27,27, &                   ! band 27
     282             :                   28,28,28,28,28,28, &                         ! band 28
     283        1536 :                   29,29,29,29,29,29,29,29,29,29,29,29 /)       ! band 29
     284             : 
     285             : ! Use this set for full 224 quadrature point (g-point) model
     286             : ! ------- Data statements -------
     287             : !      ngc(:) = (/ 16,16,16,16,16,16,16,16,16,16,16,16,16,16 /)
     288             : !      ngs(:) = (/ 16,32,48,64,80,96,112,128,144,160,176,192,208,224 /)
     289             : !      ngm(:) = (/ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, &    ! band 16
     290             : !                  1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, &    ! band 17
     291             : !                  1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, &    ! band 18
     292             : !                  1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, &    ! band 19
     293             : !                  1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, &    ! band 20
     294             : !                  1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, &    ! band 21
     295             : !                  1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, &    ! band 22
     296             : !                  1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, &    ! band 23
     297             : !                  1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, &    ! band 24
     298             : !                  1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, &    ! band 25
     299             : !                  1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, &    ! band 26
     300             : !                  1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, &    ! band 27
     301             : !                  1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, &    ! band 28
     302             : !                  1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 /)    ! band 29
     303             : !      ngn(:) = (/ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, &           ! band 16
     304             : !                  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, &           ! band 17
     305             : !                  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, &           ! band 18
     306             : !                  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, &           ! band 19
     307             : !                  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, &           ! band 20
     308             : !                  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, &           ! band 21
     309             : !                  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, &           ! band 22
     310             : !                  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, &           ! band 23
     311             : !                  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, &           ! band 24
     312             : !                  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, &           ! band 25
     313             : !                  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, &           ! band 26
     314             : !                  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, &           ! band 27
     315             : !                  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, &           ! band 28
     316             : !                  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /)           ! band 29
     317             : !      ngb(:) = (/ 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, &   ! band 16
     318             : !                  17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, &   ! band 17
     319             : !                  18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, &   ! band 18
     320             : !                  19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19, &   ! band 19
     321             : !                  20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, &   ! band 20
     322             : !                  21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21, &   ! band 21
     323             : !                  22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, &   ! band 22
     324             : !                  23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, &   ! band 23
     325             : !                  24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, &   ! band 24
     326             : !                  25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, &   ! band 25
     327             : !                  26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, &   ! band 26
     328             : !                  27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27, &   ! band 27
     329             : !                  28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28, &   ! band 28
     330             : !                  29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 /)   ! band 29
     331             : 
     332             : 
     333             :       wt(:) =  (/ 0.1527534276_r8, 0.1491729617_r8, 0.1420961469_r8, &
     334             :                   0.1316886544_r8, 0.1181945205_r8, 0.1019300893_r8, &
     335             :                   0.0832767040_r8, 0.0626720116_r8, 0.0424925000_r8, &
     336             :                   0.0046269894_r8, 0.0038279891_r8, 0.0030260086_r8, &
     337             :                   0.0022199750_r8, 0.0014140010_r8, 0.0005330000_r8, &
     338        1536 :                   0.0000750000_r8 /)
     339             : 
     340        1536 :       end subroutine swcmbdat
     341             : 
     342             : !***************************************************************************
     343        1536 :       subroutine cmbgb16s
     344             : !***************************************************************************
     345             : !
     346             : !  Original version:       MJIacono; July 1998
     347             : !  Revision for RRTM_SW:   MJIacono; November 2002
     348             : !  Revision for RRTMG_SW:  MJIacono; December 2003
     349             : !  Revision for F90 reformatting:  MJIacono; July 2006
     350             : !
     351             : !  The subroutines CMBGB16->CMBGB29 input the absorption coefficient
     352             : !  data for each band, which are defined for 16 g-points and 14 spectral
     353             : !  bands. The data are combined with appropriate weighting following the
     354             : !  g-point mapping arrays specified in RRTMG_SW_INIT.  Solar source 
     355             : !  function data in array SFLUXREF are combined without weighting.  All
     356             : !  g-point reduced data are put into new arrays for use in RRTMG_SW.
     357             : !
     358             : !  band 16:  2600-3250 cm-1 (low key- h2o,ch4; high key - ch4)
     359             : !
     360             : !-----------------------------------------------------------------------
     361             : 
     362             :       use rrsw_wvn, only : ngc, ngs, ngn, wt, rwgt
     363             :       use rrsw_kg16, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
     364             :                             ka, kb, selfref, forref, sfluxref
     365             : 
     366             : ! ------- Local -------
     367             :       integer :: jn, jt, jp, igc, ipr, iprsm
     368             :       real(kind=r8) :: sumk, sumf
     369             : 
     370             : 
     371       15360 :       do jn = 1,9
     372       84480 :          do jt = 1,5
     373      981504 :             do jp = 1,13
     374      898560 :                iprsm = 0
     375     6359040 :                do igc = 1,ngc(1)
     376     5391360 :                   sumk = 0.
     377    19768320 :                   do ipr = 1, ngn(igc)
     378    14376960 :                      iprsm = iprsm + 1
     379    19768320 :                      sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm)
     380             :                   enddo
     381     6289920 :                   ka(jn,jt,jp,igc) = sumk
     382             :                enddo
     383             :             enddo
     384             :          enddo
     385             :       enddo
     386             : 
     387        9216 :       do jt = 1,5
     388      370176 :          do jp = 13,59
     389      360960 :             iprsm = 0
     390     2534400 :             do igc = 1,ngc(1)
     391     2165760 :                sumk = 0.
     392     7941120 :                do ipr = 1, ngn(igc)
     393     5775360 :                   iprsm = iprsm + 1
     394     7941120 :                   sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm)
     395             :                enddo
     396     2526720 :                kb(jt,jp,igc) = sumk
     397             :             enddo
     398             :          enddo
     399             :       enddo
     400             : 
     401       16896 :       do jt = 1,10
     402       15360 :          iprsm = 0
     403      109056 :          do igc = 1,ngc(1)
     404       92160 :             sumk = 0.
     405      337920 :             do ipr = 1, ngn(igc)
     406      245760 :                iprsm = iprsm + 1
     407      337920 :                sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm)
     408             :             enddo
     409      107520 :             selfref(jt,igc) = sumk
     410             :          enddo
     411             :       enddo
     412             : 
     413        6144 :       do jt = 1,3
     414        4608 :          iprsm = 0
     415       33792 :          do igc = 1,ngc(1)
     416       27648 :             sumk = 0.
     417      101376 :             do ipr = 1, ngn(igc)
     418       73728 :                iprsm = iprsm + 1
     419      101376 :                sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm)
     420             :             enddo
     421       32256 :             forref(jt,igc) = sumk
     422             :          enddo
     423             :       enddo
     424             : 
     425        1536 :       iprsm = 0
     426       10752 :       do igc = 1,ngc(1)
     427        9216 :          sumf = 0.
     428       33792 :          do ipr = 1, ngn(igc)
     429       24576 :             iprsm = iprsm + 1
     430       33792 :             sumf = sumf + sfluxrefo(iprsm)
     431             :          enddo
     432       10752 :          sfluxref(igc) = sumf
     433             :       enddo
     434             : 
     435        1536 :       end subroutine cmbgb16s
     436             : 
     437             : !***************************************************************************
     438        1536 :       subroutine cmbgb17
     439             : !***************************************************************************
     440             : !
     441             : !     band 17:  3250-4000 cm-1 (low - h2o,co2; high - h2o,co2)
     442             : !-----------------------------------------------------------------------
     443             : 
     444             :       use rrsw_wvn, only : ngc, ngs, ngn, wt, rwgt
     445             :       use rrsw_kg17, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
     446             :                             ka, kb, selfref, forref, sfluxref
     447             : 
     448             : ! ------- Local -------
     449             :       integer :: jn, jt, jp, igc, ipr, iprsm
     450             :       real(kind=r8) :: sumk, sumf
     451             : 
     452             : 
     453       15360 :       do jn = 1,9
     454       84480 :          do jt = 1,5
     455      981504 :             do jp = 1,13
     456      898560 :                iprsm = 0
     457    11750400 :                do igc = 1,ngc(2)
     458    10782720 :                   sumk = 0.
     459    25159680 :                   do ipr = 1, ngn(ngs(1)+igc)
     460    14376960 :                      iprsm = iprsm + 1
     461    25159680 :                      sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+16)
     462             :                   enddo
     463    11681280 :                   ka(jn,jt,jp,igc) = sumk
     464             :                enddo
     465             :             enddo
     466             :          enddo
     467             :       enddo
     468             : 
     469        9216 :       do jn = 1,5
     470       47616 :          do jt = 1,5
     471     1850880 :             do jp = 13,59
     472     1804800 :                iprsm = 0
     473    23500800 :                do igc = 1,ngc(2)
     474    21657600 :                   sumk = 0.
     475    50534400 :                   do ipr = 1, ngn(ngs(1)+igc)
     476    28876800 :                      iprsm = iprsm + 1
     477    50534400 :                      sumk = sumk + kbo(jn,jt,jp,iprsm)*rwgt(iprsm+16)
     478             :                   enddo
     479    23462400 :                   kb(jn,jt,jp,igc) = sumk
     480             :                enddo
     481             :             enddo
     482             :          enddo
     483             :       enddo
     484             : 
     485       16896 :       do jt = 1,10
     486       15360 :          iprsm = 0
     487      201216 :          do igc = 1,ngc(2)
     488      184320 :             sumk = 0.
     489      430080 :             do ipr = 1, ngn(ngs(1)+igc)
     490      245760 :                iprsm = iprsm + 1
     491      430080 :                sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+16)
     492             :             enddo
     493      199680 :             selfref(jt,igc) = sumk
     494             :          enddo
     495             :       enddo
     496             : 
     497        7680 :       do jt = 1,4
     498        6144 :          iprsm = 0
     499       81408 :          do igc = 1,ngc(2)
     500       73728 :             sumk = 0.
     501      172032 :             do ipr = 1, ngn(ngs(1)+igc)
     502       98304 :                iprsm = iprsm + 1
     503      172032 :                sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+16)
     504             :             enddo
     505       79872 :             forref(jt,igc) = sumk
     506             :          enddo
     507             :       enddo
     508             : 
     509        9216 :       do jp = 1,5
     510        7680 :          iprsm = 0
     511      101376 :          do igc = 1,ngc(2)
     512       92160 :             sumf = 0.
     513      215040 :             do ipr = 1, ngn(ngs(1)+igc)
     514      122880 :                iprsm = iprsm + 1
     515      215040 :                sumf = sumf + sfluxrefo(iprsm,jp)
     516             :             enddo
     517       99840 :             sfluxref(igc,jp) = sumf
     518             :          enddo
     519             :       enddo
     520             : 
     521        1536 :       end subroutine cmbgb17
     522             : 
     523             : !***************************************************************************
     524        1536 :       subroutine cmbgb18
     525             : !***************************************************************************
     526             : !
     527             : !     band 18:  4000-4650 cm-1 (low - h2o,ch4; high - ch4)
     528             : !-----------------------------------------------------------------------
     529             : 
     530             :       use rrsw_wvn, only : ngc, ngs, ngn, wt, rwgt
     531             :       use rrsw_kg18, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
     532             :                             ka, kb, selfref, forref, sfluxref
     533             : 
     534             : ! ------- Local -------
     535             :       integer :: jn, jt, jp, igc, ipr, iprsm
     536             :       real(kind=r8) :: sumk, sumf
     537             : 
     538             : 
     539       15360 :       do jn = 1,9
     540       84480 :          do jt = 1,5
     541      981504 :             do jp = 1,13
     542      898560 :                iprsm = 0
     543     8156160 :                do igc = 1,ngc(3)
     544     7188480 :                   sumk = 0.
     545    21565440 :                   do ipr = 1, ngn(ngs(2)+igc)
     546    14376960 :                      iprsm = iprsm + 1
     547    21565440 :                      sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+32)
     548             :                   enddo
     549     8087040 :                   ka(jn,jt,jp,igc) = sumk
     550             :                enddo
     551             :             enddo
     552             :          enddo
     553             :       enddo
     554             : 
     555        9216 :       do jt = 1,5
     556      370176 :          do jp = 13,59
     557      360960 :             iprsm = 0
     558     3256320 :             do igc = 1,ngc(3)
     559     2887680 :                sumk = 0.
     560     8663040 :                do ipr = 1, ngn(ngs(2)+igc)
     561     5775360 :                   iprsm = iprsm + 1
     562     8663040 :                   sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+32)
     563             :                enddo
     564     3248640 :                kb(jt,jp,igc) = sumk
     565             :             enddo
     566             :          enddo
     567             :       enddo
     568             : 
     569       16896 :       do jt = 1,10
     570       15360 :          iprsm = 0
     571      139776 :          do igc = 1,ngc(3)
     572      122880 :             sumk = 0.
     573      368640 :             do ipr = 1, ngn(ngs(2)+igc)
     574      245760 :                iprsm = iprsm + 1
     575      368640 :                sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+32)
     576             :             enddo
     577      138240 :             selfref(jt,igc) = sumk
     578             :          enddo
     579             :       enddo
     580             : 
     581        6144 :       do jt = 1,3
     582        4608 :          iprsm = 0
     583       43008 :          do igc = 1,ngc(3)
     584       36864 :             sumk = 0.
     585      110592 :             do ipr = 1, ngn(ngs(2)+igc)
     586       73728 :                iprsm = iprsm + 1
     587      110592 :                sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+32)
     588             :             enddo
     589       41472 :             forref(jt,igc) = sumk
     590             :          enddo
     591             :       enddo
     592             : 
     593       15360 :       do jp = 1,9
     594       13824 :          iprsm = 0
     595      125952 :          do igc = 1,ngc(3)
     596      110592 :             sumf = 0.
     597      331776 :             do ipr = 1, ngn(ngs(2)+igc)
     598      221184 :                iprsm = iprsm + 1
     599      331776 :                sumf = sumf + sfluxrefo(iprsm,jp)
     600             :             enddo
     601      124416 :             sfluxref(igc,jp) = sumf
     602             :          enddo
     603             :       enddo
     604             : 
     605        1536 :       end subroutine cmbgb18
     606             : 
     607             : !***************************************************************************
     608        1536 :       subroutine cmbgb19
     609             : !***************************************************************************
     610             : !
     611             : !     band 19:  4650-5150 cm-1 (low - h2o,co2; high - co2)
     612             : !-----------------------------------------------------------------------
     613             : 
     614             :       use rrsw_wvn, only : ngc, ngs, ngn, wt, rwgt
     615             :       use rrsw_kg19, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
     616             :                             ka, kb, selfref, forref, sfluxref
     617             : 
     618             : ! ------- Local -------
     619             :       integer :: jn, jt, jp, igc, ipr, iprsm
     620             :       real(kind=r8) :: sumk, sumf
     621             : 
     622             : 
     623       15360 :       do jn = 1,9
     624       84480 :          do jt = 1,5
     625      981504 :             do jp = 1,13
     626      898560 :                iprsm = 0
     627     8156160 :                do igc = 1,ngc(4)
     628     7188480 :                   sumk = 0.
     629    21565440 :                   do ipr = 1, ngn(ngs(3)+igc)
     630    14376960 :                      iprsm = iprsm + 1
     631    21565440 :                      sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+48)
     632             :                   enddo
     633     8087040 :                   ka(jn,jt,jp,igc) = sumk
     634             :                enddo
     635             :             enddo
     636             :          enddo
     637             :       enddo
     638             : 
     639        9216 :       do jt = 1,5
     640      370176 :          do jp = 13,59
     641      360960 :             iprsm = 0
     642     3256320 :             do igc = 1,ngc(4)
     643     2887680 :                sumk = 0.
     644     8663040 :                do ipr = 1, ngn(ngs(3)+igc)
     645     5775360 :                   iprsm = iprsm + 1
     646     8663040 :                   sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+48)
     647             :                enddo
     648     3248640 :                kb(jt,jp,igc) = sumk
     649             :             enddo
     650             :          enddo
     651             :       enddo
     652             : 
     653       16896 :       do jt = 1,10
     654       15360 :          iprsm = 0
     655      139776 :          do igc = 1,ngc(4)
     656      122880 :             sumk = 0.
     657      368640 :             do ipr = 1, ngn(ngs(3)+igc)
     658      245760 :                iprsm = iprsm + 1
     659      368640 :                sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+48)
     660             :             enddo
     661      138240 :             selfref(jt,igc) = sumk
     662             :          enddo
     663             :       enddo
     664             : 
     665        6144 :       do jt = 1,3
     666        4608 :          iprsm = 0
     667       43008 :          do igc = 1,ngc(4)
     668       36864 :             sumk = 0.
     669      110592 :             do ipr = 1, ngn(ngs(3)+igc)
     670       73728 :                iprsm = iprsm + 1
     671      110592 :                sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+48)
     672             :             enddo
     673       41472 :             forref(jt,igc) = sumk
     674             :          enddo
     675             :       enddo
     676             : 
     677       15360 :       do jp = 1,9
     678       13824 :          iprsm = 0
     679      125952 :          do igc = 1,ngc(4)
     680      110592 :             sumf = 0.
     681      331776 :             do ipr = 1, ngn(ngs(3)+igc)
     682      221184 :                iprsm = iprsm + 1
     683      331776 :                sumf = sumf + sfluxrefo(iprsm,jp)
     684             :             enddo
     685      124416 :             sfluxref(igc,jp) = sumf
     686             :          enddo
     687             :       enddo
     688             : 
     689        1536 :       end subroutine cmbgb19
     690             : 
     691             : !***************************************************************************
     692        1536 :       subroutine cmbgb20
     693             : !***************************************************************************
     694             : !
     695             : !     band 20:  5150-6150 cm-1 (low - h2o; high - h2o)
     696             : !-----------------------------------------------------------------------
     697             : 
     698             :       use rrsw_wvn, only : ngc, ngs, ngn, wt, rwgt
     699             :       use rrsw_kg20, only : kao, kbo, selfrefo, forrefo, sfluxrefo, absch4o, &
     700             :                             ka, kb, selfref, forref, sfluxref, absch4
     701             : 
     702             : ! ------- Local -------
     703             :       integer :: jt, jp, igc, ipr, iprsm
     704             :       real(kind=r8) :: sumk, sumf1, sumf2
     705             : 
     706             : 
     707        9216 :       do jt = 1,5
     708      107520 :          do jp = 1,13
     709       99840 :             iprsm = 0
     710     1105920 :             do igc = 1,ngc(5)
     711      998400 :                sumk = 0.
     712     2595840 :                do ipr = 1, ngn(ngs(4)+igc)
     713     1597440 :                   iprsm = iprsm + 1
     714     2595840 :                   sumk = sumk + kao(jt,jp,iprsm)*rwgt(iprsm+64)
     715             :                enddo
     716     1098240 :                ka(jt,jp,igc) = sumk
     717             :             enddo
     718             :          enddo
     719      370176 :          do jp = 13,59
     720      360960 :             iprsm = 0
     721     3978240 :             do igc = 1,ngc(5)
     722     3609600 :                sumk = 0.
     723     9384960 :                do ipr = 1, ngn(ngs(4)+igc)
     724     5775360 :                   iprsm = iprsm + 1
     725     9384960 :                   sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+64)
     726             :                enddo
     727     3970560 :                kb(jt,jp,igc) = sumk
     728             :             enddo
     729             :          enddo
     730             :       enddo
     731             : 
     732       16896 :       do jt = 1,10
     733       15360 :          iprsm = 0
     734      170496 :          do igc = 1,ngc(5)
     735      153600 :             sumk = 0.
     736      399360 :             do ipr = 1, ngn(ngs(4)+igc)
     737      245760 :                iprsm = iprsm + 1
     738      399360 :                sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+64)
     739             :             enddo
     740      168960 :             selfref(jt,igc) = sumk
     741             :          enddo
     742             :       enddo
     743             : 
     744        7680 :       do jt = 1,4
     745        6144 :          iprsm = 0
     746       69120 :          do igc = 1,ngc(5)
     747       61440 :             sumk = 0.
     748      159744 :             do ipr = 1, ngn(ngs(4)+igc)
     749       98304 :                iprsm = iprsm + 1
     750      159744 :                sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+64)
     751             :             enddo
     752       67584 :             forref(jt,igc) = sumk
     753             :          enddo
     754             :       enddo
     755             : 
     756        1536 :       iprsm = 0
     757       16896 :       do igc = 1,ngc(5)
     758       15360 :          sumf1 = 0.
     759       15360 :          sumf2 = 0.
     760       39936 :          do ipr = 1, ngn(ngs(4)+igc)
     761       24576 :             iprsm = iprsm + 1
     762       24576 :             sumf1 = sumf1 + sfluxrefo(iprsm)
     763       39936 :             sumf2 = sumf2 + absch4o(iprsm)*rwgt(iprsm+64)
     764             :          enddo
     765       15360 :          sfluxref(igc) = sumf1
     766       16896 :          absch4(igc) = sumf2
     767             :       enddo
     768             : 
     769        1536 :       end subroutine cmbgb20
     770             : 
     771             : !***************************************************************************
     772        1536 :       subroutine cmbgb21
     773             : !***************************************************************************
     774             : !
     775             : !     band 21:  6150-7700 cm-1 (low - h2o,co2; high - h2o,co2)
     776             : !-----------------------------------------------------------------------
     777             : 
     778             :       use rrsw_wvn, only : ngc, ngs, ngn, wt, rwgt
     779             :       use rrsw_kg21, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
     780             :                             ka, kb, selfref, forref, sfluxref
     781             : 
     782             : ! ------- Local -------
     783             :       integer :: jn, jt, jp, igc, ipr, iprsm
     784             :       real(kind=r8) :: sumk, sumf
     785             : 
     786             : 
     787       15360 :       do jn = 1,9
     788       84480 :          do jt = 1,5
     789      981504 :             do jp = 1,13
     790      898560 :                iprsm = 0
     791     9953280 :                do igc = 1,ngc(6)
     792     8985600 :                   sumk = 0.
     793    23362560 :                   do ipr = 1, ngn(ngs(5)+igc)
     794    14376960 :                      iprsm = iprsm + 1
     795    23362560 :                      sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+80)
     796             :                   enddo
     797     9884160 :                   ka(jn,jt,jp,igc) = sumk
     798             :                enddo
     799             :             enddo
     800             :          enddo
     801             :       enddo
     802             : 
     803        9216 :       do jn = 1,5
     804       47616 :          do jt = 1,5
     805     1850880 :             do jp = 13,59
     806     1804800 :                iprsm = 0
     807    19891200 :                do igc = 1,ngc(6)
     808    18048000 :                   sumk = 0.
     809    46924800 :                   do ipr = 1, ngn(ngs(5)+igc)
     810    28876800 :                      iprsm = iprsm + 1
     811    46924800 :                      sumk = sumk + kbo(jn,jt,jp,iprsm)*rwgt(iprsm+80)
     812             :                   enddo
     813    19852800 :                   kb(jn,jt,jp,igc) = sumk
     814             :                enddo
     815             :             enddo
     816             :          enddo
     817             :       enddo
     818             : 
     819       16896 :       do jt = 1,10
     820       15360 :          iprsm = 0
     821      170496 :          do igc = 1,ngc(6)
     822      153600 :             sumk = 0.
     823      399360 :             do ipr = 1, ngn(ngs(5)+igc)
     824      245760 :                iprsm = iprsm + 1
     825      399360 :                sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+80)
     826             :             enddo
     827      168960 :             selfref(jt,igc) = sumk
     828             :          enddo
     829             :       enddo
     830             : 
     831        7680 :       do jt = 1,4
     832        6144 :          iprsm = 0
     833       69120 :          do igc = 1,ngc(6)
     834       61440 :             sumk = 0.
     835      159744 :             do ipr = 1, ngn(ngs(5)+igc)
     836       98304 :                iprsm = iprsm + 1
     837      159744 :                sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+80)
     838             :             enddo
     839       67584 :             forref(jt,igc) = sumk
     840             :          enddo
     841             :       enddo
     842             : 
     843       15360 :       do jp = 1,9
     844       13824 :          iprsm = 0
     845      153600 :          do igc = 1,ngc(6)
     846      138240 :             sumf = 0.
     847      359424 :             do ipr = 1, ngn(ngs(5)+igc)
     848      221184 :                iprsm = iprsm + 1
     849      359424 :                sumf = sumf + sfluxrefo(iprsm,jp)
     850             :             enddo
     851      152064 :             sfluxref(igc,jp) = sumf
     852             :          enddo
     853             :       enddo
     854             : 
     855        1536 :       end subroutine cmbgb21
     856             : 
     857             : !***************************************************************************
     858        1536 :       subroutine cmbgb22
     859             : !***************************************************************************
     860             : !
     861             : !     band 22:  7700-8050 cm-1 (low - h2o,o2; high - o2)
     862             : !-----------------------------------------------------------------------
     863             : 
     864             :       use rrsw_wvn, only : ngc, ngs, ngn, wt, rwgt
     865             :       use rrsw_kg22, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
     866             :                             ka, kb, selfref, forref, sfluxref
     867             : 
     868             : ! ------- Local -------
     869             :       integer :: jn, jt, jp, igc, ipr, iprsm
     870             :       real(kind=r8) :: sumk, sumf
     871             : 
     872             : 
     873       15360 :       do jn = 1,9
     874       84480 :          do jt = 1,5
     875      981504 :             do jp = 1,13
     876      898560 :                iprsm = 0
     877     2764800 :                do igc = 1,ngc(7)
     878     1797120 :                   sumk = 0.
     879    16174080 :                   do ipr = 1, ngn(ngs(6)+igc)
     880    14376960 :                      iprsm = iprsm + 1
     881    16174080 :                      sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+96)
     882             :                   enddo
     883     2695680 :                   ka(jn,jt,jp,igc) = sumk
     884             :                enddo
     885             :             enddo
     886             :          enddo
     887             :       enddo
     888             : 
     889        9216 :       do jt = 1,5
     890      370176 :          do jp = 13,59
     891      360960 :             iprsm = 0
     892     1090560 :             do igc = 1,ngc(7)
     893      721920 :                sumk = 0.
     894     6497280 :                do ipr = 1, ngn(ngs(6)+igc)
     895     5775360 :                   iprsm = iprsm + 1
     896     6497280 :                   sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+96)
     897             :                enddo
     898     1082880 :                kb(jt,jp,igc) = sumk
     899             :             enddo
     900             :          enddo
     901             :       enddo
     902             : 
     903       16896 :       do jt = 1,10
     904       15360 :          iprsm = 0
     905       47616 :          do igc = 1,ngc(7)
     906       30720 :             sumk = 0.
     907      276480 :             do ipr = 1, ngn(ngs(6)+igc)
     908      245760 :                iprsm = iprsm + 1
     909      276480 :                sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+96)
     910             :             enddo
     911       46080 :             selfref(jt,igc) = sumk
     912             :          enddo
     913             :       enddo
     914             : 
     915        6144 :       do jt = 1,3
     916        4608 :          iprsm = 0
     917       15360 :          do igc = 1,ngc(7)
     918        9216 :             sumk = 0.
     919       82944 :             do ipr = 1, ngn(ngs(6)+igc)
     920       73728 :                iprsm = iprsm + 1
     921       82944 :                sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+96)
     922             :             enddo
     923       13824 :             forref(jt,igc) = sumk
     924             :          enddo
     925             :       enddo
     926             : 
     927       15360 :       do jp = 1,9
     928       13824 :          iprsm = 0
     929       43008 :          do igc = 1,ngc(7)
     930       27648 :             sumf = 0.
     931      248832 :             do ipr = 1, ngn(ngs(6)+igc)
     932      221184 :                iprsm = iprsm + 1
     933      248832 :                sumf = sumf + sfluxrefo(iprsm,jp)
     934             :             enddo
     935       41472 :             sfluxref(igc,jp) = sumf
     936             :          enddo
     937             :       enddo
     938             : 
     939        1536 :       end subroutine cmbgb22
     940             : 
     941             : !***************************************************************************
     942        1536 :       subroutine cmbgb23
     943             : !***************************************************************************
     944             : !
     945             : !     band 23:  8050-12850 cm-1 (low - h2o; high - nothing)
     946             : !-----------------------------------------------------------------------
     947             : 
     948             :       use rrsw_wvn, only : ngc, ngs, ngn, wt, rwgt
     949             :       use rrsw_kg23, only : kao, selfrefo, forrefo, sfluxrefo, raylo, &
     950             :                             ka, selfref, forref, sfluxref, rayl
     951             : 
     952             : ! ------- Local -------
     953             :       integer :: jt, jp, igc, ipr, iprsm
     954             :       real(kind=r8) :: sumk, sumf1, sumf2
     955             : 
     956             : 
     957        9216 :       do jt = 1,5
     958      109056 :          do jp = 1,13
     959       99840 :             iprsm = 0
     960     1105920 :             do igc = 1,ngc(8)
     961      998400 :                sumk = 0.
     962     2595840 :                do ipr = 1, ngn(ngs(7)+igc)
     963     1597440 :                   iprsm = iprsm + 1
     964     2595840 :                   sumk = sumk + kao(jt,jp,iprsm)*rwgt(iprsm+112)
     965             :                enddo
     966     1098240 :                ka(jt,jp,igc) = sumk
     967             :             enddo
     968             :          enddo
     969             :       enddo
     970             : 
     971       16896 :       do jt = 1,10
     972       15360 :          iprsm = 0
     973      170496 :          do igc = 1,ngc(8)
     974      153600 :             sumk = 0.
     975      399360 :             do ipr = 1, ngn(ngs(7)+igc)
     976      245760 :                iprsm = iprsm + 1
     977      399360 :                sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+112)
     978             :             enddo
     979      168960 :             selfref(jt,igc) = sumk
     980             :          enddo
     981             :       enddo
     982             : 
     983        6144 :       do jt = 1,3
     984        4608 :          iprsm = 0
     985       52224 :          do igc = 1,ngc(8)
     986       46080 :             sumk = 0.
     987      119808 :             do ipr = 1, ngn(ngs(7)+igc)
     988       73728 :                iprsm = iprsm + 1
     989      119808 :                sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+112)
     990             :             enddo
     991       50688 :             forref(jt,igc) = sumk
     992             :          enddo
     993             :       enddo
     994             : 
     995        1536 :       iprsm = 0
     996       16896 :       do igc = 1,ngc(8)
     997       15360 :          sumf1 = 0.
     998       15360 :          sumf2 = 0.
     999       39936 :          do ipr = 1, ngn(ngs(7)+igc)
    1000       24576 :             iprsm = iprsm + 1
    1001       24576 :             sumf1 = sumf1 + sfluxrefo(iprsm)
    1002       39936 :             sumf2 = sumf2 + raylo(iprsm)*rwgt(iprsm+112)
    1003             :          enddo
    1004       15360 :          sfluxref(igc) = sumf1
    1005       16896 :          rayl(igc) = sumf2
    1006             :       enddo
    1007             : 
    1008        1536 :       end subroutine cmbgb23
    1009             : 
    1010             : !***************************************************************************
    1011        1536 :       subroutine cmbgb24
    1012             : !***************************************************************************
    1013             : !
    1014             : !     band 24:  12850-16000 cm-1 (low - h2o,o2; high - o2)
    1015             : !-----------------------------------------------------------------------
    1016             : 
    1017             :       use rrsw_wvn, only : ngc, ngs, ngn, wt, rwgt
    1018             :       use rrsw_kg24, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
    1019             :                             abso3ao, abso3bo, raylao, raylbo, &
    1020             :                             ka, kb, selfref, forref, sfluxref, &
    1021             :                             abso3a, abso3b, rayla, raylb
    1022             : 
    1023             : ! ------- Local -------
    1024             :       integer :: jn, jt, jp, igc, ipr, iprsm
    1025             :       real(kind=r8) :: sumk, sumf1, sumf2, sumf3
    1026             : 
    1027             : 
    1028       15360 :       do jn = 1,9
    1029       84480 :          do jt = 1,5
    1030      981504 :             do jp = 1,13
    1031      898560 :                iprsm = 0
    1032     8156160 :                do igc = 1,ngc(9)
    1033     7188480 :                   sumk = 0.
    1034    21565440 :                   do ipr = 1, ngn(ngs(8)+igc)
    1035    14376960 :                      iprsm = iprsm + 1
    1036    21565440 :                      sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+128)
    1037             :                   enddo
    1038     8087040 :                   ka(jn,jt,jp,igc) = sumk
    1039             :                enddo
    1040             :             enddo
    1041             :          enddo
    1042             :       enddo
    1043             : 
    1044        9216 :       do jt = 1,5
    1045      370176 :          do jp = 13,59
    1046      360960 :             iprsm = 0
    1047     3256320 :             do igc = 1,ngc(9)
    1048     2887680 :                sumk = 0.
    1049     8663040 :                do ipr = 1, ngn(ngs(8)+igc)
    1050     5775360 :                   iprsm = iprsm + 1
    1051     8663040 :                   sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+128)
    1052             :                enddo
    1053     3248640 :                kb(jt,jp,igc) = sumk
    1054             :             enddo
    1055             :          enddo
    1056             :       enddo
    1057             : 
    1058       16896 :       do jt = 1,10
    1059       15360 :          iprsm = 0
    1060      139776 :          do igc = 1,ngc(9)
    1061      122880 :             sumk = 0.
    1062      368640 :             do ipr = 1, ngn(ngs(8)+igc)
    1063      245760 :                iprsm = iprsm + 1
    1064      368640 :                sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+128)
    1065             :             enddo
    1066      138240 :             selfref(jt,igc) = sumk
    1067             :          enddo
    1068             :       enddo
    1069             : 
    1070        6144 :       do jt = 1,3
    1071        4608 :          iprsm = 0
    1072       43008 :          do igc = 1,ngc(9)
    1073       36864 :             sumk = 0.
    1074      110592 :             do ipr = 1, ngn(ngs(8)+igc)
    1075       73728 :                iprsm = iprsm + 1
    1076      110592 :                sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+128)
    1077             :             enddo
    1078       41472 :             forref(jt,igc) = sumk
    1079             :          enddo
    1080             :       enddo
    1081             : 
    1082        1536 :       iprsm = 0
    1083       13824 :       do igc = 1,ngc(9)
    1084       12288 :          sumf1 = 0.
    1085       12288 :          sumf2 = 0.
    1086       12288 :          sumf3 = 0.
    1087       36864 :          do ipr = 1, ngn(ngs(8)+igc)
    1088       24576 :             iprsm = iprsm + 1
    1089       24576 :             sumf1 = sumf1 + raylbo(iprsm)*rwgt(iprsm+128)
    1090       24576 :             sumf2 = sumf2 + abso3ao(iprsm)*rwgt(iprsm+128)
    1091       36864 :             sumf3 = sumf3 + abso3bo(iprsm)*rwgt(iprsm+128)
    1092             :          enddo
    1093       12288 :          raylb(igc) = sumf1
    1094       12288 :          abso3a(igc) = sumf2
    1095       13824 :          abso3b(igc) = sumf3
    1096             :       enddo
    1097             : 
    1098       15360 :       do jp = 1,9
    1099             :          iprsm = 0
    1100      125952 :          do igc = 1,ngc(9)
    1101      110592 :             sumf1 = 0.
    1102      110592 :             sumf2 = 0.
    1103      331776 :             do ipr = 1, ngn(ngs(8)+igc)
    1104      221184 :                iprsm = iprsm + 1
    1105      221184 :                sumf1 = sumf1 + sfluxrefo(iprsm,jp)
    1106      331776 :                sumf2 = sumf2 + raylao(iprsm,jp)*rwgt(iprsm+128)
    1107             :             enddo
    1108      110592 :             sfluxref(igc,jp) = sumf1
    1109      124416 :             rayla(igc,jp) = sumf2
    1110             :          enddo
    1111             :       enddo
    1112             : 
    1113        1536 :       end subroutine cmbgb24
    1114             : 
    1115             : !***************************************************************************
    1116        1536 :       subroutine cmbgb25
    1117             : !***************************************************************************
    1118             : !
    1119             : !     band 25:  16000-22650 cm-1 (low - h2o; high - nothing)
    1120             : !-----------------------------------------------------------------------
    1121             : 
    1122             :       use rrsw_wvn, only : ngc, ngs, ngn, wt, rwgt
    1123             :       use rrsw_kg25, only : kao, sfluxrefo, &
    1124             :                             abso3ao, abso3bo, raylo, &
    1125             :                             ka, sfluxref, &
    1126             :                             abso3a, abso3b, rayl
    1127             : 
    1128             : ! ------- Local -------
    1129             :       integer :: jt, jp, igc, ipr, iprsm
    1130             :       real(kind=r8) :: sumk, sumf1, sumf2, sumf3, sumf4
    1131             : 
    1132             : 
    1133        9216 :       do jt = 1,5
    1134      109056 :          do jp = 1,13
    1135       99840 :             iprsm = 0
    1136      706560 :             do igc = 1,ngc(10)
    1137      599040 :                sumk = 0.
    1138     2196480 :                do ipr = 1, ngn(ngs(9)+igc)
    1139     1597440 :                   iprsm = iprsm + 1
    1140     2196480 :                   sumk = sumk + kao(jt,jp,iprsm)*rwgt(iprsm+144)
    1141             :                enddo
    1142      698880 :                ka(jt,jp,igc) = sumk
    1143             :             enddo
    1144             :          enddo
    1145             :       enddo
    1146             : 
    1147        1536 :       iprsm = 0
    1148       10752 :       do igc = 1,ngc(10)
    1149        9216 :          sumf1 = 0.
    1150        9216 :          sumf2 = 0.
    1151        9216 :          sumf3 = 0.
    1152        9216 :          sumf4 = 0.
    1153       33792 :          do ipr = 1, ngn(ngs(9)+igc)
    1154       24576 :             iprsm = iprsm + 1
    1155       24576 :             sumf1 = sumf1 + sfluxrefo(iprsm)
    1156       24576 :             sumf2 = sumf2 + abso3ao(iprsm)*rwgt(iprsm+144)
    1157       24576 :             sumf3 = sumf3 + abso3bo(iprsm)*rwgt(iprsm+144)
    1158       33792 :             sumf4 = sumf4 + raylo(iprsm)*rwgt(iprsm+144)
    1159             :          enddo
    1160        9216 :          sfluxref(igc) = sumf1
    1161        9216 :          abso3a(igc) = sumf2
    1162        9216 :          abso3b(igc) = sumf3
    1163       10752 :          rayl(igc) = sumf4
    1164             :       enddo
    1165             : 
    1166        1536 :       end subroutine cmbgb25
    1167             : 
    1168             : !***************************************************************************
    1169        1536 :       subroutine cmbgb26
    1170             : !***************************************************************************
    1171             : !
    1172             : !     band 26:  22650-29000 cm-1 (low - nothing; high - nothing)
    1173             : !-----------------------------------------------------------------------
    1174             : 
    1175             :       use rrsw_wvn, only : ngc, ngs, ngn, wt, rwgt
    1176             :       use rrsw_kg26, only : sfluxrefo, raylo, &
    1177             :                             sfluxref, rayl
    1178             : 
    1179             : ! ------- Local -------
    1180             :       integer :: igc, ipr, iprsm
    1181             :       real(kind=r8) :: sumf1, sumf2
    1182             : 
    1183             : 
    1184        1536 :       iprsm = 0
    1185       10752 :       do igc = 1,ngc(11)
    1186        9216 :          sumf1 = 0.
    1187        9216 :          sumf2 = 0.
    1188       33792 :          do ipr = 1, ngn(ngs(10)+igc)
    1189       24576 :             iprsm = iprsm + 1
    1190       24576 :             sumf1 = sumf1 + raylo(iprsm)*rwgt(iprsm+160)
    1191       33792 :             sumf2 = sumf2 + sfluxrefo(iprsm)
    1192             :          enddo
    1193        9216 :          rayl(igc) = sumf1
    1194       10752 :          sfluxref(igc) = sumf2
    1195             :       enddo
    1196             : 
    1197        1536 :       end subroutine cmbgb26
    1198             : 
    1199             : !***************************************************************************
    1200        1536 :       subroutine cmbgb27
    1201             : !***************************************************************************
    1202             : !
    1203             : !     band 27:  29000-38000 cm-1 (low - o3; high - o3)
    1204             : !-----------------------------------------------------------------------
    1205             : 
    1206             :       use rrsw_wvn, only : ngc, ngs, ngn, wt, rwgt
    1207             :       use rrsw_kg27, only : kao, kbo, sfluxrefo, raylo, &
    1208             :                             ka, kb, sfluxref, rayl
    1209             : 
    1210             : ! ------- Local -------
    1211             :       integer :: jt, jp, igc, ipr, iprsm
    1212             :       real(kind=r8) :: sumk, sumf1, sumf2
    1213             : 
    1214             : 
    1215        9216 :       do jt = 1,5
    1216      107520 :          do jp = 1,13
    1217       99840 :             iprsm = 0
    1218      906240 :             do igc = 1,ngc(12)
    1219      798720 :                sumk = 0.
    1220     2396160 :                do ipr = 1, ngn(ngs(11)+igc)
    1221     1597440 :                   iprsm = iprsm + 1
    1222     2396160 :                   sumk = sumk + kao(jt,jp,iprsm)*rwgt(iprsm+176)
    1223             :                enddo
    1224      898560 :                ka(jt,jp,igc) = sumk
    1225             :             enddo
    1226             :          enddo
    1227      370176 :          do jp = 13,59
    1228      360960 :             iprsm = 0
    1229     3256320 :             do igc = 1,ngc(12)
    1230     2887680 :                sumk = 0.
    1231     8663040 :                do ipr = 1, ngn(ngs(11)+igc)
    1232     5775360 :                   iprsm = iprsm + 1
    1233     8663040 :                   sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+176)
    1234             :                enddo
    1235     3248640 :                kb(jt,jp,igc) = sumk
    1236             :             enddo
    1237             :          enddo
    1238             :       enddo
    1239             : 
    1240        1536 :       iprsm = 0
    1241       13824 :       do igc = 1,ngc(12)
    1242       12288 :          sumf1 = 0.
    1243       12288 :          sumf2 = 0.
    1244       36864 :          do ipr = 1, ngn(ngs(11)+igc)
    1245       24576 :             iprsm = iprsm + 1
    1246       24576 :             sumf1 = sumf1 + sfluxrefo(iprsm)
    1247       36864 :             sumf2 = sumf2 + raylo(iprsm)*rwgt(iprsm+176)
    1248             :          enddo
    1249       12288 :          sfluxref(igc) = sumf1
    1250       13824 :          rayl(igc) = sumf2
    1251             :       enddo
    1252             : 
    1253        1536 :       end subroutine cmbgb27
    1254             : 
    1255             : !***************************************************************************
    1256        1536 :       subroutine cmbgb28
    1257             : !***************************************************************************
    1258             : !
    1259             : !     band 28:  38000-50000 cm-1 (low - o3,o2; high - o3,o2)
    1260             : !-----------------------------------------------------------------------
    1261             : 
    1262             :       use rrsw_wvn, only : ngc, ngs, ngn, wt, rwgt
    1263             :       use rrsw_kg28, only : kao, kbo, sfluxrefo, &
    1264             :                             ka, kb, sfluxref
    1265             : 
    1266             : ! ------- Local -------
    1267             :       integer :: jn, jt, jp, igc, ipr, iprsm
    1268             :       real(kind=r8) :: sumk, sumf
    1269             : 
    1270             : 
    1271       15360 :       do jn = 1,9
    1272       84480 :          do jt = 1,5
    1273      981504 :             do jp = 1,13
    1274      898560 :                iprsm = 0
    1275     6359040 :                do igc = 1,ngc(13)
    1276     5391360 :                   sumk = 0.
    1277    19768320 :                   do ipr = 1, ngn(ngs(12)+igc)
    1278    14376960 :                      iprsm = iprsm + 1
    1279    19768320 :                      sumk = sumk + kao(jn,jt,jp,iprsm)*rwgt(iprsm+192)
    1280             :                   enddo
    1281     6289920 :                   ka(jn,jt,jp,igc) = sumk
    1282             :                enddo
    1283             :             enddo
    1284             :          enddo
    1285             :       enddo
    1286             : 
    1287        9216 :       do jn = 1,5
    1288       47616 :          do jt = 1,5
    1289     1850880 :             do jp = 13,59
    1290     1804800 :                iprsm = 0
    1291    12672000 :                do igc = 1,ngc(13)
    1292    10828800 :                   sumk = 0.
    1293    39705600 :                   do ipr = 1, ngn(ngs(12)+igc)
    1294    28876800 :                      iprsm = iprsm + 1
    1295    39705600 :                      sumk = sumk + kbo(jn,jt,jp,iprsm)*rwgt(iprsm+192)
    1296             :                   enddo
    1297    12633600 :                   kb(jn,jt,jp,igc) = sumk
    1298             :                enddo
    1299             :             enddo
    1300             :          enddo
    1301             :       enddo
    1302             : 
    1303        9216 :       do jp = 1,5
    1304        7680 :          iprsm = 0
    1305       55296 :          do igc = 1,ngc(13)
    1306       46080 :             sumf = 0.
    1307      168960 :             do ipr = 1, ngn(ngs(12)+igc)
    1308      122880 :                iprsm = iprsm + 1
    1309      168960 :                sumf = sumf + sfluxrefo(iprsm,jp)
    1310             :             enddo
    1311       53760 :             sfluxref(igc,jp) = sumf
    1312             :          enddo
    1313             :       enddo
    1314             : 
    1315        1536 :       end subroutine cmbgb28
    1316             : 
    1317             : !***************************************************************************
    1318        1536 :       subroutine cmbgb29
    1319             : !***************************************************************************
    1320             : !
    1321             : !     band 29:  820-2600 cm-1 (low - h2o; high - co2)
    1322             : !-----------------------------------------------------------------------
    1323             : 
    1324             :       use rrsw_wvn, only : ngc, ngs, ngn, wt, rwgt
    1325             :       use rrsw_kg29, only : kao, kbo, selfrefo, forrefo, sfluxrefo, &
    1326             :                             absh2oo, absco2o, &
    1327             :                             ka, kb, selfref, forref, sfluxref, &
    1328             :                             absh2o, absco2
    1329             : 
    1330             : ! ------- Local -------
    1331             :       integer :: jt, jp, igc, ipr, iprsm
    1332             :       real(kind=r8) :: sumk, sumf1, sumf2, sumf3
    1333             : 
    1334             : 
    1335        9216 :       do jt = 1,5
    1336      107520 :          do jp = 1,13
    1337       99840 :             iprsm = 0
    1338     1305600 :             do igc = 1,ngc(14)
    1339     1198080 :                sumk = 0.
    1340     2795520 :                do ipr = 1, ngn(ngs(13)+igc)
    1341     1597440 :                   iprsm = iprsm + 1
    1342     2795520 :                   sumk = sumk + kao(jt,jp,iprsm)*rwgt(iprsm+208)
    1343             :                enddo
    1344     1297920 :                ka(jt,jp,igc) = sumk
    1345             :             enddo
    1346             :          enddo
    1347      370176 :          do jp = 13,59
    1348      360960 :             iprsm = 0
    1349     4700160 :             do igc = 1,ngc(14)
    1350     4331520 :                sumk = 0.
    1351    10106880 :                do ipr = 1, ngn(ngs(13)+igc)
    1352     5775360 :                   iprsm = iprsm + 1
    1353    10106880 :                   sumk = sumk + kbo(jt,jp,iprsm)*rwgt(iprsm+208)
    1354             :                enddo
    1355     4692480 :                kb(jt,jp,igc) = sumk
    1356             :             enddo
    1357             :          enddo
    1358             :       enddo
    1359             : 
    1360       16896 :       do jt = 1,10
    1361       15360 :          iprsm = 0
    1362      201216 :          do igc = 1,ngc(14)
    1363      184320 :             sumk = 0.
    1364      430080 :             do ipr = 1, ngn(ngs(13)+igc)
    1365      245760 :                iprsm = iprsm + 1
    1366      430080 :                sumk = sumk + selfrefo(jt,iprsm)*rwgt(iprsm+208)
    1367             :             enddo
    1368      199680 :             selfref(jt,igc) = sumk
    1369             :          enddo
    1370             :       enddo
    1371             : 
    1372        7680 :       do jt = 1,4
    1373        6144 :          iprsm = 0
    1374       81408 :          do igc = 1,ngc(14)
    1375       73728 :             sumk = 0.
    1376      172032 :             do ipr = 1, ngn(ngs(13)+igc)
    1377       98304 :                iprsm = iprsm + 1
    1378      172032 :                sumk = sumk + forrefo(jt,iprsm)*rwgt(iprsm+208)
    1379             :             enddo
    1380       79872 :             forref(jt,igc) = sumk
    1381             :          enddo
    1382             :       enddo
    1383             : 
    1384        1536 :       iprsm = 0
    1385       19968 :       do igc = 1,ngc(14)
    1386       18432 :          sumf1 = 0.
    1387       18432 :          sumf2 = 0.
    1388       18432 :          sumf3 = 0.
    1389       43008 :          do ipr = 1, ngn(ngs(13)+igc)
    1390       24576 :             iprsm = iprsm + 1
    1391       24576 :             sumf1 = sumf1 + sfluxrefo(iprsm)
    1392       24576 :             sumf2 = sumf2 + absco2o(iprsm)*rwgt(iprsm+208)
    1393       43008 :             sumf3 = sumf3 + absh2oo(iprsm)*rwgt(iprsm+208)
    1394             :          enddo
    1395       18432 :          sfluxref(igc) = sumf1
    1396       18432 :          absco2(igc) = sumf2
    1397       19968 :          absh2o(igc) = sumf3
    1398             :       enddo
    1399             : 
    1400        1536 :       end subroutine cmbgb29
    1401             : 
    1402             : !***************************************************************************
    1403             : 
    1404             : 
    1405             :       end module rrtmg_sw_init
    1406             : 
    1407             : 

Generated by: LCOV version 1.14