next up previous contents index
Next: Module TridiagonalMod (File: TridiagonalMod.F90) Up: Module SurfaceRadiationMod (File: SurfaceRadiationMod.F90) Previous: Module SurfaceRadiationMod (File: SurfaceRadiationMod.F90)   Contents   Index


SurfaceRadiation


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 BiogeophysicsLakeMod
REVISION 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



Mariana Vertenstein 2004-06-21