clm5.0/src_clm40/main/clm_varpar.F90
2025-01-12 20:48:10 +08:00

119 lines
4.5 KiB
Fortran

module clm_varpar
!-----------------------------------------------------------------------
!BOP
!
! !MODULE: clm_varpar
!
! !DESCRIPTION:
! Module containing CLM parameters
!
! !USES:
use shr_kind_mod, only: r8 => shr_kind_r8
!
! !PUBLIC TYPES:
implicit none
save
!
! -------------------------------------------------------
! Module Parameters
! -------------------------------------------------------
! Note - model resolution is read in from the surface dataset
integer, parameter :: nlevsoi = 10 ! number of hydrologically active soil layers
integer, parameter :: nlevgrnd = 15 ! number of ground layers (includes lower layers that are hydrologically inactive)
integer, parameter :: nlevurb = nlevgrnd! number of urban layers (must equal nlevgrnd right now)
integer, parameter :: nlevlak = 10 ! number of lake layers
integer, parameter :: nlevsno = 5 ! maximum number of snow layers
integer, parameter :: numwat = 5 ! number of water types (soil, ice, 2 lakes, wetland)
integer, parameter :: numrad = 2 ! number of solar radiation bands: vis, nir
integer, parameter :: ivis = 1 ! index for visible band
integer, parameter :: inir = 2 ! index for near-infrared band
integer, parameter :: numsolar = 2 ! number of solar type bands: direct, diffuse
integer, parameter :: ndst = 4 ! number of dust size classes (BGC only)
integer, parameter :: dst_src_nbr = 3 ! number of size distns in src soil (BGC only)
integer, parameter :: sz_nbr = 200 ! number of sub-grid bins in large bin of dust size distribution (BGC only)
integer, parameter :: mxpft = 20 ! maximum number of PFT's for any mode
integer, parameter :: numveg = 16 ! number of veg types (without specific crop)
#if (defined CROP)
integer, parameter :: numpft = mxpft ! actual # of pfts (without bare)
integer, parameter :: numcft = 6 ! actual # of crops
#else
integer, parameter :: numpft = numveg ! actual # of pfts (without bare)
integer, parameter :: numcft = 2 ! actual # of crops
#endif
integer, parameter :: maxpatch_pft= MAXPATCH_PFT ! max number of plant functional types in naturally vegetated landunit
! -------------------------------------------------------
! Module Varaibles (initialized in clm_varpar_init)
! -------------------------------------------------------
! Indices used in surface file read and set in clm_varpar_init
integer :: maxpatch ! max number of patches
integer :: maxpatch_glcmec ! max number of elevation classes
integer :: maxpatch_urb ! max number of urban pfts (columns) in urban landunit
integer :: npatch_urban ! number of urban pfts (columns) in urban landunit
integer :: npatch_lake ! number of lake pfts (columns) in lake landunit
integer :: npatch_wet ! number of wetland pfts (columns) in wetland landunit
integer :: npatch_glacier ! number of glacier pfts (columns) in glacier landunit
integer :: npatch_glacier_mec ! number of glacier_mec pfts (columns) in glacier_mec landunit
integer :: max_pft_per_gcell
integer :: max_pft_per_lu
integer :: max_pft_per_col
! !PUBLIC MEMBER FUNCTIONS:
public clm_varpar_init ! set parameters
! !REVISION HISTORY:
! Created by Mariana Vertenstein
!EOP
!-----------------------------------------------------------------------
contains
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: clm_varpar_init
!
! !INTERFACE:
subroutine clm_varpar_init()
!
! !DESCRIPTION:
! This subroutine initializes parameters in clm_varpar
!
! !USES:
!
! !ARGUMENTS:
implicit none
!
! !REVISION HISTORY:
! Created by T Craig
!
! !LOCAL VARIABLES:
!
!EOP
!------------------------------------------------------------------------------
maxpatch_urb = 5
npatch_urban = maxpatch_pft + 1
npatch_lake = npatch_urban + maxpatch_urb
npatch_wet = npatch_lake + 1
npatch_glacier = npatch_wet + 1
npatch_glacier_mec = npatch_glacier + maxpatch_glcmec
maxpatch = npatch_glacier_mec
max_pft_per_gcell = numpft+1 + 3 + maxpatch_urb + maxpatch_glcmec
#if (defined CROP)
max_pft_per_gcell = max_pft_per_gcell + numcft
#endif
max_pft_per_lu = max(numpft+1, numcft, maxpatch_urb)
max_pft_per_col = max(numpft+1, numcft, maxpatch_urb)
end subroutine clm_varpar_init
!------------------------------------------------------------------------------
end module clm_varpar