CALLED FROM:
subroutine SurfaceAlbedo in module SurfaceAlbedoMod (CLM) subroutine albice (CSIM)REVISION HISTORY:
Author: Mark FlannerINTERFACE:
subroutine SNICAR_RT (flg_snw_ice, lbc, ubc, num_nourbanc, filter_nourbanc, & coszen, flg_slr_in, h2osno_liq, h2osno_ice, snw_rds, & mss_cnc_aer_in, albsfc, albout, flx_abs)DESCRIPTION:
! Determine reflectance of, and vertically-resolved solar absorption in, ! snow with impurities. ! ! Original references on physical models of snow reflectance include: ! Wiscombe and Warren [1980] and Warren and Wiscombe [1980], ! Journal of Atmospheric Sciences, 37, ! ! The multi-layer solution for multiple-scattering used here is from: ! Toon et al. [1989], Rapid calculation of radiative heating rates ! and photodissociation rates in inhomogeneous multiple scattering atmospheres, ! J. Geophys. Res., 94, D13, 16287-16301 ! ! The implementation of the SNICAR model in CLM/CSIM is described in: ! Flanner, M., C. Zender, J. Randerson, and P. Rasch [2007], ! Present-day climate forcing and response from black carbon in snow, ! J. Geophys. Res., 112, D11202, doi: 10.1029/2006JD008003
USES:
use clmtype use clm_varpar , only : nlevsno, numrad use clm_time_manager , only : get_nstep use shr_const_mod , only : SHR_CONST_PIARGUMENTS:
implicit none integer , intent(in) :: flg_snw_ice ! flag: =1 when called from CLM, =2 when called from CSIM integer , intent(in) :: lbc, ubc ! column index bounds [unitless] integer , intent(in) :: num_nourbanc ! number of columns in non-urban filter integer , intent(in) :: filter_nourbanc(ubc-lbc+1) ! column filter for non-urban points real(r8), intent(in) :: coszen(lbc:ubc) ! cosine of solar zenith angle for next time step (col) [unitless] integer , intent(in) :: flg_slr_in ! flag: =1 for direct-beam incident flux, =2 for diffuse incident flux real(r8), intent(in) :: h2osno_liq(lbc:ubc,-nlevsno+1:0) ! liquid water content (col,lyr) [kg/m2] real(r8), intent(in) :: h2osno_ice(lbc:ubc,-nlevsno+1:0) ! ice content (col,lyr) [kg/m2] integer, intent(in) :: snw_rds(lbc:ubc,-nlevsno+1:0) ! snow effective radius (col,lyr) [microns, m^-6] real(r8), intent(in) :: mss_cnc_aer_in(lbc:ubc,-nlevsno+1:0,sno_nbr_aer) ! mass concentration of all aerosol species (col,lyr,aer) [kg/kg] real(r8), intent(in) :: albsfc(lbc:ubc,numrad) ! albedo of surface underlying snow (col,bnd) [frc] real(r8), intent(out) :: albout(lbc:ubc,numrad) ! snow albedo, averaged into 2 bands (=0 if no sun or no snow) (col,bnd) [frc] real(r8), intent(out) :: flx_abs(lbc:ubc,-nlevsno+1:1,numrad) ! absorbed flux in each layer per unit flux incident on top of snowpack (col,lyr,bnd) [frc]LOCAL VARIABLES:
! local pointers to implicit in arguments integer, pointer :: snl(:) ! negative number of snow layers (col) [nbr] real(r8), pointer :: h2osno(:) ! snow liquid water equivalent (col) [kg/m2] integer, pointer :: clandunit(:) ! corresponding landunit of column (col) [idx] (debugging only) integer, pointer :: cgridcell(:) ! columns's gridcell index (col) [idx] (debugging only) integer, pointer :: ltype(:) ! landunit type (lnd) (debugging only) real(r8), pointer :: londeg(:) ! longitude (degrees) (debugging only) real(r8), pointer :: latdeg(:) ! latitude (degrees) (debugging only) !OTHER LOCAL VARIABLES: