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, & novegARGUMENTS:
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 soilCALLED 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: