83  subroutine rrtmgp_sw_main_run(doSWrad, doSWclrsky, top_at_1, doGP_sgs_cnv, doGP_sgs_pbl,  &
 
   84       nCol, nDay, nLay, nGases, rrtmgp_phys_blksz, idx, icseed_sw, iovr, iovr_convcld,     &
 
   85       iovr_max, iovr_maxrand, iovr_rand, iovr_dcorr, iovr_exp, iovr_exprand, isubc_sw,     &
 
   86       iSFC, sfc_alb_nir_dir, sfc_alb_nir_dif, sfc_alb_uvvis_dir, sfc_alb_uvvis_dif, coszen,&
 
   87       p_lay, p_lev, t_lay, t_lev, vmr_o2, vmr_h2o, vmr_o3, vmr_ch4, vmr_n2o, vmr_co2,      &
 
   88       cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, cld_swp, cld_resnow, cld_rwp,      &
 
   89       cld_rerain, precip_frac, cld_cnv_lwp, cld_cnv_reliq, cld_cnv_iwp, cld_cnv_reice,     &
 
   90       cld_pbl_lwp, cld_pbl_reliq, cld_pbl_iwp, cld_pbl_reice, cloud_overlap_param,         &
 
   91       active_gases_array, aersw_tau, aersw_ssa, aersw_g, solcon, scmpsw,                   &
 
   92       fluxswUP_allsky, fluxswDOWN_allsky, fluxswUP_clrsky, fluxswDOWN_clrsky, cldtausw,    &
 
   96    logical, 
intent(in) :: &
 
  102    integer,
intent(in) :: &
 
  118    integer,
intent(in),
dimension(:) :: &
 
  120    integer,
intent(in),
dimension(:), 
optional :: &
 
  122    real(kind_phys), 
dimension(:), 
intent(in) :: &
 
  128    real(kind_phys), 
dimension(:,:), 
intent(in), 
optional :: &
 
  139    real(kind_phys), 
dimension(:,:), 
intent(in) :: &
 
  149    real(kind_phys), 
dimension(:,:), 
intent(in), 
optional :: &    
 
  160    real(kind_phys), 
dimension(:,:,:), 
intent(in) :: &
 
  164    character(len=*), 
dimension(:), 
intent(in), 
optional :: &
 
  166    real(kind_phys), 
intent(in) :: &
 
  170    character(len=*), 
intent(out) :: &
 
  172    integer, 
intent(out) :: &
 
  174    real(kind_phys), 
dimension(:,:), 
intent(inout) :: &
 
  176    real(kind_phys), 
dimension(:,:), 
intent(inout), 
optional :: &
 
  181    type(
cmpfsw_type), 
dimension(:), 
intent(inout) :: &
 
  191    type(
cmpfsw_type), 
dimension(rrtmgp_phys_blksz) :: scmpsw_clrsky, scmpsw_allsky
 
  192    type(ty_fluxes_byband)      :: flux_allsky, flux_clrsky
 
  193    real(kind_phys) :: tau_rain, tau_snow, ssa_rain, ssa_snow, asy_rain, asy_snow, &
 
  194         tau_prec, asy_prec, ssa_prec, asyw, ssaw, za1, za2, flux_dir, flux_dif
 
  195    real(kind_phys), 
dimension(rrtmgp_phys_blksz) :: zcf0, zcf1
 
  196    real(kind_dbl_prec), 
dimension(sw_gas_props%get_ngpt()) :: rng1d
 
  197    real(kind_dbl_prec), 
dimension(sw_gas_props%get_ngpt(),nLay,rrtmgp_phys_blksz) :: rng3d,rng3d2
 
  198    real(kind_dbl_prec), 
dimension(sw_gas_props%get_ngpt()*nLay) :: rng2d
 
  199    logical, 
dimension(rrtmgp_phys_blksz,nLay,sw_gas_props%get_ngpt()) :: maskmcica
 
  200    logical :: cloudy_column, clear_column
 
  201    real(kind_phys), 
dimension(sw_gas_props%get_nband(),rrtmgp_phys_blksz) :: &
 
  202         sfc_alb_dir, sfc_alb_dif
 
  203    real(kind_phys), 
dimension(rrtmgp_phys_blksz,nLay+1,sw_gas_props%get_nband()),
target :: &
 
  204         fluxsw_up_allsky, fluxsw_up_clrsky, fluxsw_dn_dir_clrsky, fluxsw_dn_allsky, &
 
  205         fluxsw_dn_clrsky, fluxsw_dn_dir_allsky
 
  206    integer :: iband, ibd, ibd_uv, icol, igas, ilay, ix, ix2, iblck
 
  207    integer, 
dimension(rrtmgp_phys_blksz) :: ipseed_sw, icols
 
  209    real(kind_phys), 
dimension(2,sw_gas_props%get_nband()) :: bandlimits
 
  210    real(kind_phys), 
dimension(2), 
parameter :: &
 
  211         nir_uvvis_bnd = (/12850,16000/), &
 
  212         uvb_bnd       = (/29000,38000/)
 
  213    real(kind_phys), 
dimension(rrtmgp_phys_blksz,sw_gas_props%get_ngpt()) :: toa_src_sw
 
  215    type(ty_gas_concs)          :: gas_concs
 
  216    type(ty_optical_props_2str) :: sw_optical_props_accum, sw_optical_props_aerosol_local,    &
 
  217         sw_optical_props_cloudsbyband, sw_optical_props_cnvcloudsbyband,                     &
 
  218         sw_optical_props_pblcloudsbyband, sw_optical_props_precipbyband,                     &
 
  219         sw_optical_props_clouds
 
  225    if (.not. doswrad) 
return 
  228    call check_error_msg(
'rrtmgp_sw_main_gas_concs_init',gas_concs%init(active_gases_array))
 
  231    call check_error_msg(
'rrtmgp_sw_main_accumulated_optics_init',&
 
  232         sw_optical_props_accum%alloc_2str(rrtmgp_phys_blksz, nlay, sw_gas_props))
 
  233    call check_error_msg(
'rrtmgp_sw_main_cloud_optics_init',&
 
  234         sw_optical_props_cloudsbyband%alloc_2str(rrtmgp_phys_blksz, nlay, sw_gas_props%get_band_lims_wavenumber()))
 
  235    call check_error_msg(
'rrtmgp_sw_main_precip_optics_init',&
 
  236         sw_optical_props_precipbyband%alloc_2str(rrtmgp_phys_blksz, nlay, sw_gas_props%get_band_lims_wavenumber()))
 
  237    call check_error_msg(
'rrtmgp_sw_mian_cloud_sampling_init', &
 
  238         sw_optical_props_clouds%alloc_2str(rrtmgp_phys_blksz, nlay, sw_gas_props))
 
  239    call check_error_msg(
'rrtmgp_sw_main_aerosol_optics_init',&
 
  240         sw_optical_props_aerosol_local%alloc_2str(rrtmgp_phys_blksz, nlay, sw_gas_props%get_band_lims_wavenumber()))
 
  241    if (dogp_sgs_cnv) 
then 
  242       call check_error_msg(
'rrtmgp_sw_main_cnv_cloud_optics_init',&
 
  243            sw_optical_props_cnvcloudsbyband%alloc_2str(rrtmgp_phys_blksz, nlay, sw_gas_props%get_band_lims_wavenumber()))
 
  245    if (dogp_sgs_pbl) 
then 
  246       call check_error_msg(
'rrtmgp_sw_main_pbl_cloud_optics_init',&
 
  247            sw_optical_props_pblcloudsbyband%alloc_2str(rrtmgp_phys_blksz, nlay, sw_gas_props%get_band_lims_wavenumber()))
 
  250    if (nday .gt. 0) 
then 
  252       bandlimits = sw_gas_props%get_band_lims_wavenumber()
 
  258       do icol=1,nday,rrtmgp_phys_blksz
 
  261          icols = idx(icol:icol + rrtmgp_phys_blksz - 1)
 
  264          zcf0(:) = 1._kind_phys
 
  265          zcf1(:) = 1._kind_phys
 
  266          do iblck = 1, rrtmgp_phys_blksz
 
  268                zcf0(iblck) = min(zcf0(iblck), 1._kind_phys - cld_frac(icols(iblck),ilay))
 
  270             if (zcf0(iblck) <= ftiny)   zcf0(iblck) = 0._kind_phys
 
  271             if (zcf0(iblck) > oneminus) zcf0(iblck) = 1._kind_phys
 
  272             zcf1(iblck) = 1._kind_phys - zcf0(iblck)
 
  274          cloudy_column = any(zcf1 .gt. eps)
 
  275          clear_column  = .true.
 
  276          if (cloudy_column) clear_column = .false.
 
  283          sw_optical_props_clouds%tau             = 0._kind_phys
 
  284          sw_optical_props_clouds%ssa             = 0._kind_phys
 
  285          sw_optical_props_clouds%g               = 0._kind_phys
 
  286          sw_optical_props_accum%tau              = 0._kind_phys
 
  287          sw_optical_props_accum%ssa              = 0._kind_phys
 
  288          sw_optical_props_accum%g                = 0._kind_phys
 
  289          sw_optical_props_cloudsbyband%tau       = 0._kind_phys
 
  290          sw_optical_props_cloudsbyband%ssa       = 0._kind_phys
 
  291          sw_optical_props_cloudsbyband%g         = 0._kind_phys
 
  292          sw_optical_props_precipbyband%tau       = 0._kind_phys
 
  293          sw_optical_props_precipbyband%ssa       = 0._kind_phys
 
  294          sw_optical_props_precipbyband%g         = 0._kind_phys
 
  295          if (dogp_sgs_cnv) 
then 
  296             sw_optical_props_cnvcloudsbyband%tau = 0._kind_phys
 
  297             sw_optical_props_cnvcloudsbyband%ssa = 0._kind_phys
 
  298             sw_optical_props_cnvcloudsbyband%g   = 0._kind_phys
 
  300          if (dogp_sgs_pbl) 
then 
  301             sw_optical_props_pblcloudsbyband%tau = 0._kind_phys
 
  302             sw_optical_props_pblcloudsbyband%ssa = 0._kind_phys
 
  303             sw_optical_props_pblcloudsbyband%g   = 0._kind_phys
 
  305          scmpsw_clrsky= 
cmpfsw_type( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 )
 
  306          scmpsw_allsky= 
cmpfsw_type( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 )
 
  307          cldtausw = 0._kind_phys
 
  310          fluxsw_up_allsky            = 0._kind_phys
 
  311          fluxsw_dn_allsky            = 0._kind_phys
 
  312          fluxsw_dn_dir_allsky        = 0._kind_phys
 
  313          fluxsw_up_clrsky            = 0._kind_phys
 
  314          fluxsw_dn_clrsky            = 0._kind_phys
 
  315          flux_allsky%bnd_flux_up     => fluxsw_up_allsky
 
  316          flux_allsky%bnd_flux_dn     => fluxsw_dn_allsky
 
  317          flux_allsky%bnd_flux_dn_dir => fluxsw_dn_dir_allsky
 
  318          flux_clrsky%bnd_flux_up     => fluxsw_up_clrsky
 
  319          flux_clrsky%bnd_flux_dn     => fluxsw_dn_clrsky
 
  326          call check_error_msg(
'rrtmgp_sw_main_set_vmr_o2',  &
 
  327               gas_concs%set_vmr(trim(active_gases_array(istr_o2)), vmr_o2(icols,:)))
 
  328          call check_error_msg(
'rrtmgp_sw_main_set_vmr_co2', &
 
  329               gas_concs%set_vmr(trim(active_gases_array(istr_co2)),vmr_co2(icols,:)))
 
  330          call check_error_msg(
'rrtmgp_sw_main_set_vmr_ch4', &
 
  331               gas_concs%set_vmr(trim(active_gases_array(istr_ch4)),vmr_ch4(icols,:)))
 
  332          call check_error_msg(
'rrtmgp_sw_main_set_vmr_n2o', &
 
  333               gas_concs%set_vmr(trim(active_gases_array(istr_n2o)),vmr_n2o(icols,:)))
 
  334          call check_error_msg(
'rrtmgp_sw_main_set_vmr_h2o', &
 
  335               gas_concs%set_vmr(trim(active_gases_array(istr_h2o)),vmr_h2o(icols,:)))
 
  336          call check_error_msg(
'rrtmgp_sw_main_set_vmr_o3',  &
 
  337               gas_concs%set_vmr(trim(active_gases_array(istr_o3)), vmr_o3(icols,:)))
 
  345          call check_error_msg(
'rrtmgp_sw_main_gas_optics',sw_gas_props%gas_optics(&
 
  350               sw_optical_props_accum,  & 
 
  354          do iblck = 1, rrtmgp_phys_blksz
 
  355             toa_src_sw(iblck,:) = toa_src_sw(iblck,:)*solcon / sum(toa_src_sw(iblck,:))
 
  367          do iblck = 1, rrtmgp_phys_blksz
 
  368             do iband=1,sw_gas_props%get_nband()
 
  369                if (bandlimits(1,iband) .lt. nir_uvvis_bnd(1)) 
then 
  370                   sfc_alb_dir(iband,iblck) = sfc_alb_nir_dir(icols(iblck))
 
  371                   sfc_alb_dif(iband,iblck) = sfc_alb_nir_dif(icols(iblck))
 
  373                if (bandlimits(1,iband) .eq. nir_uvvis_bnd(1)) 
then 
  374                   sfc_alb_dir(iband,iblck) = 0.5_kind_phys*(sfc_alb_nir_dir(icols(iblck)) +    &
 
  375                                                             sfc_alb_uvvis_dir(icols(iblck)))
 
  376                   sfc_alb_dif(iband,iblck) = 0.5_kind_phys*(sfc_alb_nir_dif(icols(iblck)) +    &
 
  377                                                             sfc_alb_uvvis_dif(icols(iblck)))
 
  380                if (bandlimits(1,iband) .ge. nir_uvvis_bnd(2)) 
then 
  381                   sfc_alb_dir(iband,iblck) = sfc_alb_uvvis_dir(icols(iblck))
 
  382                   sfc_alb_dif(iband,iblck) = sfc_alb_uvvis_dif(icols(iblck))
 
  384                if (bandlimits(1,iband) .eq. uvb_bnd(1)) ibd_uv = iband
 
  393          if (cloudy_column) 
then 
  395             call check_error_msg(
'rrtmgp_sw_main_cloud_optics',sw_cloud_props%cloud_optics(&
 
  398                  cld_reliq(icols,:),                   & 
 
  399                  cld_reice(icols,:),                   & 
 
  400                  sw_optical_props_cloudsbyband))         
 
  402             cldtausw(icols,:) = sw_optical_props_cloudsbyband%tau(:,:,11)
 
  405             if (dogp_sgs_cnv) 
then 
  407                call check_error_msg(
'rrtmgp_sw_main_cnv_cloud_optics',sw_cloud_props%cloud_optics(&
 
  408                     cld_cnv_lwp(icols,:),              & 
 
  409                     cld_cnv_iwp(icols,:),              & 
 
  410                     cld_cnv_reliq(icols,:),            & 
 
  411                     cld_cnv_reice(icols,:),            & 
 
  412                     sw_optical_props_cnvcloudsbyband))   
 
  415                call check_error_msg(
'rrtmgp_sw_main_increment_cnvclouds_to_clouds',&
 
  416                     sw_optical_props_cnvcloudsbyband%increment(sw_optical_props_cloudsbyband))
 
  420             if (dogp_sgs_pbl) 
then 
  422                call check_error_msg(
'rrtmgp_sw_main_pbl_cloud_optics',sw_cloud_props%cloud_optics(&
 
  423                     cld_pbl_lwp(icols,:),              & 
 
  424                     cld_pbl_iwp(icols,:),              & 
 
  425                     cld_pbl_reliq(icols,:),            & 
 
  426                     cld_pbl_reice(icols,:),            & 
 
  427                     sw_optical_props_pblcloudsbyband))   
 
  430                call check_error_msg(
'rrtmgp_sw_main_increment_pblclouds_to_clouds',&
 
  431                     sw_optical_props_pblcloudsbyband%increment(sw_optical_props_cloudsbyband))
 
  435             do iblck = 1, rrtmgp_phys_blksz
 
  437                   if (cld_frac(icols(iblck),ilay) .gt. ftiny) 
then 
  439                      tau_rain = cld_rwp(icols(iblck),ilay)*a0r
 
  440                      if (cld_swp(icols(iblck),ilay) .gt. 0. .and. cld_resnow(icols(iblck),ilay) .gt. 10._kind_phys) 
then 
  441                         tau_snow = cld_swp(icols(iblck),ilay)*1.09087*(a0s + a1s/(1.0315*cld_resnow(icols(iblck),ilay)))     
 
  443                         tau_snow = 0._kind_phys
 
  447                      do iband=1,sw_gas_props%get_nband()
 
  449                         ssa_rain = tau_rain*(1.-b0r(iband))
 
  450                         asy_rain = ssa_rain*c0r(iband)
 
  451                         ssa_snow = tau_snow*(1.-(b0s(iband)+b1s(iband)*1.0315*cld_resnow(icols(iblck),ilay)))
 
  452                         asy_snow = ssa_snow*c0s(iband)
 
  454                         tau_prec = max(1.e-12_kind_phys, tau_rain + tau_snow)
 
  455                         ssa_prec = max(1.e-12_kind_phys, ssa_rain + ssa_snow)
 
  456                         asy_prec = max(1.e-12_kind_phys, asy_rain + asy_snow)
 
  457                         asyw     = asy_prec/max(1.e-12_kind_phys, ssa_prec)
 
  458                         ssaw     = min(1._kind_phys-0.000001, ssa_prec/tau_prec)
 
  461                         sw_optical_props_precipbyband%tau(iblck,ilay,iband) = (1._kind_phys - za2) * tau_prec
 
  462                         sw_optical_props_precipbyband%ssa(iblck,ilay,iband) = (ssaw - za2) / (1._kind_phys - za2)
 
  463                         sw_optical_props_precipbyband%g(iblck,ilay,iband)   = asyw/(1+asyw)
 
  469             call check_error_msg(
'rrtmgp_sw_main_increment_precip_to_clouds',&
 
  470                  sw_optical_props_precipbyband%increment(sw_optical_props_cloudsbyband))
 
  478             if(isubc_sw == 1) 
then       
  479                do iblck = 1, rrtmgp_phys_blksz
 
  480                   ipseed_sw(iblck) = sw_gas_props%get_ngpt() + icols(iblck)
 
  482             elseif (isubc_sw == 2) 
then  
  483                do iblck = 1, rrtmgp_phys_blksz
 
  484                   ipseed_sw(iblck) = icseed_sw(icols(iblck))
 
  489             do iblck = 1, rrtmgp_phys_blksz
 
  492                if (iovr == iovr_max) 
then 
  495                      rng3d(:,ilay,iblck) = rng1d
 
  500                      rng3d(:,ilay,iblck) = rng1d
 
  507             if (iovr == iovr_maxrand .or. iovr == iovr_rand .or. iovr == iovr_max) 
then 
  508                call sampled_mask(real(rng3d, kind=kind_phys), cld_frac(icols,:), maskmcica)
 
  511             if (iovr == iovr_dcorr) 
then 
  512                do iblck = 1, rrtmgp_phys_blksz
 
  516                   rng3d2(:,:,iblck) = reshape(source = rng2d,shape=[sw_gas_props%get_ngpt(),nlay])
 
  519                call sampled_mask(real(rng3d, kind=kind_phys), cld_frac(icols,:), maskmcica,                    &
 
  520                     overlap_param = cloud_overlap_param(icols,1:nlay-1), randoms2 = real(rng3d2, kind=kind_phys))
 
  523             if (iovr == iovr_exp .or. iovr == iovr_exprand) 
then 
  524                call sampled_mask(real(rng3d, kind=kind_phys), cld_frac(icols,:), maskmcica,  &
 
  525                     overlap_param = cloud_overlap_param(icols,1:nlay-1))
 
  528             call check_error_msg(
'rrtmgp_sw_main_cloud_sampling',&
 
  529                  draw_samples(maskmcica, .true., &
 
  530                  sw_optical_props_cloudsbyband, sw_optical_props_clouds))
 
  539          sw_optical_props_aerosol_local%tau = aersw_tau(icols,:,:)
 
  540          sw_optical_props_aerosol_local%ssa = aersw_ssa(icols,:,:)
 
  541          sw_optical_props_aerosol_local%g   = aersw_g(icols,:,:)
 
  542          call check_error_msg(
'rrtmgp_sw_main_increment_aerosol_to_clrsky', & 
 
  543               sw_optical_props_aerosol_local%increment(sw_optical_props_accum))
 
  546          if (clear_column .or. doswclrsky) 
then 
  547             call check_error_msg(
'rrtmgp_sw_main_rte_sw_clrsky',rte_sw(     &
 
  548                  sw_optical_props_accum,    & 
 
  557             fluxswup_clrsky(icols,:)   = sum(flux_clrsky%bnd_flux_up, dim=3)
 
  558             fluxswdown_clrsky(icols,:) = sum(flux_clrsky%bnd_flux_dn, dim=3)
 
  561             do iblck = 1, rrtmgp_phys_blksz
 
  562                do iband=1,sw_gas_props%get_nband()
 
  563                   flux_dir = flux_clrsky%bnd_flux_dn(iblck,isfc,iband)
 
  564                   flux_dif = 0._kind_phys
 
  566                   if (iband < ibd) 
then 
  567                      scmpsw_clrsky(iblck)%nirbm = scmpsw_clrsky(iblck)%nirbm + flux_dir
 
  568                      scmpsw_clrsky(iblck)%nirdf = scmpsw_clrsky(iblck)%nirdf + flux_dif
 
  571                   if (iband == ibd) 
then 
  572                      scmpsw_clrsky(iblck)%nirbm = scmpsw_clrsky(iblck)%nirbm + flux_dir*0.5_kind_phys
 
  573                      scmpsw_clrsky(iblck)%nirdf = scmpsw_clrsky(iblck)%nirdf + flux_dif*0.5_kind_phys
 
  574                      scmpsw_clrsky(iblck)%visbm = scmpsw_clrsky(iblck)%visbm + flux_dir*0.5_kind_phys
 
  575                      scmpsw_clrsky(iblck)%visdf = scmpsw_clrsky(iblck)%visdf + flux_dif*0.5_kind_phys
 
  578                   if (iband > ibd) 
then 
  579                      scmpsw_clrsky(iblck)%visbm = scmpsw_clrsky(iblck)%visbm + flux_dir
 
  580                      scmpsw_clrsky(iblck)%visdf = scmpsw_clrsky(iblck)%visdf + flux_dif
 
  583                   scmpsw_clrsky(iblck)%uvbfc    = flux_clrsky%bnd_flux_dn(iblck,isfc,ibd_uv)
 
  587             fluxswup_clrsky(icols,:)   = 0._kind_phys
 
  588             fluxswdown_clrsky(icols,:) = 0._kind_phys
 
  589             scmpsw                     = 
cmpfsw_type( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 )
 
  597          if (cloudy_column) 
then 
  602             call check_error_msg(
'rrtmgp_sw_main_increment_clouds_to_clrsky', & 
 
  603                  sw_optical_props_clouds%increment(sw_optical_props_accum))
 
  606             call check_error_msg(
'rrtmgp_sw_main_rte_sw_allsky',rte_sw(     &
 
  607                  sw_optical_props_accum,    & 
 
  616             fluxswup_allsky(icols,:)   = sum(flux_allsky%bnd_flux_up, dim=3)
 
  617             fluxswdown_allsky(icols,:) = sum(flux_allsky%bnd_flux_dn, dim=3)
 
  620             do iblck = 1, rrtmgp_phys_blksz
 
  622                do iband=1,sw_gas_props%get_nband()
 
  623                   flux_dir = flux_allsky%bnd_flux_dn_dir(iblck,isfc,iband) 
 
  624                   flux_dif = flux_allsky%bnd_flux_dn(iblck,isfc,iband) - flux_allsky%bnd_flux_dn_dir(iblck,isfc,iband)
 
  626                   if (iband < ibd) 
then 
  627                      scmpsw_allsky(iblck)%nirbm = scmpsw_allsky(iblck)%nirbm + flux_dir
 
  628                      scmpsw_allsky(iblck)%nirdf = scmpsw_allsky(iblck)%nirdf + flux_dif
 
  631                   if (iband == ibd) 
then 
  632                      scmpsw_allsky(iblck)%nirbm = scmpsw_allsky(iblck)%nirbm + flux_dir*0.5_kind_phys
 
  633                      scmpsw_allsky(iblck)%nirdf = scmpsw_allsky(iblck)%nirdf + flux_dif*0.5_kind_phys
 
  634                      scmpsw_allsky(iblck)%visbm = scmpsw_allsky(iblck)%visbm + flux_dir*0.5_kind_phys
 
  635                      scmpsw_allsky(iblck)%visdf = scmpsw_allsky(iblck)%visdf + flux_dif*0.5_kind_phys
 
  638                   if (iband > ibd) 
then 
  639                      scmpsw_allsky(iblck)%visbm = scmpsw_allsky(iblck)%visbm + flux_dir
 
  640                      scmpsw_allsky(iblck)%visdf = scmpsw_allsky(iblck)%visdf + flux_dif
 
  643                   scmpsw_allsky(iblck)%uvbfc    = flux_allsky%bnd_flux_dn(iblck,isfc,ibd_uv)
 
  646                if (zcf1(iblck) .gt. eps) 
then 
  647                   scmpsw(icols(iblck))%nirbm = scmpsw_allsky(iblck)%nirbm
 
  648                   scmpsw(icols(iblck))%nirdf = scmpsw_allsky(iblck)%nirdf
 
  649                   scmpsw(icols(iblck))%visbm = scmpsw_allsky(iblck)%visbm
 
  650                   scmpsw(icols(iblck))%visdf = scmpsw_allsky(iblck)%visdf
 
  651                   scmpsw(icols(iblck))%uvbfc = flux_allsky%bnd_flux_dn(iblck,isfc,ibd_uv)
 
  653                   scmpsw(icols(iblck))%nirbm = scmpsw_clrsky(iblck)%nirbm
 
  654                   scmpsw(icols(iblck))%nirdf = scmpsw_clrsky(iblck)%nirdf
 
  655                   scmpsw(icols(iblck))%visbm = scmpsw_clrsky(iblck)%visbm
 
  656                   scmpsw(icols(iblck))%visdf = scmpsw_clrsky(iblck)%visdf
 
  657                   scmpsw(icols(iblck))%uvbfc = flux_clrsky%bnd_flux_dn(iblck,isfc,ibd_uv)
 
  659                scmpsw(icols(iblck))%uvbf0    = flux_clrsky%bnd_flux_dn(iblck,isfc,ibd_uv)
 
  662             fluxswup_allsky(icols,:)   = sum(flux_clrsky%bnd_flux_up, dim=3)
 
  663             fluxswdown_allsky(icols,:) = sum(flux_clrsky%bnd_flux_dn, dim=3)
 
  664             do iblck = 1, rrtmgp_phys_blksz
 
  665                scmpsw(icols(iblck))%nirbm = scmpsw_clrsky(iblck)%nirbm
 
  666                scmpsw(icols(iblck))%nirdf = scmpsw_clrsky(iblck)%nirdf
 
  667                scmpsw(icols(iblck))%visbm = scmpsw_clrsky(iblck)%visbm
 
  668                scmpsw(icols(iblck))%visdf = scmpsw_clrsky(iblck)%visdf
 
  669                scmpsw(icols(iblck))%uvbfc = flux_clrsky%bnd_flux_dn(iblck,isfc,ibd_uv)
 
  670                scmpsw(icols(iblck))%uvbf0 = flux_clrsky%bnd_flux_dn(iblck,isfc,ibd_uv)
 
  676       fluxswup_allsky(:,:)   = 0._kind_phys
 
  677       fluxswdown_allsky(:,:) = 0._kind_phys
 
  678       fluxswup_clrsky(:,:)   = 0._kind_phys
 
  679       fluxswdown_clrsky(:,:) = 0._kind_phys
 
  680       scmpsw                 = 
cmpfsw_type( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 )