-
Notifications
You must be signed in to change notification settings - Fork 169
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
Ignore historic TAU patterns + land conversion costs forestry + Bugfix BII + Bugfix NPI/NDC afforestation #276
Changes from all commits
2eb19a5
f0f89f1
f76b643
8f44408
7abe9cf
ba89b24
f841fcc
0119d37
41456f7
084f2cd
2f985a5
c04341f
b30c46b
a4a373e
5547e37
a1e17dc
f9d5d90
8152c25
d128a34
332c676
bd91998
9c706b7
38eb66b
0f2c0c7
8f1b314
71d4271
6c43596
ad6f7aa
061cf3d
8c7da82
13fdca2
ba57b6c
aab0f75
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -99,17 +99,19 @@ sum(ac_est, v32_land(j2,"aff",ac_est)) =l= sum(ac, v32_land(j2,"aff",ac)) - sum( | |
|
||
q32_bv_aff(j2,potnatveg) .. vm_bv(j2,"aff_co2p",potnatveg) | ||
=e= | ||
sum(ac_mature, v32_land(j2,"aff",ac_mature)) * fm_bii_coeff("secd_mature",potnatveg) * fm_luh2_side_layers(j2,potnatveg) | ||
+ sum(ac_young, v32_land(j2,"aff",ac_young)) * fm_bii_coeff("secd_young",potnatveg) * fm_luh2_side_layers(j2,potnatveg); | ||
sum(bii_class_secd, sum(ac_to_bii_class_secd(ac,bii_class_secd), v32_land(j2,"aff",ac)) * | ||
p32_bii_coeff("aff",bii_class_secd,potnatveg)) * fm_luh2_side_layers(j2,potnatveg); | ||
|
||
q32_bv_ndc(j2,potnatveg) .. vm_bv(j2,"aff_ndc",potnatveg) | ||
=e= | ||
sum(ac_mature, v32_land(j2,"ndc",ac_mature)) * fm_bii_coeff("secd_mature",potnatveg) * fm_luh2_side_layers(j2,potnatveg) | ||
+ sum(ac_young, v32_land(j2,"ndc",ac_young)) * fm_bii_coeff("secd_young",potnatveg) * fm_luh2_side_layers(j2,potnatveg); | ||
sum(bii_class_secd, sum(ac_to_bii_class_secd(ac,bii_class_secd), v32_land(j2,"ndc",ac)) * | ||
p32_bii_coeff("ndc",bii_class_secd,potnatveg)) * fm_luh2_side_layers(j2,potnatveg); | ||
|
||
q32_bv_plant(j2,potnatveg) .. vm_bv(j2,"plant",potnatveg) | ||
=e= | ||
sum(ac, v32_land(j2,"plant",ac)) * fm_bii_coeff("timber",potnatveg) * fm_luh2_side_layers(j2,potnatveg); | ||
sum(bii_class_secd, sum(ac_to_bii_class_secd(ac,bii_class_secd), v32_land(j2,"plant",ac)) * | ||
p32_bii_coeff("plant",bii_class_secd,potnatveg)) * fm_luh2_side_layers(j2,potnatveg); | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. same as above....are the repeated terms the same as above? Perhaps calculate them first in a separate equations and use them afterwards in these two equations? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I revised these equations. Please check. |
||
|
||
************************************************************ | ||
**** Timber production related equations in plantations **** | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -120,14 +120,14 @@ loop(t_all, | |
); | ||
|
||
** Afforestation policies NPI and NDCs | ||
p32_aff_pol(t,j) = f32_aff_pol(t,j,"%c32_aff_policy%"); | ||
p32_aff_pol(t,j) = round(f32_aff_pol(t,j,"%c32_aff_policy%"),6); | ||
|
||
* Calculate the remaining exogenous afforestation with respect to the maximum exogenous target over time. | ||
* `p32_aff_togo` is used to adjust `s32_max_aff_area` in the constraint `q32_max_aff`. | ||
p32_aff_togo(t) = sum(j, smax(t2, p32_aff_pol(t2,j)) - p32_aff_pol(t,j)); | ||
p32_aff_togo(t) = smax(t2, sum(j, p32_aff_pol(t2,j))) - sum(j, p32_aff_pol(t,j)); | ||
|
||
* Adjust the afforestation limit `s32_max_aff_area` upwards, if it is below the exogenous policy target. | ||
s32_max_aff_area = max(s32_max_aff_area, sum(j, smax(t2, p32_aff_pol(t2,j))) ); | ||
s32_max_aff_area = max(s32_max_aff_area, smax(t2, sum(j, p32_aff_pol(t2,j))) ); | ||
|
||
p32_cdr_ac(t,j,ac) = 0; | ||
|
||
|
@@ -243,5 +243,19 @@ p32_gs_scaling_reg(i)$(f32_gs_relativetarget(i)>0) = f32_gs_relativetarget(i) / | |
** Calibration factors lower than 1 are set to 1 | ||
p32_gs_scaling_reg(i)$(p32_gs_scaling_reg(i) < 1) = 1; | ||
|
||
** Update c-densitiy based on calibration factor for growing stocks | ||
** Save pm_carbon_density_ac_forestry in a parameter before upscaling to FAO growing stocks. | ||
** This allows to use plantation growth curves for CO2 price driven afforestation. | ||
p32_c_density_ac_fast_forestry(t_all,j,ac) = pm_carbon_density_ac_forestry(t_all,j,ac,"vegc"); | ||
|
||
** Update c-density for timber plantations based on calibration factor to match FAO growing stocks | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Just to be sure: This allows afforestation to follow the growth curves towards LPJmL natural vegetation carbon density, without being inconsistent with the LPJmL estimates at the mature level. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I checked in modules/32_forestry/dynamic_feb21/presolve.gms the application of the carbon density parameters. All looks fine. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Yes, I confirm. That's how it is intended. I discussed this @abhimish
|
||
pm_carbon_density_ac_forestry(t_all,j,ac,"vegc") = pm_carbon_density_ac_forestry(t_all,j,ac,"vegc") * sum(cell(i,j),p32_gs_scaling_reg(i)); | ||
|
||
** set bii coefficients | ||
p32_bii_coeff(type32,bii_class_secd,potnatveg) = 0; | ||
if(s32_aff_bii_coeff = 0, | ||
p32_bii_coeff("aff",bii_class_secd,potnatveg) = fm_bii_coeff(bii_class_secd,potnatveg) | ||
elseif s32_aff_bii_coeff = 1, | ||
p32_bii_coeff("aff",bii_class_secd,potnatveg) = fm_bii_coeff("timber",potnatveg) | ||
); | ||
p32_bii_coeff("ndc",bii_class_secd,potnatveg) = fm_bii_coeff(bii_class_secd,potnatveg); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Would it make sense to also allow for the application of the switch "s32_aff_bii_coeff" onto NPI/NDC afforestation? Also here, afforestation policies could be implemented in different ways, either in a more plantation like manner with fast growing species or using only native species, with different implications for biodiversity and thus the choice of bii coefficient. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sure, this could be added. We would need 2 more switches for that like s32_ndc_growth_curve and s32_ndc_bii_coeff to allow for different assumptions with respect to ndc and co2 price driven afforestation. @mishkos What do you think?Does it make sense to have these additional switches? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. While it does make sense to differentiate what kind of forests are established under npi/ndc policies, the national documents don't specify this at all. Therefore I suggest for the time being to stick to the natveg growth curves for npi/ndc aff pol. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. NPI/NDC afforestation still uses natveg growth. We only now provide a possibility where CO2 price induced afforestation can be selected to grow with a plantation growth curved. We have three forestry categories, |
||
p32_bii_coeff("plant",bii_class_secd,potnatveg) = fm_bii_coeff("timber",potnatveg); |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -16,42 +16,36 @@ ac_sub(ac) = yes$(ord(ac) > (m_yeardiff_forestry(t)/5)); | |
v32_hvarea_forestry.fx(j,ac_est) = 0; | ||
v32_land_reduction.fx(j,type32,ac_est) = 0; | ||
|
||
** Start ndc ** | ||
* Limit demand for prescribed NPI/NDC afforestation in `p32_aff_pol` if not enough suitable area (`p32_aff_pot`) for afforestation is available. | ||
** START ndc ** | ||
* calc NPI/NDC afforestation per time step based on forest stock change | ||
p32_aff_pol_timestep("y1995",j) = 0; | ||
p32_aff_pol_timestep(t,j)$(ord(t)>1) = p32_aff_pol(t,j) - p32_aff_pol(t-1,j); | ||
* Suitable area (`p32_aff_pot`) for NPI/NDC afforestation | ||
p32_aff_pot(t,j) = (vm_land.l(j,"crop") - vm_land.lo(j,"crop")) + (vm_land.l(j,"past") - vm_land.lo(j,"past")); | ||
*correct ndc forest stock based on p32_aff_pot | ||
if((ord(t) > 1), | ||
p32_aff_pol(t,j)$(p32_aff_pol(t,j) - p32_aff_pol(t-1,j) > p32_aff_pot(t,j)) = p32_aff_pol(t-1,j) + p32_aff_pot(t,j); | ||
); | ||
*calc ndc afforestation per time step based on forest stock changes | ||
p32_aff_pol_timestep("y1995",j) = 0; | ||
p32_aff_pol_timestep(t,j)$(ord(t)>1) = p32_aff_pol(t,j) - p32_aff_pol(t-1,j); | ||
* Limit prescribed NPI/NDC afforestation in `p32_aff_pol_timestep` if not enough suitable area (`p32_aff_pot`) for afforestation is available | ||
p32_aff_pol_timestep(t,j)$(p32_aff_pol_timestep(t,j) > p32_aff_pot(t,j)) = p32_aff_pot(t,j); | ||
** END ndc ** | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This looks good to me. The change doesn't affect the way how npi/ndc aff policy is established in each cell. The code is simplified. |
||
|
||
if(m_year(t) <= sm_fix_SSP2, | ||
p32_max_aff_area = Inf; | ||
else | ||
p32_max_aff_area = s32_max_aff_area; | ||
); | ||
** END ndc ** | ||
|
||
*' @code | ||
|
||
*' Afforestation switch: | ||
*' 0 = Use natveg carbon densities for afforestation, | ||
*' 1 = Use plantation carbon densities for afforestation. | ||
*' 0 = Use natveg growth curve towards LPJmL natural vegetation | ||
*' 1 = Use plantation growth curve (faster than natveg) towards LPJmL natural vegetation | ||
if(s32_aff_plantation = 0, | ||
p32_carbon_density_ac(t,j,"aff",ac,ag_pools) = pm_carbon_density_ac(t,j,ac,ag_pools); | ||
elseif s32_aff_plantation = 1, | ||
p32_carbon_density_ac(t,j,"aff",ac,ag_pools) = pm_carbon_density_ac_forestry(t,j,ac,ag_pools); | ||
); | ||
*' Timber plantations switch: | ||
*' 0 = Use natveg carbon densities for timber plantations, | ||
*' 1 = Use plantation carbon densities for timber plantations. | ||
if(s32_timber_plantation = 0, | ||
p32_carbon_density_ac(t,j,"plant",ac,ag_pools) = pm_carbon_density_ac(t,j,ac,ag_pools); | ||
elseif s32_timber_plantation = 1, | ||
p32_carbon_density_ac(t,j,"plant",ac,ag_pools) = pm_carbon_density_ac_forestry(t,j,ac,ag_pools); | ||
p32_carbon_density_ac(t,j,"aff",ac,ag_pools) = p32_c_density_ac_fast_forestry(t,j,ac); | ||
); | ||
|
||
*' Timber plantations carbon densities: | ||
p32_carbon_density_ac(t,j,"plant",ac,ag_pools) = pm_carbon_density_ac_forestry(t,j,ac,ag_pools); | ||
|
||
*' NDC carbon densities are natveg carbon densities. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. see comment on bii coefficient in the NPI/NDC context above: maybe consider also here the possibility to select between plantation and natveg growth curves? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This I discussed with @abhimishr . We agreed that it does not make sense to assume natveg growth curves for timber plantations. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. as answered above, I suggest to keep natveg growth curves for the npi/ndc aff policy. |
||
p32_carbon_density_ac(t,j,"ndc",ac,ag_pools) = pm_carbon_density_ac(t,j,ac,ag_pools); | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,6 +6,8 @@ | |
*** | Contact: magpie@pik-potsdam.de | ||
|
||
scalars | ||
s39_cost_establish Cost for establishing new land use (USD05MER per hectare) /8000/ | ||
s39_cost_clearing Clearing costs linked to removed biomass (USD05MER per ton C) /0/ | ||
s39_cost_establish_crop Cost for establishing new land use (USD05MER per hectare) /8000/ | ||
s39_cost_establish_past Cost for establishing new land use (USD05MER per hectare) /8000/ | ||
s39_cost_establish_forestry Cost for establishing new land use (USD05MER per hectare) /1000/ | ||
s39_cost_clearing Clearing costs linked to removed biomass (USD05MER per ton C) /0/ | ||
; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I believe this change in settings requires the PR to be tagged as "medium risk" as it will have probably some visible effects on the dynamics There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done. Happy to discuss these changes in the next group meeting. |
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.
Please briefly highlight new switch for choosing the BII coefficient