next up previous contents
Next: SnowAge_grain Up: Fortran: Module Interface SNICARMod Previous: Fortran: Module Interface SNICARMod   Contents



   subroutine SurfaceAlbedo in module SurfaceAlbedoMod (CLM)
   subroutine albice (CSIM)
   Author: Mark Flanner
   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)

! 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


     use clmtype
     use clm_varpar       , only : nlevsno, numrad
     use clm_time_manager , only : get_nstep
     use shr_const_mod    , only : SHR_CONST_PI
     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 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)

Erik Kluzek 2011-06-15