Lower limit on all P2SE technologies capacities to 100 kW of all technologies and all time steps
loop(pe2se(enty,enty2,te) $ (
(not sameas(te,"biotr")) AND
(not sameas(te,"biodiesel")) AND
(not sameas(te,"bioeths")) AND
(not sameas(te,"gasftcrec")) AND
(not sameas(te,"gasftrec")) AND
(not sameas(te,"tnrs"))
),
vm_cap.lo(t,regi,te,"1")$(t.val gt 2026 AND t.val le 2070) = 1e-7;
if( (NOT teCCS(te)),
vm_deltaCap.lo(t,regi,te,"1")$(t.val gt 2026 AND t.val le 2070) = 1e-8;
);
);
Make sure that the model also sees the se2se technologies (seel <–> seh2)
loop(se2se(enty,enty2,te),
vm_cap.lo(t,regi,te,"1")$(t.val gt 2025) = 1e-7;
);
Lower bound of 10 kW on each of the different grades for renewables with multiple resource grades
loop(regi,
loop(teRe2rlfDetail(te,rlf),
if( (pm_dataren(regi,"maxprod",rlf,te) gt 0),
v_capDistr.lo(t,regi,te,rlf)$(t.val gt 2011) = 1e-8;
v_capDistr.lo("2015",regi,te,rlf) = 0.90 / max(1, p_aux_capacityFactorHistOverREMIND(regi,te)) * p_aux_capThisGrade(regi,te,rlf);
v_capDistr.lo("2020",regi,te,rlf) = 0.90 / max(1, p_aux_capacityFactorHistOverREMIND(regi,te)) * p_aux_capThisGrade(regi,te,rlf);
);
);
);
Make sure no grades > 9 are used. Only cosmetic to avoid entries in lst file
v_capDistr.fx(t,regi,te,rlf)$(rlf.val gt 9) = 0;
No battery storage in 2010:
vm_cap.up("2010",regi,teStor,"1") = 0;
completely switching off technologies that are not used in the current version of REMIND, although their parameters are declared:
loop(all_te $ (
sameas(all_te, "solhe") OR
sameas(all_te, "fnrs") OR
sameas(all_te, "pcc") OR
sameas(all_te, "pco") OR
sameas(all_te, "wind") OR
sameas(all_te, "storwind") OR
sameas(all_te, "gridwind")
),
vm_cap.fx(t,regi,all_te,rlf) = 0;
vm_deltaCap.fx(t,regi,all_te,rlf) = 0;
);
vm_demPe.fx(t,regi,"pecoal","seel","pcc") = 0;
vm_demPe.fx(t,regi,"pecoal","seel","pco") = 0;
vm_prodSe.fx(t,regi,"pecoal","seel","pcc") = 0;
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 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.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));
carbon capture bounds
if (cm_ccapturescen eq 2, !! no carbon capture at all
vm_cap.fx(t,regi_capturescen,"ngccc",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"ccsinje",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"gash2c",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"igccc",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"coalftcrec",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"coalh2c",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"biogasc",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"bioftcrec",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"bioh2c",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"bioigccc",rlf) = 0;
elseif (cm_ccapturescen eq 3), !! no bio carbon capture:
vm_cap.fx(t,regi_capturescen,"biogasc",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"bioftcrec",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"bioh2c",rlf) = 0;
vm_cap.fx(t,regi_capturescen,"bioigccc",rlf) = 0;
elseif (cm_ccapturescen eq 4), !! no carbon capture in the electricity sector
loop(emi2te(enty,"seel",te,"cco2")$( sum(regi_capturescen,pm_emifac("2020",regi_capturescen,enty,"seel",te,"cco2")) > 0 ),
loop(te2rlf(te,rlf),
vm_cap.fx(t,regi_capturescen,te,rlf) = 0;
);
);
);
switching technologies off that produce liquids from lignocellulosic biomass
if (c_bioliqscen eq 0, !! no bioliquids technologies
vm_deltaCap.up(t,regi,"bioftrec",rlf)$(t.val gt 2005) = 1.0e-6;
vm_deltaCap.up(t,regi,"bioftcrec",rlf)$(t.val gt 2005) = 1.0e-6;
vm_deltaCap.up(t,regi,"bioethl",rlf)$(t.val gt 2005) = 1.0e-6;
);
switching technologies off that produce hydrogen from lignocellulosic biomass
if (c_bioh2scen eq 0, !! no bioh2 technologies
vm_deltaCap.up(t,regi,"bioh2",rlf)$(t.val gt 2005) = 1.0e-6;
vm_deltaCap.up(t,regi,"bioh2c",rlf)$(t.val gt 2005) = 1.0e-6;
);
DK 20100929: default value (pm_ccsinjecrate= 0.5%) is consistent with Interview Gerling (BGR) (http://www.iz-klima.de/aktuelles/archiv/news-2010/mai/news-05052010-2/): 12 Gt storage potential in Germany, 50-75 Mt/a injection => 60 Mt/a => 60/12000=0.005
if ( c_ccsinjecratescen gt 0,
loop(regi,
vm_co2CCS.up(t,regi,"cco2","ico2","ccsinje","1") = pm_dataccs(regi,"quan","1") * pm_ccsinjecrate(regi);
);
);
Prescribe upper and lower limit for first generation biomass from 2030 on, so REMIND has some freedom before. After 2030 the production of 1st generation biofuels should be fixed (within a 90-100% range to avoid infeasibilities), since production values are exogenously harmonized with MAgPIE. Note: these bounds need to be updated since they are, in some regions, too strict to be compatible with historically installed capacities, such that the bounds in its current form can only be satisfied in combination with early retirement.
vm_fuExtr.up(t,regi,"pebios","5")$(t.val ge 2030) = p30_datapebio(regi,"pebios","5","maxprod",t);
vm_fuExtr.up(t,regi,"pebioil","5")$(t.val ge 2030) = p30_datapebio(regi,"pebioil","5","maxprod",t);
if(cm_1stgen_phaseout=0,
vm_fuExtr.lo(t,regi,"pebios","5")$(t.val ge 2030) = 0.9 * p30_datapebio(regi,"pebios","5","maxprod",t);
vm_fuExtr.lo(t,regi,"pebioil","5")$(t.val ge 2030) = 0.9 * p30_datapebio(regi,"pebioil","5","maxprod",t);
else
vm_fuExtr.lo(t,regi,"pebios","5")$(t.val eq 2030) = 0.9 * p30_datapebio(regi,"pebios","5","maxprod",t);
vm_fuExtr.lo(t,regi,"pebioil","5")$(t.val eq 2030) = 0.9 * p30_datapebio(regi,"pebioil","5","maxprod",t);
);
p30_maxprod_residue(ttot,regi) = max(p30_datapebio(regi,"pebiolc","2","maxprod",ttot), sum(teBioPebiolc, pm_pedem_res(ttot,regi,teBioPebiolc)));
vm_fuExtr.up(t,regi,"pebiolc","2") = p30_maxprod_residue(t,regi)*1.0001;
$ifthen.bioenergymaxscen not %cm_maxProdBiolc% == "off"
p30_max_pebiolc_path_glob(t) = %cm_maxProdBiolc% * sm_EJ_2_TWa;
p30_max_pebiolc_path_glob(t) = p30_max_pebiolc_path_glob(t) - sum(regi, p30_maxprod_residue(t,regi));
display p30_max_pebiolc_path_glob;
Calclate regional bounds with equal marginal costs from global bound
loop(ttot$(ttot.val ge cm_startyear),
p30_max_pebiolc_dummy = 0;
p30_pebiolc_price_dummy = 0.01;
while(p30_max_pebiolc_dummy < p30_max_pebiolc_path_glob(ttot),
loop(regi$(NOT sameas(regi,'JPN')),
if( p30_pebiolc_price_dummy > (i30_bioen_price_a(ttot,regi)) * 1.01,
p30_fuelex_dummy(regi) = (p30_pebiolc_price_dummy - i30_bioen_price_a(ttot,regi)) / i30_bioen_price_b(ttot,regi);
else
p30_fuelex_dummy(regi) = 0;
);
);
p30_max_pebiolc_dummy = sum(regi, p30_fuelex_dummy(regi));
p30_pebiolc_price_dummy = p30_pebiolc_price_dummy + 0.001;
);
p30_max_pebiolc_path(regi,ttot) = p30_fuelex_dummy(regi);
);
display p30_max_pebiolc_path;
According to EMF guidelines, the upper bound on total (residues+purpose) global biomass production does not include traditional biomass use. Since the demand for traditional biomass is already supplied by the residue grade we expand the purpose-grown grade by the demand for traditional biomass.
vm_fuExtr.up(t,regi,"pebiolc","1") = p30_max_pebiolc_path(regi,t) + pm_pedem_res(t,regi,"biotr");
$endif.bioenergymaxscen
if (cm_phaseoutBiolc eq 1,
loop(t$(t.val ge max(2025, cm_startyear)),
loop(regi,
loop(te(teBioPebiolc),
loop(rlf,
if(vm_deltaCap.up(t,regi,te,rlf) eq INF,
vm_deltaCap.up(t,regi,te,rlf) = 1e-5;
);
);
);
);
);
);
These bounds are only active if in 47_regipol module the realization is regiCarbonPrice. They mostly refer to region-specific fixings of the model in European subregions to better represent historic or near-term values or specific policies of regions (e.g. national coal phase-out plans etc.).
Power Sector
$ifThen.tech_bounds_2025 "%cm_tech_bounds_2025%" == "on"
This limits wind and solar PV capacity additions for 2025 in light of recent slow developments as of 2023. Upper bound is double the historic maximum capacity addition in 2011-2020. In addition: Limit solar PV capacity to 120 GW in 2025 (2023-2027 average) given that we are at only 76 GW PV in 2023
loop(regi$(sameAs(regi,"DEU")),
vm_deltaCap.up("2025",regi,"windon","1")=2*smax(tall$(tall.val ge 2011 and tall.val le 2020), pm_delta_histCap(tall,regi,"windon"));
vm_deltaCap.up("2025",regi,"spv","1")=2*smax(tall$(tall.val ge 2011 and tall.val le 2020), pm_delta_histCap(tall,regi,"spv"));
vm_cap.up("2025",regi,"spv","1")=0.12;
);
$endIf.tech_bounds_2025
These bounds account for historic gas power development. TODO: Historical fixings should be done in the core the via input data from mrremind, this still needs to be moved
v47_prodSEtotal.up("2020",regi,"pegas","seel")$(sameAs(regi,"DEU"))= 0.36*sm_EJ_2_TWa;
$ifThen.tech_bounds_2025 "%cm_tech_bounds_2025%" == "on"
v47_prodSEtotal.up("2025",regi,"pegas","seel")$(sameAs(regi,"DEU"))= 0.4*sm_EJ_2_TWa;
$endIf.tech_bounds_2025
These bounds account for historic coal power development.
vm_cap.up("2020",regi,"pc","1")$((cm_startyear le 2020) and (sameas(regi,"DEU"))) = 38.028/1000;
This limits early retirement of coal power in Germany in 2020s to avoid extremly fast phase-out.
vm_capEarlyReti.up('2025',regi,'pc')$(sameAs(regi,"DEU")) = 0.65;
This aligns 2020 chp capcities for Germany with historic data (AGEB) most of district heating is provided by CHP plants. coal share of chp heat output to be between 20-25% of total district heating demand gas share of chp heat output to be between 50-55% of total district heating demand bio share of chp heat output to be between 15-25% of total district heating demand TODO: Historical fixings should be done in the core via input data from mrremind, this still needs to be moved
loop(regi$(sameAs(regi,"DEU")),
loop(t$(t.val eq 2020),
vm_cap.lo(t,regi,"coalchp","1")= 0.2
* (pm_cesdata(t,regi,"feheb","quantity")
+ pm_cesdata(t,regi,"feheb","quantity"))
/ pm_eta_conv(t,regi,"tdhes")
/ pm_prodCouple(regi,"pecoal","seel","coalchp","sehe")
/ pm_cf(t,regi,"coalchp");
vm_cap.up(t,regi,"coalchp","1")= 0.25
* (pm_cesdata(t,regi,"feheb","quantity")
+ pm_cesdata(t,regi,"feheb","quantity"))
/ pm_eta_conv(t,regi,"tdhes")
/ pm_prodCouple(regi,"pecoal","seel","coalchp","sehe")
/ pm_cf(t,regi,"coalchp");
vm_cap.lo(t,regi,"gaschp","1")= 0.5
* (pm_cesdata(t,regi,"feheb","quantity")
+ pm_cesdata(t,regi,"feheb","quantity"))
/ pm_eta_conv(t,regi,"tdhes")
/ pm_prodCouple(regi,"pegas","seel","gaschp","sehe")
/ pm_cf(t,regi,"gaschp");
vm_cap.up(t,regi,"gaschp","1")= 0.55
* (pm_cesdata(t,regi,"feheb","quantity")
+ pm_cesdata(t,regi,"feheb","quantity"))
/ pm_eta_conv(t,regi,"tdhes")
/ pm_prodCouple(regi,"pegas","seel","gaschp","sehe")
/ pm_cf(t,regi,"gaschp");
vm_cap.lo(t,regi,"biochp","1")= 0.15
* (pm_cesdata(t,regi,"feheb","quantity")
+ pm_cesdata(t,regi,"feheb","quantity"))
/ pm_eta_conv(t,regi,"tdhes")
/ pm_prodCouple(regi,"pebiolc","seel","biochp","sehe")
/ pm_cf(t,regi,"biochp");
vm_cap.up(t,regi,"biochp","1")= 0.25
* (pm_cesdata(t,regi,"feheb","quantity")
+ pm_cesdata(t,regi,"feheb","quantity"))
/ pm_eta_conv(t,regi,"tdhes")
/ pm_prodCouple(regi,"pebiolc","seel","biochp","sehe")
/ pm_cf(t,regi,"biochp");
);
);
Carbon Management
only start industry carbon capture in Germany by 2030 as status of projects for 2025 unclear, see IEA CCUS database https://www.iea.org/data-and-statistics/data-tools/ccus-projects-explorer
vm_emiIndCCS.up(t,regi,emiInd37)$(sameAs(regi,"DEU") AND t.val lt 2030)=0;
If c_noPeFosCCDeu = 1 chosen, fossil CCS for energy system technologies (pe2se) is forbidden.
vm_emiTeDetail.up(t,regi,peFos,entySe,teFosCCS,"cco2")$((sameas(regi,"DEU")) AND (cm_noPeFosCCDeu = 1)) = 1e-4;
If cm_deuCDRmax >= 0, limit German CDR amount (Energy system BECCS, DACCS, EW and negative Landuse Change emissions) to cm_deuCDRmax. Convert cm_deuCDRmax from MtCO2/yr to model unit of GtC/yr.
vm_emiCdrAll.up(t,regi)$((cm_deuCDRmax ge 0) AND (sameas(regi,"DEU"))) = cm_deuCDRmax / 1000 / sm_c_2_co2;
Bounds for German Energy Security Scenario (activated by switches)
Background: The energy security scenario used for the Ariadne Report on
energy sovereignity in 2022 assumes that there is a continued gas crisis
after 2022/23 in Germany with higher gas prices (see cm_EnSecScen_price)
or limits to gas consumption (see cm_EnSecScen_limit switch) in the
medium-term. Moreover, this scenario is characterized by a more
pronounced role of coal power in the short-term as well as a greater
role of industrial relocation and behavioral and energy efficiency
transformations in demand sectors. Bounds in this section refer to
energy supply technologies only.
Policy in energy security scenario for Germany: 5GW(el) electrolysis
installed by 2030 in Germany at minimum.
$ifThen.ensec "%cm_Ger_Pol%" == "ensec"
vm_cap.lo("2030",regi,"elh2","1")$(sameAs(regi,"DEU"))=5*pm_eta_conv("2030",regi,"elh2")/1000;
$endIf.ensec
Policy in energy security scenario for Germany: increase coal power capacity factors and decrease gas power capacity factors until 2030 to account for short-term gas to coal switch under the assumption of a continued gas crisis.
$ifThen.ensec "%cm_Ger_Pol%" == "ensec"
vm_capFac.up("2025",regi,"pc")$sameas(regi,"DEU") = 0.6;
vm_capFac.up("2030",regi,"pc")$sameas(regi,"DEU") = 0.6;
vm_capFac.fx("2025",regi,"ngcc")$sameas(regi,"DEU") = 0.2;
vm_capFac.lo("2030",regi,"ngcc")$sameas(regi,"DEU") = 0.2;
$endIf.ensec
Policy in energy security scenario for Germany activated by cm_EnSecScen_limit: Limit PE gas demand from 2025 on to cm_EnSecScen_limit (in EJ/yr) gas imports + domestic gas in Germany.
if (cm_EnSecScen_limit gt 0,
vm_prodPe.up(t,regi,"pegas")$((t.val ge 2025) AND (sameas(regi,"DEU"))) = cm_EnSecScen_limit/pm_conv_TWa_EJ;
);
This account for historic coal power developments. Bounds for UKI region: 2019 capacity = 7TWh, capacity factor = 0.6 -> ~1.35GW -> Assuming no new capacity -> average 2018-2022 = ~ 1GW
vm_cap.up("2020",regi,"pc","1")$((cm_startyear le 2020) and (sameas(regi,"UKI"))) = 1.3/1000;
This accounts for different nuclear power policies that can be chosen for the EU subregions. Basic nuclear policies:
$IFTHEN.NucRegiPol not "%cm_NucRegiPol%" == "off"
Germany Nuclear phase-out
vm_cap.up(t,regi,"tnrs","1")$((t.val ge 2025) and (t.val ge cm_startyear) and (sameas(regi,"DEU"))) = 1E-6;
ESC -> no new Nuclear capacity (Italy had a plebiscite for this and Greece should not have any new capacity)
vm_deltaCap.up(t,regi,"tnrs","1")$((t.val ge 2020) and (t.val ge cm_startyear) and (sameas(regi,"ESC"))) = 0;
$ENDIF.NucRegiPol
Extended nuclear policies:
$IFTHEN.proNucRegiPol not "%cm_proNucRegiPol%" == "off"
Pro nuclear countries tend to keep nuclear production by political decision assuming France would keep at least 80% of its 2015 nuclear capacity in the future.
vm_cap.lo(t,regi,"tnrs","1")$((t.val ge cm_startyear) and (sameas(regi,"FRA"))) = 0.8*pm_histCap("2015",regi,"tnrs");
Assuming Czech Republic would keep at least its 2015 nuclear capacity in the future (CZE corresponds to 61.8% of nuclear capacity of ECE in 2015)
vm_cap.lo(t,regi,"tnrs","1")$((t.val ge cm_startyear) and (sameas(regi,"ECE"))) = 0.618*pm_histCap("2015",regi,"tnrs");
Assuming Finland would keep at least its 2015 nuclear capacity in the future (FIN corresponds to 21.6% of nuclear capacity of ENC in 2015)
vm_cap.lo(t,regi,"tnrs","1")$((t.val ge cm_startyear) and (sameas(regi,"ENC"))) = 0.216*pm_histCap("2015",regi,"tnrs");
Assuming Romania would keep at least its 2015 nuclear capacity in the future (ROU corresponds to 22.1% of nuclear capacity of ECS in 2015)
vm_cap.lo(t,regi,"tnrs","1")$((t.val ge cm_startyear) and (sameas(regi,"ECS"))) = 0.221*pm_histCap("2015",regi,"tnrs");
$ENDIF.proNucRegiPol
This accounts for different CCS policies that can be chosen for the EU subregions.
$IFTHEN.CCSinvestment not "%cm_CCSRegiPol%" == "off"
earliest investment in Europe, with one timestep split between countries currently exploring - Norway (NEN), Netherlands (EWN) and UK (UKI) - and others
vm_deltaCap.up(t,regi,teCCS,rlf)$( (t.val lt %cm_CCSRegiPol%) AND (sameas(regi,"NEN") OR sameas(regi,"EWN") OR sameas(regi,"UKI"))) = 1e-6;
vm_deltaCap.up(t,regi,teCCS,rlf)$( (t.val le %cm_CCSRegiPol%) AND (regi_group("EUR_regi",regi)) AND (NOT(sameas(regi,"NEN") OR sameas(regi,"EWN") OR sameas(regi,"UKI")))) = 1e-6;
$ENDIF.CCSinvestment
This accounts for different coal power phase-out policies that can be chosen for the EU subregions. It is based on Beyond Coal 2021 (https://beyond-coal.eu/2021/03/03/overview-of-national-phase-out-announcements-march-2021/), whith adjustment for possible delay in Italy.
$IFTHEN.CoalRegiPol not "%cm_CoalRegiPol%" == "off"
vm_cap.up(t,regi,te,"1")$((t.val ge 2025) and (t.val ge cm_startyear) and (sameas(te,"igcc") or sameas(te,"pc") or sameas(te,"coalchp")) and (sameas(regi,"ESW") or sameas(regi,"FRA") )) = 1E-6;
vm_cap.up(t,regi,te,"1")$((t.val ge 2030) and (t.val ge cm_startyear) and (sameas(te,"igcc") or sameas(te,"pc") or sameas(te,"coalchp")) and (sameas(regi,"ENC") or sameas(regi,"ESC") or sameas(regi,"EWN") )) = 1E-6;
DEU coal-power capacity phase-out, upper bounds following the Kohleausstiegsgesetz from 2020. https://www.bmuv.de/themen/klimaschutz-anpassung/klimaschutz/nationale-klimapolitik/fragen-und-antworten-zum-kohleausstieg-in-deutschland
vm_capTotal.up("2025",regi,"pecoal","seel")$(sameas(regi,"DEU"))=25/1000;
vm_capTotal.up("2030",regi,"pecoal","seel")$(sameas(regi,"DEU"))=17/1000;
vm_capTotal.up("2035",regi,"pecoal","seel")$(sameas(regi,"DEU"))=6/1000;
vm_capTotal.up("2040",regi,"pecoal","seel")$(sameas(regi,"DEU"))=1E-6;
UK coal capacity phase-out
vm_cap.up(t,regi,te,"1")$((t.val ge 2025) and (t.val ge cm_startyear) and (sameas(te,"igcc") or sameas(te,"pc") or sameas(te,"coalchp")) and (sameas(regi,"UKI"))) = 1E-6;
$ENDIF.CoalRegiPol
Represent region-specific renewable power policies with minimum VRE shares over time.
$ifthen.cm_VREminShare not "%cm_VREminShare%" == "off"
loop((ttot,ext_regi)$(p47_VREminShare(ttot,ext_regi)),
loop(regi$(regi_group(ext_regi,regi)),
v47_VREshare.lo(t,regi)$(t.val ge ttot.val) = p47_VREminShare(t,ext_regi);
)
)
;
$endIf.cm_VREminShare
This bounds fixes CES function quantity trajectories to exogenous data if cm_exogDem_scen is activated. It is used, for example, to hit specific, steel and cement production trajectories in policy scenarios for project-specific scenarios. It is not necessarily a policy but a different (exogenuous) assumption about future production trajectories than what REMIND produces endogenuously.
$ifthen.exogDemScen NOT "%cm_exogDem_scen%" == "off"
vm_cesIO.fx(t,regi,in)$(pm_exogDemScen(t,regi,"%cm_exogDem_scen%",in))=pm_exogDemScen(t,regi,"%cm_exogDem_scen%",in);
$endif.exogDemScen
This bound avoids hydrogen production from gas in the European region (unlikely to happen after recent gas trade changes)
vm_deltaCap.up(t,regi,"gasftrec",rlf)$((t.val gt 2005) and (regi_group("EUR_regi",regi))) = 0;
vm_deltaCap.up(t,regi,"gasftcrec",rlf)$((t.val gt 2005) and (regi_group("EUR_regi",regi))) = 0;
Interface plot missing!