-
Notifications
You must be signed in to change notification settings - Fork 315
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Release clm5.0 fruit tree #1966
base: release-clm5.0
Are you sure you want to change the base?
Conversation
src/biogeochem/CNBalanceCheckMod.F90
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This file's changes are just whitespace and can be reverted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A lot of the changes here are distinguishing behavior between woody-perennial PFTs and other PFTs, but many cases have the same thing happen in both. To simplify the changes, any shared lines should occur outside the "if woody perennial" conditional.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To improve readability and minimize maintenance costs, perennial(ivt(p)) == 1._r8 .and. woody(ivt(p)) == 1.0_r8
should be replaced with a local boolean variable called is_perennial_woody
or something.
added missing script to list of modified src code
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This file's changes are just whitespace and can be reverted.
end if | ||
if (ivt(p) >= npcropmin) then ! skip 2 generic crops | ||
if (carbon_resp_opt == 1) then | ||
if (carbon_resp_opt == 1 .and. perennial(ivt(p)) == 0._r8) then !(perennial flag added by O.Dombrowski) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Instead of (in addition to?) checking for perennial, should it be checked for woody?
@@ -1194,7 +1195,7 @@ subroutine CNFUN(bounds,num_soilc, filter_soilc,num_soilp& | |||
! Calculate appropriate degree of retranslocation | |||
!------------------------------------------------------------------------------- | |||
|
|||
if(leafc(p).gt.0.0_r8.and.litterfall_n_step(p,istp)* fixerfrac>0.0_r8.and.ivt(p) <npcropmin)then | |||
if(leafc(p).gt.0.0_r8.and.litterfall_n_step(p,istp)* fixerfrac>0.0_r8.and. (ivt(p) <npcropmin .or. perennial(ivt(p)) == 1.0_r8)) then ! include perennial woody crops (added by O.Dombrowski) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should woodiness also be checked here?
@@ -1229,6 +1230,7 @@ subroutine CNFUN(bounds,num_soilc, filter_soilc,num_soilp& | |||
if(local_use_flexiblecn)then | |||
if (leafn(p) == 0.0_r8) then ! to avoid division by zero | |||
delta_CN = fun_cn_flex_c(ivt(p)) ! Max CN ratio over standard | |||
write(iulog,*) 'fun_cn_flex_c is used no1' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Diagnostic messages here and at 1242, 1249 should be removed.
@@ -133,7 +133,7 @@ subroutine ComputeSeedAmounts(bounds, & | |||
if (pft_type /= noveg) then | |||
my_leaf_seed = leafc_seed * & | |||
SpeciesTypeMultiplier(species, pft_type, COMPONENT_LEAF) | |||
if (pftcon%woody(pft_type) == 1._r8) then | |||
if (pftcon%woody(pft_type) == 1._r8 .and. patch%itype(p) < npcropmin) then |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could you add a comment explaining why this shouldn't happen for woody crops?
if (pi <= col%npatches(c)) then | ||
p = col%patchi(c) + pi - 1 | ||
|
||
if (patch%active(p)) then |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this only happen for perennial woody crops?
@@ -321,17 +349,17 @@ subroutine InitHistory(this, bounds) | |||
ptr_col=this%nfire_col) | |||
|
|||
this%farea_burned_col(begc:endc) = spval | |||
call hist_addfld1d (fname='FAREA_BURNED', units='s-1', & | |||
call hist_addfld1d (fname='FAREA_BURNED', units='proportion/sec', & |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This and the following same unit changes should probably be reverted.
avgflag='A', long_name='Leaf allocation coefficient', & | ||
ptr_patch=this%aleaf_patch, default='inactive') | ||
|
||
! this%arepr_patch(begp:endp) = spval |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This commented-out block can be removed.
avgflag='A', long_name='Stem allocation coefficient', & | ||
ptr_patch=this%astem_patch, default='inactive') | ||
|
||
! this%aroot_patch(begp:endp) = spval |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This commented-out block can be removed.
else if (storage_flag(p) == 1._r8) then | ||
fcur = 0._r8 | ||
end if | ||
cpool_to_leafc(p) = nlc * fcur |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Starting here, there's lots of duplication in this subroutine for perennial woody PFTs.
Description of changes
This model branch “CLM5-FruitTree” implements a new submodel that allows the modelling of deciduous fruit trees within CLM. So far the model was developed and tested on the point scale and showed good results in representing the growth and partitioning of biomass between different plant organs as well as observed carbon, water and energy fluxes in a commercial apple orchard.
CLM5-FruitTree combines elements of the existing broadleaf deciduous tree subroutine such as growth and C turnover of woody components, with distinctive phenological stages and a harvestable organ similar to the annual crop subroutine. Additionally, new processes specific to fruit orchards are described.
Major developments include:
Modifications of the following files were made:
The new parameter file to be used with the development is:
clm5_params.c171117__FruitTree.nc
Specific notes
Detailed information on the technical development and modelling results were published in Dombrowski et al. (2022)
Are answers expected to change (and if so in what way)?
Answers are expected to change only when CFT 35 or 36 is used in a simulation as this CFT is now active and uses the new phenology subroutine (perennial and woody flags set to 1 in parameter file).
Any User Interface Changes (namelist or namelist defaults changes)?
New parameters:
New output variables:
New restart variables:
Testing performed
Thus far, testing was performed only for a single point case. For the testing I ran the default CLM5 model and the CLM5-FruitTree development for PFT 7: Broadleaf deciduous tree (BDT) and PFT 19: Spring wheat (SW) for 14 years at a daily timestep. I then compared the last 6 years of simulations to test if the development had any unintended effects on other PFTs. For the two PFTs tested here, there is no difference between the CLM5 and CLM5-FruitTree for the examined variables.
TOTECOSYSC (total ecosystem carbon), TOTECOSYSN (total ecosystem nitrogen), TOTSOMC (total soil organic matter carbon), GPP (gross primary production), TLAI (total leaf area index) and TWS (total water storage).
Additionally, I ran CLM5-FruitTree with the newly parameterized crop type PFT 36: Apple (APPLE) and compared against BDT and SW to showcase the differences between the three PFTs. Here I am showing simulation results for one year (2015) at a daily timestep.
GPP (gross primary productivity), NEE (net ecosystem exchange), ER (ecosystem respiration), AR (autotrophic respiration) and HR (heterotrophic respiration).
GRAINC (grain or fruit carbon), LEAFC (leaf carbon), LIVESTEMC (livestem carbon), FROOTC (fine root carbon) and GRAINC_TO_FOOD (harvest flux).
QSOIL (soil evaporation), QVEGE (canopy evaporation), QVEGT (canopy transpiration), QSOIL (runoff) and QIRRIG (irrigation).
LH (latent heat flux), FSH (sensible heat flux) and Rnet (net radiation).