|
! Vegetation type constants |
|
! |
|
integer, public :: noveg ! value for not vegetated |
|
integer, public :: ndllf_evr_tmp_tree ! value for Needleleaf evergreen temperate tree |
|
integer, public :: ndllf_evr_brl_tree ! value for Needleleaf evergreen boreal tree |
|
integer, public :: ndllf_dcd_brl_tree ! value for Needleleaf deciduous boreal tree |
|
integer, public :: nbrdlf_evr_trp_tree ! value for Broadleaf evergreen tropical tree |
|
integer, public :: nbrdlf_evr_tmp_tree ! value for Broadleaf evergreen temperate tree |
|
integer, public :: nbrdlf_dcd_trp_tree ! value for Broadleaf deciduous tropical tree |
|
integer, public :: nbrdlf_dcd_tmp_tree ! value for Broadleaf deciduous temperate tree |
|
integer, public :: nbrdlf_dcd_brl_tree ! value for Broadleaf deciduous boreal tree |
|
integer, public :: nbrdlf_evr_shrub ! value for Broadleaf evergreen shrub |
|
integer, public :: nbrdlf_dcd_tmp_shrub ! value for Broadleaf deciduous temperate shrub |
|
integer, public :: nbrdlf_dcd_brl_shrub ! value for Broadleaf deciduous boreal shrub |
|
integer, public :: nc3_arctic_grass ! value for C3 arctic grass |
|
integer, public :: nc3_nonarctic_grass ! value for C3 non-arctic grass |
|
integer, public :: nc4_grass ! value for C4 grass |
|
integer, public :: npcropmin ! value for first crop |
|
integer, public :: ntmp_corn ! value for temperate corn, rain fed (rf) |
|
integer, public :: nirrig_tmp_corn ! value for temperate corn, irrigated (ir) |
|
integer, public :: nswheat ! value for spring temperate cereal (rf) |
|
integer, public :: nirrig_swheat ! value for spring temperate cereal (ir) |
|
integer, public :: nwwheat ! value for winter temperate cereal (rf) |
|
integer, public :: nirrig_wwheat ! value for winter temperate cereal (ir) |
|
integer, public :: ntmp_soybean ! value for temperate soybean (rf) |
|
integer, public :: nirrig_tmp_soybean ! value for temperate soybean (ir) |
|
integer, public :: nbarley ! value for spring barley (rf) |
|
integer, public :: nirrig_barley ! value for spring barley (ir) |
|
integer, public :: nwbarley ! value for winter barley (rf) |
|
integer, public :: nirrig_wbarley ! value for winter barley (ir) |
|
integer, public :: nrye ! value for spring rye (rf) |
|
integer, public :: nirrig_rye ! value for spring rye (ir) |
|
integer, public :: nwrye ! value for winter rye (rf) |
|
integer, public :: nirrig_wrye ! value for winter rye (ir) |
|
integer, public :: ncassava ! ...and so on |
|
integer, public :: nirrig_cassava |
|
integer, public :: ncitrus |
|
integer, public :: nirrig_citrus |
|
integer, public :: ncocoa |
|
integer, public :: nirrig_cocoa |
|
integer, public :: ncoffee |
|
integer, public :: nirrig_coffee |
|
integer, public :: ncotton |
|
integer, public :: nirrig_cotton |
|
integer, public :: ndatepalm |
|
integer, public :: nirrig_datepalm |
|
integer, public :: nfoddergrass |
|
integer, public :: nirrig_foddergrass |
|
integer, public :: ngrapes |
|
integer, public :: nirrig_grapes |
|
integer, public :: ngroundnuts |
|
integer, public :: nirrig_groundnuts |
|
integer, public :: nmillet |
|
integer, public :: nirrig_millet |
|
integer, public :: noilpalm |
|
integer, public :: nirrig_oilpalm |
|
integer, public :: npotatoes |
|
integer, public :: nirrig_potatoes |
|
integer, public :: npulses |
|
integer, public :: nirrig_pulses |
|
integer, public :: nrapeseed |
|
integer, public :: nirrig_rapeseed |
|
integer, public :: nrice |
|
integer, public :: nirrig_rice |
|
integer, public :: nsorghum |
|
integer, public :: nirrig_sorghum |
|
integer, public :: nsugarbeet |
|
integer, public :: nirrig_sugarbeet |
|
integer, public :: nsugarcane |
|
integer, public :: nirrig_sugarcane |
|
integer, public :: nsunflower |
|
integer, public :: nirrig_sunflower |
|
integer, public :: nmiscanthus |
|
integer, public :: nirrig_miscanthus |
|
integer, public :: nswitchgrass |
|
integer, public :: nirrig_switchgrass |
|
integer, public :: ntrp_corn !value for tropical corn (rf) |
|
integer, public :: nirrig_trp_corn !value for tropical corn (ir) |
|
integer, public :: ntrp_soybean !value for tropical soybean (rf) |
|
integer, public :: nirrig_trp_soybean !value for tropical soybean (ir) |
|
integer, public :: npcropmax ! value for last prognostic crop in list |
|
integer, public :: nc3crop ! value for generic crop (rf) |
|
integer, public :: nc3irrig ! value for irrigated generic crop (ir) |
We have a bunch of integer variables in
pftconModthat are unique IDs for each PFT ("vegetation type constants"):CTSM/src/main/pftconMod.F90
Lines 19 to 101 in d6f950a
These are used throughout the code in checks like
veg_type == ndllf_evr_tmp_tree. We should move to using the parameter file for this instead, to facilitate changing PFT characteristics and adding new ones. For example, the ISIMIP runs may require some unused PFTs to be replaced with different ones, which will necessitate not just changing the parameter file but also looking through the code for these manual checks. In addition, it would make the affected code easier to read.This especially makes things hard for non-developers trying to develop new crops (e.g.). They have to scour the code for places where PFT integers might need to be used.
Although I think this would be an easy job, it wouldn't have to happen all at once. There's some very low-hanging fruit out there. For instance, this could be replaced with a
gdd20_typeparameter:CTSM/src/biogeochem/CNPhenologyMod.F90
Lines 2878 to 2896 in d6f950a
Note that fully resolving this would also necessarily involve solving Issue #21.