next up previous contents
Next: Fortran: Module Interface BalanceCheckMod Up: Fortran: Module Interface VOCEmissionMod Previous: Fortran: Module Interface VOCEmissionMod   Contents

VOCEmission


INTERFACE:

   subroutine VOCEmission (lbp, ubp, num_soilp, filter_soilp )
   ! NEW DESCRIPTION
   Volatile organic compound emission
   This code simulates volatile organic compound emissions following:
   1. Isoprene: Guenther et al., 2006 description of MEGAN emissions
       following equations 2-9, 16-17, 20
   2. Monoterpenes/OVOCs/ORVOCs/CO: algorithm presented in Guenther, A., 
      1999: Modeling Biogenic Volatile Organic Compound Emissions to the 
      Atmosphere. In Reactive Hydrocarbons in the Atmosphere, Ch. 3
      With updates from MEGAN online user's guide 
      ( http://acd.ucar.edu/~guenther/MEGAN/MEGANusersguide.pdf)
   This model relies on the assumption that 90% of isoprene and monoterpene
   emissions originate from canopy foliage:
      E= epsilon * gamma * rho
   VOC flux (E) [ugC m-2 h-1] is calculated from baseline emission
   factors (epsilon) [ugC m-2 h-1] which are mapped for each PFT (isoprene)
   or constant for each PFT (others).  Note that for constant EFs the units
   of [ugC g-1 h-1] must be multiplied by the source density factor.
   The emission activity factor (gamma) [unitless] for isoprene includes 
   dependence on PPFT, temperature, LAI, leaf age and soil moisture.  
   The canopy environment constant was calculated offline for CLM+CAM at 
   standard conditions.
   The emission activity factor for the other emissions depends on temperature.
   We assume that the escape efficiency (rho) here is unity following
   Guenther et al., 2006.
   Subroutine written to operate at the patch level.
   IN FINAL IMPLEMENTATION, REMEMBER:
   1. may wish to call this routine only as freq. as rad. calculations
   2. may wish to place epsilon values directly in pft-physiology file
   Output: vocflx(nvoc) !VOC flux [ug C m-2 h-1]
USES:
     use shr_kind_mod , only : r8 => shr_kind_r8
     use clm_atmlnd   , only : clm_a2l
     use clmtype
     use clm_varpar   , only : nvoc, numpft
     use clm_atmlnd   , only : clm_a2l
     use shr_const_mod, only : SHR_CONST_RGAS
     use clm_varcon   , only : denice
     use clm_varpar   , only : nlevsoi
     use pftvarcon    , only : ndllf_evr_tmp_tree,  ndllf_evr_brl_tree,    &
                               ndllf_dcd_brl_tree,  nbrdlf_evr_trp_tree,   &
                               nbrdlf_evr_tmp_tree, nbrdlf_dcd_brl_shrub,  &
                               nbrdlf_dcd_trp_tree, nbrdlf_dcd_tmp_tree,   &
                               nbrdlf_dcd_brl_tree, nbrdlf_evr_shrub,      &
                               nc3_arctic_grass,                           &
                               nc3crop,             nc4_grass,             &
                               noveg
ARGUMENTS:
     implicit none
     integer, intent(in) :: lbp, ubp                    ! pft bounds
     integer, intent(in) :: num_soilp                   ! number of columns in soil pft filter
     integer, intent(in) :: filter_soilp(num_soilp)     ! pft filter for soil
CALLED FROM:
REVISION HISTORY:
   Author: Sam Levis
   2/1/02, Peter Thornton: migration to new data structure
   4/15/06, Colette L. Heald: modify for updated MEGAN model (Guenther et al., 2006)
LOCAL VARIABLES:
   local pointers to implicit in arguments
     integer , pointer :: pgridcell(:)     ! gridcell index of corresponding pft
     integer , pointer :: pcolumn(:)       ! column index of corresponding pft
     integer , pointer :: ivt(:)           ! pft vegetation type for current
     real(r8), pointer :: t_veg(:)         ! pft vegetation temperature (Kelvin)
     real(r8), pointer :: fsun(:)          ! sunlit fraction of canopy
     real(r8), pointer :: elai(:)          ! one-sided leaf area index with burying by snow
     real(r8), pointer :: clayfrac(:)      ! fraction of soil that is clay
     real(r8), pointer :: sandfrac(:)      ! fraction of soil that is sand
     real(r8), pointer :: forc_solad(:,:)  ! direct beam radiation (visible only)
     real(r8), pointer :: forc_solai(:,:)  ! diffuse radiation     (visible only)
     real(r8), pointer :: sla(:)           ! specific leaf area [m2 leaf g-1 C]
     real(r8), pointer :: h2osoi_vol(:,:)  ! volumetric soil water (m3/m3)
     real(r8), pointer :: h2osoi_ice(:,:)  ! ice soil content (kg/m3)
     real(r8), pointer :: dz(:,:)          ! depth of layer (m)
     real(r8), pointer :: coszen(:)        ! cosine of solar zenith angle
     real(r8), pointer :: efisop(:,:)      ! emission factors for isoprene for each pft [ug C m-2 h-1]
     real(r8), pointer :: elai_p(:)        ! one-sided leaf area index from previous timestep
     real(r8), pointer :: t_veg24(:)       ! avg pft vegetation temperature for last 24 hrs
     real(r8), pointer :: t_veg240(:)      ! avg pft vegetation temperature for last 240 hrs
     real(r8), pointer :: fsun24(:)        ! sunlit fraction of canopy last 24 hrs
     real(r8), pointer :: fsun240(:)       ! sunlit fraction of canopy last 240 hrs
     real(r8), pointer :: forc_solad24(:)  ! direct beam radiation last 24hrs  (visible only)
     real(r8), pointer :: forc_solai24(:)  ! diffuse radiation  last 24hrs     (visible only)
     real(r8), pointer :: forc_solad240(:) ! direct beam radiation last 240hrs (visible only)
     real(r8), pointer :: forc_solai240(:) ! diffuse radiation  last 240hrs    (visible only)
     real(r8), pointer :: bsw(:,:)         ! Clapp and Hornberger "b" (nlevgrnd)
     real(r8), pointer :: watsat(:,:)      ! volumetric soil water at saturation (porosity) (nlevgrnd)
     real(r8), pointer :: sucsat(:,:)      ! minimum soil suction (mm) (nlevgrnd)
 
     real(r8), parameter :: smpmax = 2.57e5_r8 ! maximum soil matrix potential
   local pointers to original implicit out arrays
     real(r8), pointer :: vocflx(:,:)      ! VOC flux [ug C m-2 h-1]
     real(r8), pointer :: vocflx_tot(:)    ! VOC flux [ug C m-2 h-1]
     real(r8), pointer :: vocflx_1(:)      ! VOC flux(1) [ug C m-2 h-1]
     real(r8), pointer :: vocflx_2(:)      ! VOC flux(2) [ug C m-2 h-1]
     real(r8), pointer :: vocflx_3(:)      ! VOC flux(3) [ug C m-2 h-1]
     real(r8), pointer :: vocflx_4(:)      ! VOC flux(4) [ug C m-2 h-1]
     real(r8), pointer :: vocflx_5(:)      ! VOC flux(5) [ug C m-2 h-1]
     real(r8), pointer :: Eopt_out(:)     
     real(r8), pointer :: topt_out(:)
     real(r8), pointer :: alpha_out(:)
     real(r8), pointer :: cp_out(:)
     real(r8), pointer :: paru_out(:)
     real(r8), pointer :: par24u_out(:)
     real(r8), pointer :: par240u_out(:)
     real(r8), pointer :: para_out(:)
     real(r8), pointer :: par24a_out(:)
     real(r8), pointer :: par240a_out(:)
     real(r8), pointer :: gamma_out(:)
     real(r8), pointer :: gammaT_out(:)
     real(r8), pointer :: gammaP_out(:)
     real(r8), pointer :: gammaL_out(:)
     real(r8), pointer :: gammaA_out(:)
     real(r8), pointer :: gammaS_out(:)
   !OTHER LOCAL VARIABLES:



Erik Kluzek 2011-06-15