From 3b483134330cfbe91b4ac88c3f0881062fc0e9c9 Mon Sep 17 00:00:00 2001 From: Katarzyna Kowalczyk Date: Thu, 4 Aug 2022 10:15:10 +0200 Subject: [PATCH 01/10] Rename grindrock to weathering --- core/input/generisdata_tech.prn | 2 +- core/input/generisdata_tech_SSP1.prn | 2 +- core/input/generisdata_tech_SSP5.prn | 2 +- core/sets.gms | 2 +- modules/33_CDR/all/bounds.gms | 8 ++--- modules/33_CDR/all/datainput.gms | 4 +-- modules/33_CDR/all/declarations.gms | 13 ++++---- modules/33_CDR/all/equations.gms | 27 ++++++++-------- modules/33_CDR/all/sets.gms | 20 ++++++------ modules/33_CDR/off/bounds.gms | 2 +- modules/33_CDR/weathering/bounds.gms | 8 ++--- modules/33_CDR/weathering/datainput.gms | 4 +-- modules/33_CDR/weathering/declarations.gms | 15 ++++----- modules/33_CDR/weathering/equations.gms | 27 ++++++++-------- modules/33_CDR/weathering/sets.gms | 16 +++++----- scripts/start/prepare.R | 37 ++++++++++++---------- 16 files changed, 95 insertions(+), 94 deletions(-) diff --git a/core/input/generisdata_tech.prn b/core/input/generisdata_tech.prn index f549f2368..44a698e5e 100644 --- a/core/input/generisdata_tech.prn +++ b/core/input/generisdata_tech.prn @@ -165,7 +165,7 @@ incolearn 19000 0.00 29000 ccap0 0.003 0.003 learn 0.10 0.10 -+ rockgrind dac ++ weathering dac tech_stat 4 inco0 0.01 18800 mix0 0 0 diff --git a/core/input/generisdata_tech_SSP1.prn b/core/input/generisdata_tech_SSP1.prn index 8d37e1ced..a87dd053f 100644 --- a/core/input/generisdata_tech_SSP1.prn +++ b/core/input/generisdata_tech_SSP1.prn @@ -163,7 +163,7 @@ incolearn 20000 0.00 29000 ccap0 0.003 0.003 learn 0.10 0.10 -+ rockgrind dac ++ weathering dac tech_stat 4 inco0 0.01 18800 mix0 0 0 diff --git a/core/input/generisdata_tech_SSP5.prn b/core/input/generisdata_tech_SSP5.prn index de4a22496..1e6c73828 100644 --- a/core/input/generisdata_tech_SSP5.prn +++ b/core/input/generisdata_tech_SSP5.prn @@ -162,7 +162,7 @@ incolearn 18400 0.00 29000 ccap0 0.003 0.003 learn 0.10 0.10 -+ rockgrind dac ++ weathering dac tech_stat 4 inco0 0.01 18800 mix0 0 0 diff --git a/core/sets.gms b/core/sets.gms index a2ca12bf1..0e1efa152 100755 --- a/core/sets.gms +++ b/core/sets.gms @@ -273,7 +273,7 @@ $ENDIF.WindOff apCarElT "Cars using final energy electricity (FEELT) to produce useful energy as electricity for transport (UEELT)" apTrnElT "Trains using final energy electricity (FEELT) to produce useful energy as electricity for transport (UEELT)" *** appCarGaT "Cars using FEGAT to produce ESGAT." ??? - rockgrind "grinding rock for enhanced weathering" + weathering "enhanced weathering" dac "direct air capture" x_gas2elec d_bio2elec "d_* transmission and distribution losses" diff --git a/modules/33_CDR/all/bounds.gms b/modules/33_CDR/all/bounds.gms index 558ba534b..d286a7e76 100644 --- a/modules/33_CDR/all/bounds.gms +++ b/modules/33_CDR/all/bounds.gms @@ -6,10 +6,10 @@ *** | Contact: remind@pik-potsdam.de *** SOF ./modules/33_CDR/all/bounds.gms vm_emiCdr.fx(t,regi,emi)$(not sameas(emi,"co2")) = 0.0; -v33_grindrock_onfield_tot.up(t,regi,rlf,rlf2) = s33_step; -v33_grindrock_onfield_tot.fx("2005",regi,rlf,rlf2) = 0.0; -v33_grindrock_onfield.fx(t,regi,rlf,rlf2)$(rlf2.val gt 10) = 0; -v33_grindrock_onfield_tot.fx(t,regi,rlf,rlf2)$(rlf2.val gt 10) = 0; +v33_weathering_onfield_tot.up(t,regi,rlf,rlf2) = s33_step; +v33_weathering_onfield_tot.fx("2005",regi,rlf,rlf2) = 0.0; +v33_weathering_onfield.fx(t,regi,rlf,rlf2)$(rlf2.val gt 10) = 0; +v33_weathering_onfield_tot.fx(t,regi,rlf,rlf2)$(rlf2.val gt 10) = 0; vm_emiCdr.up(t,regi,"co2")$(t.val gt 2015) = -0.0001; if (cm_emiscen ne 1, vm_cap.lo(t,regi,"dac",rlf)$(teNoTransform2rlf_dyn33("dac",rlf) AND (t.val ge max(2025,cm_startyear))) = 1e-7; diff --git a/modules/33_CDR/all/datainput.gms b/modules/33_CDR/all/datainput.gms index 339de9ffa..1f27565c0 100644 --- a/modules/33_CDR/all/datainput.gms +++ b/modules/33_CDR/all/datainput.gms @@ -24,7 +24,6 @@ display f33_maxProdGradeRegiWeathering; $include "./modules/33_CDR/weathering/input/p33_transport_costs.inc" s33_step = 2.5; -s33_rockfield_fedem = 0.3; *** fix costs [T$/Gt stone]. Data from strefler et al. in $/t stone: mining, crushing, grinding (5.0 investment costs, 25.1 O&M costs), spreading (12.1 O&M costs) s33_costs_fix = 0.0422; s33_co2_rem_pot = 0.3 * 12/44; !! default for basalt, for Olivine 1.1 @@ -35,7 +34,8 @@ p33_co2_rem_rate("1") = -log(1-s33_co2_rem_rate * 0.94); p33_co2_rem_rate("2") = -log(1-s33_co2_rem_rate * 0.29); *JeS fit from Thorben: SI D in strefler, amann et al. (2017) -s33_rockgrind_fedem = 6.62 * cm_gs_ew**(-1.16); +p33_weathering_fedem('feels') = 6.62 * cm_gs_ew**(-1.16); +p33_weathering_fedem('fedie') = 0.3; p33_LimRock(regi) = pm_pop("2005",regi)/sum(regi2,pm_pop("2005",regi2)); diff --git a/modules/33_CDR/all/declarations.gms b/modules/33_CDR/all/declarations.gms index 63f05d9af..425416667 100644 --- a/modules/33_CDR/all/declarations.gms +++ b/modules/33_CDR/all/declarations.gms @@ -8,10 +8,8 @@ scalars s33_co2_rem_pot "specific carbon removal potential [Gt C per Gt ground rock]" s33_co2_rem_rate "carbon removal rate [fraction of annual reduction of total carbon removal potential]" -s33_rockgrind_fedem "specific energy demand for grinding rocks [EJ per Gt of ground rock]" -s33_rockfield_fedem "specific energy demand for spreading rocks on field [EJ per Gt of ground rock]" s33_costs_fix "fixed costs for mining, grinding, spreading [T$/Gt stone]" -s33_step "size of bins in v33_grindrock_onfield [Gt stone]" +s33_step "size of bins in v33_weathering_onfield [Gt stone]" *JeS* GJ/tCO2 = EJ/Gt CO2 = 44/12 EJ/Gt C. Numbers from Report from Micah Broehm. ; @@ -20,12 +18,13 @@ p33_transport_costs(all_regi,rlf,rlf) "transport costs [T$/Gt stone]" p33_co2_rem_rate(rlf) "carbon removal rate [fraction of annual reduction of total carbon removal potential], multiplied with grade factor" p33_dac_fedem_el(all_enty) "specific electricity demand for direct air capture [EJ per Gt of C captured] - ventilation" p33_dac_fedem_heat(all_enty) "specific heat demand for direct air capture [EJ per Gt of C captured] - absorption material recovery" +p33_weathering_fedem(all_enty) "specific energy demand for enhanced weathering [EJ per Gt of ground rock]" p33_LimRock(all_regi) "regional share of EW limit [fraction], calculated ex ante for a maximal annual amount of 8 Gt rock in D:\projects\CEMICS\paper_technical\supply_curve_transport_remind_regions.m" ; positive variables -v33_grindrock_onfield(ttot,all_regi,rlf,rlf) "amount of ground rock spread on fields in each timestep [Gt]" -v33_grindrock_onfield_tot(ttot,all_regi,rlf,rlf) "total amount of ground rock on fields [Gt]" +v33_weathering_onfield(ttot,all_regi,rlf,rlf) "amount of ground rock spread on fields in each timestep [Gt]" +v33_weathering_onfield_tot(ttot,all_regi,rlf,rlf) "total amount of ground rock on fields [Gt]" v33_DacFEdemand_el(ttot,all_regi,all_enty) "DAC FE electricity demand [TWa]" v33_DacFEdemand_heat(ttot,all_regi,all_enty) "DAC FE heat demand [TWa]" ; @@ -41,8 +40,8 @@ q33_demFeCDR(ttot,all_regi,all_enty) "CDR demand balance for fina q33_otherFEdemand(ttot,all_regi,all_enty) "calculates final energy demand from no transformation technologies (e.g. enhanced weathering)" q33_DacFEdemand_heat(ttot,all_regi,all_enty) "calculates DAC FE demand for heat" q33_DacFEdemand_el(ttot,all_regi,all_enty) "calculates DAC FE demand for electricity" -q33_capconst_grindrock(ttot,all_regi) "calculates amount of ground rock spred on fields" -q33_grindrock_onfield_tot(ttot,all_regi,rlf,rlf) "total amount of ground rock on fields" +q33_capconst_weathering(ttot,all_regi) "calculates amount of ground rock spred on fields" +q33_weathering_onfield_tot(ttot,all_regi,rlf,rlf) "total amount of ground rock on fields" q33_omcosts(ttot,all_regi) "calculates O&M costs for spreading ground rocks on fields" q33_potential(ttot,all_regi,rlf) "limits the total potential of EW per region and grade" q33_emiEW(ttot,all_regi) "calculates amount of carbon captured by EW" diff --git a/modules/33_CDR/all/equations.gms b/modules/33_CDR/all/equations.gms index c6cb94556..2e3b1f2bb 100644 --- a/modules/33_CDR/all/equations.gms +++ b/modules/33_CDR/all/equations.gms @@ -18,22 +18,22 @@ q33_demFeCDR(t,regi,entyFe)$(entyFe2Sector(entyFe,"cdr")) .. ***--------------------------------------------------------------------------- *' Calculation of the amount of ground rock spread in timestep t. ***--------------------------------------------------------------------------- -q33_capconst_grindrock(t,regi).. - sum(rlf2,sum(rlf, v33_grindrock_onfield(t,regi,rlf,rlf2))) +q33_capconst_weathering(t,regi).. + sum(rlf2,sum(rlf, v33_weathering_onfield(t,regi,rlf,rlf2))) =l= - sum(teNoTransform2rlf_dyn33("rockgrind",rlf2), vm_capFac(t,regi,"rockgrind") * vm_cap(t,regi,"rockgrind",rlf2)) + sum(teNoTransform2rlf_dyn33("weathering",rlf2), vm_capFac(t,regi,"weathering") * vm_cap(t,regi,"weathering",rlf2)) ; ***--------------------------------------------------------------------------- *' Calculation of the total amount of ground rock on the fields in timestep t. The first part of the equation describes the decay of the rocks added until that time, *' the rest describes the newly added rocks. ***--------------------------------------------------------------------------- -q33_grindrock_onfield_tot(ttot,regi,rlf,rlf2)$(ttot.val ge max(2010, cm_startyear)).. - v33_grindrock_onfield_tot(ttot,regi,rlf,rlf2) +q33_weathering_onfield_tot(ttot,regi,rlf,rlf2)$(ttot.val ge max(2010, cm_startyear)).. + v33_weathering_onfield_tot(ttot,regi,rlf,rlf2) =e= - v33_grindrock_onfield_tot(ttot-1,regi,rlf,rlf2) * exp(-p33_co2_rem_rate(rlf) * pm_ts(ttot)) + - v33_grindrock_onfield(ttot-1,regi,rlf,rlf2) * (sum(tall $ ((tall.val lt (ttot.val-pm_ts(ttot)/2)) $ (tall.val ge (ttot.val-pm_ts(ttot)))),exp(-p33_co2_rem_rate(rlf) * (ttot.val-tall.val)))) + - v33_grindrock_onfield(ttot,regi,rlf,rlf2) * (sum(tall $ ((tall.val le ttot.val) $ (tall.val gt (ttot.val-pm_ts(ttot)/2))),exp(-p33_co2_rem_rate(rlf) * (ttot.val-tall.val)))) + v33_weathering_onfield_tot(ttot-1,regi,rlf,rlf2) * exp(-p33_co2_rem_rate(rlf) * pm_ts(ttot)) + + v33_weathering_onfield(ttot-1,regi,rlf,rlf2) * (sum(tall $ ((tall.val lt (ttot.val-pm_ts(ttot)/2)) $ (tall.val ge (ttot.val-pm_ts(ttot)))),exp(-p33_co2_rem_rate(rlf) * (ttot.val-tall.val)))) + + v33_weathering_onfield(ttot,regi,rlf,rlf2) * (sum(tall $ ((tall.val le ttot.val) $ (tall.val gt (ttot.val-pm_ts(ttot)/2))),exp(-p33_co2_rem_rate(rlf) * (ttot.val-tall.val)))) ; ***--------------------------------------------------------------------------- @@ -43,7 +43,7 @@ q33_emiEW(t,regi).. v33_emiEW(t,regi) =e= sum(rlf, - - sum(rlf2,v33_grindrock_onfield_tot(t,regi,rlf,rlf2)) * s33_co2_rem_pot * (1 - exp(-p33_co2_rem_rate(rlf))) + - sum(rlf2,v33_weathering_onfield_tot(t,regi,rlf,rlf2)) * s33_co2_rem_pot * (1 - exp(-p33_co2_rem_rate(rlf))) ) ; @@ -100,8 +100,7 @@ q33_DacFEdemand_heat(t,regi,entyFe).. q33_otherFEdemand(t,regi,entyFe).. vm_otherFEdemand(t,regi,entyFe) =e= - sum(rlf, s33_rockgrind_fedem$(sameas(entyFe,"feels")) * sm_EJ_2_TWa * sum(rlf2,v33_grindrock_onfield(t,regi,rlf,rlf2))) - + sum(rlf, s33_rockfield_fedem$(sameas(entyFe,"fedie")) * sm_EJ_2_TWa * sum(rlf2,v33_grindrock_onfield(t,regi,rlf,rlf2))) + sum(rlf$(rlf.val le 2), p33_weathering_fedem(entyFe) * sm_EJ_2_TWa * sum(rlf2,v33_weathering_onfield(t,regi,rlf,rlf2))) + v33_DacFEdemand_el(t,regi,entyFe) + v33_DacFEdemand_heat(t,regi,entyFe) ; @@ -115,7 +114,7 @@ q33_omcosts(t,regi).. sum(rlf$(rlf.val le 2), sum(rlf2, (s33_costs_fix + p33_transport_costs(regi,rlf,rlf2)) - * v33_grindrock_onfield(t,regi,rlf,rlf2) + * v33_weathering_onfield(t,regi,rlf,rlf2) ) ) ; @@ -124,7 +123,7 @@ q33_omcosts(t,regi).. *' Limit total amount of ground rock on the fields to regional maximum potentials. ***--------------------------------------------------------------------------- q33_potential(t,regi,rlf).. - sum(rlf2,v33_grindrock_onfield_tot(t,regi,rlf,rlf2)) + sum(rlf2,v33_weathering_onfield_tot(t,regi,rlf,rlf2)) =l= f33_maxProdGradeRegiWeathering(regi,rlf); @@ -142,7 +141,7 @@ q33_ccsbal(t,regi,ccs2te(ccsCo2(enty),enty2,te)).. ***--------------------------------------------------------------------------- q33_LimEmiEW(t,regi).. sum(rlf, - sum(rlf2,v33_grindrock_onfield(t,regi,rlf,rlf2)) + sum(rlf2,v33_weathering_onfield(t,regi,rlf,rlf2)) ) =l= cm_LimRock*p33_LimRock(regi); diff --git a/modules/33_CDR/all/sets.gms b/modules/33_CDR/all/sets.gms index e70338f06..9e361b828 100644 --- a/modules/33_CDR/all/sets.gms +++ b/modules/33_CDR/all/sets.gms @@ -7,30 +7,30 @@ *** SOF ./modules/33_CDR/all/sets.gms sets -te_dyn33(all_te) "all technologies" +te_dyn33(all_te) "all technologies" / - rockgrind "grinding rock for enhanced weathering" - dac "direct air capture" + weathering "enhanced weathering" + dac "direct air capture" / teNoTransform_dyn33(all_te) "all technologies that do not transform energy but still have investment and O&M costs (like storage or grid)" / - rockgrind "grinding rock for enhanced weathering" - dac "grinding rock for enhanced weathering" + weathering "enhanced weathering" + dac "direct air capture" / -teNoTransform2rlf_dyn33(all_te,rlf) "mapping for final energy to grades" +teNoTransform2rlf_dyn33(all_te,rlf) "mapping for final energy to grades" / - (rockgrind) . 1 - (dac) . 1 + (weathering) . 1 + (dac) . 1 / -adjte_dyn33(all_te) "technologies with linearly growing constraint on control variable" +adjte_dyn33(all_te) "technologies with linearly growing constraint on control variable" / dac / -teLearn_dyn33(all_te) "learning technologies" +teLearn_dyn33(all_te) "learning technologies" / dac / diff --git a/modules/33_CDR/off/bounds.gms b/modules/33_CDR/off/bounds.gms index 951d52c06..c1dc8c534 100644 --- a/modules/33_CDR/off/bounds.gms +++ b/modules/33_CDR/off/bounds.gms @@ -6,7 +6,7 @@ *** | Contact: remind@pik-potsdam.de *** SOF ./modules/33_CDR/off/bounds.gms vm_otherFEdemand.fx(t,regi,entyFe) = 0; -vm_cap.fx(t,regi,"rockgrind",rlf) = 0; +vm_cap.fx(t,regi,"weathering",rlf) = 0; vm_emiCdr.fx(t,regi,enty) = 0; vm_omcosts_cdr.fx(t,regi) = 0; vm_ccs_cdr.fx(t,regi,enty,enty2,te,rlf)$ccs2te(enty,enty2,te) = 0; diff --git a/modules/33_CDR/weathering/bounds.gms b/modules/33_CDR/weathering/bounds.gms index 2c49b7eee..d88f0131f 100644 --- a/modules/33_CDR/weathering/bounds.gms +++ b/modules/33_CDR/weathering/bounds.gms @@ -6,9 +6,9 @@ *** | Contact: remind@pik-potsdam.de *** SOF ./modules/33_CDR/weathering/bounds.gms vm_emiCdr.fx(t,regi,emi)$(not sameas(emi,"co2")) = 0.0; -v33_grindrock_onfield_tot.up(t,regi,rlf,rlf2) = s33_step; -v33_grindrock_onfield_tot.fx("2005",regi,rlf,rlf2) = 0.0; -v33_grindrock_onfield.fx(t,regi,rlf,rlf2)$(rlf2.val gt 10) = 0; -v33_grindrock_onfield_tot.fx(t,regi,rlf,rlf2)$(rlf2.val gt 10) = 0; +v33_weathering_onfield_tot.up(t,regi,rlf,rlf2) = s33_step; +v33_weathering_onfield_tot.fx("2005",regi,rlf,rlf2) = 0.0; +v33_weathering_onfield.fx(t,regi,rlf,rlf2)$(rlf2.val gt 10) = 0; +v33_weathering_onfield_tot.fx(t,regi,rlf,rlf2)$(rlf2.val gt 10) = 0; vm_ccs_cdr.fx(t,regi,enty,enty2,te,rlf)$ccs2te(enty,enty2,te) = 0; *** EOF ./modules/33_CDR/weathering/bounds.gms diff --git a/modules/33_CDR/weathering/datainput.gms b/modules/33_CDR/weathering/datainput.gms index 4c18aabf9..49c83ce2e 100644 --- a/modules/33_CDR/weathering/datainput.gms +++ b/modules/33_CDR/weathering/datainput.gms @@ -16,7 +16,6 @@ display f33_maxProdGradeRegiWeathering; $include "./modules/33_CDR/weathering/input/p33_transport_costs.inc" s33_step = 2.5; -s33_rockfield_fedem = 0.3; *** fix costs [T$/Gt stone]. Data from strefler et al. in $/t stone: mining, crushing, grinding (5.0 investment costs, 25.1 O&M costs), spreading (12.1 O&M costs) s33_costs_fix = 0.0422; s33_co2_rem_pot = 0.3 * 12/44; !! default for basalt, for Olivine 1.1 @@ -27,7 +26,8 @@ p33_co2_rem_rate("1") = -log(1-s33_co2_rem_rate * 0.94); p33_co2_rem_rate("2") = -log(1-s33_co2_rem_rate * 0.29); *JeS fit from Thorben: SI D in strefler, amann et al. (2017) -s33_rockgrind_fedem = 6.62 * cm_gs_ew**(-1.16); +p33_weathering_fedem('feels') = 6.62 * cm_gs_ew**(-1.16); +p33_weathering_fedem('fedie') = 0.3; p33_LimRock(regi) = pm_pop("2005",regi)/sum(regi2,pm_pop("2005",regi2)); diff --git a/modules/33_CDR/weathering/declarations.gms b/modules/33_CDR/weathering/declarations.gms index 127a12d74..168dab6e9 100644 --- a/modules/33_CDR/weathering/declarations.gms +++ b/modules/33_CDR/weathering/declarations.gms @@ -8,21 +8,20 @@ scalars s33_co2_rem_pot "specific carbon removal potential [Gt C per Gt ground rock]" s33_co2_rem_rate "carbon removal rate [fraction of annual reduction of total carbon removal potential]" -s33_rockgrind_fedem "specific energy demand for grinding rocks [EJ per Gt of ground rock]" -s33_rockfield_fedem "specific energy demand for spreading rocks on field [EJ per Gt of ground rock]" s33_costs_fix "fixed costs for mining, grinding, spreading [T$/Gt stone]" -s33_step "size of bins in v33_grindrock_onfield [Gt stone]" +s33_step "size of bins in v33_weathering_onfield [Gt stone]" ; parameters p33_transport_costs(all_regi,rlf,rlf) "transport costs [T$/Gt stone]" p33_co2_rem_rate(rlf) "carbon removal rate [fraction of annual reduction of total carbon removal potential], multiplied with grade factor" -p33_LimRock(all_regi) "regional share of EW limit [fraction], calculated ex ante for a maximal annual amount of 8 Gt rock in D:\projects\CEMICS\paper_technical\supply_curve_transport_remind_regions.m" +p33_weathering_fedem(all_enty) "specific energy demand for enhanced weathering [EJ per Gt of ground rock]" +p33_LimRock(all_regi) "regional share of EW limit [fraction], calculated ex ante for a maximal annual amount of 8 Gt rock in D:\projects\CEMICS\paper_technical\supply_curve_transport_remind_regions.m" ; positive variables -v33_grindrock_onfield(ttot,all_regi,rlf,rlf) "amount of ground rock spread on fields in each timestep [Gt]" -v33_grindrock_onfield_tot(ttot,all_regi,rlf,rlf) "total amount of ground rock on fields [Gt]" +v33_weathering_onfield(ttot,all_regi,rlf,rlf) "amount of ground rock spread on fields in each timestep [Gt]" +v33_weathering_onfield_tot(ttot,all_regi,rlf,rlf) "total amount of ground rock on fields [Gt]" ; variables @@ -33,8 +32,8 @@ v33_emiEW(ttot,all_regi) "negative CO2 emission from EW [GtC / a]" equations q33_demFeCDR(ttot,all_regi,all_enty) "CDR demand balance for final energy" q33_otherFEdemand(ttot,all_regi,all_enty) "calculates final energy demand from no transformation technologies (e.g. enhanced weathering)" -q33_capconst_grindrock(ttot,all_regi) "calculates amount of ground rock spread on fields" -q33_grindrock_onfield_tot(ttot,all_regi,rlf,rlf) "calculates total amount of ground rock on fields" +q33_capconst_weathering(ttot,all_regi) "calculates amount of ground rock spread on fields" +q33_weathering_onfield_tot(ttot,all_regi,rlf,rlf) "calculates total amount of ground rock on fields" q33_emicdrregi(ttot,all_regi) "calculates the (negative) emissions due to CDR technologies" q33_omcosts(ttot,all_regi) "calculates O&M costs for spreading ground rocks on fields" q33_potential(ttot,all_regi,rlf) "limits the total potential per region and grade" diff --git a/modules/33_CDR/weathering/equations.gms b/modules/33_CDR/weathering/equations.gms index 9455211e0..da1e9e757 100644 --- a/modules/33_CDR/weathering/equations.gms +++ b/modules/33_CDR/weathering/equations.gms @@ -22,29 +22,28 @@ q33_demFeCDR(t,regi,entyFe)$(entyFe2Sector(entyFe,"cdr")) .. q33_otherFEdemand(t,regi,entyFe)$(sameas(entyFe,"feels") OR sameas(entyFe,"fedie")).. vm_otherFEdemand(t,regi,entyFe)$(sameas(entyFe,"feels") OR sameas(entyFe,"fedie")) =e= - sum(rlf$(rlf.val le 2), s33_rockgrind_fedem$(sameas(entyFe,"feels")) * sm_EJ_2_TWa * sum(rlf2,v33_grindrock_onfield(t,regi,rlf,rlf2))) - + sum(rlf$(rlf.val le 2), s33_rockfield_fedem$(sameas(entyFe,"fedie")) * sm_EJ_2_TWa * sum(rlf2,v33_grindrock_onfield(t,regi,rlf,rlf2))) + sum(rlf$(rlf.val le 2), p33_weathering_fedem(entyFe) * sm_EJ_2_TWa * sum(rlf2,v33_weathering_onfield(t,regi,rlf,rlf2))) ; ***--------------------------------------------------------------------------- *' Calculation of the amount of ground rock spread in timestep t. ***--------------------------------------------------------------------------- -q33_capconst_grindrock(t,regi).. - sum(rlf2,sum(rlf$(rlf.val le 2), v33_grindrock_onfield(t,regi,rlf,rlf2))) +q33_capconst_weathering(t,regi).. + sum(rlf2,sum(rlf$(rlf.val le 2), v33_weathering_onfield(t,regi,rlf,rlf2))) =l= - sum(teNoTransform2rlf_dyn33(te,rlf2), vm_capFac(t,regi,"rockgrind") * vm_cap(t,regi,"rockgrind",rlf2)) + sum(teNoTransform2rlf_dyn33(te,rlf2), vm_capFac(t,regi,"weathering") * vm_cap(t,regi,"weathering",rlf2)) ; ***--------------------------------------------------------------------------- *' Calculation of the total amount of ground rock on the fields in timestep t. The first part of the equation describes the decay of the rocks added until that time, *' the rest describes the newly added rocks. ***--------------------------------------------------------------------------- -q33_grindrock_onfield_tot(ttot,regi,rlf,rlf2)$((ttot.val ge max(2010, cm_startyear))$(rlf.val le 2)).. - v33_grindrock_onfield_tot(ttot,regi,rlf,rlf2)$(rlf.val le 2) +q33_weathering_onfield_tot(ttot,regi,rlf,rlf2)$((ttot.val ge max(2010, cm_startyear))$(rlf.val le 2)).. + v33_weathering_onfield_tot(ttot,regi,rlf,rlf2)$(rlf.val le 2) =e= - v33_grindrock_onfield_tot(ttot-1,regi,rlf,rlf2)$(rlf.val le 2) * exp(-p33_co2_rem_rate(rlf)$(rlf.val le 2) * pm_ts(ttot)) + - v33_grindrock_onfield(ttot-1,regi,rlf,rlf2)$(rlf.val le 2) * (sum(tall $ ((tall.val lt (ttot.val-pm_ts(ttot)/2)) $ (tall.val ge (ttot.val-pm_ts(ttot)))),exp(-p33_co2_rem_rate(rlf)$(rlf.val le 2) * (ttot.val-tall.val)))) + - v33_grindrock_onfield(ttot,regi,rlf,rlf2)$(rlf.val le 2) * (sum(tall $ ((tall.val le ttot.val) $ (tall.val gt (ttot.val-pm_ts(ttot)/2))),exp(-p33_co2_rem_rate(rlf)$(rlf.val le 2) * (ttot.val-tall.val)))) + v33_weathering_onfield_tot(ttot-1,regi,rlf,rlf2)$(rlf.val le 2) * exp(-p33_co2_rem_rate(rlf)$(rlf.val le 2) * pm_ts(ttot)) + + v33_weathering_onfield(ttot-1,regi,rlf,rlf2)$(rlf.val le 2) * (sum(tall $ ((tall.val lt (ttot.val-pm_ts(ttot)/2)) $ (tall.val ge (ttot.val-pm_ts(ttot)))),exp(-p33_co2_rem_rate(rlf)$(rlf.val le 2) * (ttot.val-tall.val)))) + + v33_weathering_onfield(ttot,regi,rlf,rlf2)$(rlf.val le 2) * (sum(tall $ ((tall.val le ttot.val) $ (tall.val gt (ttot.val-pm_ts(ttot)/2))),exp(-p33_co2_rem_rate(rlf)$(rlf.val le 2) * (ttot.val-tall.val)))) ; ***--------------------------------------------------------------------------- @@ -54,7 +53,7 @@ q33_emiEW(t,regi).. v33_emiEW(t,regi) =e= sum(rlf$(rlf.val le 2), - - sum(rlf2,v33_grindrock_onfield_tot(t,regi,rlf,rlf2)) * s33_co2_rem_pot * (1 - exp(-p33_co2_rem_rate(rlf))) + - sum(rlf2,v33_weathering_onfield_tot(t,regi,rlf,rlf2)) * s33_co2_rem_pot * (1 - exp(-p33_co2_rem_rate(rlf))) ) ; @@ -76,7 +75,7 @@ q33_omcosts(t,regi).. sum(rlf$(rlf.val le 2), sum(rlf2, (s33_costs_fix + p33_transport_costs(regi,rlf,rlf2)) - * v33_grindrock_onfield(t,regi,rlf,rlf2) + * v33_weathering_onfield(t,regi,rlf,rlf2) ) ) ; @@ -85,7 +84,7 @@ q33_omcosts(t,regi).. *' Limit total amount of ground rock on the fields to regional maximum potentials. ***--------------------------------------------------------------------------- q33_potential(t,regi,rlf)$(rlf.val le 2).. - sum(rlf2,v33_grindrock_onfield_tot(t,regi,rlf,rlf2)$(rlf.val le 2)) + sum(rlf2,v33_weathering_onfield_tot(t,regi,rlf,rlf2)$(rlf.val le 2)) =l= f33_maxProdGradeRegiWeathering(regi,rlf)$(rlf.val le 2); @@ -94,7 +93,7 @@ q33_potential(t,regi,rlf)$(rlf.val le 2).. ***--------------------------------------------------------------------------- q33_LimEmiEW(t,regi).. sum(rlf, - sum(rlf2,v33_grindrock_onfield(t,regi,rlf,rlf2)) + sum(rlf2,v33_weathering_onfield(t,regi,rlf,rlf2)) ) =l= cm_LimRock*p33_LimRock(regi); diff --git a/modules/33_CDR/weathering/sets.gms b/modules/33_CDR/weathering/sets.gms index 6b666254c..5e08566c3 100644 --- a/modules/33_CDR/weathering/sets.gms +++ b/modules/33_CDR/weathering/sets.gms @@ -7,27 +7,27 @@ *** SOF ./modules/33_CDR/weathering/sets.gms sets -te_dyn33(all_te) "all technologies" +te_dyn33(all_te) "all technologies" / - rockgrind "grinding rock for enhanced weathering" + weathering "enhanced weathering" / teNoTransform_dyn33(all_te) "all technologies that do not transform energy but still have investment and O&M costs (like storage or grid)" / - rockgrind "grinding rock for enhanced weathering" + weathering "enhanced weathering" / -teNoTransform2rlf_dyn33(all_te,rlf) "mapping for final energy to grades" +teNoTransform2rlf_dyn33(all_te,rlf) "mapping for final energy to grades" / - (rockgrind) . 1 + (weathering) . 1 / ; ***------------------------------------------------------------------------- *** add module specific sets and mappings to the global sets and mappings ***------------------------------------------------------------------------- -te(te_dyn33) = YES; -teNoTransform(teNoTransform_dyn33) = YES; -teNoTransform2rlf(teNoTransform2rlf_dyn33) = YES; +te(te_dyn33) = YES; +teNoTransform(teNoTransform_dyn33) = YES; +teNoTransform2rlf(teNoTransform2rlf_dyn33) = YES; *** EOF ./modules/33_CDR/weathering/sets.gms diff --git a/scripts/start/prepare.R b/scripts/start/prepare.R index ac8e33432..2ce902796 100644 --- a/scripts/start/prepare.R +++ b/scripts/start/prepare.R @@ -547,24 +547,29 @@ prepare <- function() { list(c("q40_CoalBound.M", "!!q40_CoalBound.M"))) } + #KK temporary fix after CDR module refactoring so that you can use older gdx files + fixings_manipulateThis <- c(fixings_manipulateThis, list("rockgrind", "weathering"), list("grindrock", "weathering")) + levs_manipulateThis <- c(levs_manipulateThis, list("rockgrind", "weathering"), list("grindrock", "weathering")) + margs_manipulateThis <- c(margs_manipulateThis, list("rockgrind", "weathering"), list("grindrock", "weathering")) + #KK CDR module realizations if(cfg$gms$CDR == 'DAC'){ fixings_manipulateThis <- c(fixings_manipulateThis, list(c("v33_emiEW.FX", "!!v33_emiEW.FX")), - list(c("v33_grindrock_onfield.FX", "!!v33_grindrock_onfield.FX")), - list(c("v33_grindrock_onfield_tot.FX", "!!v33_grindrock_onfield_tot.FX"))) + list(c("v33_weathering_onfield.FX", "!!v33_weathering_onfield.FX")), + list(c("v33_weathering_onfield_tot.FX", "!!v33_weathering_onfield_tot.FX"))) levs_manipulateThis <- c(levs_manipulateThis, list(c("v33_emiEW.L", "!!v33_emiEW.L")), - list(c("v33_grindrock_onfield.L", "!!v33_grindrock_onfield.L")), - list(c("v33_grindrock_onfield_tot.L", "!!v33_grindrock_onfield_tot.L"))) + list(c("v33_weathering_onfield.L", "!!v33_weathering_onfield.L")), + list(c("v33_weathering_onfield_tot.L", "!!v33_weathering_onfield_tot.L"))) margs_manipulateThis <- c(margs_manipulateThis, list(c("v33_emiEW.M", "!!v33_emiEW.M")), - list(c("v33_grindrock_onfield.M", "!!v33_grindrock_onfield.M")), - list(c("v33_grindrock_onfield_tot.M", "!!v33_grindrock_onfield_tot.M")), - list(c("q33_capconst_grindrock.M", "!!q33_capconst_grindrock.M")), - list(c("q33_grindrock_onfield_tot.M", "!!q33_grindrock_onfield_tot.M")), + list(c("v33_weathering_onfield.M", "!!v33_weathering_onfield.M")), + list(c("v33_weathering_onfield_tot.M", "!!v33_weathering_onfield_tot.M")), + list(c("q33_capconst_weathering.M", "!!q33_capconst_weathering.M")), + list(c("q33_weathering_onfield_tot.M", "!!q33_weathering_onfield_tot.M")), list(c("q33_omcosts.M", "!!q33_omcosts.M")), list(c("q33_potential.M", "!!q33_potential.M")), list(c("q33_emiEW.M", "!!q33_emiEW.M")), @@ -599,26 +604,26 @@ prepare <- function() { list(c("v33_emiEW.FX", "!!v33_emiEW.FX")), list(c("v33_DacFEdemand_el.FX", "!!v33_DacFEdemand_el.FX")), list(c("v33_DacFEdemand_heat.FX", "!!v33_DacFEdemand_heat.FX")), - list(c("v33_grindrock_onfield.FX", "!!v33_grindrock_onfield.FX")), - list(c("v33_grindrock_onfield_tot.FX", "!!v33_grindrock_onfield_tot.FX"))) + list(c("v33_weathering_onfield.FX", "!!v33_weathering_onfield.FX")), + list(c("v33_weathering_onfield_tot.FX", "!!v33_weathering_onfield_tot.FX"))) levs_manipulateThis <- c(levs_manipulateThis, list(c("v33_emiDAC.L", "!!v33_emiDAC.L")), list(c("v33_emiEW.L", "!!v33_emiEW.L")), list(c("v33_DacFEdemand_el.L", "!!v33_DacFEdemand_el.L")), list(c("v33_DacFEdemand_heat.L", "!!v33_DacFEdemand_heat.L")), - list(c("v33_grindrock_onfield.L", "!!v33_grindrock_onfield.L")), - list(c("v33_grindrock_onfield_tot.L", "!!v33_grindrock_onfield_tot.L"))) + list(c("v33_weathering_onfield.L", "!!v33_weathering_onfield.L")), + list(c("v33_weathering_onfield_tot.L", "!!v33_weathering_onfield_tot.L"))) margs_manipulateThis <- c(margs_manipulateThis, list(c("v33_emiDAC.M", "!!v33_emiDAC.M")), list(c("v33_emiEW.M", "!!v33_emiEW.M")), - list(c("v33_grindrock_onfield.M", "!!v33_grindrock_onfield.M")), - list(c("v33_grindrock_onfield_tot.M", "!!v33_grindrock_onfield_tot.M")), + list(c("v33_weathering_onfield.M", "!!v33_weathering_onfield.M")), + list(c("v33_weathering_onfield_tot.M", "!!v33_weathering_onfield_tot.M")), list(c("v33_DacFEdemand_el.M", "!!v33_DacFEdemand_el.M")), list(c("v33_DacFEdemand_heat.M", "!!v33_DacFEdemand_heat.M")), - list(c("q33_capconst_grindrock.M", "!!q33_capconst_grindrock.M")), - list(c("q33_grindrock_onfield_tot.M", "!!q33_grindrock_onfield_tot.M")), + list(c("q33_capconst_weathering.M", "!!q33_capconst_weathering.M")), + list(c("q33_weathering_onfield_tot.M", "!!q33_weathering_onfield_tot.M")), list(c("q33_omcosts.M", "!!q33_omcosts.M")), list(c("q33_potential.M", "!!q33_potential.M")), list(c("q33_emiEW.M", "!!q33_emiEW.M")), From ee5e3c6cfc443626a9650bc7c61ea1654541502c Mon Sep 17 00:00:00 2001 From: Katarzyna Kowalczyk Date: Mon, 8 Aug 2022 14:45:13 +0200 Subject: [PATCH 02/10] New rlf corresponding to climate zones --- modules/33_CDR/all/equations.gms | 51 ++++++++++++------------- modules/33_CDR/all/sets.gms | 6 +++ modules/33_CDR/weathering/equations.gms | 43 ++++++++++----------- modules/33_CDR/weathering/sets.gms | 6 +++ 4 files changed, 56 insertions(+), 50 deletions(-) diff --git a/modules/33_CDR/all/equations.gms b/modules/33_CDR/all/equations.gms index 2e3b1f2bb..d7a44f587 100644 --- a/modules/33_CDR/all/equations.gms +++ b/modules/33_CDR/all/equations.gms @@ -10,30 +10,30 @@ *' CDR Final Energy Balance ***--------------------------------------------------------------------------- q33_demFeCDR(t,regi,entyFe)$(entyFe2Sector(entyFe,"cdr")) .. - vm_otherFEdemand(t,regi,entyFe) - =e= - sum((entySe,te)$se2fe(entySe,entyFe,te), vm_demFeSector_afterTax(t,regi,entySe,entyFe,"cdr","ETS")) + vm_otherFEdemand(t,regi,entyFe) + =e= + sum((entySe,te)$se2fe(entySe,entyFe,te), vm_demFeSector(t,regi,entySe,entyFe,"cdr","ETS")) ; ***--------------------------------------------------------------------------- *' Calculation of the amount of ground rock spread in timestep t. ***--------------------------------------------------------------------------- q33_capconst_weathering(t,regi).. - sum(rlf2,sum(rlf, v33_weathering_onfield(t,regi,rlf,rlf2))) + sum((rlf_cz33, rlf), v33_weathering_onfield(t,regi,rlf_cz33,rlf)) =l= - sum(teNoTransform2rlf_dyn33("weathering",rlf2), vm_capFac(t,regi,"weathering") * vm_cap(t,regi,"weathering",rlf2)) + sum(teNoTransform2rlf_dyn33("weathering",rlf), vm_capFac(t,regi,"weathering") * vm_cap(t,regi,"weathering",rlf)) ; ***--------------------------------------------------------------------------- *' Calculation of the total amount of ground rock on the fields in timestep t. The first part of the equation describes the decay of the rocks added until that time, *' the rest describes the newly added rocks. ***--------------------------------------------------------------------------- -q33_weathering_onfield_tot(ttot,regi,rlf,rlf2)$(ttot.val ge max(2010, cm_startyear)).. - v33_weathering_onfield_tot(ttot,regi,rlf,rlf2) +q33_weathering_onfield_tot(ttot,regi,rlf_cz33,rlf)$(ttot.val ge max(2010, cm_startyear)).. + v33_weathering_onfield_tot(ttot,regi,rlf_cz33,rlf) =e= - v33_weathering_onfield_tot(ttot-1,regi,rlf,rlf2) * exp(-p33_co2_rem_rate(rlf) * pm_ts(ttot)) + - v33_weathering_onfield(ttot-1,regi,rlf,rlf2) * (sum(tall $ ((tall.val lt (ttot.val-pm_ts(ttot)/2)) $ (tall.val ge (ttot.val-pm_ts(ttot)))),exp(-p33_co2_rem_rate(rlf) * (ttot.val-tall.val)))) + - v33_weathering_onfield(ttot,regi,rlf,rlf2) * (sum(tall $ ((tall.val le ttot.val) $ (tall.val gt (ttot.val-pm_ts(ttot)/2))),exp(-p33_co2_rem_rate(rlf) * (ttot.val-tall.val)))) + v33_weathering_onfield_tot(ttot-1,regi,rlf_cz33,rlf) * exp(-p33_co2_rem_rate(rlf_cz33) * pm_ts(ttot)) + + v33_weathering_onfield(ttot-1,regi,rlf_cz33,rlf) * (sum(tall $ ((tall.val lt (ttot.val-pm_ts(ttot)/2)) $ (tall.val ge (ttot.val-pm_ts(ttot)))),exp(-p33_co2_rem_rate(rlf_cz33) * (ttot.val-tall.val)))) + + v33_weathering_onfield(ttot,regi,rlf_cz33,rlf) * (sum(tall $ ((tall.val le ttot.val) $ (tall.val gt (ttot.val-pm_ts(ttot)/2))),exp(-p33_co2_rem_rate(rlf_cz33) * (ttot.val-tall.val)))) ; ***--------------------------------------------------------------------------- @@ -42,9 +42,9 @@ q33_weathering_onfield_tot(ttot,regi,rlf,rlf2)$(ttot.val ge max(2010, cm_startye q33_emiEW(t,regi).. v33_emiEW(t,regi) =e= - sum(rlf, - - sum(rlf2,v33_weathering_onfield_tot(t,regi,rlf,rlf2)) * s33_co2_rem_pot * (1 - exp(-p33_co2_rem_rate(rlf))) - ) + sum((rlf_cz33, rlf), + - v33_weathering_onfield_tot(t,regi,rlf_cz33,rlf) * s33_co2_rem_pot * (1 - exp(-p33_co2_rem_rate(rlf_cz33))) + ) ; ***--------------------------------------------------------------------------- @@ -100,7 +100,7 @@ q33_DacFEdemand_heat(t,regi,entyFe).. q33_otherFEdemand(t,regi,entyFe).. vm_otherFEdemand(t,regi,entyFe) =e= - sum(rlf$(rlf.val le 2), p33_weathering_fedem(entyFe) * sm_EJ_2_TWa * sum(rlf2,v33_weathering_onfield(t,regi,rlf,rlf2))) + p33_weathering_fedem(entyFe) * sm_EJ_2_TWa * sum((rlf_cz33, rlf), v33_weathering_onfield(t,regi,rlf_cz33,rlf)) + v33_DacFEdemand_el(t,regi,entyFe) + v33_DacFEdemand_heat(t,regi,entyFe) ; @@ -111,21 +111,19 @@ q33_otherFEdemand(t,regi,entyFe).. q33_omcosts(t,regi).. vm_omcosts_cdr(t,regi) =e= - sum(rlf$(rlf.val le 2), - sum(rlf2, - (s33_costs_fix + p33_transport_costs(regi,rlf,rlf2)) - * v33_weathering_onfield(t,regi,rlf,rlf2) - ) + sum((rlf_cz33, rlf), + (s33_costs_fix + p33_transport_costs(regi,rlf_cz33,rlf)) * v33_weathering_onfield(t,regi,rlf_cz33,rlf) ) ; ***--------------------------------------------------------------------------- *' Limit total amount of ground rock on the fields to regional maximum potentials. ***--------------------------------------------------------------------------- -q33_potential(t,regi,rlf).. - sum(rlf2,v33_weathering_onfield_tot(t,regi,rlf,rlf2)) +q33_potential(t,regi,rlf_cz33).. + sum(rlf, v33_weathering_onfield_tot(t,regi,rlf_cz33,rlf)) =l= - f33_maxProdGradeRegiWeathering(regi,rlf); + f33_maxProdGradeRegiWeathering(regi,rlf_cz33) + ; ***--------------------------------------------------------------------------- *' Preparation of captured emissions to enter the CCS chain. @@ -140,11 +138,10 @@ q33_ccsbal(t,regi,ccs2te(ccsCo2(enty),enty2,te)).. *' An annual limit for the maximum amount of rocks spred [Gt] can be set via cm_LimRock, e.g. due to sustainability concerns. ***--------------------------------------------------------------------------- q33_LimEmiEW(t,regi).. - sum(rlf, - sum(rlf2,v33_weathering_onfield(t,regi,rlf,rlf2)) - ) - =l= - cm_LimRock*p33_LimRock(regi); + sum((rlf_cz33, rlf), v33_weathering_onfield(t,regi,rlf_cz33,rlf)) + =l= + cm_LimRock*p33_LimRock(regi) + ; ***--------------------------------------------------------------------------- *' Limit the amount of H2 from biomass to the demand without DAC. diff --git a/modules/33_CDR/all/sets.gms b/modules/33_CDR/all/sets.gms index 9e361b828..dd28954e4 100644 --- a/modules/33_CDR/all/sets.gms +++ b/modules/33_CDR/all/sets.gms @@ -34,6 +34,12 @@ teLearn_dyn33(all_te) "learning technologies" / dac / + +rlf_cz33(rlf) "representing weathering rates depending on climate zones according to Strefler, Amann et al. (2017)" +/ + 1 "warm regions" + 2 "temperate regions" +/ ; ***------------------------------------------------------------------------- diff --git a/modules/33_CDR/weathering/equations.gms b/modules/33_CDR/weathering/equations.gms index da1e9e757..e21b3ac42 100644 --- a/modules/33_CDR/weathering/equations.gms +++ b/modules/33_CDR/weathering/equations.gms @@ -22,28 +22,28 @@ q33_demFeCDR(t,regi,entyFe)$(entyFe2Sector(entyFe,"cdr")) .. q33_otherFEdemand(t,regi,entyFe)$(sameas(entyFe,"feels") OR sameas(entyFe,"fedie")).. vm_otherFEdemand(t,regi,entyFe)$(sameas(entyFe,"feels") OR sameas(entyFe,"fedie")) =e= - sum(rlf$(rlf.val le 2), p33_weathering_fedem(entyFe) * sm_EJ_2_TWa * sum(rlf2,v33_weathering_onfield(t,regi,rlf,rlf2))) + p33_weathering_fedem(entyFe) * sm_EJ_2_TWa * sum((rlf_cz33, rlf), v33_weathering_onfield(t,regi,rlf_cz33,rlf)) ; ***--------------------------------------------------------------------------- *' Calculation of the amount of ground rock spread in timestep t. ***--------------------------------------------------------------------------- q33_capconst_weathering(t,regi).. - sum(rlf2,sum(rlf$(rlf.val le 2), v33_weathering_onfield(t,regi,rlf,rlf2))) + sum((rlf_cz33, rlf), v33_weathering_onfield(t,regi,rlf_cz33,rlf)) =l= - sum(teNoTransform2rlf_dyn33(te,rlf2), vm_capFac(t,regi,"weathering") * vm_cap(t,regi,"weathering",rlf2)) + sum(teNoTransform2rlf_dyn33("weathering",rlf), vm_capFac(t,regi,"weathering") * vm_cap(t,regi,"weathering",rlf)) ; ***--------------------------------------------------------------------------- *' Calculation of the total amount of ground rock on the fields in timestep t. The first part of the equation describes the decay of the rocks added until that time, *' the rest describes the newly added rocks. ***--------------------------------------------------------------------------- -q33_weathering_onfield_tot(ttot,regi,rlf,rlf2)$((ttot.val ge max(2010, cm_startyear))$(rlf.val le 2)).. - v33_weathering_onfield_tot(ttot,regi,rlf,rlf2)$(rlf.val le 2) +q33_weathering_onfield_tot(ttot,regi,rlf_cz33,rlf)$(ttot.val ge max(2010, cm_startyear)).. + v33_weathering_onfield_tot(ttot,regi,rlf_cz33,rlf) =e= - v33_weathering_onfield_tot(ttot-1,regi,rlf,rlf2)$(rlf.val le 2) * exp(-p33_co2_rem_rate(rlf)$(rlf.val le 2) * pm_ts(ttot)) + - v33_weathering_onfield(ttot-1,regi,rlf,rlf2)$(rlf.val le 2) * (sum(tall $ ((tall.val lt (ttot.val-pm_ts(ttot)/2)) $ (tall.val ge (ttot.val-pm_ts(ttot)))),exp(-p33_co2_rem_rate(rlf)$(rlf.val le 2) * (ttot.val-tall.val)))) + - v33_weathering_onfield(ttot,regi,rlf,rlf2)$(rlf.val le 2) * (sum(tall $ ((tall.val le ttot.val) $ (tall.val gt (ttot.val-pm_ts(ttot)/2))),exp(-p33_co2_rem_rate(rlf)$(rlf.val le 2) * (ttot.val-tall.val)))) + v33_weathering_onfield_tot(ttot-1,regi,rlf_cz33,rlf) * exp(-p33_co2_rem_rate(rlf_cz33) * pm_ts(ttot)) + + v33_weathering_onfield(ttot-1,regi,rlf_cz33,rlf) * (sum(tall $ ((tall.val lt (ttot.val-pm_ts(ttot)/2)) $ (tall.val ge (ttot.val-pm_ts(ttot)))),exp(-p33_co2_rem_rate(rlf_cz33) * (ttot.val-tall.val)))) + + v33_weathering_onfield(ttot,regi,rlf_cz33,rlf) * (sum(tall $ ((tall.val le ttot.val) $ (tall.val gt (ttot.val-pm_ts(ttot)/2))),exp(-p33_co2_rem_rate(rlf_cz33) * (ttot.val-tall.val)))) ; ***--------------------------------------------------------------------------- @@ -52,8 +52,8 @@ q33_weathering_onfield_tot(ttot,regi,rlf,rlf2)$((ttot.val ge max(2010, cm_starty q33_emiEW(t,regi).. v33_emiEW(t,regi) =e= - sum(rlf$(rlf.val le 2), - - sum(rlf2,v33_weathering_onfield_tot(t,regi,rlf,rlf2)) * s33_co2_rem_pot * (1 - exp(-p33_co2_rem_rate(rlf))) + sum((rlf_cz33, rlf), + - v33_weathering_onfield_tot(t,regi,rlf_cz33,rlf) * s33_co2_rem_pot * (1 - exp(-p33_co2_rem_rate(rlf_cz33))) ) ; @@ -72,30 +72,27 @@ q33_emicdrregi(t,regi).. q33_omcosts(t,regi).. vm_omcosts_cdr(t,regi) =e= - sum(rlf$(rlf.val le 2), - sum(rlf2, - (s33_costs_fix + p33_transport_costs(regi,rlf,rlf2)) - * v33_weathering_onfield(t,regi,rlf,rlf2) - ) + sum((rlf_cz33, rlf), + (s33_costs_fix + p33_transport_costs(regi,rlf_cz33,rlf)) * v33_weathering_onfield(t,regi,rlf_cz33,rlf) ) ; ***--------------------------------------------------------------------------- *' Limit total amount of ground rock on the fields to regional maximum potentials. ***--------------------------------------------------------------------------- -q33_potential(t,regi,rlf)$(rlf.val le 2).. - sum(rlf2,v33_weathering_onfield_tot(t,regi,rlf,rlf2)$(rlf.val le 2)) +q33_potential(t,regi,rlf_cz33).. + sum(rlf, v33_weathering_onfield_tot(t,regi,rlf_cz33,rlf)) =l= - f33_maxProdGradeRegiWeathering(regi,rlf)$(rlf.val le 2); + f33_maxProdGradeRegiWeathering(regi,rlf_cz33) + ; ***--------------------------------------------------------------------------- *' An annual limit for the maximum amount of rocks spred [Gt] can be set via cm_LimRock, e.g. due to sustainability concerns. ***--------------------------------------------------------------------------- q33_LimEmiEW(t,regi).. - sum(rlf, - sum(rlf2,v33_weathering_onfield(t,regi,rlf,rlf2)) - ) - =l= - cm_LimRock*p33_LimRock(regi); + sum((rlf_cz33, rlf), v33_weathering_onfield(t,regi,rlf_cz33,rlf)) + =l= + cm_LimRock*p33_LimRock(regi) + ; *** EOF ./modules/33_CDR/weathering/equations.gms diff --git a/modules/33_CDR/weathering/sets.gms b/modules/33_CDR/weathering/sets.gms index 5e08566c3..227e3bab4 100644 --- a/modules/33_CDR/weathering/sets.gms +++ b/modules/33_CDR/weathering/sets.gms @@ -21,6 +21,12 @@ teNoTransform2rlf_dyn33(all_te,rlf) "mapping for final energy to grades" / (weathering) . 1 / + +rlf_cz33(rlf) "representing weathering rates depending on climate zones according to Strefler, Amann et al. (2017)" +/ + 1 "warm regions" + 2 "temperate regions" +/ ; ***------------------------------------------------------------------------- From 9a643a6e2274978984a63e4863d09c12a22898ee Mon Sep 17 00:00:00 2001 From: Katarzyna Kowalczyk Date: Thu, 15 Dec 2022 16:42:17 +0100 Subject: [PATCH 03/10] CDR module cleanup - new realization 'portfolio' --- config/CDR_scenario_config_AMT.csv | 21 ++ core/declarations.gms | 1 - main.gms | 17 +- modules/33_CDR/DAC/bounds.gms | 18 -- modules/33_CDR/DAC/datainput.gms | 21 -- modules/33_CDR/DAC/declarations.gms | 35 --- modules/33_CDR/DAC/equations.gms | 88 ------- modules/33_CDR/DAC/not_used.txt | 11 - modules/33_CDR/DAC/realization.gms | 20 -- modules/33_CDR/DAC/sets.gms | 45 ---- modules/33_CDR/all/bounds.gms | 17 -- modules/33_CDR/all/datainput.gms | 42 --- modules/33_CDR/all/declarations.gms | 55 ---- modules/33_CDR/all/equations.gms | 154 ----------- modules/33_CDR/all/input/files | 1 - .../33_CDR/all/input/p33_transport_costs.inc | 242 ------------------ modules/33_CDR/all/not_used.txt | 9 - modules/33_CDR/all/realization.gms | 21 -- modules/33_CDR/all/sets.gms | 54 ---- modules/33_CDR/module.gms | 15 +- modules/33_CDR/off/bounds.gms | 14 - modules/33_CDR/off/declarations.gms | 12 - modules/33_CDR/off/not_used.txt | 21 -- modules/33_CDR/off/realization.gms | 16 -- modules/33_CDR/portfolio/bounds.gms | 45 ++++ .../{weathering => portfolio}/datainput.gms | 26 +- modules/33_CDR/portfolio/declarations.gms | 50 ++++ modules/33_CDR/portfolio/equations.gms | 168 ++++++++++++ modules/33_CDR/portfolio/realization.gms | 34 +++ modules/33_CDR/portfolio/sets.gms | 75 ++++++ modules/33_CDR/weathering/bounds.gms | 14 - modules/33_CDR/weathering/declarations.gms | 44 ---- modules/33_CDR/weathering/equations.gms | 98 ------- modules/33_CDR/weathering/input/files | 1 - .../weathering/input/p33_transport_costs.inc | 242 ------------------ modules/33_CDR/weathering/not_used.txt | 13 - modules/33_CDR/weathering/realization.gms | 20 -- modules/33_CDR/weathering/sets.gms | 39 --- scripts/start/prepare.R | 58 +++-- 39 files changed, 464 insertions(+), 1413 deletions(-) create mode 100644 config/CDR_scenario_config_AMT.csv delete mode 100644 modules/33_CDR/DAC/bounds.gms delete mode 100644 modules/33_CDR/DAC/datainput.gms delete mode 100644 modules/33_CDR/DAC/declarations.gms delete mode 100644 modules/33_CDR/DAC/equations.gms delete mode 100644 modules/33_CDR/DAC/not_used.txt delete mode 100644 modules/33_CDR/DAC/realization.gms delete mode 100644 modules/33_CDR/DAC/sets.gms delete mode 100644 modules/33_CDR/all/bounds.gms delete mode 100644 modules/33_CDR/all/datainput.gms delete mode 100644 modules/33_CDR/all/declarations.gms delete mode 100644 modules/33_CDR/all/equations.gms delete mode 100644 modules/33_CDR/all/input/files delete mode 100644 modules/33_CDR/all/input/p33_transport_costs.inc delete mode 100644 modules/33_CDR/all/not_used.txt delete mode 100644 modules/33_CDR/all/realization.gms delete mode 100644 modules/33_CDR/all/sets.gms delete mode 100644 modules/33_CDR/off/bounds.gms delete mode 100644 modules/33_CDR/off/declarations.gms delete mode 100644 modules/33_CDR/off/not_used.txt delete mode 100644 modules/33_CDR/off/realization.gms create mode 100644 modules/33_CDR/portfolio/bounds.gms rename modules/33_CDR/{weathering => portfolio}/datainput.gms (58%) create mode 100644 modules/33_CDR/portfolio/declarations.gms create mode 100644 modules/33_CDR/portfolio/equations.gms create mode 100644 modules/33_CDR/portfolio/realization.gms create mode 100644 modules/33_CDR/portfolio/sets.gms delete mode 100644 modules/33_CDR/weathering/bounds.gms delete mode 100644 modules/33_CDR/weathering/declarations.gms delete mode 100644 modules/33_CDR/weathering/equations.gms delete mode 100644 modules/33_CDR/weathering/input/files delete mode 100644 modules/33_CDR/weathering/input/p33_transport_costs.inc delete mode 100644 modules/33_CDR/weathering/not_used.txt delete mode 100644 modules/33_CDR/weathering/realization.gms delete mode 100644 modules/33_CDR/weathering/sets.gms diff --git a/config/CDR_scenario_config_AMT.csv b/config/CDR_scenario_config_AMT.csv new file mode 100644 index 000000000..93503a7f3 --- /dev/null +++ b/config/CDR_scenario_config_AMT.csv @@ -0,0 +1,21 @@ +title;start;CES_parameters;cm_nash_mode;optimization;CDR;cm_33DAC;cm_33EW;slurmConfig;cm_EDGEtr_scen;cm_demScen;cm_bioenergy_tax;cm_rcp_scen;cm_iterative_target_adj;subsidizeLearning;c_regi_earlyreti_rate;c_tech_earlyreti_rate;c_budgetCO2from2020;carbonprice;cm_co2_tax_2020;cm_peakBudgYr;cm_taxCO2inc_after_peakBudgYr;cm_CO2priceRegConvEndYr;cm_emiscen;cm_fetaxscen;cm_co2_tax_growth;cm_bioenergymaxscen;c_ccsinjecratescen;c_ccscapratescen;techpol;cm_POPscen;cm_GDPscen;cm_oil_scen;cm_gas_scen;cm_coal_scen;c_techAssumptScen;cm_nucscen;cm_so2tax_scen;cm_multigasscen;cm_OILRETIRE;cm_LU_emi_scen;cm_tradecost_bio;cm_1stgen_phaseout;c_SSP_forcing_adjust;cm_APscen;water;cm_cooling_shares;cm_startyear;output;path_gdx;path_gdx_ref;path_gdx_bau +SSP2EU-AMT-calibrate;0;calibrate;;nash;;;;14;Mix1;gdp_SSP2EU;1.5;none;0;off;GLO 0.09, EUR_regi 0.15;off;0;none;-1;2100;3;2050;1;3;1.05;0;1;1;none;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;off;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2005;reporting,reportCEScalib,rds_report;;; +testOneRegi-AMT-Base-DAC;0;load;debug;testOneRegi;DAC;;;8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;reporting,reportCEScalib,rds_report;;; +testOneRegi-AMT-Base-all;0;load;debug;testOneRegi;all;;;8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;reporting,reportCEScalib,rds_report;;; +portfolio-SSP2EU-AMT-Base;0;load;;nash;portfolio;1;0;5;Mix1;gdp_SSP2EU;1.5;none;0;off;GLO 0.09, EUR_regi 0.15;off;0;none;-1;2100;3;2050;1;3;1.05;0;1;1;none;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;off;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2005;reporting,reportCEScalib,rds_report;;; +portfolio-SSP2EU-AMT-NDC;0;load;;nash;portfolio;1;0;5;Mix2;gdp_SSP2EU;1.5;rcp45;3;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;0;NDC;1;2100;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;3;off;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2015;reporting,reportCEScalib,rds_report;;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx +portfolio-SSP2EU-AMT-NDC-weathering;0;load;;nash;portfolio;0;1;5;Mix2;gdp_SSP2EU;1.5;rcp45;3;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;0;NDC;1;2100;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;3;off;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2015;reporting,reportCEScalib,rds_report;;/p/projects/remind/modeltests/output/SSP2EU-AMT-NDC_2022-12-03_04.53.30/fulldata.gdx;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx +portfolio-SSP2EU-AMT-PkBudg500-all;1;load;;nash;portfolio;1;1;5;Mix4;gdp_SSP2EU;1.5;rcp26;9;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;500;diffCurvPhaseIn2Lin;100;2080;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2025;reporting,reportCEScalib,rds_report;;/p/projects/remind/modeltests/output/SSP2EU-AMT-NDC_2022-12-03_04.53.30/fulldata.gdx;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx +portfolio-SSP2EU-AMT-PkBudg500-DAC;1;load;;nash;portfolio;1;0;5;Mix4;gdp_SSP2EU;1.5;rcp26;9;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;500;diffCurvPhaseIn2Lin;100;2080;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2025;reporting,reportCEScalib,rds_report;;/p/projects/remind/modeltests/output/SSP2EU-AMT-NDC_2022-12-03_04.53.30/fulldata.gdx;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx +portfolio-SSP2EU-AMT-PkBudg500-weathering;1;load;;nash;portfolio;0;1;5;Mix4;gdp_SSP2EU;1.5;rcp26;9;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;500;diffCurvPhaseIn2Lin;100;2080;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2025;reporting,reportCEScalib,rds_report;;/p/projects/remind/modeltests/output/SSP2EU-AMT-NDC_2022-12-03_04.53.30/fulldata.gdx;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx +portfolio-SSP2EU-AMT-PkBudg500-DAC-after-weathering;0;load;;nash;portfolio;1;0;5;Mix4;gdp_SSP2EU;1.5;rcp26;9;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;500;diffCurvPhaseIn2Lin;100;2080;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2025;reporting,reportCEScalib,rds_report;;portfolio-SSP2EU-AMT-NDC-weathering;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx +testOneRegi-AMT-Base-late-weathering;0;load;debug;testOneRegi;weathering;;;8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2025;reporting,reportCEScalib,rds_report;;/p/tmp/katarkow/dev_remind/output/dev-EW-late-DAC-SSP2EU-AMT-PkBudg670_2022-06-16_02.17.45/fulldata.gdx;/p/tmp/katarkow/dev_remind/output/dev-EW-late-DAC-SSP2EU-AMT-PkBudg670_2022-06-16_02.17.45/fulldata.gdx +SSP2EU-AMT-Base;0;load;;nash;DAC;;;5;Mix1;gdp_SSP2EU;1.5;none;0;off;GLO 0.09, EUR_regi 0.15;off;0;none;-1;2100;3;2050;1;3;1.05;0;1;1;none;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;off;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2005;reporting,reportCEScalib,rds_report;;; +SSP2EU-AMT-NDC;0;load;;nash;DAC;;;5;Mix2;gdp_SSP2EU;1.5;rcp45;3;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;0;NDC;1;2100;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;3;off;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2015;reporting,reportCEScalib,rds_report;;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx +SSP2EU-AMT-NDC-weathering;0;load;;nash;weathering;;;5;Mix2;gdp_SSP2EU;1.5;rcp45;3;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;0;NDC;1;2100;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;3;off;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2015;reporting,reportCEScalib,rds_report;;/p/projects/remind/modeltests/output/SSP2EU-AMT-NDC_2022-12-03_04.53.30/fulldata.gdx;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx +SSP2EU-AMT-PkBudg500-all-bounded;1;load;;nash;all;;;5;Mix4;gdp_SSP2EU;1.5;rcp26;9;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;500;diffCurvPhaseIn2Lin;100;2080;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2025;reporting,reportCEScalib,rds_report;;/p/projects/remind/modeltests/output/SSP2EU-AMT-NDC_2022-12-03_04.53.30/fulldata.gdx;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx +SSP2EU-AMT-PkBudg500-DAC;1;load;;nash;DAC;;;5;Mix4;gdp_SSP2EU;1.5;rcp26;9;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;500;diffCurvPhaseIn2Lin;100;2080;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2025;reporting,reportCEScalib,rds_report;;/p/projects/remind/modeltests/output/SSP2EU-AMT-NDC_2022-12-03_04.53.30/fulldata.gdx;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx +SSP2EU-AMT-PkBudg500-weathering-bounded;0;load;;nash;weathering;;;5;Mix4;gdp_SSP2EU;1.5;rcp26;9;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;500;diffCurvPhaseIn2Lin;100;2080;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2025;reporting,reportCEScalib,rds_report;;/p/projects/remind/modeltests/output/SSP2EU-AMT-NDC_2022-12-03_04.53.30/fulldata.gdx;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx +SSP2EU-AMT-PkBudg500-DAC-after-weathering;0;load;;nash;DAC;;;5;Mix4;gdp_SSP2EU;1.5;rcp26;9;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;500;diffCurvPhaseIn2Lin;100;2080;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2025;reporting,reportCEScalib,rds_report;;SSP2EU-AMT-NDC-weathering;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx +SSP2EU-AMT-PkBudg1320;0;load;;nash;;;;5;Mix3;gdp_SSP2EU;1.5;rcp26;9;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;1320;diffCurvPhaseIn2Lin;60;2100;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2025;reporting,reportCEScalib,rds_report;;SSP2EU-AMT-Base;SSP2EU-AMT-Base +SSP2EU-AMT-PkBudg670-weathering-after-DAC;0;load;;nash;weathering;;;5;Mix4;gdp_SSP2EU;1.5;rcp26;9;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;670;diffCurvPhaseIn2Lin;100;2080;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2025;reporting,reportCEScalib,rds_report;;/p/tmp/katarkow/dev_remind/output/dev-DAC-SSP2EU-AMT-Base_2022-06-15_09.05.20/fulldata.gdx;/p/tmp/katarkow/dev_remind/output/dev-DAC-SSP2EU-AMT-Base_2022-06-15_09.05.20/fulldata.gdx diff --git a/core/declarations.gms b/core/declarations.gms index 7beda2bfd..b3d3f8747 100644 --- a/core/declarations.gms +++ b/core/declarations.gms @@ -408,7 +408,6 @@ v_co2capturevalve(ttot,all_regi) "CO2 emitted right a vm_prodUe(ttot,all_regi,all_enty,all_enty,all_te) "Useful energy production [TWa]" vm_capEarlyReti(tall,all_regi,all_te) "fraction of early retired capital" -vm_otherFEdemand(ttot,all_regi,all_enty) "final energy demand from no transformation technologies (e.g. enhanced weathering)" vm_demSeOth(ttot,all_regi,all_enty,all_te) "other sety demand from certain technologies, have to calculated in additional equations [TWa]" vm_prodSeOth(ttot,all_regi,all_enty,all_te) "other sety production from certain technologies, have to be calculated in additional equations [TWa]" diff --git a/main.gms b/main.gms index 6789b65e4..384f31c43 100755 --- a/main.gms +++ b/main.gms @@ -305,11 +305,8 @@ $setglobal fossil grades2poly !! def = grades2poly $setglobal power IntC !! def = IntC *'--------------------- 33_CDR ---------------------------------------- *' -*' * (off) : no carbon dioxide removal technologies except BECCS -*' * (weathering) : includes enhanced weathering -*' * (DAC) : includes direct air capture -*' * (all) : includes all CDR technologies -$setglobal CDR DAC !! def = DAC +*' * (portfolio) : CDR options added via switches: cm_33[option abbreviation] +$setglobal CDR portfolio !! def = portfolio *'--------------------- 35_transport ---------------------------------------- *' *' * (complex): transport realization with aggregated transport demand (LDV, HDV, electric trains) via CES function with constrained choice on vehicle technologies @@ -839,6 +836,16 @@ parameter *' * (0): no import, the default starting value as specified in modules/ 0 /on/input/tax_CO2.inc, core/input/data_emibudget.inc, modules/15_climate/box/datainput.gms is used *' * (1): the values from the gdx are read in (works only if the gdx has a parameter value) ATTENTION: make sure that the values from the gdx have the right structure (e.g. regionally differentiated or not) *' +parameter + cm_33DAC "choose whether DAC (direct air capture) should be included into the CDR portfolio. 0 = DAC not used, 1 = used" +; + cm_33DAC = 0; !! def = 1 +*' +parameter + cm_33EW "choose whether EW (enhanced weathering) should be included into the CDR portfolio. 0 = EW not used, 1 = used" +; + cm_33EW = 1; !! def = 0 +*' parameter cm_gs_ew "grain size (for enhanced weathering, CDR module) [micrometre]" ; diff --git a/modules/33_CDR/DAC/bounds.gms b/modules/33_CDR/DAC/bounds.gms deleted file mode 100644 index 81d34cd2c..000000000 --- a/modules/33_CDR/DAC/bounds.gms +++ /dev/null @@ -1,18 +0,0 @@ -*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -*** | authors, and contributors see CITATION.cff file. This file is part -*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -*** | AGPL-3.0, you are granted additional permissions described in the -*** | REMIND License Exception, version 1.0 (see LICENSE file). -*** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/DAC/bounds.gms -vm_emiCdr.fx(t,regi,emi)$(not sameas(emi,"co2")) = 0.0; -vm_emiCdr.l(t,regi,"co2")$(t.val gt 2020 AND cm_ccapturescen ne 2) = -sm_eps; -vm_omcosts_cdr.fx(t,regi) = 0.0; -if (cm_emiscen ne 1, - vm_cap.lo(t,regi,"dac",rlf)$(teNoTransform2rlf_dyn33("dac",rlf) AND (t.val ge max(2025,cm_startyear))) = 1e-7; -); - - -vm_emiCdr.up(t,regi,"co2")$(t.val le 2025)=0; - -*** EOF ./modules/33_CDR/DAC/bounds.gms diff --git a/modules/33_CDR/DAC/datainput.gms b/modules/33_CDR/DAC/datainput.gms deleted file mode 100644 index 2b5250a0a..000000000 --- a/modules/33_CDR/DAC/datainput.gms +++ /dev/null @@ -1,21 +0,0 @@ -*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -*** | authors, and contributors see CITATION.cff file. This file is part -*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -*** | AGPL-3.0, you are granted additional permissions described in the -*** | REMIND License Exception, version 1.0 (see LICENSE file). -*** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/DAC/datainput.gms - -!! Beutler et al. 2019 (Climeworks) -!!fe demand electricity for ventilation -p33_dac_fedem_el("feels") = 5.28; -!!fe demand heat for material recovery -p33_dac_fedem_heat("fehes") = 21.12; -p33_dac_fedem_heat("fegas") = 21.12; -p33_dac_fedem_heat("feh2s") = 21.12; -p33_dac_fedem_heat("feels") = 21.12; -*** FS: sensitivity on DAC efficiency -$if not "%cm_DAC_eff%" == "off" parameter p33_dac_fedem_fac(entyFeStat) / %cm_DAC_eff% /; -$if not "%cm_DAC_eff%" == "off" p33_dac_fedem(entyFeStat) = p33_dac_fedem(entyFeStat) * p33_dac_fedem_fac(entyFeStat); - -*** EOF ./modules/33_CDR/DAC/datainput.gms diff --git a/modules/33_CDR/DAC/declarations.gms b/modules/33_CDR/DAC/declarations.gms deleted file mode 100644 index 3877e3f56..000000000 --- a/modules/33_CDR/DAC/declarations.gms +++ /dev/null @@ -1,35 +0,0 @@ -*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -*** | authors, and contributors see CITATION.cff file. This file is part -*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -*** | AGPL-3.0, you are granted additional permissions described in the -*** | REMIND License Exception, version 1.0 (see LICENSE file). -*** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/DAC/declarations.gms -parameters -*AnM* kWh/tCO2 = 1/278 * GJ/tCO2 = 1/278 * EJ/Gt CO2 = 1/278 * 44/12 EJ/Gt C. Numbers from Beutler et al. 2019 (Climeworks) -p33_dac_fedem_el(all_enty) "specific electricity demand for direct air capture [EJ per Gt of C captured] - ventilation" -p33_dac_fedem_heat(all_enty) "specific heat demand for direct air capture [EJ per Gt of C captured] - absorption material recovery" -; - -variables -vm_ccs_cdr(ttot,all_regi,all_enty,all_enty,all_te,rlf) "CCS emissions from CDR [GtC / a]" -v33_emiDAC(ttot,all_regi) "negative CO2 emission from DAC [GtC / a]" -; - -positive variables -v33_DacFEdemand_el(ttot,all_regi,all_enty) "DAC FE electricity demand [TWa]" -v33_DacFEdemand_heat(ttot,all_regi,all_enty) "DAC FE heat demand [TWa]" -; - -equations -q33_DacFEdemand_heat(ttot,all_regi,all_enty) "calculates DAC FE demand for heat" -q33_DacFEdemand_el(ttot,all_regi,all_enty) "calculates DAC FE demand for electricity" -q33_otherFEdemand(ttot,all_regi,all_enty) "calculates final energy demand from no transformation technologies (e.g. enhanced weathering)" -q33_capconst_dac(ttot,all_regi) "calculates amount of carbon captured" -q33_ccsbal(ttot,all_regi,all_enty,all_enty,all_te) "calculates CCS emissions from CDR technologies" -q33_H2bio_lim(ttot,all_regi,all_te) "limits H2 from bioenergy to FE - otherFEdemand, i.e. no H2 from bioenergy for DAC" -q33_emicdrregi(ttot,all_regi) "calculates the (negative) emissions due to CDR technologies" -q33_demFeCDR(ttot,all_regi,all_enty) "CDR demand balance for final energy" -; - -*** EOF ./modules/33_CDR/DAC/declarations.gms diff --git a/modules/33_CDR/DAC/equations.gms b/modules/33_CDR/DAC/equations.gms deleted file mode 100644 index 26aa35111..000000000 --- a/modules/33_CDR/DAC/equations.gms +++ /dev/null @@ -1,88 +0,0 @@ -*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -*** | authors, and contributors see CITATION.cff file. This file is part -*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -*** | AGPL-3.0, you are granted additional permissions described in the -*** | REMIND License Exception, version 1.0 (see LICENSE file). -*** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/DAC/equations.gms - -***--------------------------------------------------------------------------- -*' CDR Final Energy Balance -***--------------------------------------------------------------------------- -q33_demFeCDR(t,regi,entyFe)$(entyFe2Sector(entyFe,"cdr")) .. - vm_otherFEdemand(t,regi,entyFe) - =e= - sum((entySe,te)$se2fe(entySe,entyFe,te), vm_demFeSector_afterTax(t,regi,entySe,entyFe,"cdr","ETS")) -; - -***--------------------------------------------------------------------------- -*' Calculation of (negative) CO2 emissions from direct air capture. The first part of the equation describes emissions captured from the ambient air, -*' the second part calculates the CO2 captured from the gas used for heat production assuming 90% capture rate. -***--------------------------------------------------------------------------- -q33_capconst_dac(t,regi).. - v33_emiDAC(t,regi) - =e= - - sum(teNoTransform2rlf_dyn33("dac",rlf2), vm_capFac(t,regi,"dac") * vm_cap(t,regi,"dac",rlf2)) - - (1 / pm_eta_conv(t,regi,"gash2c")) * fm_dataemiglob("pegas","seh2","gash2c","cco2") * vm_otherFEdemand(t,regi,"fegas") - ; - -***--------------------------------------------------------------------------- -*' Sum of all CDR emissions other than BECCS and afforestation, which are calculated in the core. -***--------------------------------------------------------------------------- -q33_emicdrregi(t,regi).. - vm_emiCdr(t,regi,"co2") - =e= - v33_emiDAC(t,regi); - -***--------------------------------------------------------------------------- -*' Calculation of electricity demand for ventilation of direct air capture. -***--------------------------------------------------------------------------- -q33_DacFEdemand_el(t,regi,entyFe)$(t.val ge 2025).. - v33_DacFEdemand_el(t,regi,entyFe) - =e= - - vm_emiCdr(t,regi,"co2") * sm_EJ_2_TWa *p33_dac_fedem_el(entyFe) - ; - -***--------------------------------------------------------------------------- -*' Calculation of heat demand of direct air capture. Heat can be provided as heat or by electricity, gas or H2; -*' For example, vm_otherFEdemand(t,regi,"fegas") is calculated as the total energy demand for heat from fegas minus what is already covered by other carriers (i.e. heat, h2 or elec) -***--------------------------------------------------------------------------- -q33_DacFEdemand_heat(t,regi,entyFe)$(t.val ge 2025).. - v33_DacFEdemand_heat(t,regi,entyFe) - =e= - - v33_emiDAC(t,regi) * sm_EJ_2_TWa * p33_dac_fedem_heat(entyFe) - - v33_DacFEdemand_heat(t,regi,"feh2s")$((sameas(entyFe,"fegas"))OR(sameas(entyFe,"fehes"))OR(sameas(entyFe,"feels"))) - - v33_DacFEdemand_heat(t,regi,"fegas")$((sameas(entyFe,"feh2s"))OR(sameas(entyFe,"fehes"))OR(sameas(entyFe,"feels"))) - - v33_DacFEdemand_heat(t,regi,"feels")$((sameas(entyFe,"feh2s"))OR(sameas(entyFe,"fehes"))OR(sameas(entyFe,"fegas"))) - - v33_DacFEdemand_heat(t,regi,"fehes")$((sameas(entyFe,"feh2s"))OR(sameas(entyFe,"fegas"))OR(sameas(entyFe,"feels"))) - ; - - -***--------------------------------------------------------------------------- -*' Calculation of total energy demand of direct air capture. -***--------------------------------------------------------------------------- -q33_otherFEdemand(t,regi,entyFe).. - vm_otherFEdemand(t,regi,entyFe) - =e= - v33_DacFEdemand_el(t,regi,entyFe) + v33_DacFEdemand_heat(t,regi,entyFe) - ; - -***--------------------------------------------------------------------------- -*' Preparation of captured emissions to enter the CCS chain. -***--------------------------------------------------------------------------- -q33_ccsbal(t,regi,ccs2te(ccsCo2(enty),enty2,te)).. - sum(teCCS2rlf(te,rlf), vm_ccs_cdr(t,regi,enty,enty2,te,rlf)) - =e= - -vm_emiCdr(t,regi,"co2") - ; - -***--------------------------------------------------------------------------- -*' Limit the amount of H2 from biomass to the demand without DAC. -***--------------------------------------------------------------------------- -q33_H2bio_lim(t,regi,te).. - vm_prodSE(t,regi,"pebiolc","seh2",te)$pe2se("pebiolc","seh2",te) - =l= - vm_prodFe(t,regi,"seh2","feh2s","tdh2s") - vm_otherFEdemand(t,regi,"feh2s") - ; - -*** EOF ./modules/33_CDR/DAC/equations.gms diff --git a/modules/33_CDR/DAC/not_used.txt b/modules/33_CDR/DAC/not_used.txt deleted file mode 100644 index 5b349d0bd..000000000 --- a/modules/33_CDR/DAC/not_used.txt +++ /dev/null @@ -1,11 +0,0 @@ -# | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -# | authors, and contributors see CITATION.cff file. This file is part -# | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -# | AGPL-3.0, you are granted additional permissions described in the -# | REMIND License Exception, version 1.0 (see LICENSE file). -# | Contact: remind@pik-potsdam.de -name, type, reason -pm_ts,parameter,??? -cm_gs_ew,switch,??? -pm_pop,input,questionnaire -cm_LimRock,input,questionnaire diff --git a/modules/33_CDR/DAC/realization.gms b/modules/33_CDR/DAC/realization.gms deleted file mode 100644 index 946f7bcdb..000000000 --- a/modules/33_CDR/DAC/realization.gms +++ /dev/null @@ -1,20 +0,0 @@ -*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -*** | authors, and contributors see CITATION.cff file. This file is part -*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -*** | AGPL-3.0, you are granted additional permissions described in the -*** | REMIND License Exception, version 1.0 (see LICENSE file). -*** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/DAC/realization.gms - -*' @description -*' In this realization, direct air capture can be used to remove CO2 from the atmosphere in addition to BECCS and afforestation. Based on Broehm et al. we assume an energy demand of -*' 2 GJ/tCO2 electricity and 10 GJ/tCO2 heat which can be met via gas or H2. If gas is used, the resulting CO2 is captured with a capture rate of 90%. - -*####################### R SECTION START (PHASES) ############################## -$Ifi "%phase%" == "sets" $include "./modules/33_CDR/DAC/sets.gms" -$Ifi "%phase%" == "declarations" $include "./modules/33_CDR/DAC/declarations.gms" -$Ifi "%phase%" == "datainput" $include "./modules/33_CDR/DAC/datainput.gms" -$Ifi "%phase%" == "equations" $include "./modules/33_CDR/DAC/equations.gms" -$Ifi "%phase%" == "bounds" $include "./modules/33_CDR/DAC/bounds.gms" -*######################## R SECTION END (PHASES) ############################### -*** EOF ./modules/33_CDR/DAC/realization.gms diff --git a/modules/33_CDR/DAC/sets.gms b/modules/33_CDR/DAC/sets.gms deleted file mode 100644 index d0872a9f0..000000000 --- a/modules/33_CDR/DAC/sets.gms +++ /dev/null @@ -1,45 +0,0 @@ -*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -*** | authors, and contributors see CITATION.cff file. This file is part -*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -*** | AGPL-3.0, you are granted additional permissions described in the -*** | REMIND License Exception, version 1.0 (see LICENSE file). -*** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/DAC/sets.gms -sets - -te_dyn33(all_te) "all technologies" -/ - dac "direct air capture" -/ - -teNoTransform_dyn33(all_te) "all technologies that do not transform energy but still have investment and O&M costs (like storage or grid)" -/ - dac "direct air capture" -/ - -teNoTransform2rlf_dyn33(all_te,rlf) "mapping for final energy to grades" -/ - (dac) . 1 -/ - -adjte_dyn33(all_te) "technologies with linearly growing constraint on control variable" -/ - dac -/ - -teLearn_dyn33(all_te) "learning technologies" -/ - dac -/ -; - -***------------------------------------------------------------------------- -*** add module specific sets and mappings to the global sets and mappings -***------------------------------------------------------------------------- -te(te_dyn33) = YES; -teLearn(teLearn_dyn33) = YES; -teNoTransform(teNoTransform_dyn33) = YES; -teNoTransform2rlf(teNoTransform2rlf_dyn33) = YES; -teAdj(adjte_dyn33) = YES; - -*** EOF ./modules/33_CDR/DAC/sets.gms diff --git a/modules/33_CDR/all/bounds.gms b/modules/33_CDR/all/bounds.gms deleted file mode 100644 index d286a7e76..000000000 --- a/modules/33_CDR/all/bounds.gms +++ /dev/null @@ -1,17 +0,0 @@ -*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -*** | authors, and contributors see CITATION.cff file. This file is part -*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -*** | AGPL-3.0, you are granted additional permissions described in the -*** | REMIND License Exception, version 1.0 (see LICENSE file). -*** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/all/bounds.gms -vm_emiCdr.fx(t,regi,emi)$(not sameas(emi,"co2")) = 0.0; -v33_weathering_onfield_tot.up(t,regi,rlf,rlf2) = s33_step; -v33_weathering_onfield_tot.fx("2005",regi,rlf,rlf2) = 0.0; -v33_weathering_onfield.fx(t,regi,rlf,rlf2)$(rlf2.val gt 10) = 0; -v33_weathering_onfield_tot.fx(t,regi,rlf,rlf2)$(rlf2.val gt 10) = 0; -vm_emiCdr.up(t,regi,"co2")$(t.val gt 2015) = -0.0001; -if (cm_emiscen ne 1, - vm_cap.lo(t,regi,"dac",rlf)$(teNoTransform2rlf_dyn33("dac",rlf) AND (t.val ge max(2025,cm_startyear))) = 1e-7; -); -*** EOF ./modules/33_CDR/all/bounds.gms diff --git a/modules/33_CDR/all/datainput.gms b/modules/33_CDR/all/datainput.gms deleted file mode 100644 index 1f27565c0..000000000 --- a/modules/33_CDR/all/datainput.gms +++ /dev/null @@ -1,42 +0,0 @@ -*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -*** | authors, and contributors see CITATION.cff file. This file is part -*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -*** | AGPL-3.0, you are granted additional permissions described in the -*** | REMIND License Exception, version 1.0 (see LICENSE file). -*** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/all/datainput.gms -!! Beutler et al. 2019 (Climeworks) -!!fe demand electricity for ventilation -p33_dac_fedem_el("feels") = 5.28; -!!fe demand heat for material recovery -p33_dac_fedem_heat("fehes") = 21.12; -p33_dac_fedem_heat("fegas") = 21.12; -p33_dac_fedem_heat("feh2s") = 21.12; -p33_dac_fedem_heat("feels") = 21.12; - -*** enhanced weatering data -table f33_maxProdGradeRegiWeathering(all_regi,rlf) "regional maximum potentials for enhanced weathering in Gt of grinded stone/a for different grades" -$ondelim -$include "./modules/33_CDR/weathering/input/f33_maxProdGradeRegiWeathering.cs3r" -$offdelim -; -display f33_maxProdGradeRegiWeathering; -$include "./modules/33_CDR/weathering/input/p33_transport_costs.inc" - -s33_step = 2.5; -*** fix costs [T$/Gt stone]. Data from strefler et al. in $/t stone: mining, crushing, grinding (5.0 investment costs, 25.1 O&M costs), spreading (12.1 O&M costs) -s33_costs_fix = 0.0422; -s33_co2_rem_pot = 0.3 * 12/44; !! default for basalt, for Olivine 1.1 - -*** carbon removal rate: eqs 2+c1 in strefler, amann et al., 2017: wr = grain surface area based WR (10^-10.53 mol m^-2 s^-1) * molar weight of basalt/forsterite (140.7 g/mol) * 3.155^7 s/a * SSA(gs) -s33_co2_rem_rate = 10**(-10.53) * 125 * 3.155*10**7 * 69.18*(cm_gs_ew**(-1.24)); -p33_co2_rem_rate("1") = -log(1-s33_co2_rem_rate * 0.94); -p33_co2_rem_rate("2") = -log(1-s33_co2_rem_rate * 0.29); - -*JeS fit from Thorben: SI D in strefler, amann et al. (2017) -p33_weathering_fedem('feels') = 6.62 * cm_gs_ew**(-1.16); -p33_weathering_fedem('fedie') = 0.3; - -p33_LimRock(regi) = pm_pop("2005",regi)/sum(regi2,pm_pop("2005",regi2)); - -*** EOF ./modules/33_CDR/all/datainput.gms diff --git a/modules/33_CDR/all/declarations.gms b/modules/33_CDR/all/declarations.gms deleted file mode 100644 index 425416667..000000000 --- a/modules/33_CDR/all/declarations.gms +++ /dev/null @@ -1,55 +0,0 @@ -*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -*** | authors, and contributors see CITATION.cff file. This file is part -*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -*** | AGPL-3.0, you are granted additional permissions described in the -*** | REMIND License Exception, version 1.0 (see LICENSE file). -*** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/all/declarations.gms -scalars -s33_co2_rem_pot "specific carbon removal potential [Gt C per Gt ground rock]" -s33_co2_rem_rate "carbon removal rate [fraction of annual reduction of total carbon removal potential]" -s33_costs_fix "fixed costs for mining, grinding, spreading [T$/Gt stone]" -s33_step "size of bins in v33_weathering_onfield [Gt stone]" -*JeS* GJ/tCO2 = EJ/Gt CO2 = 44/12 EJ/Gt C. Numbers from Report from Micah Broehm. -; - -parameters -p33_transport_costs(all_regi,rlf,rlf) "transport costs [T$/Gt stone]" -p33_co2_rem_rate(rlf) "carbon removal rate [fraction of annual reduction of total carbon removal potential], multiplied with grade factor" -p33_dac_fedem_el(all_enty) "specific electricity demand for direct air capture [EJ per Gt of C captured] - ventilation" -p33_dac_fedem_heat(all_enty) "specific heat demand for direct air capture [EJ per Gt of C captured] - absorption material recovery" -p33_weathering_fedem(all_enty) "specific energy demand for enhanced weathering [EJ per Gt of ground rock]" -p33_LimRock(all_regi) "regional share of EW limit [fraction], calculated ex ante for a maximal annual amount of 8 Gt rock in D:\projects\CEMICS\paper_technical\supply_curve_transport_remind_regions.m" -; - -positive variables -v33_weathering_onfield(ttot,all_regi,rlf,rlf) "amount of ground rock spread on fields in each timestep [Gt]" -v33_weathering_onfield_tot(ttot,all_regi,rlf,rlf) "total amount of ground rock on fields [Gt]" -v33_DacFEdemand_el(ttot,all_regi,all_enty) "DAC FE electricity demand [TWa]" -v33_DacFEdemand_heat(ttot,all_regi,all_enty) "DAC FE heat demand [TWa]" -; - -variables -vm_ccs_cdr(ttot,all_regi,all_enty,all_enty,all_te,rlf) "CCS emissions from CDR [GtC per a]" -v33_emiDAC(ttot,all_regi) "carbon captured from DAC [GtC by a]" -v33_emiEW(ttot,all_regi) "negative CO2 emission from EW [GtC by a]" -; - -equations -q33_demFeCDR(ttot,all_regi,all_enty) "CDR demand balance for final energy" -q33_otherFEdemand(ttot,all_regi,all_enty) "calculates final energy demand from no transformation technologies (e.g. enhanced weathering)" -q33_DacFEdemand_heat(ttot,all_regi,all_enty) "calculates DAC FE demand for heat" -q33_DacFEdemand_el(ttot,all_regi,all_enty) "calculates DAC FE demand for electricity" -q33_capconst_weathering(ttot,all_regi) "calculates amount of ground rock spred on fields" -q33_weathering_onfield_tot(ttot,all_regi,rlf,rlf) "total amount of ground rock on fields" -q33_omcosts(ttot,all_regi) "calculates O&M costs for spreading ground rocks on fields" -q33_potential(ttot,all_regi,rlf) "limits the total potential of EW per region and grade" -q33_emiEW(ttot,all_regi) "calculates amount of carbon captured by EW" -q33_LimEmiEW(ttot,all_regi) "limits EW to a maximal annual amount of ground rock of cm_LimRock" -q33_capconst_dac(ttot,all_regi) "calculates amount of carbon captured by DAC" -q33_emicdrregi(ttot,all_regi) "calculates the (negative) emissions due to CDR technologies" -q33_ccsbal(ttot,all_regi,all_enty,all_enty,all_te) "calculates CCS emissions from CDR technologies" -q33_H2bio_lim(ttot,all_regi,all_te) "limits H2 from bioenergy to FE - otherFEdemand, i.e. no H2 from bioenergy for DAC" -; - -*** EOF ./modules/33_CDR/all/declarations.gms diff --git a/modules/33_CDR/all/equations.gms b/modules/33_CDR/all/equations.gms deleted file mode 100644 index d7a44f587..000000000 --- a/modules/33_CDR/all/equations.gms +++ /dev/null @@ -1,154 +0,0 @@ -*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -*** | authors, and contributors see CITATION.cff file. This file is part -*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -*** | AGPL-3.0, you are granted additional permissions described in the -*** | REMIND License Exception, version 1.0 (see LICENSE file). -*** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/all/equations.gms - -***--------------------------------------------------------------------------- -*' CDR Final Energy Balance -***--------------------------------------------------------------------------- -q33_demFeCDR(t,regi,entyFe)$(entyFe2Sector(entyFe,"cdr")) .. - vm_otherFEdemand(t,regi,entyFe) - =e= - sum((entySe,te)$se2fe(entySe,entyFe,te), vm_demFeSector(t,regi,entySe,entyFe,"cdr","ETS")) -; - -***--------------------------------------------------------------------------- -*' Calculation of the amount of ground rock spread in timestep t. -***--------------------------------------------------------------------------- -q33_capconst_weathering(t,regi).. - sum((rlf_cz33, rlf), v33_weathering_onfield(t,regi,rlf_cz33,rlf)) - =l= - sum(teNoTransform2rlf_dyn33("weathering",rlf), vm_capFac(t,regi,"weathering") * vm_cap(t,regi,"weathering",rlf)) - ; - -***--------------------------------------------------------------------------- -*' Calculation of the total amount of ground rock on the fields in timestep t. The first part of the equation describes the decay of the rocks added until that time, -*' the rest describes the newly added rocks. -***--------------------------------------------------------------------------- -q33_weathering_onfield_tot(ttot,regi,rlf_cz33,rlf)$(ttot.val ge max(2010, cm_startyear)).. - v33_weathering_onfield_tot(ttot,regi,rlf_cz33,rlf) - =e= - v33_weathering_onfield_tot(ttot-1,regi,rlf_cz33,rlf) * exp(-p33_co2_rem_rate(rlf_cz33) * pm_ts(ttot)) + - v33_weathering_onfield(ttot-1,regi,rlf_cz33,rlf) * (sum(tall $ ((tall.val lt (ttot.val-pm_ts(ttot)/2)) $ (tall.val ge (ttot.val-pm_ts(ttot)))),exp(-p33_co2_rem_rate(rlf_cz33) * (ttot.val-tall.val)))) + - v33_weathering_onfield(ttot,regi,rlf_cz33,rlf) * (sum(tall $ ((tall.val le ttot.val) $ (tall.val gt (ttot.val-pm_ts(ttot)/2))),exp(-p33_co2_rem_rate(rlf_cz33) * (ttot.val-tall.val)))) -; - -***--------------------------------------------------------------------------- -*' Calculation of (negative) CO2 emissions from enhanced weathering. -***--------------------------------------------------------------------------- -q33_emiEW(t,regi).. - v33_emiEW(t,regi) - =e= - sum((rlf_cz33, rlf), - - v33_weathering_onfield_tot(t,regi,rlf_cz33,rlf) * s33_co2_rem_pot * (1 - exp(-p33_co2_rem_rate(rlf_cz33))) - ) - ; - -***--------------------------------------------------------------------------- -*' Calculation of (negative) CO2 emissions from direct air capture. The first part of the equation describes emissions captured from the ambient air, -*' the second part calculates the CO2 captured from the gas used for heat production assuming 90% capture rate. -***--------------------------------------------------------------------------- -q33_capconst_dac(t,regi).. - v33_emiDAC(t,regi) - =e= - -sum(teNoTransform2rlf_dyn33("dac",rlf2), vm_capFac(t,regi,"dac") * vm_cap(t,regi,"dac",rlf2)) - - (1 / pm_eta_conv(t,regi,"gash2c")) * fm_dataemiglob("pegas","seh2","gash2c","cco2") * vm_otherFEdemand(t,regi,"fegas") - ; - -***--------------------------------------------------------------------------- -*' Sum of all CDR emissions other than BECCS and afforestation, which are calculated in the core. -***--------------------------------------------------------------------------- -q33_emicdrregi(t,regi).. - vm_emiCdr(t,regi,"co2") - =e= - v33_emiEW(t,regi) + v33_emiDAC(t,regi) - ; - - -***--------------------------------------------------------------------------- -*' Calculation of electricity demand for ventilation of direct air capture. -***--------------------------------------------------------------------------- -q33_DacFEdemand_el(t,regi,entyFe).. - v33_DacFEdemand_el(t,regi,entyFe) - =e= - - v33_emiDAC(t,regi) * sm_EJ_2_TWa *p33_dac_fedem_el(entyFe) - ; - -***--------------------------------------------------------------------------- -*' Calculation of heat demand of direct air capture. Heat can be provided as heat or by electricity, gas or H2; -*' For example, vm_otherFEdemand(t,regi,"fegas") is calculated as the total energy demand for heat from fegas minus what is already covered by other carriers (i.e. heat, h2 or elec) -***--------------------------------------------------------------------------- -q33_DacFEdemand_heat(t,regi,entyFe).. - v33_DacFEdemand_heat(t,regi,entyFe) - =e= - - v33_emiDAC(t,regi) * sm_EJ_2_TWa * p33_dac_fedem_heat(entyFe) - - v33_DacFEdemand_heat(t,regi,"feh2s")$((sameas(entyFe,"fegas"))OR(sameas(entyFe,"fehes"))OR(sameas(entyFe,"feels"))) - - v33_DacFEdemand_heat(t,regi,"fegas")$((sameas(entyFe,"feh2s"))OR(sameas(entyFe,"fehes"))OR(sameas(entyFe,"feels"))) - - v33_DacFEdemand_heat(t,regi,"feels")$((sameas(entyFe,"feh2s"))OR(sameas(entyFe,"fehes"))OR(sameas(entyFe,"fegas"))) - - v33_DacFEdemand_heat(t,regi,"fehes")$((sameas(entyFe,"feh2s"))OR(sameas(entyFe,"fegas"))OR(sameas(entyFe,"feels"))) - ; - -***--------------------------------------------------------------------------- -*' Calculation of energy demand of DAC and EW. -*' The first part of the equation describes the electricity demand for grinding, -*' the second part the diesel demand for transportation and spreading on crop fields. -*' The third part is DAC final energy demand -***--------------------------------------------------------------------------- -q33_otherFEdemand(t,regi,entyFe).. - vm_otherFEdemand(t,regi,entyFe) - =e= - p33_weathering_fedem(entyFe) * sm_EJ_2_TWa * sum((rlf_cz33, rlf), v33_weathering_onfield(t,regi,rlf_cz33,rlf)) - + v33_DacFEdemand_el(t,regi,entyFe) + v33_DacFEdemand_heat(t,regi,entyFe) - ; - - -***--------------------------------------------------------------------------- -*' O&M costs of EW, consisting of fix costs for mining, grinding and spreading, and transportation costs. -***--------------------------------------------------------------------------- -q33_omcosts(t,regi).. - vm_omcosts_cdr(t,regi) - =e= - sum((rlf_cz33, rlf), - (s33_costs_fix + p33_transport_costs(regi,rlf_cz33,rlf)) * v33_weathering_onfield(t,regi,rlf_cz33,rlf) - ) - ; - -***--------------------------------------------------------------------------- -*' Limit total amount of ground rock on the fields to regional maximum potentials. -***--------------------------------------------------------------------------- -q33_potential(t,regi,rlf_cz33).. - sum(rlf, v33_weathering_onfield_tot(t,regi,rlf_cz33,rlf)) - =l= - f33_maxProdGradeRegiWeathering(regi,rlf_cz33) - ; - -***--------------------------------------------------------------------------- -*' Preparation of captured emissions to enter the CCS chain. -***--------------------------------------------------------------------------- -q33_ccsbal(t,regi,ccs2te(ccsCo2(enty),enty2,te)).. - sum(teCCS2rlf(te,rlf), vm_ccs_cdr(t,regi,enty,enty2,te,rlf)) - =e= - -v33_emiDAC(t,regi) - ; - -***--------------------------------------------------------------------------- -*' An annual limit for the maximum amount of rocks spred [Gt] can be set via cm_LimRock, e.g. due to sustainability concerns. -***--------------------------------------------------------------------------- -q33_LimEmiEW(t,regi).. - sum((rlf_cz33, rlf), v33_weathering_onfield(t,regi,rlf_cz33,rlf)) - =l= - cm_LimRock*p33_LimRock(regi) - ; - -***--------------------------------------------------------------------------- -*' Limit the amount of H2 from biomass to the demand without DAC. -***--------------------------------------------------------------------------- -q33_H2bio_lim(t,regi,te).. - vm_prodSE(t,regi,"pebiolc","seh2",te)$pe2se("pebiolc","seh2",te) - =l= - vm_prodFe(t,regi,"seh2","feh2s","tdh2s") - vm_otherFEdemand(t,regi,"feh2s") - ; -*** EOF ./modules/33_CDR/all/equations.gms diff --git a/modules/33_CDR/all/input/files b/modules/33_CDR/all/input/files deleted file mode 100644 index 90ce8fc36..000000000 --- a/modules/33_CDR/all/input/files +++ /dev/null @@ -1 +0,0 @@ -f33_maxProdGradeRegiWeathering.cs3r diff --git a/modules/33_CDR/all/input/p33_transport_costs.inc b/modules/33_CDR/all/input/p33_transport_costs.inc deleted file mode 100644 index 4ab1002eb..000000000 --- a/modules/33_CDR/all/input/p33_transport_costs.inc +++ /dev/null @@ -1,242 +0,0 @@ -*** SOF ./modules/33_CDR/weathering/input/p33_transport_costs.inc -p33_transport_costs("CAZ","1","1") = 0.00982132; -p33_transport_costs("CAZ","1","2") = 0.00982132; -p33_transport_costs("CAZ","1","3") = 0.00982132; -p33_transport_costs("CAZ","1","4") = 0.00982132; -p33_transport_costs("CAZ","1","5") = 0.00982132; -p33_transport_costs("CAZ","1","6") = 0.00982132; -p33_transport_costs("CAZ","1","7") = 0.00982132; -p33_transport_costs("CAZ","1","8") = 0.00982132; -p33_transport_costs("CAZ","1","9") = 0.00982132; -p33_transport_costs("CAZ","1","10") = 0.00982132; -p33_transport_costs("CAZ","2","1") = 0.0234088; -p33_transport_costs("CAZ","2","2") = 0.0234088; -p33_transport_costs("CAZ","2","3") = 0.0234088; -p33_transport_costs("CAZ","2","4") = 0.0234088; -p33_transport_costs("CAZ","2","5") = 0.0234088; -p33_transport_costs("CAZ","2","6") = 0.0234088; -p33_transport_costs("CAZ","2","7") = 0.0234088; -p33_transport_costs("CAZ","2","8") = 0.0234088; -p33_transport_costs("CAZ","2","9") = 0.0234088; -p33_transport_costs("CAZ","2","10") = 0.0234088; -p33_transport_costs("CHA","1","1") = 0.00203442; -p33_transport_costs("CHA","1","2") = 0.00595968; -p33_transport_costs("CHA","1","3") = 0.00595968; -p33_transport_costs("CHA","1","4") = 0.00595968; -p33_transport_costs("CHA","1","5") = 0.00595968; -p33_transport_costs("CHA","1","6") = 0.00595968; -p33_transport_costs("CHA","1","7") = 0.00595968; -p33_transport_costs("CHA","1","8") = 0.00595968; -p33_transport_costs("CHA","1","9") = 0.00595968; -p33_transport_costs("CHA","1","10") = 0.00595968; -p33_transport_costs("CHA","2","1") = 0.000886974; -p33_transport_costs("CHA","2","2") = 0.00232315; -p33_transport_costs("CHA","2","3") = 0.00469094; -p33_transport_costs("CHA","2","4") = 0.00469094; -p33_transport_costs("CHA","2","5") = 0.00469094; -p33_transport_costs("CHA","2","6") = 0.00469094; -p33_transport_costs("CHA","2","7") = 0.00469094; -p33_transport_costs("CHA","2","8") = 0.00469094; -p33_transport_costs("CHA","2","9") = 0.00469094; -p33_transport_costs("CHA","2","10") = 0.00469094; -p33_transport_costs("EUR","1","1") = 0.00643523; -p33_transport_costs("EUR","1","2") = 0.00643523; -p33_transport_costs("EUR","1","3") = 0.00643523; -p33_transport_costs("EUR","1","4") = 0.00643523; -p33_transport_costs("EUR","1","5") = 0.00643523; -p33_transport_costs("EUR","1","6") = 0.00643523; -p33_transport_costs("EUR","1","7") = 0.00643523; -p33_transport_costs("EUR","1","8") = 0.00643523; -p33_transport_costs("EUR","1","9") = 0.00643523; -p33_transport_costs("EUR","1","10") = 0.00643523; -p33_transport_costs("EUR","2","1") = 0.00137663; -p33_transport_costs("EUR","2","2") = 0.00324343; -p33_transport_costs("EUR","2","3") = 0.00762609; -p33_transport_costs("EUR","2","4") = 0.0151122; -p33_transport_costs("EUR","2","5") = 0.0151122; -p33_transport_costs("EUR","2","6") = 0.0151122; -p33_transport_costs("EUR","2","7") = 0.0151122; -p33_transport_costs("EUR","2","8") = 0.0151122; -p33_transport_costs("EUR","2","9") = 0.0151122; -p33_transport_costs("EUR","2","10") = 0.0151122; -p33_transport_costs("IND","1","1") = 5e-009; -p33_transport_costs("IND","1","2") = 0.000569323; -p33_transport_costs("IND","1","3") = 0.0019185; -p33_transport_costs("IND","1","4") = 0.00353466; -p33_transport_costs("IND","1","5") = 0.0051216; -p33_transport_costs("IND","1","6") = 0.00710802; -p33_transport_costs("IND","1","7") = 0.0101812; -p33_transport_costs("IND","1","8") = 0.0101812; -p33_transport_costs("IND","1","9") = 0.0101812; -p33_transport_costs("IND","1","10") = 0.0101812; -p33_transport_costs("IND","2","1") = 0.00975282; -p33_transport_costs("IND","2","2") = 0.00975282; -p33_transport_costs("IND","2","3") = 0.00975282; -p33_transport_costs("IND","2","4") = 0.00975282; -p33_transport_costs("IND","2","5") = 0.00975282; -p33_transport_costs("IND","2","6") = 0.00975282; -p33_transport_costs("IND","2","7") = 0.00975282; -p33_transport_costs("IND","2","8") = 0.00975282; -p33_transport_costs("IND","2","9") = 0.00975282; -p33_transport_costs("IND","2","10") = 0.00975282; -p33_transport_costs("JPN","1","1") = 0.00262315; -p33_transport_costs("JPN","1","2") = 0.00262315; -p33_transport_costs("JPN","1","3") = 0.00262315; -p33_transport_costs("JPN","1","4") = 0.00262315; -p33_transport_costs("JPN","1","5") = 0.00262315; -p33_transport_costs("JPN","1","6") = 0.00262315; -p33_transport_costs("JPN","1","7") = 0.00262315; -p33_transport_costs("JPN","1","8") = 0.00262315; -p33_transport_costs("JPN","1","9") = 0.00262315; -p33_transport_costs("JPN","1","10") = 0.00262315; -p33_transport_costs("JPN","2","1") = 0.00410821; -p33_transport_costs("JPN","2","2") = 0.00410821; -p33_transport_costs("JPN","2","3") = 0.00410821; -p33_transport_costs("JPN","2","4") = 0.00410821; -p33_transport_costs("JPN","2","5") = 0.00410821; -p33_transport_costs("JPN","2","6") = 0.00410821; -p33_transport_costs("JPN","2","7") = 0.00410821; -p33_transport_costs("JPN","2","8") = 0.00410821; -p33_transport_costs("JPN","2","9") = 0.00410821; -p33_transport_costs("JPN","2","10") = 0.00410821; -p33_transport_costs("LAM","1","1") = 3.33333e-006; -p33_transport_costs("LAM","1","2") = 0.000256774; -p33_transport_costs("LAM","1","3") = 0.000889862; -p33_transport_costs("LAM","1","4") = 0.00175771; -p33_transport_costs("LAM","1","5") = 0.00286348; -p33_transport_costs("LAM","1","6") = 0.00470416; -p33_transport_costs("LAM","1","7") = 0.0070726; -p33_transport_costs("LAM","1","8") = 0.0108247; -p33_transport_costs("LAM","1","9") = 0.0108247; -p33_transport_costs("LAM","1","10") = 0.0108247; -p33_transport_costs("LAM","2","1") = 0.0279661; -p33_transport_costs("LAM","2","2") = 0.0279661; -p33_transport_costs("LAM","2","3") = 0.0279661; -p33_transport_costs("LAM","2","4") = 0.0279661; -p33_transport_costs("LAM","2","5") = 0.0279661; -p33_transport_costs("LAM","2","6") = 0.0279661; -p33_transport_costs("LAM","2","7") = 0.0279661; -p33_transport_costs("LAM","2","8") = 0.0279661; -p33_transport_costs("LAM","2","9") = 0.0279661; -p33_transport_costs("LAM","2","10") = 0.0279661; -p33_transport_costs("MEA","1","1") = 0.0367588; -p33_transport_costs("MEA","1","2") = 0.0367588; -p33_transport_costs("MEA","1","3") = 0.0367588; -p33_transport_costs("MEA","1","4") = 0.0367588; -p33_transport_costs("MEA","1","5") = 0.0367588; -p33_transport_costs("MEA","1","6") = 0.0367588; -p33_transport_costs("MEA","1","7") = 0.0367588; -p33_transport_costs("MEA","1","8") = 0.0367588; -p33_transport_costs("MEA","1","9") = 0.0367588; -p33_transport_costs("MEA","1","10") = 0.0367588; -p33_transport_costs("MEA","2","1") = 0.0366745; -p33_transport_costs("MEA","2","2") = 0.0366745; -p33_transport_costs("MEA","2","3") = 0.0366745; -p33_transport_costs("MEA","2","4") = 0.0366745; -p33_transport_costs("MEA","2","5") = 0.0366745; -p33_transport_costs("MEA","2","6") = 0.0366745; -p33_transport_costs("MEA","2","7") = 0.0366745; -p33_transport_costs("MEA","2","8") = 0.0366745; -p33_transport_costs("MEA","2","9") = 0.0366745; -p33_transport_costs("MEA","2","10") = 0.0366745; -p33_transport_costs("NEU","1","1") = 0.00499868; -p33_transport_costs("NEU","1","2") = 0.00499868; -p33_transport_costs("NEU","1","3") = 0.00499868; -p33_transport_costs("NEU","1","4") = 0.00499868; -p33_transport_costs("NEU","1","5") = 0.00499868; -p33_transport_costs("NEU","1","6") = 0.00499868; -p33_transport_costs("NEU","1","7") = 0.00499868; -p33_transport_costs("NEU","1","8") = 0.00499868; -p33_transport_costs("NEU","1","9") = 0.00499868; -p33_transport_costs("NEU","1","10") = 0.00499868; -p33_transport_costs("NEU","2","1") = 0.0104845; -p33_transport_costs("NEU","2","2") = 0.0104845; -p33_transport_costs("NEU","2","3") = 0.0104845; -p33_transport_costs("NEU","2","4") = 0.0104845; -p33_transport_costs("NEU","2","5") = 0.0104845; -p33_transport_costs("NEU","2","6") = 0.0104845; -p33_transport_costs("NEU","2","7") = 0.0104845; -p33_transport_costs("NEU","2","8") = 0.0104845; -p33_transport_costs("NEU","2","9") = 0.0104845; -p33_transport_costs("NEU","2","10") = 0.0104845; -p33_transport_costs("OAS","1","1") = 0.000243118; -p33_transport_costs("OAS","1","2") = 0.00104127; -p33_transport_costs("OAS","1","3") = 0.0021003; -p33_transport_costs("OAS","1","4") = 0.00319992; -p33_transport_costs("OAS","1","5") = 0.00445396; -p33_transport_costs("OAS","1","6") = 0.00593706; -p33_transport_costs("OAS","1","7") = 0.00762651; -p33_transport_costs("OAS","1","8") = 0.00970254; -p33_transport_costs("OAS","1","9") = 0.0133107; -p33_transport_costs("OAS","1","10") = 0.0133107; -p33_transport_costs("OAS","2","1") = 0.0206356; -p33_transport_costs("OAS","2","2") = 0.0206356; -p33_transport_costs("OAS","2","3") = 0.0206356; -p33_transport_costs("OAS","2","4") = 0.0206356; -p33_transport_costs("OAS","2","5") = 0.0206356; -p33_transport_costs("OAS","2","6") = 0.0206356; -p33_transport_costs("OAS","2","7") = 0.0206356; -p33_transport_costs("OAS","2","8") = 0.0206356; -p33_transport_costs("OAS","2","9") = 0.0206356; -p33_transport_costs("OAS","2","10") = 0.0206356; -p33_transport_costs("REF","1","1") = 0; -p33_transport_costs("REF","1","2") = 0; -p33_transport_costs("REF","1","3") = 0; -p33_transport_costs("REF","1","4") = 0; -p33_transport_costs("REF","1","5") = 0; -p33_transport_costs("REF","1","6") = 0; -p33_transport_costs("REF","1","7") = 0; -p33_transport_costs("REF","1","8") = 0; -p33_transport_costs("REF","1","9") = 0; -p33_transport_costs("REF","1","10") = 0; -p33_transport_costs("REF","2","1") = 0.00539997; -p33_transport_costs("REF","2","2") = 0.0113284; -p33_transport_costs("REF","2","3") = 0.0241914; -p33_transport_costs("REF","2","4") = 0.0416878; -p33_transport_costs("REF","2","5") = 0.0416878; -p33_transport_costs("REF","2","6") = 0.0416878; -p33_transport_costs("REF","2","7") = 0.0416878; -p33_transport_costs("REF","2","8") = 0.0416878; -p33_transport_costs("REF","2","9") = 0.0416878; -p33_transport_costs("REF","2","10") = 0.0416878; -p33_transport_costs("SSA","1","1") = 0.00561183; -p33_transport_costs("SSA","1","2") = 0.0274649; -p33_transport_costs("SSA","1","3") = 0.0274649; -p33_transport_costs("SSA","1","4") = 0.0274649; -p33_transport_costs("SSA","1","5") = 0.0274649; -p33_transport_costs("SSA","1","6") = 0.0274649; -p33_transport_costs("SSA","1","7") = 0.0274649; -p33_transport_costs("SSA","1","8") = 0.0274649; -p33_transport_costs("SSA","1","9") = 0.0274649; -p33_transport_costs("SSA","1","10") = 0.0274649; -p33_transport_costs("SSA","2","1") = 0.010845; -p33_transport_costs("SSA","2","2") = 0.010845; -p33_transport_costs("SSA","2","3") = 0.010845; -p33_transport_costs("SSA","2","4") = 0.010845; -p33_transport_costs("SSA","2","5") = 0.010845; -p33_transport_costs("SSA","2","6") = 0.010845; -p33_transport_costs("SSA","2","7") = 0.010845; -p33_transport_costs("SSA","2","8") = 0.010845; -p33_transport_costs("SSA","2","9") = 0.010845; -p33_transport_costs("SSA","2","10") = 0.010845; -p33_transport_costs("USA","1","1") = 0.0400735; -p33_transport_costs("USA","1","2") = 0.0400735; -p33_transport_costs("USA","1","3") = 0.0400735; -p33_transport_costs("USA","1","4") = 0.0400735; -p33_transport_costs("USA","1","5") = 0.0400735; -p33_transport_costs("USA","1","6") = 0.0400735; -p33_transport_costs("USA","1","7") = 0.0400735; -p33_transport_costs("USA","1","8") = 0.0400735; -p33_transport_costs("USA","1","9") = 0.0400735; -p33_transport_costs("USA","1","10") = 0.0400735; -p33_transport_costs("USA","2","1") = 0.034166; -p33_transport_costs("USA","2","2") = 0.034166; -p33_transport_costs("USA","2","3") = 0.034166; -p33_transport_costs("USA","2","4") = 0.034166; -p33_transport_costs("USA","2","5") = 0.034166; -p33_transport_costs("USA","2","6") = 0.034166; -p33_transport_costs("USA","2","7") = 0.034166; -p33_transport_costs("USA","2","8") = 0.034166; -p33_transport_costs("USA","2","9") = 0.034166; -p33_transport_costs("USA","2","10") = 0.034166; -*** EOF ./modules/33_CDR/weathering/input/p33_transport_costs.inc \ No newline at end of file diff --git a/modules/33_CDR/all/not_used.txt b/modules/33_CDR/all/not_used.txt deleted file mode 100644 index 82c0c37b9..000000000 --- a/modules/33_CDR/all/not_used.txt +++ /dev/null @@ -1,9 +0,0 @@ -# | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -# | authors, and contributors see CITATION.cff file. This file is part -# | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -# | AGPL-3.0, you are granted additional permissions described in the -# | REMIND License Exception, version 1.0 (see LICENSE file). -# | Contact: remind@pik-potsdam.de -name, type, reason -sm_eps,scalar,??? -cm_ccapturescen,input,questionnaire diff --git a/modules/33_CDR/all/realization.gms b/modules/33_CDR/all/realization.gms deleted file mode 100644 index adf8e3849..000000000 --- a/modules/33_CDR/all/realization.gms +++ /dev/null @@ -1,21 +0,0 @@ -*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -*** | authors, and contributors see CITATION.cff file. This file is part -*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -*** | AGPL-3.0, you are granted additional permissions described in the -*** | REMIND License Exception, version 1.0 (see LICENSE file). -*** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/all/realization.gms - -*' @description -*' In this realization, direct air capture and enhanced weathering can be used to remove CO2 from the atmosphere in addition to BECCS and afforestation. Based on Broehm et al. we assume an energy demand of -*' 2 GJ/tCO2 electricity and 10 GJ/tCO2 heat for DAC which can be met via gas or H2. If gas is used, the resulting CO2 is captured with a capture rate of 90%. -*' For EW, electricty is needed to grind the rocks and diesel is needed for transportation and spreading on crop fields. - -*####################### R SECTION START (PHASES) ############################## -$Ifi "%phase%" == "sets" $include "./modules/33_CDR/all/sets.gms" -$Ifi "%phase%" == "declarations" $include "./modules/33_CDR/all/declarations.gms" -$Ifi "%phase%" == "datainput" $include "./modules/33_CDR/all/datainput.gms" -$Ifi "%phase%" == "equations" $include "./modules/33_CDR/all/equations.gms" -$Ifi "%phase%" == "bounds" $include "./modules/33_CDR/all/bounds.gms" -*######################## R SECTION END (PHASES) ############################### -*** EOF ./modules/33_CDR/all/realization.gms diff --git a/modules/33_CDR/all/sets.gms b/modules/33_CDR/all/sets.gms deleted file mode 100644 index dd28954e4..000000000 --- a/modules/33_CDR/all/sets.gms +++ /dev/null @@ -1,54 +0,0 @@ -*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -*** | authors, and contributors see CITATION.cff file. This file is part -*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -*** | AGPL-3.0, you are granted additional permissions described in the -*** | REMIND License Exception, version 1.0 (see LICENSE file). -*** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/all/sets.gms -sets - -te_dyn33(all_te) "all technologies" -/ - weathering "enhanced weathering" - dac "direct air capture" -/ - -teNoTransform_dyn33(all_te) "all technologies that do not transform energy but still have investment and O&M costs (like storage or grid)" -/ - weathering "enhanced weathering" - dac "direct air capture" -/ - -teNoTransform2rlf_dyn33(all_te,rlf) "mapping for final energy to grades" -/ - (weathering) . 1 - (dac) . 1 -/ - -adjte_dyn33(all_te) "technologies with linearly growing constraint on control variable" -/ - dac -/ - -teLearn_dyn33(all_te) "learning technologies" -/ - dac -/ - -rlf_cz33(rlf) "representing weathering rates depending on climate zones according to Strefler, Amann et al. (2017)" -/ - 1 "warm regions" - 2 "temperate regions" -/ -; - -***------------------------------------------------------------------------- -*** add module specific sets and mappings to the global sets and mappings -***------------------------------------------------------------------------- -te(te_dyn33) = YES; -teLearn(teLearn_dyn33) = YES; -teNoTransform(teNoTransform_dyn33) = YES; -teNoTransform2rlf(teNoTransform2rlf_dyn33) = YES; -teAdj(adjte_dyn33) = YES; - -*** EOF ./modules/33_CDR/all/sets.gms diff --git a/modules/33_CDR/module.gms b/modules/33_CDR/module.gms index d37e3685b..8fc0eebee 100644 --- a/modules/33_CDR/module.gms +++ b/modules/33_CDR/module.gms @@ -8,14 +8,15 @@ *' @title CDR *' -*' @description The 33_CDR module calculates CO2 removed from the atmosphere by options other than BECCS or afforestation, which are calculated in the core. -*' -*' @authors Jessica Strefler +*' @description The 33_CDR module adds further options to remove CO2 from the atmosphere beyond BECCS +*' and afforestation, which are calculated in the core. Currently, direct air carbon capture and storage (DACCS) +*' and enhanced weathering of rocks (EW) are available, biochar and ocean alkalinization will follow soon. +*' All options can be switched on and off individually in main.gms with the switches called cm_33[option abbreviation]. +*' The module calculates capacities, emissions (including captured carbon), energy demand & supply, costs, +*' and limitations associated with the different options. +*' @authors Jessica Strefler, Katarzyna Kowalczyk, Anne Merfort *###################### R SECTION START (MODULETYPES) ########################## -$Ifi "%CDR%" == "DAC" $include "./modules/33_CDR/DAC/realization.gms" -$Ifi "%CDR%" == "all" $include "./modules/33_CDR/all/realization.gms" -$Ifi "%CDR%" == "off" $include "./modules/33_CDR/off/realization.gms" -$Ifi "%CDR%" == "weathering" $include "./modules/33_CDR/weathering/realization.gms" +$Ifi "%CDR%" == "portfolio" $include "./modules/33_CDR/portfolio/realization.gms" *###################### R SECTION END (MODULETYPES) ############################ *** EOF ./modules/33_CDR/module.gms diff --git a/modules/33_CDR/off/bounds.gms b/modules/33_CDR/off/bounds.gms deleted file mode 100644 index c1dc8c534..000000000 --- a/modules/33_CDR/off/bounds.gms +++ /dev/null @@ -1,14 +0,0 @@ -*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -*** | authors, and contributors see CITATION.cff file. This file is part -*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -*** | AGPL-3.0, you are granted additional permissions described in the -*** | REMIND License Exception, version 1.0 (see LICENSE file). -*** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/off/bounds.gms -vm_otherFEdemand.fx(t,regi,entyFe) = 0; -vm_cap.fx(t,regi,"weathering",rlf) = 0; -vm_emiCdr.fx(t,regi,enty) = 0; -vm_omcosts_cdr.fx(t,regi) = 0; -vm_ccs_cdr.fx(t,regi,enty,enty2,te,rlf)$ccs2te(enty,enty2,te) = 0; - -*** EOF ./modules/33_CDR/off/bounds.gms diff --git a/modules/33_CDR/off/declarations.gms b/modules/33_CDR/off/declarations.gms deleted file mode 100644 index f36959ba6..000000000 --- a/modules/33_CDR/off/declarations.gms +++ /dev/null @@ -1,12 +0,0 @@ -*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -*** | authors, and contributors see CITATION.cff file. This file is part -*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -*** | AGPL-3.0, you are granted additional permissions described in the -*** | REMIND License Exception, version 1.0 (see LICENSE file). -*** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/off/declarations.gms -variables -vm_ccs_cdr(ttot,all_regi,all_enty,all_enty,all_te,rlf) "CCS emissions from CDR [GtC per a]" -; - -*** EOF ./modules/33_CDR/off/declarations.gms diff --git a/modules/33_CDR/off/not_used.txt b/modules/33_CDR/off/not_used.txt deleted file mode 100644 index 2bb3ec967..000000000 --- a/modules/33_CDR/off/not_used.txt +++ /dev/null @@ -1,21 +0,0 @@ -# | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -# | authors, and contributors see CITATION.cff file. This file is part -# | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -# | AGPL-3.0, you are granted additional permissions described in the -# | REMIND License Exception, version 1.0 (see LICENSE file). -# | Contact: remind@pik-potsdam.de -name,type,reason -sm_EJ_2_TWa, switch, ??? -pm_ts, parameter,??? -cm_startyear, switch, ??? -sm_eps,scalar,??? -cm_gs_ew,switch,??? -fm_dataemiglob,parameter,??? -pm_eta_conv,parameter,??? -vm_prodFe,variable,??? -vm_capFac,variable,??? -pm_pop,input,questionnaire -cm_LimRock,input,questionnaire -cm_ccapturescen,input,questionnaire -vm_demFeSector_afterTax,input,questionnaire -cm_emiscen,input,questionnaire diff --git a/modules/33_CDR/off/realization.gms b/modules/33_CDR/off/realization.gms deleted file mode 100644 index 2f4123f6b..000000000 --- a/modules/33_CDR/off/realization.gms +++ /dev/null @@ -1,16 +0,0 @@ -*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -*** | authors, and contributors see CITATION.cff file. This file is part -*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -*** | AGPL-3.0, you are granted additional permissions described in the -*** | REMIND License Exception, version 1.0 (see LICENSE file). -*** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/off/realization.gms - -*' @description -*' In this realization, no additional CDR option other than BECCS and afforestation is available. - -*####################### R SECTION START (PHASES) ############################## -$Ifi "%phase%" == "declarations" $include "./modules/33_CDR/off/declarations.gms" -$Ifi "%phase%" == "bounds" $include "./modules/33_CDR/off/bounds.gms" -*######################## R SECTION END (PHASES) ############################### -*** EOF ./modules/33_CDR/off/realization.gms diff --git a/modules/33_CDR/portfolio/bounds.gms b/modules/33_CDR/portfolio/bounds.gms new file mode 100644 index 000000000..d8334547e --- /dev/null +++ b/modules/33_CDR/portfolio/bounds.gms @@ -0,0 +1,45 @@ +*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) +*** | authors, and contributors see CITATION.cff file. This file is part +*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of +*** | AGPL-3.0, you are granted additional permissions described in the +*** | REMIND License Exception, version 1.0 (see LICENSE file). +*** | Contact: remind@pik-potsdam.de +*** SOF ./modules/33_CDR/portfolio/bounds.gms + +vm_emiCdr.fx(t,regi,emi)$(not sameas(emi,"co2")) = 0.0; +vm_emiCdr.l(t,regi,"co2")$(t.val ge 2025 AND cm_ccapturescen ne 2) = -sm_eps; + +*' Bounds if there are no technologies in the portfolio +if(card(te_used33) eq 0, + vm_emiCdr.fx(t,regi,"co2") = 0; +); + +*' Fix CCS from CDR if there're no technologies that require CCS +if(card(te_ccs33) eq 0, + vm_ccs_cdr.fx(t,regi,enty,enty2,te,rlf)$ccs2te(enty,enty2,te) = 0; +); + +*' Fix negative emissions and FE demand to zero for all the technologies that are not used +v33_emi.fx(t,regi,te_all33)$(not te_used33(te_all33)) = 0; +v33_FEdemand.fx(t,regi,entyFe,entyFe2,te_all33)$(not te_used33(te_all33) and fe2cdr(entyFe,entyFe2,te_all33)) = 0; + +*' Bounds for DAC (cm_emiscen ne 1 avoids setting the boundary for the business-as-usual scenario) +if (te_used33("dac") and cm_emiscen ne 1, + vm_cap.lo(t,regi,"dac",rlf)$(teNoTransform2rlf33("dac",rlf) AND (t.val ge max(2025,cm_startyear))) = 1e-7; +); + +*' Bounds for enhanced weathering +if(te_used33("weathering"), + v33_EW_onfield_tot.up(t,regi,rlf_cz33,rlf) = s33_step; + v33_EW_onfield.fx(t,regi,rlf_cz33,rlf)$(rlf.val gt 10) = 0; !! rlfs that are not used + v33_EW_onfield.fx(ttot,regi,rlf_cz33,rlf)$(ttot.val lt max(2025,cm_startyear)) = 0.0; + v33_EW_onfield_tot.fx(ttot,regi,rlf_cz33,rlf)$(ttot.val lt max(2025,cm_startyear)) = 0.0; +); + +*' Bounds if enhanced weathering is not in the portfolio +if(not te_used33("weathering"), + vm_omcosts_cdr.fx(t,regi) = 0; + vm_cap.fx(t,regi,"weathering",rlf) = 0; +); + +*** EOF ./modules/33_CDR/portfolio/bounds.gms diff --git a/modules/33_CDR/weathering/datainput.gms b/modules/33_CDR/portfolio/datainput.gms similarity index 58% rename from modules/33_CDR/weathering/datainput.gms rename to modules/33_CDR/portfolio/datainput.gms index 49c83ce2e..ed83f3348 100644 --- a/modules/33_CDR/weathering/datainput.gms +++ b/modules/33_CDR/portfolio/datainput.gms @@ -4,21 +4,26 @@ *** | AGPL-3.0, you are granted additional permissions described in the *** | REMIND License Exception, version 1.0 (see LICENSE file). *** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/weathering/datainput.gms +*** SOF ./modules/33_CDR/portfolio/datainput.gms -table f33_maxProdGradeRegiWeathering(all_regi,rlf) "regional maximum potentials for enhanced weathering in Gt of ground stone/a for different grades" +*** direct air capture input data +!! Beutler et al. 2019 (Climeworks) +p33_fedem("dac", "feels") = 5.28; !! FE demand electricity for ventilation +p33_fedem("dac", "fehes") = 21.12; !! FE demand heat for material recovery + +*** enhanced weatering input data +table f33_maxProdGradeRegiWeathering(all_regi,rlf) "regional maximum potentials for enhanced weathering in Gt of grinded stone/a for different grades" $ondelim -$include "./modules/33_CDR/weathering/input/f33_maxProdGradeRegiWeathering.cs3r" +$include "./modules/33_CDR/portfolio/input/f33_maxProdGradeRegiWeathering.cs3r" $offdelim ; display f33_maxProdGradeRegiWeathering; - -$include "./modules/33_CDR/weathering/input/p33_transport_costs.inc" +$include "./modules/33_CDR/portfolio/input/p33_transport_costs.inc" s33_step = 2.5; *** fix costs [T$/Gt stone]. Data from strefler et al. in $/t stone: mining, crushing, grinding (5.0 investment costs, 25.1 O&M costs), spreading (12.1 O&M costs) s33_costs_fix = 0.0422; -s33_co2_rem_pot = 0.3 * 12/44; !! default for basalt, for Olivine 1.1 +s33_co2_rem_pot = 0.3 * 12/44; !! default for basalt, for Olivine 1.1 *** carbon removal rate: eqs 2+c1 in strefler, amann et al., 2017: wr = grain surface area based WR (10^-10.53 mol m^-2 s^-1) * molar weight of basalt/forsterite (140.7 g/mol) * 3.155^7 s/a * SSA(gs) s33_co2_rem_rate = 10**(-10.53) * 125 * 3.155*10**7 * 69.18*(cm_gs_ew**(-1.24)); @@ -26,10 +31,9 @@ p33_co2_rem_rate("1") = -log(1-s33_co2_rem_rate * 0.94); p33_co2_rem_rate("2") = -log(1-s33_co2_rem_rate * 0.29); *JeS fit from Thorben: SI D in strefler, amann et al. (2017) -p33_weathering_fedem('feels') = 6.62 * cm_gs_ew**(-1.16); -p33_weathering_fedem('fedie') = 0.3; - -p33_LimRock(regi) = pm_pop("2005",regi)/sum(regi2,pm_pop("2005",regi2)); +p33_fedem("weathering", "feels") = 6.62 * cm_gs_ew**(-1.16); +p33_fedem("weathering", "fedie") = 0.3; +p33_LimRock(regi) = pm_pop("2005",regi) / sum(regi2,pm_pop("2005",regi2)); -*** EOF ./modules/33_CDR/weathering/datainput.gms +*** EOF ./modules/33_CDR/portfolio/datainput.gms diff --git a/modules/33_CDR/portfolio/declarations.gms b/modules/33_CDR/portfolio/declarations.gms new file mode 100644 index 000000000..fe5cde2aa --- /dev/null +++ b/modules/33_CDR/portfolio/declarations.gms @@ -0,0 +1,50 @@ +*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) +*** | authors, and contributors see CITATION.cff file. This file is part +*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of +*** | AGPL-3.0, you are granted additional permissions described in the +*** | REMIND License Exception, version 1.0 (see LICENSE file). +*** | Contact: remind@pik-potsdam.de +*** SOF ./modules/33_CDR/portfolio/declarations.gms +scalars +s33_co2_rem_pot "specific carbon removal potential [Gt C per Gt ground rock]" +s33_co2_rem_rate "carbon removal rate [fraction of annual reduction of total carbon removal potential]" +s33_costs_fix "fixed costs for mining, grinding, spreading [T$/Gt stone]" +s33_step "size of bins in v33_weathering_onfield [Gt stone]" +*JeS* GJ/tCO2 = EJ/Gt CO2 = 44/12 EJ/Gt C. Numbers from Report from Micah Broehm. +; + +parameters +p33_fedem(all_te,all_enty) "final energy demand of each technology [EJ/GtC] (for EW the unit is [EJ/Gt stone])" +p33_LimRock(all_regi) "regional share of EW limit [fraction], calculated ex ante for a maximal annual amount of 8 Gt rock in D:\projects\CEMICS\paper_technical\supply_curve_transport_remind_regions.m" +p33_transport_costs(all_regi,rlf,rlf) "transport costs [T$/Gt stone]" +p33_co2_rem_rate(rlf) "carbon removal rate [fraction of annual reduction of total carbon removal potential], multiplied with grade factor" +; + +positive variables +v33_EW_onfield(ttot,all_regi,rlf,rlf) "amount of ground rock spread on fields in each timestep [Gt]" +v33_EW_onfield_tot(ttot,all_regi,rlf,rlf) "total amount of ground rock on fields, for each climate zone and transportation distance [Gt]" +v33_FEdemand(ttot,all_regi,all_enty,all_enty,all_te) "FE demand [TWa]" +vm_ccs_cdr(ttot,all_regi,all_enty,all_enty,all_te,rlf) "CCS emissions from CDR [GtC / a]" +; + +negative variables +v33_emi(ttot,all_regi,all_te) "negative emissions from CDR [GtC / a]" +; + +equations +q33_demFeCDR(ttot,all_regi,all_enty) "CDR demand balance for final energy" +q33_emiCDR(ttot,all_regi) "calculates the (negative) emissions due to CDR technologies" +q33_H2bio_lim(ttot,all_regi,all_te) "limits H2 from bioenergy to FE - H2 demand from CDR, i.e. no H2 from bioenergy for DAC" +q33_DAC_capconst(ttot,all_regi) "calculates amount of carbon captured by DAC" +q33_DAC_FEdemand(ttot,all_regi,all_enty) "calculates final energy demand from no transformation technologies (e.g. enhanced weathering)" +q33_DAC_ccsbal(ttot,all_regi,all_enty,all_enty,all_te) "calculates CCS emissions from CDR technologies" +q33_EW_capconst(ttot,all_regi) "calculates amount of ground rock spred on fields" +q33_EW_onfield_tot(ttot,all_regi,rlf,rlf) "total amount of ground rock on fields" +q33_EW_omcosts(ttot,all_regi) "calculates O&M costs for spreading ground rocks on fields" +q33_EW_FEdemand(ttot,all_regi,all_enty) "calculates final energy demand from no transformation technologies (e.g. enhanced weathering)" +q33_EW_potential(ttot,all_regi,rlf) "limits the total potential of EW per region and grade" +q33_EW_emi(ttot,all_regi) "calculates amount of carbon captured by EW" +q33_EW_LimEmi(ttot,all_regi) "limits EW to a maximal annual amount of ground rock of cm_LimRock" +; + +*** EOF ./modules/33_CDR/portfolio/declarations.gms diff --git a/modules/33_CDR/portfolio/equations.gms b/modules/33_CDR/portfolio/equations.gms new file mode 100644 index 000000000..dd35f14eb --- /dev/null +++ b/modules/33_CDR/portfolio/equations.gms @@ -0,0 +1,168 @@ +*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) +*** | authors, and contributors see CITATION.cff file. This file is part +*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of +*** | AGPL-3.0, you are granted additional permissions described in the +*** | REMIND License Exception, version 1.0 (see LICENSE file). +*** | Contact: remind@pik-potsdam.de +*** SOF ./modules/33_CDR/portfolio/equations.gms + + +***--------------------------------------------------------------------------- +*** Equations concerning two or more options + +***--------------------------------------------------------------------------- +*' CDR Final Energy Balance +***--------------------------------------------------------------------------- +q33_demFeCDR(t,regi,entyFe)$(entyFe2Sector(entyFe,"cdr")).. + sum(fe2cdr(entyFe,entyFe2,te_used33), + v33_FEdemand(t,regi,entyFe,entyFe2,te_used33) + ) + =e= + sum((entySe,te)$se2fe(entySe,entyFe,te), + vm_demFeSector_afterTax(t,regi,entySe,entyFe,"cdr","ETS") + ) + ; + +***--------------------------------------------------------------------------- +*' Sum of all CDR emissions other than BECCS and afforestation, which are calculated in the core. +***--------------------------------------------------------------------------- +q33_emiCDR(t,regi).. + vm_emiCdr(t,regi,"co2") + =e= + sum(te_used33, v33_emi(t,regi,te_used33)) + ; + +***--------------------------------------------------------------------------- +*' Limit the amount of H2 from biomass to the demand without CDR. +*' It's a sustainability bound to prevent a large demand for biomass. +***--------------------------------------------------------------------------- +q33_H2bio_lim(t,regi,te)$pe2se("pebiolc","seh2",te).. + vm_prodSE(t,regi,"pebiolc","seh2",te) + =l= + vm_prodFe(t,regi,"seh2","feh2s","tdh2s") - sum(fe2cdr("feh2s",entyFe2,te_used33), v33_FEdemand(t,regi,"feh2s",entyFe2,te_used33)) + ; + +***--------------------------------------------------------------------------- +*** DAC + +***--------------------------------------------------------------------------- +*' Calculation of (negative) CO2 emissions from direct air capture. +***--------------------------------------------------------------------------- +q33_DAC_capconst(t,regi).. + v33_emi(t,regi,"dac") + =e= + - sum(teNoTransform2rlf33("dac",rlf), + vm_capFac(t,regi,"dac") * vm_cap(t,regi,"dac",rlf) + ) + ; + +***--------------------------------------------------------------------------- +*' Preparation of captured emissions to enter the CCS chain. +*' The first part of the equation describes emissions captured from the ambient air, +*' the second part calculates the CO2 captured from the gas used for heat production +*' assuming 90% capture rate. +***--------------------------------------------------------------------------- +q33_DAC_ccsbal(t,regi,ccs2te(ccsCo2(enty),enty2,te)).. + sum(teCCS2rlf(te,rlf), vm_ccs_cdr(t,regi,enty,enty2,te,rlf)) + =e= + - v33_emi(t,regi,"dac") + + (1 / pm_eta_conv(t,regi,"gash2c")) * fm_dataemiglob("pegas","seh2","gash2c","cco2") * sum(fe2cdr("fegas",entyFe2,te_used33), v33_FEdemand(t,regi,"fegas", entyFe2,te_used33)) + ; + +***--------------------------------------------------------------------------- +*' Calculation of FE demand for DAC, i.e., electricity demand for ventilation, +*' and heat demand. +***--------------------------------------------------------------------------- +q33_DAC_FEdemand(t,regi,entyFe2)$sum(entyFe, fe2cdr(entyFe,entyFe2,"dac")).. + sum(fe2cdr(entyFe,entyFe2,"dac"), v33_FEdemand(t,regi,entyFe,entyFe2,"dac")) + =e= + p33_fedem("dac", entyFe2) * sm_EJ_2_TWa * (- v33_emi(t,regi,"dac")) + ; + +***--------------------------------------------------------------------------- +*** EW + +***--------------------------------------------------------------------------- +*' Calculation of the amount of ground rock spread in timestep t. +***--------------------------------------------------------------------------- +q33_EW_capconst(t,regi).. + sum((rlf_cz33, rlf), v33_EW_onfield(t,regi,rlf_cz33,rlf)) + =l= + sum(teNoTransform2rlf33("weathering",rlf), + vm_capFac(t,regi,"weathering") * vm_cap(t,regi,"weathering",rlf) + ) + ; + +***--------------------------------------------------------------------------- +*' Calculation of the total amount of ground rock on the fields in timestep t. +*' The first part of the equation describes the decay of the rocks added until that time, +*' the rest describes the newly added rocks. +***--------------------------------------------------------------------------- +q33_EW_onfield_tot(ttot,regi,rlf_cz33,rlf)$(ttot.val ge max(2025, cm_startyear)).. + v33_EW_onfield_tot(ttot,regi,rlf_cz33,rlf) + =e= + v33_EW_onfield_tot(ttot-1,regi,rlf_cz33,rlf) * exp(-p33_co2_rem_rate(rlf_cz33) * pm_ts(ttot)) + + v33_EW_onfield(ttot-1,regi,rlf_cz33,rlf) * ( + sum(tall$(tall.val le (ttot.val - pm_ts(ttot)/2) and tall.val gt (ttot.val - pm_ts(ttot))), + exp(-p33_co2_rem_rate(rlf_cz33) * (ttot.val - tall.val)) + ) + ) + + v33_EW_onfield(ttot,regi,rlf_cz33,rlf) * ( + sum(tall$(tall.val le ttot.val and tall.val gt (ttot.val - pm_ts(ttot)/2)), + exp(-p33_co2_rem_rate(rlf_cz33) * (ttot.val-tall.val)) + ) + ) +; + +***--------------------------------------------------------------------------- +*' Calculation of (negative) CO2 emissions from enhanced weathering. +***--------------------------------------------------------------------------- +q33_EW_emi(t,regi).. + v33_emi(t,regi, "weathering") + =e= + sum((rlf_cz33, rlf), + - v33_EW_onfield_tot(t,regi,rlf_cz33,rlf) * s33_co2_rem_pot * (1 - exp(-p33_co2_rem_rate(rlf_cz33))) + ) + ; + +***--------------------------------------------------------------------------- +*' Calculation of FE demand for enhanced weathering, i.e., electricity demand for grinding, +*' and the diesel demand for transportation and spreading on crop fields. +***--------------------------------------------------------------------------- +q33_EW_FEdemand(t,regi,entyFe2)$sum(entyFe, fe2cdr(entyFe,entyFe2,"weathering")).. + sum(fe2cdr(entyFe,entyFe2,"weathering"), v33_FEdemand(t,regi,entyFe,entyFe2,"weathering")) + =e= + p33_fedem("weathering",entyFe2) * sm_EJ_2_TWa * sum((rlf_cz33, rlf), v33_EW_onfield(t,regi,rlf_cz33,rlf)) + ; + +***--------------------------------------------------------------------------- +*' O&M costs of EW, consisting of fix costs for mining, grinding and spreading, and transportation costs. +***--------------------------------------------------------------------------- +q33_EW_omcosts(t,regi).. + vm_omcosts_cdr(t,regi) + =e= + sum((rlf_cz33, rlf), + (s33_costs_fix + p33_transport_costs(regi,rlf_cz33,rlf)) * v33_EW_onfield(t,regi,rlf_cz33,rlf) + ) + ; + +***--------------------------------------------------------------------------- +*' Limit total amount of ground rock on the fields to regional maximum potentials. +***--------------------------------------------------------------------------- +q33_EW_potential(t,regi,rlf_cz33).. + sum(rlf, v33_EW_onfield_tot(t,regi,rlf_cz33,rlf)) + =l= + f33_maxProdGradeRegiWeathering(regi,rlf_cz33) + ; + +***--------------------------------------------------------------------------- +*' An annual limit for the maximum amount of rocks spred [Gt] can be set via cm_LimRock, +*' e.g. due to sustainability concerns. +***--------------------------------------------------------------------------- +q33_EW_LimEmi(t,regi).. + sum((rlf_cz33, rlf), v33_EW_onfield(t,regi,rlf_cz33,rlf)) + =l= + cm_LimRock * p33_LimRock(regi) + ; + +*** EOF ./modules/33_CDR/portfolio/equations.gms diff --git a/modules/33_CDR/portfolio/realization.gms b/modules/33_CDR/portfolio/realization.gms new file mode 100644 index 000000000..92c0ebe8b --- /dev/null +++ b/modules/33_CDR/portfolio/realization.gms @@ -0,0 +1,34 @@ +*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) +*** | authors, and contributors see CITATION.cff file. This file is part +*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of +*** | AGPL-3.0, you are granted additional permissions described in the +*** | REMIND License Exception, version 1.0 (see LICENSE file). +*** | Contact: remind@pik-potsdam.de +*** SOF ./modules/33_CDR/portfolio/realization.gms + +*' @description +*' (DACCS) Direct air capture uses heat and electricity to capture CO2 from the atmosphere, +*' which can then either be used or stored. Based on the climeworks technology described in Beutler et al. 2019, +*' we assume 5.28 EJ/Gt C (* 12 Gt C/44 Gt CO2) = 1.44 GJ/tCO2 (*10^6 kJ / GJ * 1h/3600s) = 400 kWh/tCO2 +*' electricity and 21.12 EJ/Gt C (* 12 Gt C/44 Gt CO2) = 5,76 GJ/tCO2 (*10^6 kJ / GJ * 1h/3600s) = 1600 kWh/tCO2 +*' low-temperature heat demand. The heat can be provided via district heat, electricity, gas, or H2. If gas is used, +*' the resulting CO2 is captured with a capture rate of 90%. +*' (EW) Basalt is mined and ground to fine grain sizes (specified in cm_gs_ew, by default 20 µm), and then spread +*' on crop fields where it weathers in reaction with water and atmospheric CO2. Electricity is needed to grind the +*' rocks and diesel is needed for transportation and spreading on crop fields. The weathering process leads to an exponential +*' decay over time of the spread rocks. There is an upper limit on the amount of rock that can be on the fields, so that +*' in equilibrium only the part that decays in one timestep can be replaced in the next. In addition, an arbitrary +*' limit of the amount of rock spread each year can be set in cm_LimRock. Costs consist of costs for capital, O&M, +*' distribution and transport (grades depend on region specific transport distance from mine to fields). +*' +*' Equations for each option determine the capacity, emissions, energy demand, costs and limits. +***---------------------------------------------------- + +*####################### R SECTION START (PHASES) ############################## +$Ifi "%phase%" == "sets" $include "./modules/33_CDR/portfolio/sets.gms" +$Ifi "%phase%" == "declarations" $include "./modules/33_CDR/portfolio/declarations.gms" +$Ifi "%phase%" == "datainput" $include "./modules/33_CDR/portfolio/datainput.gms" +$Ifi "%phase%" == "equations" $include "./modules/33_CDR/portfolio/equations.gms" +$Ifi "%phase%" == "bounds" $include "./modules/33_CDR/portfolio/bounds.gms" +*######################## R SECTION END (PHASES) ############################### +*** EOF ./modules/33_CDR/portfolio/realization.gms diff --git a/modules/33_CDR/portfolio/sets.gms b/modules/33_CDR/portfolio/sets.gms new file mode 100644 index 000000000..15594e9c3 --- /dev/null +++ b/modules/33_CDR/portfolio/sets.gms @@ -0,0 +1,75 @@ +*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) +*** | authors, and contributors see CITATION.cff file. This file is part +*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of +*** | AGPL-3.0, you are granted additional permissions described in the +*** | REMIND License Exception, version 1.0 (see LICENSE file). +*** | Contact: remind@pik-potsdam.de +*** SOF ./modules/33_CDR/portfolio/sets.gms +sets + +te_all33(all_te) "all CDR technologies" +/ + weathering "enhanced weathering" + dac "direct air capture" +/ + +te_used33(all_te) "used CDR technologies (specified by switches)" + +teNoTransform33(all_te) "used CDR technologies that do not transform energy but still have investment and O&M costs (like storage or grid)" + +teNoTransform2rlf33(all_te,rlf) "mapping for final energy to grades (used CDR technologies)" + +teAdj33(all_te) "used CDR technologies with linearly growing constraint on control variable" + +teLearn33(all_te) "used learning CDR technologies" + +te_ccs33(all_te) "used CDR technologies that require CCS" + +fe2cdr(all_enty,all_enty,all_te) "mapping of FE carriers supplying FE demand for all technologies" +/ + feels.feels.dac + fehes.fehes.dac + feels.fehes.dac + feh2s.fehes.dac + fegas.fehes.dac + feels.feels.weathering + fedie.fedie.weathering +/ + +rlf_cz33(rlf) "representing weathering rates depending on climate zones according to Strefler, Amann et al. (2017)" +/ + 1 "warm regions" + 2 "temperate regions" +/ +; + +***------------------------------------------------------------------------- +*** add CDR technologies specified by switches +***------------------------------------------------------------------------- + +if(cm_33DAC eq 1, + te_used33("dac") = YES; + teNoTransform33("dac") = YES; + teNoTransform2rlf33("dac", "1") = YES; + teAdj33("dac") = YES; + teLearn33("dac") = YES; + te_ccs33("dac") = YES; +); + +if(cm_33EW eq 1, + te_used33("weathering") = YES; + teNoTransform33("weathering") = YES; + teNoTransform2rlf33("weathering", "1") = YES; +); + +***------------------------------------------------------------------------- +*** add module specific sets and mappings to the global sets and mappings +***------------------------------------------------------------------------- + +te(te_used33) = YES; +teNoTransform(teNoTransform33) = YES; +teNoTransform2rlf(teNoTransform2rlf33) = YES; +teAdj(teAdj33) = YES; +teLearn(teLearn33) = YES; + +*** EOF ./modules/33_CDR/portfolio/sets.gms diff --git a/modules/33_CDR/weathering/bounds.gms b/modules/33_CDR/weathering/bounds.gms deleted file mode 100644 index d88f0131f..000000000 --- a/modules/33_CDR/weathering/bounds.gms +++ /dev/null @@ -1,14 +0,0 @@ -*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -*** | authors, and contributors see CITATION.cff file. This file is part -*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -*** | AGPL-3.0, you are granted additional permissions described in the -*** | REMIND License Exception, version 1.0 (see LICENSE file). -*** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/weathering/bounds.gms -vm_emiCdr.fx(t,regi,emi)$(not sameas(emi,"co2")) = 0.0; -v33_weathering_onfield_tot.up(t,regi,rlf,rlf2) = s33_step; -v33_weathering_onfield_tot.fx("2005",regi,rlf,rlf2) = 0.0; -v33_weathering_onfield.fx(t,regi,rlf,rlf2)$(rlf2.val gt 10) = 0; -v33_weathering_onfield_tot.fx(t,regi,rlf,rlf2)$(rlf2.val gt 10) = 0; -vm_ccs_cdr.fx(t,regi,enty,enty2,te,rlf)$ccs2te(enty,enty2,te) = 0; -*** EOF ./modules/33_CDR/weathering/bounds.gms diff --git a/modules/33_CDR/weathering/declarations.gms b/modules/33_CDR/weathering/declarations.gms deleted file mode 100644 index 168dab6e9..000000000 --- a/modules/33_CDR/weathering/declarations.gms +++ /dev/null @@ -1,44 +0,0 @@ -*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -*** | authors, and contributors see CITATION.cff file. This file is part -*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -*** | AGPL-3.0, you are granted additional permissions described in the -*** | REMIND License Exception, version 1.0 (see LICENSE file). -*** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/weathering/declarations.gms -scalars -s33_co2_rem_pot "specific carbon removal potential [Gt C per Gt ground rock]" -s33_co2_rem_rate "carbon removal rate [fraction of annual reduction of total carbon removal potential]" -s33_costs_fix "fixed costs for mining, grinding, spreading [T$/Gt stone]" -s33_step "size of bins in v33_weathering_onfield [Gt stone]" -; - -parameters -p33_transport_costs(all_regi,rlf,rlf) "transport costs [T$/Gt stone]" -p33_co2_rem_rate(rlf) "carbon removal rate [fraction of annual reduction of total carbon removal potential], multiplied with grade factor" -p33_weathering_fedem(all_enty) "specific energy demand for enhanced weathering [EJ per Gt of ground rock]" -p33_LimRock(all_regi) "regional share of EW limit [fraction], calculated ex ante for a maximal annual amount of 8 Gt rock in D:\projects\CEMICS\paper_technical\supply_curve_transport_remind_regions.m" -; - -positive variables -v33_weathering_onfield(ttot,all_regi,rlf,rlf) "amount of ground rock spread on fields in each timestep [Gt]" -v33_weathering_onfield_tot(ttot,all_regi,rlf,rlf) "total amount of ground rock on fields [Gt]" -; - -variables -vm_ccs_cdr(ttot,all_regi,all_enty,all_enty,all_te,rlf) "CCS emissions from CDR [GtC / a]" -v33_emiEW(ttot,all_regi) "negative CO2 emission from EW [GtC / a]" -; - -equations -q33_demFeCDR(ttot,all_regi,all_enty) "CDR demand balance for final energy" -q33_otherFEdemand(ttot,all_regi,all_enty) "calculates final energy demand from no transformation technologies (e.g. enhanced weathering)" -q33_capconst_weathering(ttot,all_regi) "calculates amount of ground rock spread on fields" -q33_weathering_onfield_tot(ttot,all_regi,rlf,rlf) "calculates total amount of ground rock on fields" -q33_emicdrregi(ttot,all_regi) "calculates the (negative) emissions due to CDR technologies" -q33_omcosts(ttot,all_regi) "calculates O&M costs for spreading ground rocks on fields" -q33_potential(ttot,all_regi,rlf) "limits the total potential per region and grade" -q33_emiEW(ttot,all_regi) "calculates amount of carbon captured by EW" -q33_LimEmiEW(ttot,all_regi) "limits EW to a maximal annual amount of ground rock of cm_LimRock" -; - -*** EOF ./modules/33_CDR/weathering/declarations.gms diff --git a/modules/33_CDR/weathering/equations.gms b/modules/33_CDR/weathering/equations.gms deleted file mode 100644 index e21b3ac42..000000000 --- a/modules/33_CDR/weathering/equations.gms +++ /dev/null @@ -1,98 +0,0 @@ -*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -*** | authors, and contributors see CITATION.cff file. This file is part -*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -*** | AGPL-3.0, you are granted additional permissions described in the -*** | REMIND License Exception, version 1.0 (see LICENSE file). -*** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/weathering/equations.gms - -***--------------------------------------------------------------------------- -*' CDR Final Energy Balance -***--------------------------------------------------------------------------- -q33_demFeCDR(t,regi,entyFe)$(entyFe2Sector(entyFe,"cdr")) .. - vm_otherFEdemand(t,regi,entyFe) - =e= - sum((entySe,te)$se2fe(entySe,entyFe,te), vm_demFeSector_afterTax(t,regi,entySe,entyFe,"cdr","ETS")) -; - -***--------------------------------------------------------------------------- -*' Calculation of the energy demand of enhanced weathering. The first part of the equation describes the electricity demand for grinding, -*' the second part the diesel demand for transportation and spreading on crop fields. -***--------------------------------------------------------------------------- -q33_otherFEdemand(t,regi,entyFe)$(sameas(entyFe,"feels") OR sameas(entyFe,"fedie")).. - vm_otherFEdemand(t,regi,entyFe)$(sameas(entyFe,"feels") OR sameas(entyFe,"fedie")) - =e= - p33_weathering_fedem(entyFe) * sm_EJ_2_TWa * sum((rlf_cz33, rlf), v33_weathering_onfield(t,regi,rlf_cz33,rlf)) - ; - -***--------------------------------------------------------------------------- -*' Calculation of the amount of ground rock spread in timestep t. -***--------------------------------------------------------------------------- -q33_capconst_weathering(t,regi).. - sum((rlf_cz33, rlf), v33_weathering_onfield(t,regi,rlf_cz33,rlf)) - =l= - sum(teNoTransform2rlf_dyn33("weathering",rlf), vm_capFac(t,regi,"weathering") * vm_cap(t,regi,"weathering",rlf)) - ; - -***--------------------------------------------------------------------------- -*' Calculation of the total amount of ground rock on the fields in timestep t. The first part of the equation describes the decay of the rocks added until that time, -*' the rest describes the newly added rocks. -***--------------------------------------------------------------------------- -q33_weathering_onfield_tot(ttot,regi,rlf_cz33,rlf)$(ttot.val ge max(2010, cm_startyear)).. - v33_weathering_onfield_tot(ttot,regi,rlf_cz33,rlf) - =e= - v33_weathering_onfield_tot(ttot-1,regi,rlf_cz33,rlf) * exp(-p33_co2_rem_rate(rlf_cz33) * pm_ts(ttot)) + - v33_weathering_onfield(ttot-1,regi,rlf_cz33,rlf) * (sum(tall $ ((tall.val lt (ttot.val-pm_ts(ttot)/2)) $ (tall.val ge (ttot.val-pm_ts(ttot)))),exp(-p33_co2_rem_rate(rlf_cz33) * (ttot.val-tall.val)))) + - v33_weathering_onfield(ttot,regi,rlf_cz33,rlf) * (sum(tall $ ((tall.val le ttot.val) $ (tall.val gt (ttot.val-pm_ts(ttot)/2))),exp(-p33_co2_rem_rate(rlf_cz33) * (ttot.val-tall.val)))) -; - -***--------------------------------------------------------------------------- -*' Calculation of (negative) CO2 emissions from enhanced weathering. -***--------------------------------------------------------------------------- -q33_emiEW(t,regi).. - v33_emiEW(t,regi) - =e= - sum((rlf_cz33, rlf), - - v33_weathering_onfield_tot(t,regi,rlf_cz33,rlf) * s33_co2_rem_pot * (1 - exp(-p33_co2_rem_rate(rlf_cz33))) - ) - ; - -***--------------------------------------------------------------------------- -*' Sum of all CDR emissions other than BECCS and afforestation, which are calculated in the core. -***--------------------------------------------------------------------------- -q33_emicdrregi(t,regi).. - vm_emiCdr(t,regi,"co2") - =e= - v33_emiEW(t,regi) - ; - -***--------------------------------------------------------------------------- -*' O&M costs of EW, consisting of fix costs for mining, grinding and spreading, and transportation costs. -***--------------------------------------------------------------------------- -q33_omcosts(t,regi).. - vm_omcosts_cdr(t,regi) - =e= - sum((rlf_cz33, rlf), - (s33_costs_fix + p33_transport_costs(regi,rlf_cz33,rlf)) * v33_weathering_onfield(t,regi,rlf_cz33,rlf) - ) - ; - -***--------------------------------------------------------------------------- -*' Limit total amount of ground rock on the fields to regional maximum potentials. -***--------------------------------------------------------------------------- -q33_potential(t,regi,rlf_cz33).. - sum(rlf, v33_weathering_onfield_tot(t,regi,rlf_cz33,rlf)) - =l= - f33_maxProdGradeRegiWeathering(regi,rlf_cz33) - ; - -***--------------------------------------------------------------------------- -*' An annual limit for the maximum amount of rocks spred [Gt] can be set via cm_LimRock, e.g. due to sustainability concerns. -***--------------------------------------------------------------------------- -q33_LimEmiEW(t,regi).. - sum((rlf_cz33, rlf), v33_weathering_onfield(t,regi,rlf_cz33,rlf)) - =l= - cm_LimRock*p33_LimRock(regi) - ; - -*** EOF ./modules/33_CDR/weathering/equations.gms diff --git a/modules/33_CDR/weathering/input/files b/modules/33_CDR/weathering/input/files deleted file mode 100644 index 90ce8fc36..000000000 --- a/modules/33_CDR/weathering/input/files +++ /dev/null @@ -1 +0,0 @@ -f33_maxProdGradeRegiWeathering.cs3r diff --git a/modules/33_CDR/weathering/input/p33_transport_costs.inc b/modules/33_CDR/weathering/input/p33_transport_costs.inc deleted file mode 100644 index 4ab1002eb..000000000 --- a/modules/33_CDR/weathering/input/p33_transport_costs.inc +++ /dev/null @@ -1,242 +0,0 @@ -*** SOF ./modules/33_CDR/weathering/input/p33_transport_costs.inc -p33_transport_costs("CAZ","1","1") = 0.00982132; -p33_transport_costs("CAZ","1","2") = 0.00982132; -p33_transport_costs("CAZ","1","3") = 0.00982132; -p33_transport_costs("CAZ","1","4") = 0.00982132; -p33_transport_costs("CAZ","1","5") = 0.00982132; -p33_transport_costs("CAZ","1","6") = 0.00982132; -p33_transport_costs("CAZ","1","7") = 0.00982132; -p33_transport_costs("CAZ","1","8") = 0.00982132; -p33_transport_costs("CAZ","1","9") = 0.00982132; -p33_transport_costs("CAZ","1","10") = 0.00982132; -p33_transport_costs("CAZ","2","1") = 0.0234088; -p33_transport_costs("CAZ","2","2") = 0.0234088; -p33_transport_costs("CAZ","2","3") = 0.0234088; -p33_transport_costs("CAZ","2","4") = 0.0234088; -p33_transport_costs("CAZ","2","5") = 0.0234088; -p33_transport_costs("CAZ","2","6") = 0.0234088; -p33_transport_costs("CAZ","2","7") = 0.0234088; -p33_transport_costs("CAZ","2","8") = 0.0234088; -p33_transport_costs("CAZ","2","9") = 0.0234088; -p33_transport_costs("CAZ","2","10") = 0.0234088; -p33_transport_costs("CHA","1","1") = 0.00203442; -p33_transport_costs("CHA","1","2") = 0.00595968; -p33_transport_costs("CHA","1","3") = 0.00595968; -p33_transport_costs("CHA","1","4") = 0.00595968; -p33_transport_costs("CHA","1","5") = 0.00595968; -p33_transport_costs("CHA","1","6") = 0.00595968; -p33_transport_costs("CHA","1","7") = 0.00595968; -p33_transport_costs("CHA","1","8") = 0.00595968; -p33_transport_costs("CHA","1","9") = 0.00595968; -p33_transport_costs("CHA","1","10") = 0.00595968; -p33_transport_costs("CHA","2","1") = 0.000886974; -p33_transport_costs("CHA","2","2") = 0.00232315; -p33_transport_costs("CHA","2","3") = 0.00469094; -p33_transport_costs("CHA","2","4") = 0.00469094; -p33_transport_costs("CHA","2","5") = 0.00469094; -p33_transport_costs("CHA","2","6") = 0.00469094; -p33_transport_costs("CHA","2","7") = 0.00469094; -p33_transport_costs("CHA","2","8") = 0.00469094; -p33_transport_costs("CHA","2","9") = 0.00469094; -p33_transport_costs("CHA","2","10") = 0.00469094; -p33_transport_costs("EUR","1","1") = 0.00643523; -p33_transport_costs("EUR","1","2") = 0.00643523; -p33_transport_costs("EUR","1","3") = 0.00643523; -p33_transport_costs("EUR","1","4") = 0.00643523; -p33_transport_costs("EUR","1","5") = 0.00643523; -p33_transport_costs("EUR","1","6") = 0.00643523; -p33_transport_costs("EUR","1","7") = 0.00643523; -p33_transport_costs("EUR","1","8") = 0.00643523; -p33_transport_costs("EUR","1","9") = 0.00643523; -p33_transport_costs("EUR","1","10") = 0.00643523; -p33_transport_costs("EUR","2","1") = 0.00137663; -p33_transport_costs("EUR","2","2") = 0.00324343; -p33_transport_costs("EUR","2","3") = 0.00762609; -p33_transport_costs("EUR","2","4") = 0.0151122; -p33_transport_costs("EUR","2","5") = 0.0151122; -p33_transport_costs("EUR","2","6") = 0.0151122; -p33_transport_costs("EUR","2","7") = 0.0151122; -p33_transport_costs("EUR","2","8") = 0.0151122; -p33_transport_costs("EUR","2","9") = 0.0151122; -p33_transport_costs("EUR","2","10") = 0.0151122; -p33_transport_costs("IND","1","1") = 5e-009; -p33_transport_costs("IND","1","2") = 0.000569323; -p33_transport_costs("IND","1","3") = 0.0019185; -p33_transport_costs("IND","1","4") = 0.00353466; -p33_transport_costs("IND","1","5") = 0.0051216; -p33_transport_costs("IND","1","6") = 0.00710802; -p33_transport_costs("IND","1","7") = 0.0101812; -p33_transport_costs("IND","1","8") = 0.0101812; -p33_transport_costs("IND","1","9") = 0.0101812; -p33_transport_costs("IND","1","10") = 0.0101812; -p33_transport_costs("IND","2","1") = 0.00975282; -p33_transport_costs("IND","2","2") = 0.00975282; -p33_transport_costs("IND","2","3") = 0.00975282; -p33_transport_costs("IND","2","4") = 0.00975282; -p33_transport_costs("IND","2","5") = 0.00975282; -p33_transport_costs("IND","2","6") = 0.00975282; -p33_transport_costs("IND","2","7") = 0.00975282; -p33_transport_costs("IND","2","8") = 0.00975282; -p33_transport_costs("IND","2","9") = 0.00975282; -p33_transport_costs("IND","2","10") = 0.00975282; -p33_transport_costs("JPN","1","1") = 0.00262315; -p33_transport_costs("JPN","1","2") = 0.00262315; -p33_transport_costs("JPN","1","3") = 0.00262315; -p33_transport_costs("JPN","1","4") = 0.00262315; -p33_transport_costs("JPN","1","5") = 0.00262315; -p33_transport_costs("JPN","1","6") = 0.00262315; -p33_transport_costs("JPN","1","7") = 0.00262315; -p33_transport_costs("JPN","1","8") = 0.00262315; -p33_transport_costs("JPN","1","9") = 0.00262315; -p33_transport_costs("JPN","1","10") = 0.00262315; -p33_transport_costs("JPN","2","1") = 0.00410821; -p33_transport_costs("JPN","2","2") = 0.00410821; -p33_transport_costs("JPN","2","3") = 0.00410821; -p33_transport_costs("JPN","2","4") = 0.00410821; -p33_transport_costs("JPN","2","5") = 0.00410821; -p33_transport_costs("JPN","2","6") = 0.00410821; -p33_transport_costs("JPN","2","7") = 0.00410821; -p33_transport_costs("JPN","2","8") = 0.00410821; -p33_transport_costs("JPN","2","9") = 0.00410821; -p33_transport_costs("JPN","2","10") = 0.00410821; -p33_transport_costs("LAM","1","1") = 3.33333e-006; -p33_transport_costs("LAM","1","2") = 0.000256774; -p33_transport_costs("LAM","1","3") = 0.000889862; -p33_transport_costs("LAM","1","4") = 0.00175771; -p33_transport_costs("LAM","1","5") = 0.00286348; -p33_transport_costs("LAM","1","6") = 0.00470416; -p33_transport_costs("LAM","1","7") = 0.0070726; -p33_transport_costs("LAM","1","8") = 0.0108247; -p33_transport_costs("LAM","1","9") = 0.0108247; -p33_transport_costs("LAM","1","10") = 0.0108247; -p33_transport_costs("LAM","2","1") = 0.0279661; -p33_transport_costs("LAM","2","2") = 0.0279661; -p33_transport_costs("LAM","2","3") = 0.0279661; -p33_transport_costs("LAM","2","4") = 0.0279661; -p33_transport_costs("LAM","2","5") = 0.0279661; -p33_transport_costs("LAM","2","6") = 0.0279661; -p33_transport_costs("LAM","2","7") = 0.0279661; -p33_transport_costs("LAM","2","8") = 0.0279661; -p33_transport_costs("LAM","2","9") = 0.0279661; -p33_transport_costs("LAM","2","10") = 0.0279661; -p33_transport_costs("MEA","1","1") = 0.0367588; -p33_transport_costs("MEA","1","2") = 0.0367588; -p33_transport_costs("MEA","1","3") = 0.0367588; -p33_transport_costs("MEA","1","4") = 0.0367588; -p33_transport_costs("MEA","1","5") = 0.0367588; -p33_transport_costs("MEA","1","6") = 0.0367588; -p33_transport_costs("MEA","1","7") = 0.0367588; -p33_transport_costs("MEA","1","8") = 0.0367588; -p33_transport_costs("MEA","1","9") = 0.0367588; -p33_transport_costs("MEA","1","10") = 0.0367588; -p33_transport_costs("MEA","2","1") = 0.0366745; -p33_transport_costs("MEA","2","2") = 0.0366745; -p33_transport_costs("MEA","2","3") = 0.0366745; -p33_transport_costs("MEA","2","4") = 0.0366745; -p33_transport_costs("MEA","2","5") = 0.0366745; -p33_transport_costs("MEA","2","6") = 0.0366745; -p33_transport_costs("MEA","2","7") = 0.0366745; -p33_transport_costs("MEA","2","8") = 0.0366745; -p33_transport_costs("MEA","2","9") = 0.0366745; -p33_transport_costs("MEA","2","10") = 0.0366745; -p33_transport_costs("NEU","1","1") = 0.00499868; -p33_transport_costs("NEU","1","2") = 0.00499868; -p33_transport_costs("NEU","1","3") = 0.00499868; -p33_transport_costs("NEU","1","4") = 0.00499868; -p33_transport_costs("NEU","1","5") = 0.00499868; -p33_transport_costs("NEU","1","6") = 0.00499868; -p33_transport_costs("NEU","1","7") = 0.00499868; -p33_transport_costs("NEU","1","8") = 0.00499868; -p33_transport_costs("NEU","1","9") = 0.00499868; -p33_transport_costs("NEU","1","10") = 0.00499868; -p33_transport_costs("NEU","2","1") = 0.0104845; -p33_transport_costs("NEU","2","2") = 0.0104845; -p33_transport_costs("NEU","2","3") = 0.0104845; -p33_transport_costs("NEU","2","4") = 0.0104845; -p33_transport_costs("NEU","2","5") = 0.0104845; -p33_transport_costs("NEU","2","6") = 0.0104845; -p33_transport_costs("NEU","2","7") = 0.0104845; -p33_transport_costs("NEU","2","8") = 0.0104845; -p33_transport_costs("NEU","2","9") = 0.0104845; -p33_transport_costs("NEU","2","10") = 0.0104845; -p33_transport_costs("OAS","1","1") = 0.000243118; -p33_transport_costs("OAS","1","2") = 0.00104127; -p33_transport_costs("OAS","1","3") = 0.0021003; -p33_transport_costs("OAS","1","4") = 0.00319992; -p33_transport_costs("OAS","1","5") = 0.00445396; -p33_transport_costs("OAS","1","6") = 0.00593706; -p33_transport_costs("OAS","1","7") = 0.00762651; -p33_transport_costs("OAS","1","8") = 0.00970254; -p33_transport_costs("OAS","1","9") = 0.0133107; -p33_transport_costs("OAS","1","10") = 0.0133107; -p33_transport_costs("OAS","2","1") = 0.0206356; -p33_transport_costs("OAS","2","2") = 0.0206356; -p33_transport_costs("OAS","2","3") = 0.0206356; -p33_transport_costs("OAS","2","4") = 0.0206356; -p33_transport_costs("OAS","2","5") = 0.0206356; -p33_transport_costs("OAS","2","6") = 0.0206356; -p33_transport_costs("OAS","2","7") = 0.0206356; -p33_transport_costs("OAS","2","8") = 0.0206356; -p33_transport_costs("OAS","2","9") = 0.0206356; -p33_transport_costs("OAS","2","10") = 0.0206356; -p33_transport_costs("REF","1","1") = 0; -p33_transport_costs("REF","1","2") = 0; -p33_transport_costs("REF","1","3") = 0; -p33_transport_costs("REF","1","4") = 0; -p33_transport_costs("REF","1","5") = 0; -p33_transport_costs("REF","1","6") = 0; -p33_transport_costs("REF","1","7") = 0; -p33_transport_costs("REF","1","8") = 0; -p33_transport_costs("REF","1","9") = 0; -p33_transport_costs("REF","1","10") = 0; -p33_transport_costs("REF","2","1") = 0.00539997; -p33_transport_costs("REF","2","2") = 0.0113284; -p33_transport_costs("REF","2","3") = 0.0241914; -p33_transport_costs("REF","2","4") = 0.0416878; -p33_transport_costs("REF","2","5") = 0.0416878; -p33_transport_costs("REF","2","6") = 0.0416878; -p33_transport_costs("REF","2","7") = 0.0416878; -p33_transport_costs("REF","2","8") = 0.0416878; -p33_transport_costs("REF","2","9") = 0.0416878; -p33_transport_costs("REF","2","10") = 0.0416878; -p33_transport_costs("SSA","1","1") = 0.00561183; -p33_transport_costs("SSA","1","2") = 0.0274649; -p33_transport_costs("SSA","1","3") = 0.0274649; -p33_transport_costs("SSA","1","4") = 0.0274649; -p33_transport_costs("SSA","1","5") = 0.0274649; -p33_transport_costs("SSA","1","6") = 0.0274649; -p33_transport_costs("SSA","1","7") = 0.0274649; -p33_transport_costs("SSA","1","8") = 0.0274649; -p33_transport_costs("SSA","1","9") = 0.0274649; -p33_transport_costs("SSA","1","10") = 0.0274649; -p33_transport_costs("SSA","2","1") = 0.010845; -p33_transport_costs("SSA","2","2") = 0.010845; -p33_transport_costs("SSA","2","3") = 0.010845; -p33_transport_costs("SSA","2","4") = 0.010845; -p33_transport_costs("SSA","2","5") = 0.010845; -p33_transport_costs("SSA","2","6") = 0.010845; -p33_transport_costs("SSA","2","7") = 0.010845; -p33_transport_costs("SSA","2","8") = 0.010845; -p33_transport_costs("SSA","2","9") = 0.010845; -p33_transport_costs("SSA","2","10") = 0.010845; -p33_transport_costs("USA","1","1") = 0.0400735; -p33_transport_costs("USA","1","2") = 0.0400735; -p33_transport_costs("USA","1","3") = 0.0400735; -p33_transport_costs("USA","1","4") = 0.0400735; -p33_transport_costs("USA","1","5") = 0.0400735; -p33_transport_costs("USA","1","6") = 0.0400735; -p33_transport_costs("USA","1","7") = 0.0400735; -p33_transport_costs("USA","1","8") = 0.0400735; -p33_transport_costs("USA","1","9") = 0.0400735; -p33_transport_costs("USA","1","10") = 0.0400735; -p33_transport_costs("USA","2","1") = 0.034166; -p33_transport_costs("USA","2","2") = 0.034166; -p33_transport_costs("USA","2","3") = 0.034166; -p33_transport_costs("USA","2","4") = 0.034166; -p33_transport_costs("USA","2","5") = 0.034166; -p33_transport_costs("USA","2","6") = 0.034166; -p33_transport_costs("USA","2","7") = 0.034166; -p33_transport_costs("USA","2","8") = 0.034166; -p33_transport_costs("USA","2","9") = 0.034166; -p33_transport_costs("USA","2","10") = 0.034166; -*** EOF ./modules/33_CDR/weathering/input/p33_transport_costs.inc \ No newline at end of file diff --git a/modules/33_CDR/weathering/not_used.txt b/modules/33_CDR/weathering/not_used.txt deleted file mode 100644 index a8cc7833b..000000000 --- a/modules/33_CDR/weathering/not_used.txt +++ /dev/null @@ -1,13 +0,0 @@ -# | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -# | authors, and contributors see CITATION.cff file. This file is part -# | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -# | AGPL-3.0, you are granted additional permissions described in the -# | REMIND License Exception, version 1.0 (see LICENSE file). -# | Contact: remind@pik-potsdam.de -name, type, reason -sm_eps,scalar,??? -cm_ccapturescen,input,questionnaire -cm_emiscen,input,questionnaire -fm_dataemiglob,parameter,??? -pm_eta_conv,parameter,??? -vm_prodFe,variable,??? diff --git a/modules/33_CDR/weathering/realization.gms b/modules/33_CDR/weathering/realization.gms deleted file mode 100644 index 4bd3c56b8..000000000 --- a/modules/33_CDR/weathering/realization.gms +++ /dev/null @@ -1,20 +0,0 @@ -*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -*** | authors, and contributors see CITATION.cff file. This file is part -*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -*** | AGPL-3.0, you are granted additional permissions described in the -*** | REMIND License Exception, version 1.0 (see LICENSE file). -*** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/weathering/realization.gms - -*' @description -*' In this realization, enhanced weathering of rocks can be used to remove CO2 from the atmosphere in addition to BECCS and afforestation. -*' Electricty is needed to grind the rocks and diesel is needed for transportation and spreading on crop fields. - -*####################### R SECTION START (PHASES) ############################## -$Ifi "%phase%" == "sets" $include "./modules/33_CDR/weathering/sets.gms" -$Ifi "%phase%" == "declarations" $include "./modules/33_CDR/weathering/declarations.gms" -$Ifi "%phase%" == "datainput" $include "./modules/33_CDR/weathering/datainput.gms" -$Ifi "%phase%" == "equations" $include "./modules/33_CDR/weathering/equations.gms" -$Ifi "%phase%" == "bounds" $include "./modules/33_CDR/weathering/bounds.gms" -*######################## R SECTION END (PHASES) ############################### -*** EOF ./modules/33_CDR/weathering/realization.gms diff --git a/modules/33_CDR/weathering/sets.gms b/modules/33_CDR/weathering/sets.gms deleted file mode 100644 index 227e3bab4..000000000 --- a/modules/33_CDR/weathering/sets.gms +++ /dev/null @@ -1,39 +0,0 @@ -*** | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) -*** | authors, and contributors see CITATION.cff file. This file is part -*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -*** | AGPL-3.0, you are granted additional permissions described in the -*** | REMIND License Exception, version 1.0 (see LICENSE file). -*** | Contact: remind@pik-potsdam.de -*** SOF ./modules/33_CDR/weathering/sets.gms -sets - -te_dyn33(all_te) "all technologies" -/ - weathering "enhanced weathering" -/ - -teNoTransform_dyn33(all_te) "all technologies that do not transform energy but still have investment and O&M costs (like storage or grid)" -/ - weathering "enhanced weathering" -/ - -teNoTransform2rlf_dyn33(all_te,rlf) "mapping for final energy to grades" -/ - (weathering) . 1 -/ - -rlf_cz33(rlf) "representing weathering rates depending on climate zones according to Strefler, Amann et al. (2017)" -/ - 1 "warm regions" - 2 "temperate regions" -/ -; - -***------------------------------------------------------------------------- -*** add module specific sets and mappings to the global sets and mappings -***------------------------------------------------------------------------- -te(te_dyn33) = YES; -teNoTransform(teNoTransform_dyn33) = YES; -teNoTransform2rlf(teNoTransform2rlf_dyn33) = YES; - -*** EOF ./modules/33_CDR/weathering/sets.gms diff --git a/scripts/start/prepare.R b/scripts/start/prepare.R index 2ce902796..15b33024f 100644 --- a/scripts/start/prepare.R +++ b/scripts/start/prepare.R @@ -547,29 +547,31 @@ prepare <- function() { list(c("q40_CoalBound.M", "!!q40_CoalBound.M"))) } - #KK temporary fix after CDR module refactoring so that you can use older gdx files - fixings_manipulateThis <- c(fixings_manipulateThis, list("rockgrind", "weathering"), list("grindrock", "weathering")) - levs_manipulateThis <- c(levs_manipulateThis, list("rockgrind", "weathering"), list("grindrock", "weathering")) - margs_manipulateThis <- c(margs_manipulateThis, list("rockgrind", "weathering"), list("grindrock", "weathering")) - #KK CDR module realizations + levs_manipulateThis <- c(levs_manipulateThis, + list(c("rockgrind", "weathering")), list(c("grindrock", "weathering"))) + fixings_manipulateThis <- c(fixings_manipulateThis, + list(c("rockgrind", "weathering")), list(c("grindrock", "weathering"))) + margs_manipulateThis <- c(margs_manipulateThis, + list(c("rockgrind", "weathering")), list(c("grindrock", "weathering"))) + if(cfg$gms$CDR == 'DAC'){ fixings_manipulateThis <- c(fixings_manipulateThis, list(c("v33_emiEW.FX", "!!v33_emiEW.FX")), - list(c("v33_weathering_onfield.FX", "!!v33_weathering_onfield.FX")), - list(c("v33_weathering_onfield_tot.FX", "!!v33_weathering_onfield_tot.FX"))) + list(c("v33_weathering_onfield.FX", "!!v33_grindrock_onfield.FX")), + list(c("v33_weathering_onfield_tot.FX", "!!v33_grindrock_onfield_tot.FX"))) levs_manipulateThis <- c(levs_manipulateThis, list(c("v33_emiEW.L", "!!v33_emiEW.L")), - list(c("v33_weathering_onfield.L", "!!v33_weathering_onfield.L")), - list(c("v33_weathering_onfield_tot.L", "!!v33_weathering_onfield_tot.L"))) + list(c("v33_weathering_onfield.L", "!!v33_grindrock_onfield.L")), + list(c("v33_weathering_onfield_tot.L", "!!v33_grindrock_onfield_tot.L"))) margs_manipulateThis <- c(margs_manipulateThis, list(c("v33_emiEW.M", "!!v33_emiEW.M")), - list(c("v33_weathering_onfield.M", "!!v33_weathering_onfield.M")), - list(c("v33_weathering_onfield_tot.M", "!!v33_weathering_onfield_tot.M")), - list(c("q33_capconst_weathering.M", "!!q33_capconst_weathering.M")), - list(c("q33_weathering_onfield_tot.M", "!!q33_weathering_onfield_tot.M")), + list(c("v33_weathering_onfield.M", "!!v33_grindrock_onfield.M")), + list(c("v33_weathering_onfield_tot.M", "!!v33_grindrock_onfield_tot.M")), + list(c("q33_capconst_weathering.M", "!!q33_capconst_grindrock.M")), + list(c("q33_weathering_onfield_tot.M", "!!q33_grindrock_onfield_tot.M")), list(c("q33_omcosts.M", "!!q33_omcosts.M")), list(c("q33_potential.M", "!!q33_potential.M")), list(c("q33_emiEW.M", "!!q33_emiEW.M")), @@ -598,32 +600,32 @@ prepare <- function() { list(c("q33_H2bio_lim.M", "!!q33_H2bio_lim.M"))) } - if(cfg$gms$CDR == 'off'){ + if(cfg$gms$CDR == 'off' || cfg$gms$CDR == 'portfolio'){ fixings_manipulateThis <- c(fixings_manipulateThis, list(c("v33_emiDAC.FX", "!!v33_emiDAC.FX")), list(c("v33_emiEW.FX", "!!v33_emiEW.FX")), list(c("v33_DacFEdemand_el.FX", "!!v33_DacFEdemand_el.FX")), list(c("v33_DacFEdemand_heat.FX", "!!v33_DacFEdemand_heat.FX")), - list(c("v33_weathering_onfield.FX", "!!v33_weathering_onfield.FX")), - list(c("v33_weathering_onfield_tot.FX", "!!v33_weathering_onfield_tot.FX"))) + list(c("v33_weathering_onfield.FX", "!!v33_grindrock_onfield.FX")), + list(c("v33_weathering_onfield_tot.FX", "!!v33_grindrock_onfield_tot.FX"))) levs_manipulateThis <- c(levs_manipulateThis, list(c("v33_emiDAC.L", "!!v33_emiDAC.L")), list(c("v33_emiEW.L", "!!v33_emiEW.L")), list(c("v33_DacFEdemand_el.L", "!!v33_DacFEdemand_el.L")), list(c("v33_DacFEdemand_heat.L", "!!v33_DacFEdemand_heat.L")), - list(c("v33_weathering_onfield.L", "!!v33_weathering_onfield.L")), - list(c("v33_weathering_onfield_tot.L", "!!v33_weathering_onfield_tot.L"))) + list(c("v33_weathering_onfield.L", "!!v33_grindrock_onfield.L")), + list(c("v33_weathering_onfield_tot.L", "!!v33_grindrock_onfield_tot.L"))) margs_manipulateThis <- c(margs_manipulateThis, list(c("v33_emiDAC.M", "!!v33_emiDAC.M")), list(c("v33_emiEW.M", "!!v33_emiEW.M")), - list(c("v33_weathering_onfield.M", "!!v33_weathering_onfield.M")), - list(c("v33_weathering_onfield_tot.M", "!!v33_weathering_onfield_tot.M")), + list(c("v33_weathering_onfield.M", "!!v33_grindrock_onfield.M")), + list(c("v33_weathering_onfield_tot.M", "!!v33_grindrock_onfield_tot.M")), list(c("v33_DacFEdemand_el.M", "!!v33_DacFEdemand_el.M")), list(c("v33_DacFEdemand_heat.M", "!!v33_DacFEdemand_heat.M")), - list(c("q33_capconst_weathering.M", "!!q33_capconst_weathering.M")), - list(c("q33_weathering_onfield_tot.M", "!!q33_weathering_onfield_tot.M")), + list(c("q33_capconst_weathering.M", "!!q33_capconst_grindrock.M")), + list(c("q33_weathering_onfield_tot.M", "!!q33_grindrock_onfield_tot.M")), list(c("q33_omcosts.M", "!!q33_omcosts.M")), list(c("q33_potential.M", "!!q33_potential.M")), list(c("q33_emiEW.M", "!!q33_emiEW.M")), @@ -637,6 +639,18 @@ prepare <- function() { list(c("q33_emicdrregi.M", "!!q33_emicdrregi.M")), list(c("q33_otherFEdemand.M", "!!q33_otherFEdemand.M"))) } + + if(cfg$gms$CDR == 'portfolio'){ + fixings_manipulateThis <- c(fixings_manipulateThis, + list(c("vm_otherFEdemand.FX", "!!vm_otherFEdemand.FX"))) + + levs_manipulateThis <- c(levs_manipulateThis, + list(c("vm_otherFEdemand.L", "!!vm_otherFEdemand.L"))) + + margs_manipulateThis <- c(margs_manipulateThis, + list(c("vm_otherFEdemand.M", "!!vm_otherFEdemand.M"))) + } + # end of CDR module realizations levs_manipulateThis <- c(levs_manipulateThis, From 966fdea69571671b8f202de0f8e4c7cb7879deb4 Mon Sep 17 00:00:00 2001 From: Katarzyna Kowalczyk Date: Tue, 10 Jan 2023 17:19:49 +0100 Subject: [PATCH 04/10] Add the input dir --- .../input/f33_maxProdGradeRegiWeathering.cs3r | 17 ++ modules/33_CDR/portfolio/input/files | 1 + .../portfolio/input/p33_transport_costs.inc | 242 ++++++++++++++++++ 3 files changed, 260 insertions(+) create mode 100755 modules/33_CDR/portfolio/input/f33_maxProdGradeRegiWeathering.cs3r create mode 100644 modules/33_CDR/portfolio/input/files create mode 100644 modules/33_CDR/portfolio/input/p33_transport_costs.inc diff --git a/modules/33_CDR/portfolio/input/f33_maxProdGradeRegiWeathering.cs3r b/modules/33_CDR/portfolio/input/f33_maxProdGradeRegiWeathering.cs3r new file mode 100755 index 000000000..4774b565c --- /dev/null +++ b/modules/33_CDR/portfolio/input/f33_maxProdGradeRegiWeathering.cs3r @@ -0,0 +1,17 @@ +* description: This file includes max. potential for enhanced weathering in Gt of ground stone/a for different regions and warm (1) and temperate (2) grades. (=maxprod) +* unit: Gt of ground stone/a +* origin: calcOutput(type = "PotentialWeathering", file = "f33_maxProdGradeRegiWeathering.cs3r", round = 3) (madrat 2.20.10 | mrremind 0.151.2) +* creation date: Tue Dec 20 18:17:34 2022 +dummy,1,2 +LAM,22.155,2.641 +OAS,24.825,0.481 +SSA,4.909,0.557 +EUR,0.06,10.348 +NEU,0.105,0.866 +MEA,0.596,0.273 +REF,0,10.98 +CAZ,0.03,2.055 +CHA,5.955,9.735 +IND,17.85,0.165 +JPN,0.045,1.185 +USA,0.375,2.309 diff --git a/modules/33_CDR/portfolio/input/files b/modules/33_CDR/portfolio/input/files new file mode 100644 index 000000000..90ce8fc36 --- /dev/null +++ b/modules/33_CDR/portfolio/input/files @@ -0,0 +1 @@ +f33_maxProdGradeRegiWeathering.cs3r diff --git a/modules/33_CDR/portfolio/input/p33_transport_costs.inc b/modules/33_CDR/portfolio/input/p33_transport_costs.inc new file mode 100644 index 000000000..4ab1002eb --- /dev/null +++ b/modules/33_CDR/portfolio/input/p33_transport_costs.inc @@ -0,0 +1,242 @@ +*** SOF ./modules/33_CDR/weathering/input/p33_transport_costs.inc +p33_transport_costs("CAZ","1","1") = 0.00982132; +p33_transport_costs("CAZ","1","2") = 0.00982132; +p33_transport_costs("CAZ","1","3") = 0.00982132; +p33_transport_costs("CAZ","1","4") = 0.00982132; +p33_transport_costs("CAZ","1","5") = 0.00982132; +p33_transport_costs("CAZ","1","6") = 0.00982132; +p33_transport_costs("CAZ","1","7") = 0.00982132; +p33_transport_costs("CAZ","1","8") = 0.00982132; +p33_transport_costs("CAZ","1","9") = 0.00982132; +p33_transport_costs("CAZ","1","10") = 0.00982132; +p33_transport_costs("CAZ","2","1") = 0.0234088; +p33_transport_costs("CAZ","2","2") = 0.0234088; +p33_transport_costs("CAZ","2","3") = 0.0234088; +p33_transport_costs("CAZ","2","4") = 0.0234088; +p33_transport_costs("CAZ","2","5") = 0.0234088; +p33_transport_costs("CAZ","2","6") = 0.0234088; +p33_transport_costs("CAZ","2","7") = 0.0234088; +p33_transport_costs("CAZ","2","8") = 0.0234088; +p33_transport_costs("CAZ","2","9") = 0.0234088; +p33_transport_costs("CAZ","2","10") = 0.0234088; +p33_transport_costs("CHA","1","1") = 0.00203442; +p33_transport_costs("CHA","1","2") = 0.00595968; +p33_transport_costs("CHA","1","3") = 0.00595968; +p33_transport_costs("CHA","1","4") = 0.00595968; +p33_transport_costs("CHA","1","5") = 0.00595968; +p33_transport_costs("CHA","1","6") = 0.00595968; +p33_transport_costs("CHA","1","7") = 0.00595968; +p33_transport_costs("CHA","1","8") = 0.00595968; +p33_transport_costs("CHA","1","9") = 0.00595968; +p33_transport_costs("CHA","1","10") = 0.00595968; +p33_transport_costs("CHA","2","1") = 0.000886974; +p33_transport_costs("CHA","2","2") = 0.00232315; +p33_transport_costs("CHA","2","3") = 0.00469094; +p33_transport_costs("CHA","2","4") = 0.00469094; +p33_transport_costs("CHA","2","5") = 0.00469094; +p33_transport_costs("CHA","2","6") = 0.00469094; +p33_transport_costs("CHA","2","7") = 0.00469094; +p33_transport_costs("CHA","2","8") = 0.00469094; +p33_transport_costs("CHA","2","9") = 0.00469094; +p33_transport_costs("CHA","2","10") = 0.00469094; +p33_transport_costs("EUR","1","1") = 0.00643523; +p33_transport_costs("EUR","1","2") = 0.00643523; +p33_transport_costs("EUR","1","3") = 0.00643523; +p33_transport_costs("EUR","1","4") = 0.00643523; +p33_transport_costs("EUR","1","5") = 0.00643523; +p33_transport_costs("EUR","1","6") = 0.00643523; +p33_transport_costs("EUR","1","7") = 0.00643523; +p33_transport_costs("EUR","1","8") = 0.00643523; +p33_transport_costs("EUR","1","9") = 0.00643523; +p33_transport_costs("EUR","1","10") = 0.00643523; +p33_transport_costs("EUR","2","1") = 0.00137663; +p33_transport_costs("EUR","2","2") = 0.00324343; +p33_transport_costs("EUR","2","3") = 0.00762609; +p33_transport_costs("EUR","2","4") = 0.0151122; +p33_transport_costs("EUR","2","5") = 0.0151122; +p33_transport_costs("EUR","2","6") = 0.0151122; +p33_transport_costs("EUR","2","7") = 0.0151122; +p33_transport_costs("EUR","2","8") = 0.0151122; +p33_transport_costs("EUR","2","9") = 0.0151122; +p33_transport_costs("EUR","2","10") = 0.0151122; +p33_transport_costs("IND","1","1") = 5e-009; +p33_transport_costs("IND","1","2") = 0.000569323; +p33_transport_costs("IND","1","3") = 0.0019185; +p33_transport_costs("IND","1","4") = 0.00353466; +p33_transport_costs("IND","1","5") = 0.0051216; +p33_transport_costs("IND","1","6") = 0.00710802; +p33_transport_costs("IND","1","7") = 0.0101812; +p33_transport_costs("IND","1","8") = 0.0101812; +p33_transport_costs("IND","1","9") = 0.0101812; +p33_transport_costs("IND","1","10") = 0.0101812; +p33_transport_costs("IND","2","1") = 0.00975282; +p33_transport_costs("IND","2","2") = 0.00975282; +p33_transport_costs("IND","2","3") = 0.00975282; +p33_transport_costs("IND","2","4") = 0.00975282; +p33_transport_costs("IND","2","5") = 0.00975282; +p33_transport_costs("IND","2","6") = 0.00975282; +p33_transport_costs("IND","2","7") = 0.00975282; +p33_transport_costs("IND","2","8") = 0.00975282; +p33_transport_costs("IND","2","9") = 0.00975282; +p33_transport_costs("IND","2","10") = 0.00975282; +p33_transport_costs("JPN","1","1") = 0.00262315; +p33_transport_costs("JPN","1","2") = 0.00262315; +p33_transport_costs("JPN","1","3") = 0.00262315; +p33_transport_costs("JPN","1","4") = 0.00262315; +p33_transport_costs("JPN","1","5") = 0.00262315; +p33_transport_costs("JPN","1","6") = 0.00262315; +p33_transport_costs("JPN","1","7") = 0.00262315; +p33_transport_costs("JPN","1","8") = 0.00262315; +p33_transport_costs("JPN","1","9") = 0.00262315; +p33_transport_costs("JPN","1","10") = 0.00262315; +p33_transport_costs("JPN","2","1") = 0.00410821; +p33_transport_costs("JPN","2","2") = 0.00410821; +p33_transport_costs("JPN","2","3") = 0.00410821; +p33_transport_costs("JPN","2","4") = 0.00410821; +p33_transport_costs("JPN","2","5") = 0.00410821; +p33_transport_costs("JPN","2","6") = 0.00410821; +p33_transport_costs("JPN","2","7") = 0.00410821; +p33_transport_costs("JPN","2","8") = 0.00410821; +p33_transport_costs("JPN","2","9") = 0.00410821; +p33_transport_costs("JPN","2","10") = 0.00410821; +p33_transport_costs("LAM","1","1") = 3.33333e-006; +p33_transport_costs("LAM","1","2") = 0.000256774; +p33_transport_costs("LAM","1","3") = 0.000889862; +p33_transport_costs("LAM","1","4") = 0.00175771; +p33_transport_costs("LAM","1","5") = 0.00286348; +p33_transport_costs("LAM","1","6") = 0.00470416; +p33_transport_costs("LAM","1","7") = 0.0070726; +p33_transport_costs("LAM","1","8") = 0.0108247; +p33_transport_costs("LAM","1","9") = 0.0108247; +p33_transport_costs("LAM","1","10") = 0.0108247; +p33_transport_costs("LAM","2","1") = 0.0279661; +p33_transport_costs("LAM","2","2") = 0.0279661; +p33_transport_costs("LAM","2","3") = 0.0279661; +p33_transport_costs("LAM","2","4") = 0.0279661; +p33_transport_costs("LAM","2","5") = 0.0279661; +p33_transport_costs("LAM","2","6") = 0.0279661; +p33_transport_costs("LAM","2","7") = 0.0279661; +p33_transport_costs("LAM","2","8") = 0.0279661; +p33_transport_costs("LAM","2","9") = 0.0279661; +p33_transport_costs("LAM","2","10") = 0.0279661; +p33_transport_costs("MEA","1","1") = 0.0367588; +p33_transport_costs("MEA","1","2") = 0.0367588; +p33_transport_costs("MEA","1","3") = 0.0367588; +p33_transport_costs("MEA","1","4") = 0.0367588; +p33_transport_costs("MEA","1","5") = 0.0367588; +p33_transport_costs("MEA","1","6") = 0.0367588; +p33_transport_costs("MEA","1","7") = 0.0367588; +p33_transport_costs("MEA","1","8") = 0.0367588; +p33_transport_costs("MEA","1","9") = 0.0367588; +p33_transport_costs("MEA","1","10") = 0.0367588; +p33_transport_costs("MEA","2","1") = 0.0366745; +p33_transport_costs("MEA","2","2") = 0.0366745; +p33_transport_costs("MEA","2","3") = 0.0366745; +p33_transport_costs("MEA","2","4") = 0.0366745; +p33_transport_costs("MEA","2","5") = 0.0366745; +p33_transport_costs("MEA","2","6") = 0.0366745; +p33_transport_costs("MEA","2","7") = 0.0366745; +p33_transport_costs("MEA","2","8") = 0.0366745; +p33_transport_costs("MEA","2","9") = 0.0366745; +p33_transport_costs("MEA","2","10") = 0.0366745; +p33_transport_costs("NEU","1","1") = 0.00499868; +p33_transport_costs("NEU","1","2") = 0.00499868; +p33_transport_costs("NEU","1","3") = 0.00499868; +p33_transport_costs("NEU","1","4") = 0.00499868; +p33_transport_costs("NEU","1","5") = 0.00499868; +p33_transport_costs("NEU","1","6") = 0.00499868; +p33_transport_costs("NEU","1","7") = 0.00499868; +p33_transport_costs("NEU","1","8") = 0.00499868; +p33_transport_costs("NEU","1","9") = 0.00499868; +p33_transport_costs("NEU","1","10") = 0.00499868; +p33_transport_costs("NEU","2","1") = 0.0104845; +p33_transport_costs("NEU","2","2") = 0.0104845; +p33_transport_costs("NEU","2","3") = 0.0104845; +p33_transport_costs("NEU","2","4") = 0.0104845; +p33_transport_costs("NEU","2","5") = 0.0104845; +p33_transport_costs("NEU","2","6") = 0.0104845; +p33_transport_costs("NEU","2","7") = 0.0104845; +p33_transport_costs("NEU","2","8") = 0.0104845; +p33_transport_costs("NEU","2","9") = 0.0104845; +p33_transport_costs("NEU","2","10") = 0.0104845; +p33_transport_costs("OAS","1","1") = 0.000243118; +p33_transport_costs("OAS","1","2") = 0.00104127; +p33_transport_costs("OAS","1","3") = 0.0021003; +p33_transport_costs("OAS","1","4") = 0.00319992; +p33_transport_costs("OAS","1","5") = 0.00445396; +p33_transport_costs("OAS","1","6") = 0.00593706; +p33_transport_costs("OAS","1","7") = 0.00762651; +p33_transport_costs("OAS","1","8") = 0.00970254; +p33_transport_costs("OAS","1","9") = 0.0133107; +p33_transport_costs("OAS","1","10") = 0.0133107; +p33_transport_costs("OAS","2","1") = 0.0206356; +p33_transport_costs("OAS","2","2") = 0.0206356; +p33_transport_costs("OAS","2","3") = 0.0206356; +p33_transport_costs("OAS","2","4") = 0.0206356; +p33_transport_costs("OAS","2","5") = 0.0206356; +p33_transport_costs("OAS","2","6") = 0.0206356; +p33_transport_costs("OAS","2","7") = 0.0206356; +p33_transport_costs("OAS","2","8") = 0.0206356; +p33_transport_costs("OAS","2","9") = 0.0206356; +p33_transport_costs("OAS","2","10") = 0.0206356; +p33_transport_costs("REF","1","1") = 0; +p33_transport_costs("REF","1","2") = 0; +p33_transport_costs("REF","1","3") = 0; +p33_transport_costs("REF","1","4") = 0; +p33_transport_costs("REF","1","5") = 0; +p33_transport_costs("REF","1","6") = 0; +p33_transport_costs("REF","1","7") = 0; +p33_transport_costs("REF","1","8") = 0; +p33_transport_costs("REF","1","9") = 0; +p33_transport_costs("REF","1","10") = 0; +p33_transport_costs("REF","2","1") = 0.00539997; +p33_transport_costs("REF","2","2") = 0.0113284; +p33_transport_costs("REF","2","3") = 0.0241914; +p33_transport_costs("REF","2","4") = 0.0416878; +p33_transport_costs("REF","2","5") = 0.0416878; +p33_transport_costs("REF","2","6") = 0.0416878; +p33_transport_costs("REF","2","7") = 0.0416878; +p33_transport_costs("REF","2","8") = 0.0416878; +p33_transport_costs("REF","2","9") = 0.0416878; +p33_transport_costs("REF","2","10") = 0.0416878; +p33_transport_costs("SSA","1","1") = 0.00561183; +p33_transport_costs("SSA","1","2") = 0.0274649; +p33_transport_costs("SSA","1","3") = 0.0274649; +p33_transport_costs("SSA","1","4") = 0.0274649; +p33_transport_costs("SSA","1","5") = 0.0274649; +p33_transport_costs("SSA","1","6") = 0.0274649; +p33_transport_costs("SSA","1","7") = 0.0274649; +p33_transport_costs("SSA","1","8") = 0.0274649; +p33_transport_costs("SSA","1","9") = 0.0274649; +p33_transport_costs("SSA","1","10") = 0.0274649; +p33_transport_costs("SSA","2","1") = 0.010845; +p33_transport_costs("SSA","2","2") = 0.010845; +p33_transport_costs("SSA","2","3") = 0.010845; +p33_transport_costs("SSA","2","4") = 0.010845; +p33_transport_costs("SSA","2","5") = 0.010845; +p33_transport_costs("SSA","2","6") = 0.010845; +p33_transport_costs("SSA","2","7") = 0.010845; +p33_transport_costs("SSA","2","8") = 0.010845; +p33_transport_costs("SSA","2","9") = 0.010845; +p33_transport_costs("SSA","2","10") = 0.010845; +p33_transport_costs("USA","1","1") = 0.0400735; +p33_transport_costs("USA","1","2") = 0.0400735; +p33_transport_costs("USA","1","3") = 0.0400735; +p33_transport_costs("USA","1","4") = 0.0400735; +p33_transport_costs("USA","1","5") = 0.0400735; +p33_transport_costs("USA","1","6") = 0.0400735; +p33_transport_costs("USA","1","7") = 0.0400735; +p33_transport_costs("USA","1","8") = 0.0400735; +p33_transport_costs("USA","1","9") = 0.0400735; +p33_transport_costs("USA","1","10") = 0.0400735; +p33_transport_costs("USA","2","1") = 0.034166; +p33_transport_costs("USA","2","2") = 0.034166; +p33_transport_costs("USA","2","3") = 0.034166; +p33_transport_costs("USA","2","4") = 0.034166; +p33_transport_costs("USA","2","5") = 0.034166; +p33_transport_costs("USA","2","6") = 0.034166; +p33_transport_costs("USA","2","7") = 0.034166; +p33_transport_costs("USA","2","8") = 0.034166; +p33_transport_costs("USA","2","9") = 0.034166; +p33_transport_costs("USA","2","10") = 0.034166; +*** EOF ./modules/33_CDR/weathering/input/p33_transport_costs.inc \ No newline at end of file From 7ac34f311ff7afa499832e5af4eed3cbbe8090aa Mon Sep 17 00:00:00 2001 From: Katarzyna Kowalczyk Date: Tue, 10 Jan 2023 17:46:00 +0100 Subject: [PATCH 05/10] Set CDR switches to default values --- main.gms | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.gms b/main.gms index 384f31c43..1c60c630c 100755 --- a/main.gms +++ b/main.gms @@ -839,12 +839,12 @@ parameter parameter cm_33DAC "choose whether DAC (direct air capture) should be included into the CDR portfolio. 0 = DAC not used, 1 = used" ; - cm_33DAC = 0; !! def = 1 + cm_33DAC = 1; !! def = 1 *' parameter cm_33EW "choose whether EW (enhanced weathering) should be included into the CDR portfolio. 0 = EW not used, 1 = used" ; - cm_33EW = 1; !! def = 0 + cm_33EW = 0; !! def = 0 *' parameter cm_gs_ew "grain size (for enhanced weathering, CDR module) [micrometre]" From 17d814881b57b64c4dc8c4efe3b6b75e52e99e13 Mon Sep 17 00:00:00 2001 From: Katarzyna Kowalczyk Date: Wed, 15 Feb 2023 16:34:39 +0100 Subject: [PATCH 06/10] Fix indentation --- modules/33_CDR/portfolio/equations.gms | 136 ++++++++++++------------- modules/33_CDR/portfolio/sets.gms | 4 +- 2 files changed, 70 insertions(+), 70 deletions(-) diff --git a/modules/33_CDR/portfolio/equations.gms b/modules/33_CDR/portfolio/equations.gms index dd35f14eb..e8140e77a 100644 --- a/modules/33_CDR/portfolio/equations.gms +++ b/modules/33_CDR/portfolio/equations.gms @@ -14,33 +14,33 @@ *' CDR Final Energy Balance ***--------------------------------------------------------------------------- q33_demFeCDR(t,regi,entyFe)$(entyFe2Sector(entyFe,"cdr")).. - sum(fe2cdr(entyFe,entyFe2,te_used33), - v33_FEdemand(t,regi,entyFe,entyFe2,te_used33) - ) - =e= - sum((entySe,te)$se2fe(entySe,entyFe,te), - vm_demFeSector_afterTax(t,regi,entySe,entyFe,"cdr","ETS") - ) - ; + sum(fe2cdr(entyFe,entyFe2,te_used33), + v33_FEdemand(t,regi,entyFe,entyFe2,te_used33) + ) + =e= + sum((entySe,te)$se2fe(entySe,entyFe,te), + vm_demFeSector_afterTax(t,regi,entySe,entyFe,"cdr","ETS") + ) + ; ***--------------------------------------------------------------------------- *' Sum of all CDR emissions other than BECCS and afforestation, which are calculated in the core. ***--------------------------------------------------------------------------- q33_emiCDR(t,regi).. - vm_emiCdr(t,regi,"co2") - =e= - sum(te_used33, v33_emi(t,regi,te_used33)) - ; + vm_emiCdr(t,regi,"co2") + =e= + sum(te_used33, v33_emi(t,regi,te_used33)) + ; ***--------------------------------------------------------------------------- *' Limit the amount of H2 from biomass to the demand without CDR. *' It's a sustainability bound to prevent a large demand for biomass. ***--------------------------------------------------------------------------- q33_H2bio_lim(t,regi,te)$pe2se("pebiolc","seh2",te).. - vm_prodSE(t,regi,"pebiolc","seh2",te) - =l= + vm_prodSE(t,regi,"pebiolc","seh2",te) + =l= vm_prodFe(t,regi,"seh2","feh2s","tdh2s") - sum(fe2cdr("feh2s",entyFe2,te_used33), v33_FEdemand(t,regi,"feh2s",entyFe2,te_used33)) - ; + ; ***--------------------------------------------------------------------------- *** DAC @@ -49,12 +49,12 @@ q33_H2bio_lim(t,regi,te)$pe2se("pebiolc","seh2",te).. *' Calculation of (negative) CO2 emissions from direct air capture. ***--------------------------------------------------------------------------- q33_DAC_capconst(t,regi).. - v33_emi(t,regi,"dac") - =e= - - sum(teNoTransform2rlf33("dac",rlf), - vm_capFac(t,regi,"dac") * vm_cap(t,regi,"dac",rlf) - ) - ; + v33_emi(t,regi,"dac") + =e= + - sum(teNoTransform2rlf33("dac",rlf), + vm_capFac(t,regi,"dac") * vm_cap(t,regi,"dac",rlf) + ) + ; ***--------------------------------------------------------------------------- *' Preparation of captured emissions to enter the CCS chain. @@ -63,11 +63,11 @@ q33_DAC_capconst(t,regi).. *' assuming 90% capture rate. ***--------------------------------------------------------------------------- q33_DAC_ccsbal(t,regi,ccs2te(ccsCo2(enty),enty2,te)).. - sum(teCCS2rlf(te,rlf), vm_ccs_cdr(t,regi,enty,enty2,te,rlf)) - =e= - - v33_emi(t,regi,"dac") - + (1 / pm_eta_conv(t,regi,"gash2c")) * fm_dataemiglob("pegas","seh2","gash2c","cco2") * sum(fe2cdr("fegas",entyFe2,te_used33), v33_FEdemand(t,regi,"fegas", entyFe2,te_used33)) - ; + sum(teCCS2rlf(te,rlf), vm_ccs_cdr(t,regi,enty,enty2,te,rlf)) + =e= + - v33_emi(t,regi,"dac") + + (1 / pm_eta_conv(t,regi,"gash2c")) * fm_dataemiglob("pegas","seh2","gash2c","cco2") * sum(fe2cdr("fegas",entyFe2,te_used33), v33_FEdemand(t,regi,"fegas", entyFe2,te_used33)) + ; ***--------------------------------------------------------------------------- *' Calculation of FE demand for DAC, i.e., electricity demand for ventilation, @@ -76,7 +76,7 @@ q33_DAC_ccsbal(t,regi,ccs2te(ccsCo2(enty),enty2,te)).. q33_DAC_FEdemand(t,regi,entyFe2)$sum(entyFe, fe2cdr(entyFe,entyFe2,"dac")).. sum(fe2cdr(entyFe,entyFe2,"dac"), v33_FEdemand(t,regi,entyFe,entyFe2,"dac")) =e= - p33_fedem("dac", entyFe2) * sm_EJ_2_TWa * (- v33_emi(t,regi,"dac")) + p33_fedem("dac", entyFe2) * sm_EJ_2_TWa * (- v33_emi(t,regi,"dac")) ; ***--------------------------------------------------------------------------- @@ -86,12 +86,12 @@ q33_DAC_FEdemand(t,regi,entyFe2)$sum(entyFe, fe2cdr(entyFe,entyFe2,"dac")).. *' Calculation of the amount of ground rock spread in timestep t. ***--------------------------------------------------------------------------- q33_EW_capconst(t,regi).. - sum((rlf_cz33, rlf), v33_EW_onfield(t,regi,rlf_cz33,rlf)) - =l= - sum(teNoTransform2rlf33("weathering",rlf), - vm_capFac(t,regi,"weathering") * vm_cap(t,regi,"weathering",rlf) - ) - ; + sum((rlf_cz33, rlf), v33_EW_onfield(t,regi,rlf_cz33,rlf)) + =l= + sum(teNoTransform2rlf33("weathering",rlf), + vm_capFac(t,regi,"weathering") * vm_cap(t,regi,"weathering",rlf) + ) + ; ***--------------------------------------------------------------------------- *' Calculation of the total amount of ground rock on the fields in timestep t. @@ -99,31 +99,31 @@ q33_EW_capconst(t,regi).. *' the rest describes the newly added rocks. ***--------------------------------------------------------------------------- q33_EW_onfield_tot(ttot,regi,rlf_cz33,rlf)$(ttot.val ge max(2025, cm_startyear)).. - v33_EW_onfield_tot(ttot,regi,rlf_cz33,rlf) - =e= + v33_EW_onfield_tot(ttot,regi,rlf_cz33,rlf) + =e= v33_EW_onfield_tot(ttot-1,regi,rlf_cz33,rlf) * exp(-p33_co2_rem_rate(rlf_cz33) * pm_ts(ttot)) - + v33_EW_onfield(ttot-1,regi,rlf_cz33,rlf) * ( - sum(tall$(tall.val le (ttot.val - pm_ts(ttot)/2) and tall.val gt (ttot.val - pm_ts(ttot))), - exp(-p33_co2_rem_rate(rlf_cz33) * (ttot.val - tall.val)) - ) - ) - + v33_EW_onfield(ttot,regi,rlf_cz33,rlf) * ( - sum(tall$(tall.val le ttot.val and tall.val gt (ttot.val - pm_ts(ttot)/2)), - exp(-p33_co2_rem_rate(rlf_cz33) * (ttot.val-tall.val)) - ) - ) + + v33_EW_onfield(ttot-1,regi,rlf_cz33,rlf) * ( + sum(tall$(tall.val le (ttot.val - pm_ts(ttot)/2) and tall.val gt (ttot.val - pm_ts(ttot))), + exp(-p33_co2_rem_rate(rlf_cz33) * (ttot.val - tall.val)) + ) + ) + + v33_EW_onfield(ttot,regi,rlf_cz33,rlf) * ( + sum(tall$(tall.val le ttot.val and tall.val gt (ttot.val - pm_ts(ttot)/2)), + exp(-p33_co2_rem_rate(rlf_cz33) * (ttot.val-tall.val)) + ) + ) ; ***--------------------------------------------------------------------------- *' Calculation of (negative) CO2 emissions from enhanced weathering. ***--------------------------------------------------------------------------- q33_EW_emi(t,regi).. - v33_emi(t,regi, "weathering") - =e= - sum((rlf_cz33, rlf), - - v33_EW_onfield_tot(t,regi,rlf_cz33,rlf) * s33_co2_rem_pot * (1 - exp(-p33_co2_rem_rate(rlf_cz33))) - ) - ; + v33_emi(t,regi, "weathering") + =e= + sum((rlf_cz33, rlf), + - v33_EW_onfield_tot(t,regi,rlf_cz33,rlf) * s33_co2_rem_pot * (1 - exp(-p33_co2_rem_rate(rlf_cz33))) + ) + ; ***--------------------------------------------------------------------------- *' Calculation of FE demand for enhanced weathering, i.e., electricity demand for grinding, @@ -131,38 +131,38 @@ q33_EW_emi(t,regi).. ***--------------------------------------------------------------------------- q33_EW_FEdemand(t,regi,entyFe2)$sum(entyFe, fe2cdr(entyFe,entyFe2,"weathering")).. sum(fe2cdr(entyFe,entyFe2,"weathering"), v33_FEdemand(t,regi,entyFe,entyFe2,"weathering")) - =e= - p33_fedem("weathering",entyFe2) * sm_EJ_2_TWa * sum((rlf_cz33, rlf), v33_EW_onfield(t,regi,rlf_cz33,rlf)) - ; + =e= + p33_fedem("weathering",entyFe2) * sm_EJ_2_TWa * sum((rlf_cz33, rlf), v33_EW_onfield(t,regi,rlf_cz33,rlf)) + ; ***--------------------------------------------------------------------------- *' O&M costs of EW, consisting of fix costs for mining, grinding and spreading, and transportation costs. ***--------------------------------------------------------------------------- q33_EW_omcosts(t,regi).. - vm_omcosts_cdr(t,regi) - =e= - sum((rlf_cz33, rlf), - (s33_costs_fix + p33_transport_costs(regi,rlf_cz33,rlf)) * v33_EW_onfield(t,regi,rlf_cz33,rlf) - ) - ; + vm_omcosts_cdr(t,regi) + =e= + sum((rlf_cz33, rlf), + (s33_costs_fix + p33_transport_costs(regi,rlf_cz33,rlf)) * v33_EW_onfield(t,regi,rlf_cz33,rlf) + ) + ; ***--------------------------------------------------------------------------- *' Limit total amount of ground rock on the fields to regional maximum potentials. ***--------------------------------------------------------------------------- q33_EW_potential(t,regi,rlf_cz33).. - sum(rlf, v33_EW_onfield_tot(t,regi,rlf_cz33,rlf)) - =l= - f33_maxProdGradeRegiWeathering(regi,rlf_cz33) - ; + sum(rlf, v33_EW_onfield_tot(t,regi,rlf_cz33,rlf)) + =l= + f33_maxProdGradeRegiWeathering(regi,rlf_cz33) + ; ***--------------------------------------------------------------------------- *' An annual limit for the maximum amount of rocks spred [Gt] can be set via cm_LimRock, *' e.g. due to sustainability concerns. ***--------------------------------------------------------------------------- q33_EW_LimEmi(t,regi).. - sum((rlf_cz33, rlf), v33_EW_onfield(t,regi,rlf_cz33,rlf)) - =l= - cm_LimRock * p33_LimRock(regi) - ; + sum((rlf_cz33, rlf), v33_EW_onfield(t,regi,rlf_cz33,rlf)) + =l= + cm_LimRock * p33_LimRock(regi) + ; *** EOF ./modules/33_CDR/portfolio/equations.gms diff --git a/modules/33_CDR/portfolio/sets.gms b/modules/33_CDR/portfolio/sets.gms index 15594e9c3..3c9adbbf6 100644 --- a/modules/33_CDR/portfolio/sets.gms +++ b/modules/33_CDR/portfolio/sets.gms @@ -9,8 +9,8 @@ sets te_all33(all_te) "all CDR technologies" / - weathering "enhanced weathering" - dac "direct air capture" + weathering "enhanced weathering" + dac "direct air capture" / te_used33(all_te) "used CDR technologies (specified by switches)" From 42ee456dd586fb86bff58b51300c5d98448c3a5d Mon Sep 17 00:00:00 2001 From: Katarzyna Kowalczyk Date: Wed, 12 Apr 2023 12:16:57 +0200 Subject: [PATCH 07/10] Changes after PR review --- config/CDR_scenario_config_AMT.csv | 21 --------------------- modules/33_CDR/portfolio/bounds.gms | 3 ++- modules/33_CDR/portfolio/declarations.gms | 2 +- modules/33_CDR/portfolio/equations.gms | 12 ++++++------ 4 files changed, 9 insertions(+), 29 deletions(-) delete mode 100644 config/CDR_scenario_config_AMT.csv diff --git a/config/CDR_scenario_config_AMT.csv b/config/CDR_scenario_config_AMT.csv deleted file mode 100644 index 93503a7f3..000000000 --- a/config/CDR_scenario_config_AMT.csv +++ /dev/null @@ -1,21 +0,0 @@ -title;start;CES_parameters;cm_nash_mode;optimization;CDR;cm_33DAC;cm_33EW;slurmConfig;cm_EDGEtr_scen;cm_demScen;cm_bioenergy_tax;cm_rcp_scen;cm_iterative_target_adj;subsidizeLearning;c_regi_earlyreti_rate;c_tech_earlyreti_rate;c_budgetCO2from2020;carbonprice;cm_co2_tax_2020;cm_peakBudgYr;cm_taxCO2inc_after_peakBudgYr;cm_CO2priceRegConvEndYr;cm_emiscen;cm_fetaxscen;cm_co2_tax_growth;cm_bioenergymaxscen;c_ccsinjecratescen;c_ccscapratescen;techpol;cm_POPscen;cm_GDPscen;cm_oil_scen;cm_gas_scen;cm_coal_scen;c_techAssumptScen;cm_nucscen;cm_so2tax_scen;cm_multigasscen;cm_OILRETIRE;cm_LU_emi_scen;cm_tradecost_bio;cm_1stgen_phaseout;c_SSP_forcing_adjust;cm_APscen;water;cm_cooling_shares;cm_startyear;output;path_gdx;path_gdx_ref;path_gdx_bau -SSP2EU-AMT-calibrate;0;calibrate;;nash;;;;14;Mix1;gdp_SSP2EU;1.5;none;0;off;GLO 0.09, EUR_regi 0.15;off;0;none;-1;2100;3;2050;1;3;1.05;0;1;1;none;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;off;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2005;reporting,reportCEScalib,rds_report;;; -testOneRegi-AMT-Base-DAC;0;load;debug;testOneRegi;DAC;;;8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;reporting,reportCEScalib,rds_report;;; -testOneRegi-AMT-Base-all;0;load;debug;testOneRegi;all;;;8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;reporting,reportCEScalib,rds_report;;; -portfolio-SSP2EU-AMT-Base;0;load;;nash;portfolio;1;0;5;Mix1;gdp_SSP2EU;1.5;none;0;off;GLO 0.09, EUR_regi 0.15;off;0;none;-1;2100;3;2050;1;3;1.05;0;1;1;none;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;off;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2005;reporting,reportCEScalib,rds_report;;; -portfolio-SSP2EU-AMT-NDC;0;load;;nash;portfolio;1;0;5;Mix2;gdp_SSP2EU;1.5;rcp45;3;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;0;NDC;1;2100;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;3;off;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2015;reporting,reportCEScalib,rds_report;;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx -portfolio-SSP2EU-AMT-NDC-weathering;0;load;;nash;portfolio;0;1;5;Mix2;gdp_SSP2EU;1.5;rcp45;3;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;0;NDC;1;2100;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;3;off;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2015;reporting,reportCEScalib,rds_report;;/p/projects/remind/modeltests/output/SSP2EU-AMT-NDC_2022-12-03_04.53.30/fulldata.gdx;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx -portfolio-SSP2EU-AMT-PkBudg500-all;1;load;;nash;portfolio;1;1;5;Mix4;gdp_SSP2EU;1.5;rcp26;9;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;500;diffCurvPhaseIn2Lin;100;2080;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2025;reporting,reportCEScalib,rds_report;;/p/projects/remind/modeltests/output/SSP2EU-AMT-NDC_2022-12-03_04.53.30/fulldata.gdx;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx -portfolio-SSP2EU-AMT-PkBudg500-DAC;1;load;;nash;portfolio;1;0;5;Mix4;gdp_SSP2EU;1.5;rcp26;9;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;500;diffCurvPhaseIn2Lin;100;2080;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2025;reporting,reportCEScalib,rds_report;;/p/projects/remind/modeltests/output/SSP2EU-AMT-NDC_2022-12-03_04.53.30/fulldata.gdx;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx -portfolio-SSP2EU-AMT-PkBudg500-weathering;1;load;;nash;portfolio;0;1;5;Mix4;gdp_SSP2EU;1.5;rcp26;9;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;500;diffCurvPhaseIn2Lin;100;2080;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2025;reporting,reportCEScalib,rds_report;;/p/projects/remind/modeltests/output/SSP2EU-AMT-NDC_2022-12-03_04.53.30/fulldata.gdx;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx -portfolio-SSP2EU-AMT-PkBudg500-DAC-after-weathering;0;load;;nash;portfolio;1;0;5;Mix4;gdp_SSP2EU;1.5;rcp26;9;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;500;diffCurvPhaseIn2Lin;100;2080;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2025;reporting,reportCEScalib,rds_report;;portfolio-SSP2EU-AMT-NDC-weathering;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx -testOneRegi-AMT-Base-late-weathering;0;load;debug;testOneRegi;weathering;;;8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2025;reporting,reportCEScalib,rds_report;;/p/tmp/katarkow/dev_remind/output/dev-EW-late-DAC-SSP2EU-AMT-PkBudg670_2022-06-16_02.17.45/fulldata.gdx;/p/tmp/katarkow/dev_remind/output/dev-EW-late-DAC-SSP2EU-AMT-PkBudg670_2022-06-16_02.17.45/fulldata.gdx -SSP2EU-AMT-Base;0;load;;nash;DAC;;;5;Mix1;gdp_SSP2EU;1.5;none;0;off;GLO 0.09, EUR_regi 0.15;off;0;none;-1;2100;3;2050;1;3;1.05;0;1;1;none;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;off;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2005;reporting,reportCEScalib,rds_report;;; -SSP2EU-AMT-NDC;0;load;;nash;DAC;;;5;Mix2;gdp_SSP2EU;1.5;rcp45;3;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;0;NDC;1;2100;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;3;off;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2015;reporting,reportCEScalib,rds_report;;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx -SSP2EU-AMT-NDC-weathering;0;load;;nash;weathering;;;5;Mix2;gdp_SSP2EU;1.5;rcp45;3;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;0;NDC;1;2100;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;3;off;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2015;reporting,reportCEScalib,rds_report;;/p/projects/remind/modeltests/output/SSP2EU-AMT-NDC_2022-12-03_04.53.30/fulldata.gdx;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx -SSP2EU-AMT-PkBudg500-all-bounded;1;load;;nash;all;;;5;Mix4;gdp_SSP2EU;1.5;rcp26;9;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;500;diffCurvPhaseIn2Lin;100;2080;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2025;reporting,reportCEScalib,rds_report;;/p/projects/remind/modeltests/output/SSP2EU-AMT-NDC_2022-12-03_04.53.30/fulldata.gdx;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx -SSP2EU-AMT-PkBudg500-DAC;1;load;;nash;DAC;;;5;Mix4;gdp_SSP2EU;1.5;rcp26;9;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;500;diffCurvPhaseIn2Lin;100;2080;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2025;reporting,reportCEScalib,rds_report;;/p/projects/remind/modeltests/output/SSP2EU-AMT-NDC_2022-12-03_04.53.30/fulldata.gdx;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx -SSP2EU-AMT-PkBudg500-weathering-bounded;0;load;;nash;weathering;;;5;Mix4;gdp_SSP2EU;1.5;rcp26;9;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;500;diffCurvPhaseIn2Lin;100;2080;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2025;reporting,reportCEScalib,rds_report;;/p/projects/remind/modeltests/output/SSP2EU-AMT-NDC_2022-12-03_04.53.30/fulldata.gdx;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx -SSP2EU-AMT-PkBudg500-DAC-after-weathering;0;load;;nash;DAC;;;5;Mix4;gdp_SSP2EU;1.5;rcp26;9;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;500;diffCurvPhaseIn2Lin;100;2080;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2025;reporting,reportCEScalib,rds_report;;SSP2EU-AMT-NDC-weathering;/p/projects/remind/modeltests/output/SSP2EU-AMT-Base_2022-12-10_00.07.58/fulldata.gdx -SSP2EU-AMT-PkBudg1320;0;load;;nash;;;;5;Mix3;gdp_SSP2EU;1.5;rcp26;9;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;1320;diffCurvPhaseIn2Lin;60;2100;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2025;reporting,reportCEScalib,rds_report;;SSP2EU-AMT-Base;SSP2EU-AMT-Base -SSP2EU-AMT-PkBudg670-weathering-after-DAC;0;load;;nash;weathering;;;5;Mix4;gdp_SSP2EU;1.5;rcp26;9;globallyOptimal;GLO 0.09, EUR_regi 0.15;GLO.(biodiesel 0.14, bioeths 0.14), EUR_regi.(biodiesel 0.15, bioeths 0.15), USA_regi.pc 0.13, REF_regi.pc 0.13, CHA_regi.pc 0.13;670;diffCurvPhaseIn2Lin;100;2080;3;2050;9;3;1.05;0;1;1;NDC;pop_SSP2EU;gdp_SSP2EU;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;heat;dynamic;2025;reporting,reportCEScalib,rds_report;;/p/tmp/katarkow/dev_remind/output/dev-DAC-SSP2EU-AMT-Base_2022-06-15_09.05.20/fulldata.gdx;/p/tmp/katarkow/dev_remind/output/dev-DAC-SSP2EU-AMT-Base_2022-06-15_09.05.20/fulldata.gdx diff --git a/modules/33_CDR/portfolio/bounds.gms b/modules/33_CDR/portfolio/bounds.gms index d8334547e..7b3616660 100644 --- a/modules/33_CDR/portfolio/bounds.gms +++ b/modules/33_CDR/portfolio/bounds.gms @@ -25,13 +25,14 @@ v33_FEdemand.fx(t,regi,entyFe,entyFe2,te_all33)$(not te_used33(te_all33) and fe2 *' Bounds for DAC (cm_emiscen ne 1 avoids setting the boundary for the business-as-usual scenario) if (te_used33("dac") and cm_emiscen ne 1, - vm_cap.lo(t,regi,"dac",rlf)$(teNoTransform2rlf33("dac",rlf) AND (t.val ge max(2025,cm_startyear))) = 1e-7; + vm_cap.lo(t,regi,"dac",rlf)$(teNoTransform2rlf33("dac",rlf) AND (t.val ge max(2025,cm_startyear))) = sm_eps; ); *' Bounds for enhanced weathering if(te_used33("weathering"), v33_EW_onfield_tot.up(t,regi,rlf_cz33,rlf) = s33_step; v33_EW_onfield.fx(t,regi,rlf_cz33,rlf)$(rlf.val gt 10) = 0; !! rlfs that are not used + v33_EW_onfield_tot.fx(t,regi,rlf_cz33,rlf)$(rlf.val gt 10) = 0; !! rlfs that are not used v33_EW_onfield.fx(ttot,regi,rlf_cz33,rlf)$(ttot.val lt max(2025,cm_startyear)) = 0.0; v33_EW_onfield_tot.fx(ttot,regi,rlf_cz33,rlf)$(ttot.val lt max(2025,cm_startyear)) = 0.0; ); diff --git a/modules/33_CDR/portfolio/declarations.gms b/modules/33_CDR/portfolio/declarations.gms index fe5cde2aa..654863e50 100644 --- a/modules/33_CDR/portfolio/declarations.gms +++ b/modules/33_CDR/portfolio/declarations.gms @@ -34,7 +34,7 @@ v33_emi(ttot,all_regi,all_te) "negative emissions from CDR [GtC / equations q33_demFeCDR(ttot,all_regi,all_enty) "CDR demand balance for final energy" q33_emiCDR(ttot,all_regi) "calculates the (negative) emissions due to CDR technologies" -q33_H2bio_lim(ttot,all_regi,all_te) "limits H2 from bioenergy to FE - H2 demand from CDR, i.e. no H2 from bioenergy for DAC" +q33_H2bio_lim(ttot,all_regi) "limits H2 from bioenergy to FE - H2 demand from CDR, i.e. no H2 from bioenergy for DAC" q33_DAC_capconst(ttot,all_regi) "calculates amount of carbon captured by DAC" q33_DAC_FEdemand(ttot,all_regi,all_enty) "calculates final energy demand from no transformation technologies (e.g. enhanced weathering)" q33_DAC_ccsbal(ttot,all_regi,all_enty,all_enty,all_te) "calculates CCS emissions from CDR technologies" diff --git a/modules/33_CDR/portfolio/equations.gms b/modules/33_CDR/portfolio/equations.gms index e8140e77a..30955ab2b 100644 --- a/modules/33_CDR/portfolio/equations.gms +++ b/modules/33_CDR/portfolio/equations.gms @@ -15,10 +15,10 @@ ***--------------------------------------------------------------------------- q33_demFeCDR(t,regi,entyFe)$(entyFe2Sector(entyFe,"cdr")).. sum(fe2cdr(entyFe,entyFe2,te_used33), - v33_FEdemand(t,regi,entyFe,entyFe2,te_used33) + v33_FEdemand(t,regi,entyFe,entyFe2,te_used33) ) - =e= - sum((entySe,te)$se2fe(entySe,entyFe,te), + =e= + sum((entySe,te)$se2fe(entySe,entyFe,te), vm_demFeSector_afterTax(t,regi,entySe,entyFe,"cdr","ETS") ) ; @@ -36,8 +36,8 @@ q33_emiCDR(t,regi).. *' Limit the amount of H2 from biomass to the demand without CDR. *' It's a sustainability bound to prevent a large demand for biomass. ***--------------------------------------------------------------------------- -q33_H2bio_lim(t,regi,te)$pe2se("pebiolc","seh2",te).. - vm_prodSE(t,regi,"pebiolc","seh2",te) +q33_H2bio_lim(t,regi).. + sum(pe2se("pebiolc","seh2",te), vm_prodSE(t,regi,"pebiolc","seh2",te)) =l= vm_prodFe(t,regi,"seh2","feh2s","tdh2s") - sum(fe2cdr("feh2s",entyFe2,te_used33), v33_FEdemand(t,regi,"feh2s",entyFe2,te_used33)) ; @@ -54,6 +54,7 @@ q33_DAC_capconst(t,regi).. - sum(teNoTransform2rlf33("dac",rlf), vm_capFac(t,regi,"dac") * vm_cap(t,regi,"dac",rlf) ) + - (1 / pm_eta_conv(t,regi,"gash2c")) * fm_dataemiglob("pegas","seh2","gash2c","cco2") * sum(fe2cdr("fegas",entyFe2,te_used33), v33_FEdemand(t,regi,"fegas", entyFe2,te_used33)) ; ***--------------------------------------------------------------------------- @@ -66,7 +67,6 @@ q33_DAC_ccsbal(t,regi,ccs2te(ccsCo2(enty),enty2,te)).. sum(teCCS2rlf(te,rlf), vm_ccs_cdr(t,regi,enty,enty2,te,rlf)) =e= - v33_emi(t,regi,"dac") - + (1 / pm_eta_conv(t,regi,"gash2c")) * fm_dataemiglob("pegas","seh2","gash2c","cco2") * sum(fe2cdr("fegas",entyFe2,te_used33), v33_FEdemand(t,regi,"fegas", entyFe2,te_used33)) ; ***--------------------------------------------------------------------------- From 9fc8a28949c34b5408df5741d1d66c591ee49f12 Mon Sep 17 00:00:00 2001 From: Katarzyna Kowalczyk Date: Wed, 14 Jun 2023 11:03:26 +0200 Subject: [PATCH 08/10] Remove unnecessary input file generated by mrremind --- .../input/f33_maxProdGradeRegiWeathering.cs3r | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100755 modules/33_CDR/portfolio/input/f33_maxProdGradeRegiWeathering.cs3r diff --git a/modules/33_CDR/portfolio/input/f33_maxProdGradeRegiWeathering.cs3r b/modules/33_CDR/portfolio/input/f33_maxProdGradeRegiWeathering.cs3r deleted file mode 100755 index 4774b565c..000000000 --- a/modules/33_CDR/portfolio/input/f33_maxProdGradeRegiWeathering.cs3r +++ /dev/null @@ -1,17 +0,0 @@ -* description: This file includes max. potential for enhanced weathering in Gt of ground stone/a for different regions and warm (1) and temperate (2) grades. (=maxprod) -* unit: Gt of ground stone/a -* origin: calcOutput(type = "PotentialWeathering", file = "f33_maxProdGradeRegiWeathering.cs3r", round = 3) (madrat 2.20.10 | mrremind 0.151.2) -* creation date: Tue Dec 20 18:17:34 2022 -dummy,1,2 -LAM,22.155,2.641 -OAS,24.825,0.481 -SSA,4.909,0.557 -EUR,0.06,10.348 -NEU,0.105,0.866 -MEA,0.596,0.273 -REF,0,10.98 -CAZ,0.03,2.055 -CHA,5.955,9.735 -IND,17.85,0.165 -JPN,0.045,1.185 -USA,0.375,2.309 From a64b7c162b274e3b281ba0a1949375aac9a6dce1 Mon Sep 17 00:00:00 2001 From: Katarzyna Kowalczyk Date: Tue, 12 Sep 2023 13:39:06 +0200 Subject: [PATCH 09/10] Fix DAC fegas emissions --- modules/33_CDR/portfolio/equations.gms | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/33_CDR/portfolio/equations.gms b/modules/33_CDR/portfolio/equations.gms index 30955ab2b..38bae320d 100644 --- a/modules/33_CDR/portfolio/equations.gms +++ b/modules/33_CDR/portfolio/equations.gms @@ -54,7 +54,6 @@ q33_DAC_capconst(t,regi).. - sum(teNoTransform2rlf33("dac",rlf), vm_capFac(t,regi,"dac") * vm_cap(t,regi,"dac",rlf) ) - - (1 / pm_eta_conv(t,regi,"gash2c")) * fm_dataemiglob("pegas","seh2","gash2c","cco2") * sum(fe2cdr("fegas",entyFe2,te_used33), v33_FEdemand(t,regi,"fegas", entyFe2,te_used33)) ; ***--------------------------------------------------------------------------- @@ -67,6 +66,7 @@ q33_DAC_ccsbal(t,regi,ccs2te(ccsCo2(enty),enty2,te)).. sum(teCCS2rlf(te,rlf), vm_ccs_cdr(t,regi,enty,enty2,te,rlf)) =e= - v33_emi(t,regi,"dac") + + (1 / pm_eta_conv(t,regi,"gash2c")) * fm_dataemiglob("pegas","seh2","gash2c","cco2") * sum(fe2cdr("fegas",entyFe2,te_used33), v33_FEdemand(t,regi,"fegas", entyFe2,te_used33)) ; ***--------------------------------------------------------------------------- From 69f734ef85125e1a253e97fdfe2bba8ac1544525 Mon Sep 17 00:00:00 2001 From: Katarzyna Kowalczyk Date: Wed, 22 Nov 2023 11:21:26 +0100 Subject: [PATCH 10/10] Update documentation in 33_CDR --- modules/33_CDR/module.gms | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/33_CDR/module.gms b/modules/33_CDR/module.gms index 8fc0eebee..67ee65896 100644 --- a/modules/33_CDR/module.gms +++ b/modules/33_CDR/module.gms @@ -11,7 +11,7 @@ *' @description The 33_CDR module adds further options to remove CO2 from the atmosphere beyond BECCS *' and afforestation, which are calculated in the core. Currently, direct air carbon capture and storage (DACCS) *' and enhanced weathering of rocks (EW) are available, biochar and ocean alkalinization will follow soon. -*' All options can be switched on and off individually in main.gms with the switches called cm_33[option abbreviation]. +*' All options can be switched on and off individually via the switches called cm_33[option abbreviation]. *' The module calculates capacities, emissions (including captured carbon), energy demand & supply, costs, *' and limitations associated with the different options. *' @authors Jessica Strefler, Katarzyna Kowalczyk, Anne Merfort