Terrestrial carbon cycle submodel patterned after the CASA model.
USES:
use shr_kind_mod, only : r8 => shr_kind_r8 use abortutils , only : endrun use clmtype use clm_atmlnd , only : clm_a2l use clm_varcon , only : denh2o, hvap, istsoil, tfrz, spval use clm_varcon , only : istcrop use clm_varpar , only : numpft, nlevsoi, nlevgrnd use clm_varctl , only : iulog use spmdMod , only : masterproc use CASAPhenologyMod, only : CASAPhenologyPUBLIC TYPES:
implicit none save ! ----------------------------------------------------------------- ! source file: casa_params.h ! purpose: CASA V2.1 parameters and variables ! modified for LSM/CASA interface by J.John (2001) ! ----------------------------------------------------------------- ! Namelist parameters for CASA integer :: spunup ! 0=no, 1=yes (used with runtype non Continue only) integer :: lalloc ! 0=fixed allocation, 1=dynamic allocation integer :: lnpp ! 1=gpp*gppfact,2=fn(lgrow)*gppfact real(r8) :: q10 character(len=256) :: fcpool ! Carbon Pool initial state filename ! Logical to flag whether C pools have been read in on initial dataset logical :: cpool_inic = .false. ! Define parameters used in CASA ! Pool Definitions integer, parameter :: nlive = 3 integer, parameter :: ndead = 9 integer, parameter :: npools = nlive + ndead integer, parameter :: LEAF = 1 integer, parameter :: WOOD = 2 integer, parameter :: FROOT = 3 integer, parameter :: SURFMET = 4 integer, parameter :: SURFSTR = 5 integer, parameter :: SOILMET = 6 integer, parameter :: SOILSTR = 7 integer, parameter :: CWD = 8 integer, parameter :: SURFMIC = 9 integer, parameter :: SOILMIC = 10 integer, parameter :: SLOW = 11 integer, parameter :: PASSIVE = 12 integer, parameter :: npool_types = 4 integer, parameter :: LIVE_TYPE = 1 integer, parameter :: LITTER_TYPE = 2 integer, parameter :: SOIL_TYPE = 3 integer, parameter :: CWD_TYPE = 4 ! Tracer Definitions integer, parameter :: ptrace = 2 integer, parameter :: Carbon = 1 integer, parameter :: Nitrogen = 2 ! Respiration definitions integer, parameter :: nresp_pools = 14 integer resp_pool_index(2,nresp_pools) ! Indices of Respiring Pools in the integer pool_type_index(npools) ! Index of pool type ! type definitions for pools in the order specified above data pool_type_index/ & LIVE_TYPE, & LIVE_TYPE, & LIVE_TYPE, & LITTER_TYPE, & LITTER_TYPE, & LITTER_TYPE, & LITTER_TYPE, & CWD_TYPE, & SOIL_TYPE, & SOIL_TYPE, & SOIL_TYPE, & SOIL_TYPE/ ! order that respiration is called data resp_pool_index/ & SLOW ,PASSIVE, & SLOW ,SOILMIC, & SURFMET ,SURFMIC, & SURFSTR ,SURFMIC, & SURFSTR ,SLOW , & SOILMET ,SOILMIC, & SOILSTR ,SOILMIC, & SOILSTR ,SLOW , & CWD ,SURFMIC, & CWD ,SLOW , & SURFMIC ,SLOW , & SOILMIC ,PASSIVE, & SOILMIC ,SLOW , & PASSIVE ,SOILMIC/ ! C:N ratio for pools real(r8) CNratio(npools) data CNratio/ & 30.0_r8, & ! C:N ratio of leaf pool 130.0_r8, & ! C:N ratio of wood pool 55.0_r8, & ! C:N ratio of froot pool 30.0_r8, & ! C:N ratio of surfmet pool 50.0_r8, & ! C:N ratio of surfstr pool 25.0_r8, & ! C:N ratio of soilmet pool 50.0_r8, & ! C:N ratio of soilstr pool 135.0_r8, & ! C:N ratio of cwd pool 12.5_r8, & ! C:N ratio of surfmic pool 12.5_r8, & ! C:N ratio of soilmic pool 12.5_r8, & ! C:N ratio of slow pool 8.5_r8/ ! C:N ratio of passive pool ! LSM PFT assigned to CASA veg type ! 02/07/08 assign LSM PFT 14 (bare) to CASA type 8 (which does not exist) ! LSM: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ! CASA: 4 5 1 2 6 7 9 11 10 10 12 12 6 8 ! Mapping of LSM types to CLM types ! CLM : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ! LSM : 1 1 2 3 3 5 4 4 7 8 9 10 6 13 11 11 ! set values of parameters/constants used to determine PLAI ! min/max values of PLAI ! July 8 2002 - From Inez ! (2) Leaf and Roots: Max LAI ! Trees - PFT 1,2,3,4,5: Max lai=6 ! grass and crops - PFT 6,10, 11, 12, 13: Max lai=3 ! shrubs - PFT 7,8,9 - Max lai=1.5 ! bare: PFT 14: max lai=0 !(3) Leaf and Roots - min LAI = 0.4 for photosynthesis. ! I got this by looking at non-zero gai values in vegconi.F (Figure 2). I am ! hopeful that LGROW will turn off photosynthesis during the winter. ! CAVEAT: On page 19 of LSM documentation, it seems that leaf and stem ! areas enter into the calculation of albedo. I am not sure where to set ! the min LAI, so that min LAI does not contribute to winter albedos. !.. 03/02/28 change plai_min to Dickinson value real(r8) plai_min(0:numpft) ! min value of PLAI !.. mod 02/07/17 these are peak gai values from LSM1.1 (see vegconi.F) real(r8) plai_max(0:numpft) ! max value of PLAI data plai_min/0.0_r8, 16*0.8_r8/ data plai_max/0.0_r8, 5.0_r8, 5.0_r8, 2.6_r8, 4.5_r8, 4.5_r8, 3.0_r8, 4.7_r8, 4.7_r8, & 1.0_r8, 0.9_r8, 1.4_r8, 3.5_r8, 3.5_r8, 3.5_r8, 3.0_r8, 3.0_r8/ ! sla values below were used in LSM_CASA ! see initCasa below for current CLM values ! Specific Leaf area from Dickinson et al. (J.Clim, Nov. 1998) ! as inferred from summary of observed values by Schulze et al. ! Unit is m2 leaf area/kg C ! Veg Type SLA (m2/kg C) LSM veg type ! crops 60 11,12 ! short grass 40 6,13 ! needleleaf evergreen 10 1 ! deciduous needleleaf 30 2 ! deciduous broadleaf 30 4,5 ! broadleaf evergreen 25 3 ! evergreen shrubs 25 7 ! deciduous shrubs 25 8,9 ! tall grass 35 6,13 ! tundra and semidesert 20 10 ! check SLA values for LSM veg types 5, 6/13, 8/9, 10, 11/12 ! data sla/ ! & 10.0, 30.0, 25.0, 30.0, 30.0, 40.0, 25.0, ! & 25.0, 25.0, 20.0, 60.0, 60.0, 35.0, 0.0/ real(r8) lrage(0:numpft) real(r8) woodage(0:numpft) real(r8) litcn(0:numpft) real(r8) lignin(0:numpft) ! age characteristic parameters data lrage/ 0.00_r8, & 5.00_r8, 5.00_r8, 1.80_r8, 1.80_r8, 1.80_r8, 1.80_r8, 1.20_r8, 1.20_r8, & 1.00_r8, 1.00_r8, 2.80_r8, 2.80_r8, 1.50_r8, 1.80_r8, 1.00_r8, 1.00_r8/ data woodage/0.00_r8, & 42.00_r8,42.00_r8,27.00_r8,41.00_r8,41.00_r8,25.00_r8,58.00_r8,58.00_r8, & 5.50_r8, 1.00_r8, 5.50_r8, 5.50_r8, 0.00_r8,25.00_r8, 0.00_r8, 0.00_r8/ ! litter characteristic parameters - lignin:N, C:N, lignin data litcn/ 0.0_r8, & 80.0_r8, 80.0_r8, 50.0_r8, 40.0_r8, 40.0_r8, 50.0_r8, 50.0_r8, 50.0_r8, & 65.0_r8, 50.0_r8, 50.0_r8, 50.0_r8, 50.0_r8, 50.0_r8, 40.0_r8, 40.0_r8/ data lignin/ 0.0_r8, & 0.25_r8, 0.25_r8, 0.20_r8, 0.20_r8, 0.20_r8, 0.15_r8, 0.20_r8, 0.20_r8, & 0.20_r8, 0.15_r8, 0.15_r8, 0.15_r8, 0.10_r8, 0.15_r8, 0.10_r8, 0.10_r8/ ! Estimate of lignin content of wood C real(r8), parameter :: woodligninfract = 0.40_r8 ! scaling factors for NPP real(r8), parameter :: gppfact = 0.5_r8 ! converts GPP to NPP ! 30cm depth for watdry, watopt, smoist, soilt (m) real(r8), parameter :: z30 = 0.3_r8 ! 30cm depth for smoist, soilt (m) ! set up array of nonwood types (based on pft) used in allocation ! lnonwood=1 if nonwoods (ivt = 6,7,8, 11, 12, 13, 14) ! lnonwood=0 if wood ! Look at LSM Table 2 - PFT composition of surface_types. Note at ! "nonwoods" category. All grass, shrubs are non-woods. However, if you ! look at stembvt, artic shrub and arctic grass have 0.1 kg/m2. So I ! suggest initial wood biomass = 0 for PFT types 6,7,8, 11, 12, 13, 14. ! For CLM, this corresponds to pfts: 9, 10, 13, 14, 15, 16 integer :: lnonwood(0:numpft) data lnonwood/0, & 0, 0, 0, 0, 0, 0, 0, 0, & 1, 1, 0, 0, 1, 1, 1, 1/PUBLIC MEMBER FUNCTIONS:
public :: initCASA ! initialize the CASA submodel public :: CASA_ecosystemDyn ! the main submodel interface public :: CASARest ! CASA restartREVISION HISTORY:
Ported to the Community Land Model (CLM) by Jasmin John, Sam Levis, and Mariana Vertenstein. 2004.06.08 Vectorized and reformatted by Forrest Hoffman ----------------------------------------------------------------------- !PRIVATE DATA MEMBERS: