INTERFACE:
subroutine SurfaceRadiation(lbp, ubp)DESCRIPTION:
Solar fluxes absorbed by vegetation and ground surface. Note possible problem when land is on different grid than atmosphere. Land may have sun above the horizon (coszen 5#5) but atmosphere may have sun below the horizon (forc_solad 6#6 and forc_solai 6#6). This is okay because all fluxes (absorbed, reflected, transmitted) are multiplied by the incoming flux and all will equal zero. Atmosphere may have sun above horizon (forc_solad 7#7 and forc_solai 7#7) but land may have sun below horizon. This is okay because fabd, fabi, ftdd, ftid, and ftii all equal zero so that sabv = sabg = fsa = 0. Also, albd and albi equal one so that fsr = forc_solad+forc_solai. In other words, all the radiation is reflected. However, the way the code is currently implemented, this is only true if (forc_solad + forc_solai)|vis = (forc_solad + forc_solai)|nir.
USES:
use clmtype
use clm_varpar , only : numrad
use clm_varcon , only : spval
use time_manager, only : get_curr_date, get_step_size
ARGUMENTS:
implicit none
integer, intent(in) :: lbp, ubp ! pft upper and lower bounds
CALLED FROM:
subroutine Biogeophysics1 in module Biogeophysics1Mod subroutine BiogeophysicsLake in module BiogeophysicsLakeModREVISION HISTORY:
Author: Gordon Bonan 2/18/02, Peter Thornton: Migrated to new data structures. Added a pft loop.LOCAL VARIABLES:
local pointers to original implicit in arguments
integer , pointer :: pcolumn(:) ! pft's column index
integer , pointer :: pgridcell(:) ! pft's gridcell index
real(r8), pointer :: fsun(:) ! sunlit fraction of canopy
real(r8), pointer :: elai(:) ! one-sided leaf area index with b
real(r8), pointer :: esai(:) ! one-sided stem area index with b
real(r8), pointer :: londeg(:) ! longitude (degrees)
real(r8), pointer :: latdeg(:) ! latitude (degrees)
real(r8), pointer :: forc_solad(:,:) ! direct beam radiation (W/m**2)
real(r8), pointer :: forc_solai(:,:) ! diffuse radiation (W/m**2)
real(r8), pointer :: fabd(:,:) ! flux absorbed by veg per unit di
real(r8), pointer :: fabi(:,:) ! flux absorbed by veg per unit di
real(r8), pointer :: ftdd(:,:) ! down direct flux below veg per u
real(r8), pointer :: ftid(:,:) ! down diffuse flux below veg per
real(r8), pointer :: ftii(:,:) ! down diffuse flux below veg per
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)
local pointers to original implicit out arguments
real(r8), pointer :: laisun(:) ! sunlit leaf area
real(r8), pointer :: laisha(:) ! shaded leaf area
real(r8), pointer :: sabg(:) ! solar radiation absorbed by grou
real(r8), pointer :: sabv(:) ! solar radiation absorbed by vege
real(r8), pointer :: fsa(:) ! solar radiation absorbed (total)
real(r8), pointer :: parsun(:) ! average absorbed PAR for sunlit
real(r8), pointer :: parsha(:) ! average absorbed PAR for shaded
real(r8), pointer :: fsr(:) ! solar radiation reflected (W/m**
real(r8), pointer :: fsds_vis_d(:) ! incident direct beam vis solar r
real(r8), pointer :: fsds_nir_d(:) ! incident direct beam nir solar r
real(r8), pointer :: fsds_vis_i(:) ! incident diffuse vis solar radia
real(r8), pointer :: fsds_nir_i(:) ! incident diffuse nir solar radia
real(r8), pointer :: fsr_vis_d(:) ! reflected direct beam vis solar
real(r8), pointer :: fsr_nir_d(:) ! reflected direct beam nir solar
real(r8), pointer :: fsr_vis_i(:) ! reflected diffuse vis solar radi
real(r8), pointer :: fsr_nir_i(:) ! reflected diffuse nir solar radi
real(r8), pointer :: fsds_vis_d_ln(:) ! incident direct beam vis solar r
real(r8), pointer :: fsds_nir_d_ln(:) ! incident direct beam nir solar r
real(r8), pointer :: fsr_vis_d_ln(:) ! reflected direct beam vis solar
real(r8), pointer :: fsr_nir_d_ln(:) ! reflected direct beam nir solar