Skip to content
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

Update of realizations diffLin2Lin and diffExp2Lin of 45_carbonprice … #1747

Merged
merged 1 commit into from
Jul 19, 2024

Conversation

laurinks
Copy link
Contributor

@laurinks laurinks commented Jul 16, 2024

…(linear curve going through (2020,25) instead of (2010,0), using new switch cm_co2_tax_startyear instead of cm_co2_tax_2020); rename switch c_peakBudgYr to cm_peakBudgYr due to usage in diffLin2Lin of 45carbonprice

Purpose of this PR

*Update diffLin2Lin realization of 45_carbonprice to ensure more near-term realism in carbon pricing by making the linear curve go through the point (2020,25) instead of (2010,0) for developed regions. The choice of the point (2020,25) is based on 25$/t CO2eq being the historical CO2 price for EUR, which is the highest among the regions.

*Use of diffLin2Lin as new default for peak budget runs

*Follow-up PR will enable flexibility in choosing the point (2020,25) and enable automatic fixing to CO2 price derived from path_gdx_ref.

Type of change

  • Fundamental change

Checklist:

  • My code follows the coding etiquette
  • I performed a self-review of my own code
  • I explained my changes within the PR, particularly in hard-to-understand areas
  • I checked that the in-code documentation is up-to-date
  • I adjusted the reporting in remind2 where it was needed
  • I adjusted forbiddenColumnNames in readCheckScenarioConfig.R in case the PR leads to deprecated switches
  • All automated model tests pass (FAIL 0 in the output of make test)
  • The changelog CHANGELOG.md has been updated correctly

Further information :

  • Test runs for SSP2 PkBudg 500/650/1050 are here (other defaults runs with PkBudg setting should be affected similarly, will be checked with next AMT runs):
  • /p/tmp/laurinko/hpc/remind/output/SSP2-PkBudg500_2024-07-16_18.22.54
  • /p/tmp/laurinko/hpc/remind/output/SSP2-PkBudg650_2024-07-16_18.23.07
  • /p/tmp/laurinko/hpc/remind/output/SSP2-PkBudg1050_2024-07-16_18.23.16
  • Comparison of results (what changes by this PR?):
  • Full comparison PDF with latest AMT runs is here: /p/tmp/laurinko/hpc/remind/compScen-diffLin2Lin-VS-AMT-2024-07-17_11.54.15-H12.pdf

New carbon price trajectories show linear increase starting at 25$ in 2020, thus lower than in AMT runs. As a logical consequence, the CO2 prices are higher at peak, in particular for 500 and 650 Gt budgets.
image
image
These higher peak prices affect emissions trajectory after the peak, which is particularly visible for the tight 500 Gt budget.

image
image

p45_phasein_2025ratio(regi)$(p45_gdppcap2015_PPP(regi) gt 20) = 1; !! EUR, JPN, USA, CAZ
p45_phasein_2025ratio(regi)$(p45_gdppcap2015_PPP(regi) gt 10 and p45_gdppcap2015_PPP(regi) le 15) = 0.5; !! CHA, LAM, MEA
p45_phasein_2025ratio(regi)$(p45_gdppcap2015_PPP(regi) gt 15 and p45_gdppcap2015_PPP(regi) le 20) = 0.7; !! REF
p45_phasein_2025ratio(regi)$(p45_gdppcap2015_PPP(regi) gt 20) = 1; !! EUR, JPN, USA, CAZ, NEU
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is just an updating of the comments which had not been correct before.

p45_phasein_2025ratio(regi)$(p45_gdppcap2015_PPP(regi) gt 20) = 1; !! EUR, JPN, USA, CAZ
p45_phasein_2025ratio(regi)$(p45_gdppcap2015_PPP(regi) gt 10 and p45_gdppcap2015_PPP(regi) le 15) = 0.4; !! CHA, LAM, MEA
p45_phasein_2025ratio(regi)$(p45_gdppcap2015_PPP(regi) gt 15 and p45_gdppcap2015_PPP(regi) le 20) = 0.6; !! REF
p45_phasein_2025ratio(regi)$(p45_gdppcap2015_PPP(regi) gt 20) = 1; !! EUR, JPN, USA, CAZ, NEU
);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is just an updating of the comments which had not been correct before.

*' * (-1): default setting equivalent to no carbon tax
*' * (any number >= 0): co2 tax in start year [if cm_iterative_target_adj eq 0];
*' * exogenous initialization of co2 tax in start year [if cm_iterative_target_adj ne 0]
*'
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Introducing new switch cm_co2_tax_startyear to avoid using cm_co2_tax_2020 in new diffLin2Lin and diffExp2Lin implementations. Why? 2020 is a historical year by now, and it is not intuitive to adjust carbon pricing from 2025 or 2030 via switch for year 2020.

+ (s45_co2_tax_startyear - s45_co2_tax_2020) / (cm_startyear - 2020) !! Yearly increase of CO2 price
* (t.val - 2020) ;
p45_CO2priceTrajDeveloped(t)$(t.val gt 2110) = p45_CO2priceTrajDeveloped("2110"); !! set taxes constant after 2110
*** for peak budget runs (if cm_iterative_target_adj = 6|7|9), the adjustment of the CO2 price trajectory after the peak year is made in core/postsolve.gms
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is formula is the core of the change. It also appears in the postsolve of this module.

+ (pm_taxCO2eq("2110",regi) - s45_co2_tax_2020) / (2110 - 2020) !! Yearly increase of CO2 price that interpolates between s45_co2_tax_2020 in 2020 and pm_taxCO2eq in 2110
* (t.val - 2020) ;
p45_CO2priceTrajDeveloped(t)$(t.val gt 2110) = pm_taxCO2eq(t,regi);
);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

REMIND adjusts the CO2 price trajectory in core/postsolve.gms between iterations in order to achieve the prescribed budget. This adjustments happens by multiplying the entire CO2 price trajectory with the factor p_factorRescale_taxCO2_Funneled. After this multiplication, the new CO2 price trajectory no longer goes through the starting point (2020,25) and thus we need to adapt it here. To this end, we re-create the linear curve through the points (2020,25) and (peak year, adjusted CO2 price in peak year) (resp. through (2110, adjusted CO2 price in 2110)).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that this was not needed in previous version which used (2010,0) as the starting point because this was stable under multiplication.

@laurinks laurinks marked this pull request as ready for review July 18, 2024 14:04
@orichters
Copy link
Contributor

Can you please run comparescenconf config/scenario_config.csv in your REMIND folder and paste the human-readable diff here? Thanks.

@laurinks
Copy link
Contributor Author

laurinks commented Jul 18, 2024

Here is an updated version after merging in the latest REMIND develop (incl. EDGE-T merge that had just been done):
File comparison: /p/projects/rd3mod/github/repos/remindmodel/remind/develop/config/scenario_config.csv -> config/scenario_config.csv
Columns deleted: c_peakBudgYr, cm_co2_tax_2020
Columns added: cm_co2_tax_startyear, cm_peakBudgYr
Renamed columns: -
Renamed rows: -

Changes in the scenarios:
~ SSP2-PkBudg500:
carbonprice: diffCurvPhaseIn2Lin -> diffLin2Lin (default: none)
cm_co2_tax_startyear: NA -> 200
cm_peakBudgYr: NA -> 2045
~ SSP2-PkBudg650:
carbonprice: diffCurvPhaseIn2Lin -> diffLin2Lin (default: none)
cm_co2_tax_startyear: NA -> 75
cm_peakBudgYr: NA -> 2055
~ SSP2-PkBudg1050:
carbonprice: diffCurvPhaseIn2Lin -> diffLin2Lin (default: none)
cm_co2_tax_startyear: NA -> 40
cm_peakBudgYr: NA -> 2100
~ SSP2-EU21-PkBudg500:
carbonprice: diffCurvPhaseIn2Lin -> diffLin2Lin (default: none)
cm_co2_tax_startyear: NA -> 200
cm_peakBudgYr: NA -> 2045
~ SSP2-EU21-PkBudg650:
carbonprice: diffCurvPhaseIn2Lin -> diffLin2Lin (default: none)
cm_co2_tax_startyear: NA -> 75
cm_peakBudgYr: NA -> 2055
~ SSP2-EU21-PkBudg1050:
carbonprice: diffCurvPhaseIn2Lin -> diffLin2Lin (default: none)
cm_co2_tax_startyear: NA -> 40
cm_peakBudgYr: NA -> 2100
~ SSP1-PkBudg650:
carbonprice: diffCurvPhaseIn2Lin -> diffLin2Lin (default: none)
cm_co2_tax_startyear: NA -> 75
cm_peakBudgYr: NA -> 2055
~ SSP1-PkBudg1050:
carbonprice: diffCurvPhaseIn2Lin -> diffLin2Lin (default: none)
cm_co2_tax_startyear: NA -> 40
cm_peakBudgYr: NA -> 2100
~ SSP5-PkBudg650:
carbonprice: diffCurvPhaseIn2Lin -> diffLin2Lin (default: none)
cm_co2_tax_startyear: NA -> 75
cm_peakBudgYr: NA -> 2055
~ SSP5-PkBudg1050:
carbonprice: diffCurvPhaseIn2Lin -> diffLin2Lin (default: none)
cm_co2_tax_startyear: NA -> 40
cm_peakBudgYr: NA -> 2100
~ SDP_MC-PkBudg650:
carbonprice: diffCurvPhaseIn2Lin -> diffLin2Lin (default: none)
cm_co2_tax_startyear: NA -> 200
cm_peakBudgYr: NA -> 2045
~ SDP_EI-PkBudg650:
carbonprice: diffCurvPhaseIn2Lin -> diffLin2Lin (default: none)
cm_co2_tax_startyear: NA -> 200
cm_peakBudgYr: NA -> 2045
~ SDP_RC-PkBudg650:
carbonprice: diffCurvPhaseIn2Lin -> diffLin2Lin (default: none)
cm_co2_tax_startyear: NA -> 200
cm_peakBudgYr: NA -> 2045
~ SSP2_lowEn-PkBudg650:
carbonprice: diffCurvPhaseIn2Lin -> diffLin2Lin (default: none)
cm_co2_tax_startyear: NA -> 75
cm_peakBudgYr: NA -> 2055
~ SSP2_lowEn-PkBudg1050:
carbonprice: diffCurvPhaseIn2Lin -> diffLin2Lin (default: none)
cm_co2_tax_startyear: NA -> 40
cm_peakBudgYr: NA -> 2100

$allwarnings
NULL

*** convert tax value from $/t CO2eq to T$/GtC
p45_CO2priceTrajDeveloped("2020") = cm_co2_tax_2020 * sm_DptCO2_2_TDpGtC;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we still need cm_co2_tax_2020?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, it is used in the realizations diffCurvPhaseIn2Lin, expoLinear, exponential, and linear. I plan to delete all these realizations except expoLinear because there functionalities are covered by diffExp2Lin and diffLin2Lin. Then I can also delete this switch. But I would like to wait with the clean up until my next PR (which will have further developments on diffLin2Lin and will come in August after my vacation).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree and thanks for cleaning up

main.gms Outdated
@@ -379,7 +379,7 @@ $setglobal emicapregi none !! def = none
*' * (temperatureNotToExceed): [test and verify before using it!] Find the optimal carbon carbon tax (set cm_emiscen = 1, iterative_target_adj = 9] curved convergence of CO2 prices between regions until cm_CO2priceRegConvEndYr; developed countries have linear path from 0 in 2010 through cm_co2_tax_2020 in 2020;
*' * (diffCurvPhaseIn2Lin): [REMIND 2.1 default for validation peakBudget runs, in combination with iterative_target_adj = 9] curved convergence of CO2 prices between regions until cm_CO2priceRegConvEndYr; developed countries have linear path from 0 in 2010 through cm_co2_tax_2020 in 2020;
*' * (diffExp2Lin): quadratic convergence of CO2 prices between regions until cm_CO2priceRegConvEndYr; starting level of differentiation in cm_startyear is given by cm_co2_tax_spread; developed countries have exponential path until peak year (with iterative_target_adj = 9) or until 2100 (with iterative_target_adj = 5);
*' * (diffLin2Lin): [Variant of diffCurvPhaseIn2Lin, will be further developed before becoming the new default] quadratic convergence of CO2 prices between regions until cm_CO2priceRegConvEndYr; starting level of differentiation in cm_startyear is given by cm_co2_tax_spread; developed countries have linear path until peak year (with iterative_target_adj = 9) or until 2100 (with iterative_target_adj = 5);
*' * (diffLin2Lin): [Variant of diffCurvPhaseIn2Lin, will become the new default] quadratic convergence of CO2 prices between regions until cm_CO2priceRegConvEndYr; starting level of differentiation in cm_startyear is given by cm_co2_tax_spread; developed countries have linear path until peak year (with iterative_target_adj = 9) or until 2100 (with iterative_target_adj = 5);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
*' * (diffLin2Lin): [Variant of diffCurvPhaseIn2Lin, will become the new default] quadratic convergence of CO2 prices between regions until cm_CO2priceRegConvEndYr; starting level of differentiation in cm_startyear is given by cm_co2_tax_spread; developed countries have linear path until peak year (with iterative_target_adj = 9) or until 2100 (with iterative_target_adj = 5);
*' * (diffLin2Lin): [default for peak budget runs, derived from diffCurvPhaseIn2Lin] quadratic convergence of CO2 prices between regions until cm_CO2priceRegConvEndYr; starting level of differentiation in cm_startyear is given by cm_co2_tax_spread; developed countries have linear path until peak year (with iterative_target_adj = 9) or until 2100 (with iterative_target_adj = 5);

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! I raised also the question here when the good timing would be for making the change in all the other defaults.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would adjust it in all scenarios of scenario_config.csv simultaneously.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

Copy link
Contributor

@orichters orichters left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approve, but I would prefer to see all scenarios in scenario_config.csv being adapted. Then just wait for the next round of AMTs and check the compareScenarios files.

Thanks for the well-organized PR.

…(linear curve going through (2020,25) instead of (2010,0), using new switch cm_co2_tax_startyear instead of cm_co2_tax_2020); rename switch c_peakBudgYr to cm_peakBudgYr due to usage in diffLin2Lin of 45carbonprice
@laurinks laurinks merged commit bf0d178 into remindmodel:develop Jul 19, 2024
2 checks passed
@laurinks laurinks deleted the diffLin2Lin-tests branch July 19, 2024 10:12
@laurinks laurinks mentioned this pull request Oct 11, 2024
11 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants