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: