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: