next up previous contents
Next: initCASA Up: Routine/Function Prologues Previous: C13Summary   Contents

Fortran: Module Interface CASAMod (Source File: CASAMod.F90)

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 : CASAPhenology
PUBLIC 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 restart
REVISION 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:



Subsections

Erik Kluzek 2011-06-15