Skip to content

Commit

Permalink
Merge branch 'develop' of github.com:remindmodel/remind into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
dklein-pik committed Dec 3, 2024
2 parents 44a0dfa + 5dcc437 commit 1e6809b
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 22 deletions.
2 changes: 1 addition & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,7 @@ abstract: REMIND (REgional Model of Investment and Development) is a numerical
technology, policy and climate constraints. It also accounts for regional trade
characteristics on goods, energy fuels, and emissions allowances. All greenhouse
gas emissions due to human activities are represented in the model.
version: "3.3.2.dev1058"
version: "3.3.2.dev1073"
date-released: 2024-12-02
repository-code: https://github.com/remindmodel/remind
keywords:
Expand Down
2 changes: 1 addition & 1 deletion config/default.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ cfg$validationmodel_name <- "VALIDATIONREMIND"

#### model version of the overall model (used for run statistics only).
# automatically generated for development versions, updated by hand for releases
cfg$model_version <- "3.3.2.dev1058"
cfg$model_version <- "3.3.2.dev1073"

#### settings ####
cfg$gms <- list()
Expand Down
23 changes: 18 additions & 5 deletions core/bounds.gms
Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,16 @@ vm_prodSe.fx(t,regi,"pecoal","seel","pco") = 0;
vm_demPe.fx(t,regi,"pewin","seel","wind") = 0;
vm_prodSe.fx(t,regi,"pewin","seel","wind") = 0;

*' Switch off grey hydrogen investments in gash2 technology from 2025. Our current seh2 hydrogen represents only additional (clean) hydrogen use cases to current ones
*' and there are no plans to expand grey hydrogen production for that.
*' Switch off coal-h2 hydrogen investments. Our current seh2 hydrogen represents only additional (clean) hydrogen use cases to current ones.
*' However, as we have too high H2 demand in 2025 and 2030 from the input data, we need to allow grey hydrogen for these time periods to meet the hydrogen demand
*' which cannot be fully met by incoming low-carbon H2 techologies. This should be removed once FE H2 industry input data is adapted.
*' It is allowed before 2020 to not make the model infeasible for low demands of hydrogen in that year.
vm_deltaCap.up(t,regi,"gash2",rlf)$((t.val ge 2025)) = 1e-8;
vm_deltaCap.fx(t,regi,"coalh2",rlf)$(t.val ge 2020) = 0;
vm_deltaCap.fx(t,regi,"gash2",rlf)$((t.val gt 2030)) = 0;
*' upper bound of 0.5 EJ/yr on grey hydrogen to prevent building too much grey H2 before 2020, distributed to regions via GDP share
vm_cap.up("2020",regi,"gash2","1") = 0.5 / 3.66 * 1e3 / 8760 * pm_gdp("2020",regi) / sum(regi2,pm_gdp("2020",regi2));


*' @stop

*** -----------------------------------------------------------------------------------------------------------------
Expand Down Expand Up @@ -298,10 +304,17 @@ loop(te$(sameas(te,"ngcc") OR sameas(te,"ngt") OR sameas(te,"gaschp")),
*' 2 GW(el) at least globally in 2025, about operational capacity as of 2023
vm_cap.lo("2025",regi,"elh2","1")= 2 * pm_eta_conv("2025",regi,"elh2")*pm_gdp("2025",regi)
/ sum(regi2,pm_gdp("2025",regi2)) * 1e-3;
*' 10 GW(el) at maximum globally in 2025
vm_cap.up("2025",regi,"elh2","1")= 10 * pm_eta_conv("2025",regi,"elh2")*pm_gdp("2025",regi)
*' 20 GW(el) at maximum globally in 2025 (be more generous to not overconstrain regions which scale-up fastest)
vm_cap.up("2025",regi,"elh2","1")= 20 * pm_eta_conv("2025",regi,"elh2")*pm_gdp("2025",regi)
/ sum(regi2,pm_gdp("2025",regi2)) * 1e-3;

*** bounds on biomass technologies
*' set upper bounds on biomass gasification for h2 production, which is not deployed as of 2025
*' set maximum of 0.1 EJ/yr production by 2030 for each technology
vm_cap.up("2030",regi,"bioh2","1")= 0.1 / 3.66 * 1e3 / 8760 * pm_gdp("2030",regi) / sum(regi2,pm_gdp("2030",regi2));
vm_cap.up("2030",regi,"bioh2c","1")= 0.1 / 3.66 * 1e3 / 8760 * pm_gdp("2030",regi) / sum(regi2,pm_gdp("2030",regi2));


*** fix capacities for advanced bio carbon capture technologies to zero in 2020 (i.e. no BECCS in 2020)
vm_cap.fx("2020",regi,te,rlf)$(teBio(te) AND teCCS(te)) = 0;

Expand Down
2 changes: 0 additions & 2 deletions core/datainput.gms
Original file line number Diff line number Diff line change
Expand Up @@ -1210,7 +1210,6 @@ $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes"
p_adj_seed_te(ttot,regi,"bfcc") = 0.05;
p_adj_seed_te(ttot,regi,"idrcc") = 0.05;
$endif.cm_subsec_model_steel
p_adj_seed_te(ttot,regi,"elh2") = 0.5;
p_adj_seed_te(ttot,regi,"MeOH") = 0.5;
p_adj_seed_te(ttot,regi,"h22ch4") = 0.5;

Expand Down Expand Up @@ -1251,7 +1250,6 @@ $endif.cm_subsec_model_steel
p_adj_coeff(ttot,regi,teGrid) = 0.3;
p_adj_coeff(ttot,regi,teStor) = 0.05;

p_adj_coeff(ttot,regi,"elh2") = 0.5;
p_adj_coeff(ttot,regi,"MeOH") = 0.5;
p_adj_coeff(ttot,regi,"h22ch4") = 0.5;

Expand Down
20 changes: 12 additions & 8 deletions core/equations.gms
Original file line number Diff line number Diff line change
Expand Up @@ -1068,18 +1068,18 @@ q_shfe(t,regi,entyFe,sector)$(pm_shfe_up(t,regi,entyFe,sector) OR pm_shfe_lo(t,r

q_shSeFe(t,regi,entySe)$(entySeBio(entySe) OR entySeSyn(entySe) OR entySeFos(entySe)).. !! share of energy carrier subtype in final energy demand of the aggregated carrier type (eg 'the share of bio-based FE liquids in all FE liquids')
v_shSeFe(t,regi,entySe)
* sum((sector,emiMkt)$sector2emiMkt(sector,emiMkt),
* sum((sector,emiMkt)$(sector2emiMkt(sector,emiMkt) AND (NOT(sameas(sector,"CDR")))),
sum(seAgg$seAgg2se(seAgg,entySe), !! determining the aggregate SE carrier type (liquids, gases, ...)
sum(entySe2$seAgg2se(seAgg,entySe2), !! summing over the bio/fos/syn variants of the chosen SE carrier"
sum(entyFe$(sefe(entySe2,entyFe) AND entyFe2Sector(entyFe,sector)),
vm_demFeSector_afterTax(t,regi,entySe2,entyFe,sector,emiMkt)))))
=e=
sum((sector,emiMkt)$sector2emiMkt(sector,emiMkt),
sum((sector,emiMkt)$(sector2emiMkt(sector,emiMkt) AND (NOT(sameas(sector,"CDR")))),
sum(entyFe$(sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector)),
vm_demFeSector_afterTax(t,regi,entySe,entyFe,sector,emiMkt)))
;

q_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt)$((entySeBio(entySe) OR entySeSyn(entySe) OR entySeFos(entySe)) AND (sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt)))..
q_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt)$((entySeBio(entySe) OR entySeSyn(entySe) OR entySeFos(entySe)) AND (sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt)) AND NOT(SAMEAS(sector,"CDR")))..
v_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt)
* sum(entySe2$sefe(entySe2,entyFe),
vm_demFeSector_afterTax(t,regi,entySe2,entyFe,sector,emiMkt))
Expand Down Expand Up @@ -1156,7 +1156,8 @@ q_penSeFeSectorShareDev(t,regi,entySe,entyFe,sector,emiMkt)$(
(t.val ge 2025) AND !!disable share incentives for historical years in buildings, industry and CDR as this should be handled by historical bounds
( sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt) ) AND !!only create the equation for valid cobinations of entySe, entyFe, sector and emiMkt
( (entySeBio(entySe) OR entySeSyn(entySe)) ) AND !!share incentives only need to be applied to n-1 secondary energy carriers
( NOT(sameas(sector,"build") AND (sameas(entyFE,"fesos"))) ) !!disable buildings solids share incentives
( NOT(sameas(sector,"build") AND (sameas(entyFE,"fesos"))) ) AND !!disable buildings solids share incentives
( NOT(sameas(sector,"CDR"))) !! disable share incentives for CDR sector as it leads to solver problems
)..
v_penSeFeSectorShare(t,regi,entySe,entyFe,sector,emiMkt)
=e=
Expand All @@ -1168,7 +1169,8 @@ q_penSeFeSectorShareDev(t,regi,entySe,entyFe,sector,emiMkt)$(
(t.val ge 2025) AND !!disable share incentives for historical years in buildings, industry and CDR as this should be handled by historical bounds
( sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt) ) AND !!only create the equation for valid cobinations of entySe, entyFe, sector and emiMkt
( (entySeBio(entySe) OR entySeSyn(entySe)) ) AND !!share incentives only need to be applied to n-1 secondary energy carriers
( NOT(sameas(sector,"build") AND (sameas(entyFE,"fesos"))) ) !!disable buildings solids share incentives
( NOT(sameas(sector,"build") AND (sameas(entyFE,"fesos"))) ) AND !!disable buildings solids share incentives
( NOT(sameas(sector,"CDR"))) !! disable share incentives for CDR sector as it leads to solver problems
)..
v_penSeFeSectorShare(t,regi,entySe,entyFe,sector,emiMkt)
=e=
Expand All @@ -1180,7 +1182,8 @@ q_penSeFeSectorShareDev(t,regi,entySe,entyFe,sector,emiMkt)$(
(t.val ge 2025) AND !!disable share incentives for historical years in buildings, industry and CDR as this should be handled by historical bounds
( sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt) ) AND !!only create the equation for valid cobinations of entySe, entyFe, sector and emiMkt
( (entySeBio(entySe) OR entySeSyn(entySe)) ) AND !!share incentives only need to be applied to n-1 secondary energy carriers
( NOT(sameas(sector,"build") AND (sameas(entyFE,"fesos"))) ) !!disable buildings solids share incentives
( NOT(sameas(sector,"build") AND (sameas(entyFE,"fesos"))) ) AND !!disable buildings solids share incentives
( NOT(sameas(sector,"CDR"))) !! disable share incentives for CDR sector as it leads to solver problems
)..
v_penSeFeSectorShare(t,regi,entySe,entyFe,sector,emiMkt)
=e=
Expand All @@ -1192,7 +1195,8 @@ q_minMaxPenSeFeSectorShareDev(t,regi,entySe,entyFe,sector,emiMkt)$(
(t.val ge 2025) AND !!disable share incentives for historical years in buildings, industry and CDR as this should be handled by historical bounds
( sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt) ) AND !!only create the equation for valid cobinations of entySe, entyFe, sector and emiMkt
( (entySeBio(entySe) OR entySeSyn(entySe)) ) AND !!share incentives only need to be applied to n-1 secondary energy carriers
( NOT(sameas(sector,"build") AND (sameas(entyFE,"fesos"))) ) !!disable buildings solids share incentives
( NOT(sameas(sector,"build") AND (sameas(entyFE,"fesos"))) ) AND !!disable buildings solids share incentives
( NOT(sameas(sector,"CDR"))) !! disable share incentives for CDR sector as it leads to solver problems
)..
(
v_shSeFe(t,regi,entySe)
Expand All @@ -1217,7 +1221,7 @@ $ifthen.penSeFeSectorShareDevCost not "%cm_seFeSectorShareDevMethod%" == "off"
q_penSeFeSectorShareDevCost(t,regi)..
vm_penSeFeSectorShareDevCost(t,regi)
=e=
sum((entySe,entyFe,sector,emiMkt)$( sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt) ),
sum((entySe,entyFe,sector,emiMkt)$( sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt) AND (NOT(sameas(sector,"CDR")))),
v_penSeFeSectorShare(t,regi,entySe,entyFe,sector,emiMkt)
) * c_seFeSectorShareDevScale
;
Expand Down
10 changes: 6 additions & 4 deletions core/preloop.gms
Original file line number Diff line number Diff line change
Expand Up @@ -178,9 +178,9 @@ Execute_Loadpoint 'input_ref' vm_capEarlyReti.l = vm_capEarlyReti.l;

*** initialize the carrier subtype shares in final energy demand such that the starting point for the model is "all sectors have the same bio/fos/syn shares for a given carrier type" when cm_seFeSectorShareDevMethod is enabled
p_shSeFe(t,regi,entySe)$((entySeBio(entySe) OR entySeSyn(entySe) OR entySeFos(entySe)) AND sum(seAgg$seAgg2se(seAgg,entySe), sum((sector,emiMkt)$sector2emiMkt(sector,emiMkt), sum(entySe2$seAgg2se(seAgg,entySe2), sum(entyFe$(sefe(entySe2,entyFe) AND entyFe2Sector(entyFe,sector)), vm_demFeSector.l(t,regi,entySe2,entyFe,sector,emiMkt))))) ) =
sum((sector,emiMkt)$sector2emiMkt(sector,emiMkt), sum(entyFe$(sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector)), vm_demFeSector.l(t,regi,entySe,entyFe,sector,emiMkt)))
sum((sector,emiMkt)$(sector2emiMkt(sector,emiMkt) AND (NOT(sameas(sector,"CDR")))), sum(entyFe$(sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector)), vm_demFeSector.l(t,regi,entySe,entyFe,sector,emiMkt)))
/
sum(seAgg$seAgg2se(seAgg,entySe), sum((sector,emiMkt)$sector2emiMkt(sector,emiMkt), sum(entySe2$seAgg2se(seAgg,entySe2), sum(entyFe$(sefe(entySe2,entyFe) AND entyFe2Sector(entyFe,sector)), vm_demFeSector.l(t,regi,entySe2,entyFe,sector,emiMkt)))));
sum(seAgg$seAgg2se(seAgg,entySe), sum((sector,emiMkt)$(sector2emiMkt(sector,emiMkt) AND (NOT(sameas(sector,"CDR")))), sum(entySe2$seAgg2se(seAgg,entySe2), sum(entyFe$(sefe(entySe2,entyFe) AND entyFe2Sector(entyFe,sector)), vm_demFeSector.l(t,regi,entySe2,entyFe,sector,emiMkt)))));
v_shSeFe.l(t,regi,entySe)$p_shSeFe(t,regi,entySe) = p_shSeFe(t,regi,entySe);

$ifthen.penSeFeSectorShareDevCost not "%cm_seFeSectorShareDevMethod%" == "off"
Expand All @@ -190,7 +190,8 @@ vm_demFeSector.l(t,regi,entySe,entyFe,sector,emiMkt)$(
( entySeBio(entySe) OR entySeSyn(entySe) OR entySeFos(entySe) ) AND !! only redefine vm_demFeSector for entySeBio, entySeSyn and entySeFos items
( sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt) ) AND !!only create the equation for valid cobinations of entySe, entyFe, sector and emiMkt
( (entySeBio(entySe) OR entySeSyn(entySe)) ) AND !!share incentives only need to be applied to n-1 secondary energy carriers
( NOT(sameas(sector,"build") AND (sameas(entyFE,"fesos"))) ) !!disable buildings solids share incentives
( NOT(sameas(sector,"build") AND (sameas(entyFE,"fesos"))) ) AND !!disable buildings solids share incentives
( NOT(sameas(sector,"CDR"))) !! disable share incentives for CDR sector as it leads to solver problems
) =
sum(entySe2$sefe(entySe2,entyFe), vm_demFeSector.l(t,regi,entySe2,entyFe,sector,emiMkt))
* p_shSeFe(t,regi,entySe);
Expand All @@ -202,6 +203,7 @@ p_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt)$((entySeBio(entySe) OR entySe
/
sum(entySe2$sefe(entySe2,entyFe), vm_demFeSector.l(t,regi,entySe2,entyFe,sector,emiMkt))
;
v_shSeFeSector.l(t,regi,entySe,entyFe,sector,emiMkt)$p_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt) = p_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt);
v_shSeFeSector.l(t,regi,entySe,entyFe,sector,emiMkt)$(p_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt) AND NOT(sameas(sector,"CDR"))) = p_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt);
v_shSeFeSector.l(t,regi,entySe,entyFe,sector,emiMkt)$(p_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt) AND (sameas(sector,"CDR"))) = 0;

*** EOF ./core/preloop.gms
2 changes: 1 addition & 1 deletion modules/33_CDR/portfolio/equations.gms
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ q33_EW_ShortTermBound(t, regi)$(t.val eq 2030)..
q33_EW_upscaling_rate(ttot,regi)$(ord(ttot) lt card(ttot) AND pm_ttot_val(ttot) gt 2030)..
sum((rlf_cz33, rlf), v33_EW_onfield(ttot,regi,rlf_cz33,rlf))
=l=
(1+p33_EW_upScalingLimit(ttot))**pm_dt(ttot) * sum((rlf_cz33, rlf), v33_EW_onfield(ttot-1,regi,rlf_cz33,rlf))
(1+p33_EW_upScalingLimit(ttot))**pm_dt(ttot) * sum((rlf_cz33, rlf), v33_EW_onfield(ttot-1,regi,rlf_cz33,rlf)) + p33_EW_shortTermEW_Limit(regi)
;

***---------------------------------------------------------------------------
Expand Down

0 comments on commit 1e6809b

Please sign in to comment.