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_nstepARGUMENTS:
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 stepCALLED 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 calculatedLOCAL 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: