INTERFACE:
subroutine SurfaceAlbedo(lbg, ubg, lbc, ubc, lbp, ubp, &
num_nourbanc, filter_nourbanc, &
num_nourbanp, filter_nourbanp, &
nextsw_cday, declinp1)
DESCRIPTION:
Surface albedo and two-stream fluxes Surface albedos. Also fluxes (per unit incoming direct and diffuse radiation) reflected, transmitted, and absorbed by vegetation. Also sunlit fraction of the canopy. The calling sequence is: -> SurfaceAlbedo: albedos for next time step -> SoilAlbedo: soil/lake/glacier/wetland albedos -> SNICAR_RT: snow albedos: direct beam (SNICAR) -> SNICAR_RT: snow albedos: diffuse (SNICAR) -> TwoStream: absorbed, reflected, transmitted solar fluxes (vis dir,vis dif, nir dir, nir dif)
USES:
use clmtype
use shr_orb_mod
use clm_time_manager, only : get_nstep
ARGUMENTS:
implicit none
integer , intent(in) :: lbg, ubg ! gridcell bounds
integer , intent(in) :: lbc, ubc ! column bounds
integer , intent(in) :: lbp, ubp ! pft bounds
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
integer , intent(in) :: num_nourbanp ! number of pfts in non-urban filter
integer , intent(in) :: filter_nourbanp(ubp-lbp+1) ! pft filter for non-urban points
real(r8), intent(in) :: nextsw_cday ! calendar day at Greenwich (1.00, ..., days/year)
real(r8), intent(in) :: declinp1 ! declination angle (radians) for next time step
CALLED FROM:
subroutine clm_driver1 subroutine iniTimeVarREVISION HISTORY:
Author: Gordon Bonan
2/1/02, Peter Thornton: Migrate to new data structures
8/20/03, Mariana Vertenstein: Vectorized routine
11/3/03, Peter Thornton: added decl(c) output for use in CN code.
03/28/08, Mark Flanner: added SNICAR, which required reversing the
order of calls to SNICAR_RT and SoilAlbedo and the location where
ground albedo is calculated
LOCAL VARIABLES:
local pointers to implicit in arguments
integer , pointer :: pgridcell(:) ! gridcell of corresponding pft
integer , pointer :: plandunit(:) ! index into landunit level quantities
integer , pointer :: itypelun(:) ! landunit type
integer , pointer :: pcolumn(:) ! column of corresponding pft
integer , pointer :: cgridcell(:) ! gridcell of corresponding column
real(r8), pointer :: pwtgcell(:) ! weight of pft wrt corresponding gridcell
real(r8), pointer :: lat(:) ! gridcell latitude (radians)
real(r8), pointer :: lon(:) ! gridcell longitude (radians)
real(r8), pointer :: elai(:) ! one-sided leaf area index with burying by snow
real(r8), pointer :: esai(:) ! one-sided stem area index with burying by snow
real(r8), pointer :: h2osno(:) ! snow water (mm H2O)
real(r8), pointer :: rhol(:,:) ! leaf reflectance: 1=vis, 2=nir
real(r8), pointer :: rhos(:,:) ! stem reflectance: 1=vis, 2=nir
real(r8), pointer :: taul(:,:) ! leaf transmittance: 1=vis, 2=nir
real(r8), pointer :: taus(:,:) ! stem transmittance: 1=vis, 2=nir
integer , pointer :: ivt(:) ! pft vegetation type
local pointers toimplicit out arguments
real(r8), pointer :: coszen(:) ! cosine of solar zenith angle
real(r8), pointer :: fsun(:) ! sunlit fraction of canopy
real(r8), pointer :: albgrd(:,:) ! ground albedo (direct)
real(r8), pointer :: albgri(:,:) ! ground albedo (diffuse)
real(r8), pointer :: albd(:,:) ! surface albedo (direct)
real(r8), pointer :: albi(:,:) ! surface albedo (diffuse)
real(r8), pointer :: fabd(:,:) ! flux absorbed by veg per unit direct flux
real(r8), pointer :: fabi(:,:) ! flux absorbed by veg per unit diffuse flux
real(r8), pointer :: ftdd(:,:) ! down direct flux below veg per unit dir flx
real(r8), pointer :: ftid(:,:) ! down diffuse flux below veg per unit dir flx
real(r8), pointer :: ftii(:,:) ! down diffuse flux below veg per unit dif flx
real(r8), pointer :: decl(:) ! solar declination angle (radians)
real(r8), pointer :: gdir(:) ! leaf projection in solar direction (0 to 1)
real(r8), pointer :: omega(:,:) ! fraction of intercepted radiation that is scattered (0 to 1)
real(r8), pointer :: frac_sno(:) ! fraction of ground covered by snow (0 to 1)
real(r8), pointer :: h2osoi_liq(:,:) ! liquid water content (col,lyr) [kg/m2]
real(r8), pointer :: h2osoi_ice(:,:) ! ice lens content (col,lyr) [kg/m2]
real(r8), pointer :: mss_cnc_bcphi(:,:) ! mass concentration of hydrophilic BC (col,lyr) [kg/kg]
real(r8), pointer :: mss_cnc_bcpho(:,:) ! mass concentration of hydrophobic BC (col,lyr) [kg/kg]
real(r8), pointer :: mss_cnc_ocphi(:,:) ! mass concentration of hydrophilic OC (col,lyr) [kg/kg]
real(r8), pointer :: mss_cnc_ocpho(:,:) ! mass concentration of hydrophobic OC (col,lyr) [kg/kg]
real(r8), pointer :: mss_cnc_dst1(:,:) ! mass concentration of dust aerosol species 1 (col,lyr) [kg/kg]
real(r8), pointer :: mss_cnc_dst2(:,:) ! mass concentration of dust aerosol species 2 (col,lyr) [kg/kg]
real(r8), pointer :: mss_cnc_dst3(:,:) ! mass concentration of dust aerosol species 3 (col,lyr) [kg/kg]
real(r8), pointer :: mss_cnc_dst4(:,:) ! mass concentration of dust aerosol species 4 (col,lyr) [kg/kg]
real(r8), pointer :: albsod(:,:) ! direct-beam soil albedo (col,bnd) [frc]
real(r8), pointer :: albsoi(:,:) ! diffuse soil albedo (col,bnd) [frc]
real(r8), pointer :: flx_absdv(:,:) ! direct flux absorption factor (col,lyr): VIS [frc]
real(r8), pointer :: flx_absdn(:,:) ! direct flux absorption factor (col,lyr): NIR [frc]
real(r8), pointer :: flx_absiv(:,:) ! diffuse flux absorption factor (col,lyr): VIS [frc]
real(r8), pointer :: flx_absin(:,:) ! diffuse flux absorption factor (col,lyr): NIR [frc]
real(r8), pointer :: snw_rds(:,:) ! snow grain radius (col,lyr) [microns]
real(r8), pointer :: albgrd_pur(:,:) ! pure snow ground albedo (direct)
real(r8), pointer :: albgri_pur(:,:) ! pure snow ground albedo (diffuse)
real(r8), pointer :: albgrd_bc(:,:) ! ground albedo without BC (direct)
real(r8), pointer :: albgri_bc(:,:) ! ground albedo without BC (diffuse)
real(r8), pointer :: albgrd_oc(:,:) ! ground albedo without OC (direct)
real(r8), pointer :: albgri_oc(:,:) ! ground albedo without OC (diffuse)
real(r8), pointer :: albgrd_dst(:,:) ! ground albedo without dust (direct)
real(r8), pointer :: albgri_dst(:,:) ! ground albedo without dust (diffuse)
real(r8), pointer :: albsnd_hst(:,:) ! snow albedo, direct, for history files (col,bnd) [frc]
real(r8), pointer :: albsni_hst(:,:) ! snow ground albedo, diffuse, for history files (col,bnd) [frc]
!OTHER LOCAL VARIABLES: