Skip to content
Snippets Groups Projects
Unverified Commit a5d4820f authored by Lavinia Baumstark's avatar Lavinia Baumstark Committed by GitHub
Browse files

Merge pull request #67 from MariannaR/tobemerged

Request to merge the new transport module EDGE-T
parents a3eca5b2 3a573f84
No related branches found
No related tags found
No related merge requests found
Showing
with 385 additions and 8049 deletions
......@@ -8,3 +8,8 @@ name,type,reason
pm_esCapCost,input,questionnaire
pm_fe2es,input,questionnaire
pm_shFeCes,input,questionnaire
vm_prodSe,input,questionnaire
vm_prodFe,input,questionnaire
vm_demFeForEs,input,questionnaire
pm_cf,input,questionnaire
cm_startyear,input,questionnaire
......@@ -8,42 +8,65 @@
Parameter
p35_cesdata_sigma(all_in) "substitution elasticities"
/
entrp 1.3
entrp_pass 1.1
entrp_frgt 1.1
entrp 0.8
entrp_pass 1.3
entrp_frgt 1.3
/
;
pm_cesdata_sigma(ttot,in)$p35_cesdata_sigma(in) = p35_cesdata_sigma(in);
parameters
p35_esCapCost(tall,all_regi,all_in) "???"
p35_esCapCost(tall,all_regi,all_GDPscen,EDGE_scenario_all,all_teEs) "Capital costs for the transport system [$/pkm or $/tkm]"
/
$ondelim
$include "./modules/35_transport/edge_esm/input/esCapCost.cs4r"
$offdelim
/
p35_fe2es(tall,all_regi,all_teEs) "???"
p35_fe2es(tall,all_regi,all_GDPscen,EDGE_scenario_all,all_teEs) "Aggregate energy efficiency of transport fuel technologies [trn pkm/Twa or trn tkm/Twa]"
/
$ondelim
$include "./modules/35_transport/edge_esm/input/fe2es.cs4r"
$offdelim
/
p35_shFeCes(tall,all_regi,all_enty,all_in) "???"
p35_demByTech(tall,all_regi,all_GDPscen,EDGE_scenario_all,all_enty,all_in,all_teEs) "Aggregate FE Demand per transport fuel technology [TWa]"
/
$ondelim
$include "./modules/35_transport/edge_esm/input/shFeCes.cs4r"
$include "./modules/35_transport/edge_esm/input/fe_demand_tech.cs4r"
$offdelim
/
* p35_demLimit(tall,all_regi,all_GDPscen,EDGE_scenario_all,all_in)
* /
* $ondelim
* $include "./modules/35_transport/edge_esm/input/dem_smart_Elpush.csv"
* $offdelim
* /
p35_shFeCes(tall,all_regi,all_GDPscen,EDGE_scenario_all,all_enty,all_in,all_teEs) "Shares of "
;
*** starting points:
pm_esCapCost(t,regi,ppfen_dyn35) = p35_esCapCost(t,regi,ppfen_dyn35);
*** overwrite starting points for policy runs for ES
if (cm_startyear gt 2005,
Execute_Loadpoint 'input_ref' p35_demByTech=p35_demByTech, p35_fe2es=p35_fe2es;
p35_esCapCost(ttot,regi,"%cm_GDPscen%",EDGE_scenario,teEs_dyn35) = 0;
);
*** calculate shares for fuels by CES node
p35_shFeCes(ttot,regi,"%cm_GDPscen%",EDGE_scenario,entyFe,ppfen_dyn35,teEs_dyn35)$fe2ces_dyn35(entyFe,ppfen_dyn35,teEs_dyn35) =
p35_demByTech(ttot,regi,"%cm_GDPscen%",EDGE_scenario,entyFe,ppfen_dyn35,teEs_dyn35) / sum((entyFe2,teEs_dyn35_2)$fe2ces_dyn35(entyFe2,ppfen_dyn35,teEs_dyn35_2),p35_demByTech(ttot,regi,"%cm_GDPscen%",EDGE_scenario,entyFe2,ppfen_dyn35,teEs_dyn35_2));
*** set starting points
pm_esCapCost(ttot,regi,teEs_dyn35) = p35_esCapCost(ttot,regi,"%cm_GDPScen%","%cm_EDGEtr_scen%",teEs_dyn35);
pm_fe2es(t,regi,teEs_dyn35) = p35_fe2es(t,regi,teEs_dyn35);
pm_fe2es(ttot,regi,teEs_dyn35) = p35_fe2es(ttot,regi,"%cm_GDPScen%","%cm_EDGEtr_scen%",teEs_dyn35);
pm_shFeCes(t,regi,entyFe,ppfen_dyn35)$p35_shFeCes(t,regi,entyFe,ppfen_dyn35) = p35_shFeCes(t,regi,entyFe,ppfen_dyn35);
pm_shFeCes(ttot,regi,entyFe,ppfen_dyn35,teEs_dyn35)$fe2ces_dyn35(entyFe,ppfen_dyn35,teEs_dyn35) = p35_shFeCes(ttot,regi,"%cm_GDPScen%","%cm_EDGEtr_scen%",entyFe,ppfen_dyn35,teEs_dyn35);
*** workaround for nat. gas for transport -> should go to mmoinput at some point
pm_cf(ttot,regi,"tdfosgat") = 0.65;
pm_cf(ttot,regi,"tdbiogat") = 0.65;
*** EOF ./modules/35_transport/edge_esm/datainput.gms
......@@ -5,4 +5,20 @@
*** | REMIND License Exception, version 1.0 (see LICENSE file).
*** | Contact: remind@pik-potsdam.de
*** SOF ./modules/35_transport/edge_esm/declarations.gms
Parameters
pm_bunker_share_in_nonldv_fe(tall,all_regi) "Share of bunkers in non-LDV transport - fedie"
;
Positive variables
v35_shBioFe(ttot,all_regi) "Share of biofuels in all final energies used for transportation. Value between 0 and 1."
v35_shSynSe(ttot,all_regi) "Share of synthetic liquids in all fossil liquids. Value between 0 and 1."
;
Equations
q35_shBioFe(ttot,all_regi) "Define the share of biofuels in all final energies for transportation."
$ifthen.ccu %CCU% == "on"
q35_shSynSe(ttot,all_regi) "Define share of synthetic liquids in all fossil liquids."
$endif.ccu
;
*** EOF ./modules/35_transport/edge_esm/declarations.gms
......@@ -5,4 +5,24 @@
*** | REMIND License Exception, version 1.0 (see LICENSE file).
*** | Contact: remind@pik-potsdam.de
*** SOF ./modules/35_transport/edge_esm/equations.gms
*' Adjust the shares of biofuels in transport liquids.
q35_shBioFe(t,regi)..
sum(se2fe(entySe,fe_transport_liquids_dyn35,te), vm_prodFe(t,regi,entySe,fe_transport_liquids_dyn35,te) )
* v35_shBioFe(t,regi)
=e=
sum(se2fe("seliqbio",fe_transport_liquids_dyn35,te), vm_prodFe(t,regi,se_with_bio_dyn35,fe_transport_liquids_dyn35,te) )
;
*' Adjust the shares of synfuels in transport liquids.
*' This equation is only effective when CCU is switched on.
$ifthen.ccu %CCU% == "on"
q35_shSynSe(t,regi)..
sum(se2fe(entySe,fe_transport_liquids_dyn35,te), vm_prodFe(t,regi,entySe,fe_transport_liquids_dyn35,te) ) * v35_shSynSe(t,regi)
=e=
vm_prodSe(t,regi,"seh2","seliqfos","MeOH")
;
$endif.ccu
*** EOF ./modules/35_transport/edge_esm/equations.gms
# | (C) 2006-2019 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
require(data.table)
require(gdx)
require(gdxdt)
inputgdx <- "../../../../config/input.gdx"
## years
ttot <- readgdx(inputgdx, "ttot")[[1]]
## regions
regi <- readgdx(inputgdx, "regi")[[1]]
## ces nodes
ppfen <- c("entrp_pass_sm", "entrp_pass_lo", "entrp_frgt_sm", "entrp_frgt_lo")
## technologies
tees <- c(
"te_espet_pass_sm",
"te_esdie_pass_sm",
"te_eselt_pass_sm",
"te_esdie_pass_lo",
"te_esdie_frgt_sm",
"te_eselt_frgt_sm",
"te_esdie_frgt_lo")
## fes
enty <- c("fedie", "fepet", "feelt")
## prices
prices <- CJ(tall=ttot,all_regi=regi,all_in=ppfen)
prices[, value := 0]
## efficiencies
effcs <- CJ(tall=ttot,all_regi=regi,all_tees=tees)
effcs[, value := 1]
## shares
fedem <- readgdx(inputgdx, "p29_fedemand")
## uetypes
ues <- c("ueHDVt", "ueLDVt", "ueelTt")
scen <- "gdp_SSP2"
fedem <- fedem[all_in %in% ues & all_GDPscen == scen]
techmap <- data.table(
all_in=c("ueelTt", "ueLDVt", "ueHDVt", "ueHDVt", "ueHDVt"),
ces=c("entrp_pass_sm", "entrp_pass_sm", "entrp_pass_lo", "entrp_frgt_sm", "entrp_frgt_lo"))
## apply map
fedem <- techmap[fedem, on="all_in", allow.cartesian=T]
fedem[, ces_share := value/sum(value), by=.(tall, all_regi, ces)]
femap = data.table(all_enty=enty, all_in=ues)
out <- femap[fedem, on="all_in"][, .(tall, all_regi, all_enty, all_in=ces, value=ces_share)]
## csv for initialCap
fwrite(prices, "esCapCost.cs4r", col.names = F)
fwrite(effcs, "fe2es.cs4r", col.names = F)
fwrite(out, "shFeCes.cs4r", col.names = F)
## write gdxes
## writegdx.parameter("esCapCost.gdx", prices, "p35_esCapCost", "value", c("tall", "all_regi", "all_in"))
## writegdx.parameter("fe2es.gdx", effcs, "p35_fe2es", "value", c("tall", "all_regi", "all_tees"))
## writegdx.parameter("shFeCes.gdx", out, "p35_shFeCes", "value", c("tall", "all_regi", "all_enty", "all_in"))
This diff is collapsed.
This diff is collapsed.
SW.cs4r
UCD_NEC_iso.cs4r
esCapCost.cs4r
fe2es.cs4r
fe_demand_tech.cs4r
harmonized_intensities.cs4r
inconv.cs4r
logit_exponent.cs4r
price_nonmot.cs4r
value_time.cs4r
This diff is collapsed.
all_enty;teEs;all_in;CES_node;EDGE_top
fepet;te_espet_pass_sm;entrp_pass_sm;fepet_p_sm;trn_pass
fedie;te_esdie_pass_sm;entrp_pass_sm;fedie_p_sm;trn_pass
feelt;te_eselt_pass_sm;entrp_pass_sm;feelt_p_sm;trn_pass
fedie;te_esdie_pass_lo;entrp_pass_lo;fedie_p_lo;trn_aviation_intl
fedie;te_esdie_frgt_sm;entrp_frgt_sm;fedie_f_sm;trn_freight
feelt;te_eselt_frgt_sm;entrp_frgt_sm;feelt_f_sm;trn_freight
fedie;te_esdie_frgt_lo;entrp_frgt_lo;fedie_f_lo;trn_shipping_intl
feh2t;te_esh2t_pass_sm;entrp_pass_sm;feh2t_p_sm;trn_pass
fegat;te_esgat_pass_sm;entrp_pass_sm;fegat_p_sm;trn_pass
fegat;te_esgat_frgt_sm;entrp_frgt_sm;fegat_f_sm;trn_freight
feh2t;te_esh2t_frgt_sm;entrp_frgt_sm;feh2t_f_sm;trn_freight
This diff is collapsed.
......@@ -7,4 +7,3 @@ pm_pop,input,questionnaire
pm_gdp,input,questionnaire
pm_vintage_in,input,questionnaire
vm_shUePeT,input,questionnaire
pm_bunker_share_in_nonldv_fe,input,questionnaire
*** SOF ./modules/35_transport/edge_esm/postsolve.gms
pm_bunker_share_in_nonldv_fe(t,regi) = (
vm_demFeForEs.l(t,regi,"fedie","esdie_frgt_lo","te_esdie_frgt_lo") +
vm_demFeForEs.l(t,regi,"fedie","esdie_pass_lo","te_esdie_pass_lo")) /
sum(fe2es_dyn35("fedie",esty,teEs), vm_demFeForEs.l(t,regi,"fedie",esty,teEs));
display pm_bunker_share_in_nonldv_fe;
*** EOF ./modules/35_transport/edge_esm/postsolve.gms
......@@ -5,5 +5,4 @@
*** | REMIND License Exception, version 1.0 (see LICENSE file).
*** | Contact: remind@pik-potsdam.de
*** SOF ./modules/35_transport/edge_esm/preloop.gms
*** EOF ./modules/35_transport/edge_esm/preloop.gms
......@@ -5,15 +5,19 @@
*** | REMIND License Exception, version 1.0 (see LICENSE file).
*** | Contact: remind@pik-potsdam.de
*** SOF ./modules/35_transport/edge_esm/presolve.gms
Execute "Rscript EDGE_sharecalculation.R"
$ifthen.calibrate %CES_parameters% == "load"
if( ((ord(iteration) ge 5) and ( mod(ord(iteration), 5) eq 0)),
Execute "Rscript EDGE_transport.R";
Execute_Loadpoint 'p35_esCapCost' p35_esCapCost;
pm_esCapCost(t,regi,ppfen_dyn35) = p35_esCapCost(t,regi,ppfen_dyn35);
Execute_Loadpoint 'p35_esCapCost' p35_esCapCost;
pm_esCapCost(t,regi,teEs_dyn35)$(t.val > 2010) = p35_esCapCost(t,regi,"%cm_GDPscen%","%cm_EDGEtr_scen%",teEs_dyn35);
Execute_Loadpoint 'p35_fe2es' p35_fe2es;
pm_fe2es(t,regi,teEs_dyn35) = p35_fe2es(t,regi,teEs_dyn35);
Execute_Loadpoint 'p35_fe2es' p35_fe2es;
pm_fe2es(t,regi,teEs_dyn35)$(t.val > 2010) = p35_fe2es(t,regi,"%cm_GDPscen%","%cm_EDGEtr_scen%",teEs_dyn35);
Execute_Loadpoint 'p35_shFeCes' p35_shFeCes;
pm_shFeCes(t,regi,entyFe,ppfen_dyn35)$p35_shFeCes(t,regi,entyFe,ppfen_dyn35) = p35_shFeCes(t,regi,entyFe,ppfen_dyn35);
Execute_Loadpoint 'p35_shFeCes' p35_shFeCes;
pm_shFeCes(t,regi,entyFe,ppfen_dyn35,teEs_dyn35)$(p35_shFeCes(t,regi,"%cm_GDPscen%","%cm_EDGEtr_scen%",entyFe,ppfen_dyn35,teEs_dyn35) AND t.val > 2010) = p35_shFeCes(t,regi,"%cm_GDPscen%","%cm_EDGEtr_scen%",entyFe,ppfen_dyn35,teEs_dyn35);
);
$endif.calibrate
*** EOF ./modules/35_transport/edge_esm/presolve.gms
......@@ -24,5 +24,6 @@ $Ifi "%phase%" == "equations" $include "./modules/35_transport/edge_esm/equation
$Ifi "%phase%" == "preloop" $include "./modules/35_transport/edge_esm/preloop.gms"
$Ifi "%phase%" == "bounds" $include "./modules/35_transport/edge_esm/bounds.gms"
$Ifi "%phase%" == "presolve" $include "./modules/35_transport/edge_esm/presolve.gms"
$Ifi "%phase%" == "postsolve" $include "./modules/35_transport/edge_esm/postsolve.gms"
*######################## R SECTION END (PHASES) ###############################
*** EOF ./modules/35_transport/edge_esm.gms
......@@ -13,13 +13,13 @@ teEs_dyn35(all_teEs) "technologies - transport module additions"
te_espet_pass_sm "short-to-medium distance passenger transport CES node"
te_esdie_pass_sm "short-to-medium distance passenger transport CES node"
te_eselt_pass_sm "short-to-medium distance passenger transport CES node"
* te_esh2t_pass_sm "short-to-medium distance passenger transport CES node"
* te_esgat_pass_sm "short-to-medium distance passenger transport CES node"
te_esh2t_pass_sm "short-to-medium distance passenger transport CES node"
te_esgat_pass_sm "short-to-medium distance passenger transport CES node"
te_esdie_pass_lo "long distance passenger transport (aviation) CES node"
te_esdie_frgt_sm "short-to-medium distance freight transport CES node"
te_eselt_frgt_sm "short-to-medium distance freight transport CES node"
* te_esh2t_frgt_sm "short-to-medium distance freight transport CES node"
* te_esgat_frgt_sm "short-to-medium distance freight transport CES node"
te_esh2t_frgt_sm "short-to-medium distance freight transport CES node"
te_esgat_frgt_sm "short-to-medium distance freight transport CES node"
te_esdie_frgt_lo "long distance freight transport CES node"
/
......@@ -40,13 +40,13 @@ esty_dyn35(all_esty) "Energy service types"
esdie_pass_sm
esdie_pass_lo
eselt_pass_sm
* esh2t_pass_sm
* esgat_pass_sm
esh2t_pass_sm
esgat_pass_sm
esdie_frgt_lo
esdie_frgt_sm
* esh2t_frgt_sm
esh2t_frgt_sm
eselt_frgt_sm
* esgat_frgt_sm
esgat_frgt_sm
/
ppfen_dyn35(all_in) "all energy input nodes - transport module additions"
......@@ -57,32 +57,50 @@ ppfen_dyn35(all_in) "all energy input nodes - transport module additions"
entrp_frgt_lo "long distance freight transport CES node"
/
es2ppfen_dyn35(all_esty,all_in) "matching FE to ppfEn in MACRO"
es2ppfen_dyn35(all_esty,all_in) "matching ES to ppfEn in MACRO"
/
espet_pass_sm.entrp_pass_sm
esdie_pass_sm.entrp_pass_sm
esdie_pass_lo.entrp_pass_lo
eselt_pass_sm.entrp_pass_sm
* esh2t_pass_sm.entrp_pass_sm
* esgat_pass_sm.entrp_pass_sm
esh2t_pass_sm.entrp_pass_sm
esgat_pass_sm.entrp_pass_sm
esdie_frgt_lo.entrp_frgt_lo
esdie_frgt_sm.entrp_frgt_sm
* esh2t_frgt_sm.entrp_frgt_sm
esh2t_frgt_sm.entrp_frgt_sm
eselt_frgt_sm.entrp_frgt_sm
* esgat_frgt_sm.entrp_frgt_sm
esgat_frgt_sm.entrp_frgt_sm
/
fe2es_dyn35(all_enty,all_esty,all_teEs) "map FE carriers to ES via appliances"
/
fepet.espet_pass_sm.te_espet_pass_sm
fedie.esdie_pass_sm.te_esdie_pass_sm
fedie.esdie_pass_lo.te_esdie_pass_lo
feh2t.esh2t_pass_sm.te_esh2t_pass_sm
fegat.esgat_pass_sm.te_esgat_pass_sm
feelt.eselt_pass_sm.te_eselt_pass_sm
fedie.esdie_pass_lo.te_esdie_pass_lo
fedie.esdie_frgt_lo.te_esdie_frgt_lo
fedie.esdie_frgt_sm.te_esdie_frgt_sm
feelt.eselt_frgt_sm.te_eselt_frgt_sm
feh2t.esh2t_frgt_sm.te_esh2t_frgt_sm
fegat.esgat_frgt_sm.te_esgat_frgt_sm
/
fe2ces_dyn35(all_enty,all_in,all_teEs) "map FE carriers to CES nodes via appliances"
/
fepet.entrp_pass_sm.te_espet_pass_sm
fedie.entrp_pass_sm.te_esdie_pass_sm
feh2t.entrp_pass_sm.te_esh2t_pass_sm
fegat.entrp_pass_sm.te_esgat_pass_sm
feelt.entrp_pass_sm.te_eselt_pass_sm
fedie.entrp_pass_lo.te_esdie_pass_lo
fedie.entrp_frgt_lo.te_esdie_frgt_lo
fedie.entrp_frgt_sm.te_esdie_frgt_sm
feelt.entrp_frgt_sm.te_eselt_frgt_sm
feh2t.entrp_frgt_sm.te_esh2t_frgt_sm
fegat.entrp_frgt_sm.te_esgat_frgt_sm
/
ces_transport_dyn35(all_in,all_in) "CES tree structure - edge transport"
/
......@@ -92,13 +110,52 @@ ces_transport_dyn35(all_in,all_in) "CES tree structure - edge transport"
entrp_frgt . (entrp_frgt_sm, entrp_frgt_lo)
/
EDGE_scenario_all "EDGE-T scenarios"
/
Conservative_liquids
Hydrogen_push
Electricity_push
Smart_lifestyles_Electricity_push
/
EDGE_scenario(EDGE_scenario_all) "Selected EDGE-T scenario"
*** sets for the reporting, to be consistent with *complex* realisation
FE_Transp_fety35(all_enty) "set for reporting"
/ fepet, fedie, feh2t, feelt /
FE_Elec_fety35(all_enty) "set for reporting"
/ feels, feelt /
FE_Transp_fety35(all_enty) "FEs used in the transport module" / fepet, fedie, feh2t, feelt /
FE_Elec_fety35(all_enty) "FE electricity sets (should be moved to core/sets asap)" / feels, feelt /
*** nat. gas is not used in complex, that's why these elements have to be defined here and not in core
se2fe_dyn35(all_enty,all_enty,all_te) "nat. gas techs for transport, missing in se2fe in core/sets"
/
segabio.fegat.tdbiogat
segafos.fegat.tdfosgat
/
enty_dyn35(all_enty) "nat. gas FE used for transport, see comment above"
/
fegat "final energy gas transport"
/
entyFeTrans_dyn35(all_enty) "nat. gas FE used for transport, see comment above"
/
fegat "FE nat. gas transport"
/
fe_transport_liquids_dyn35(all_enty) "liquids used by the transport module"
/
fepet
fedie
/
emi2te_dyn35(all_enty,all_enty,all_te,all_enty) "add. emission pathways: CH4 from nat. gas"
/
segabio.fegat.tdbiogat.ch4
segafos.fegat.tdfosgat.ch4
/
;
alias(teEs_dyn35,teEs_dyn35_2);
teEs(teEs_dyn35) = YES;
in(in_dyn35) = YES;
......@@ -108,6 +165,15 @@ fe2es(fe2es_dyn35) = YES;
es2ppfen(es2ppfen_dyn35) = YES;
ppfEn(ppfen_dyn35) = YES;
*** compatibility set overwrites
se2fe(se2fe_dyn35) = YES;
enty(enty_dyn35) = YES;
entyFeTrans(entyFeTrans_dyn35) = YES;
emi2te(emi2te_dyn35) = YES;
cesOut2cesIn(ces_transport_dyn35) = YES;
EDGE_scenario("%cm_EDGEtr_scen%") = YES;
*** EOF ./modules/35_transport/edge_esm/sets.gms
......@@ -46,4 +46,5 @@ vm_co2capture.up(t,regi,"cco2","ico2","ccsinje","1") = 50;
*** vm_prodSe.lo("2060","SSA",enty,"segafos",te) = 1;
*** vm_prodSe.lo("2060","USA",enty,"segafos",te) = 0.5;
*** EOF ./modules/39_CCU/39_CCU.gms
......@@ -21,7 +21,7 @@ if(cm_nucscen eq 7,
display vm_cap.lo;
$ifthen.complex_transport "%transport%" == "complex"
*** additional target for electro mobility, overwriting the general bounds in 35_transport/complex/bounds.gms
*** requiring higher EV and FC vehicle shares, to mirror efficiency mandates and EV legislation in many countries
loop(regi,
......@@ -52,6 +52,6 @@ display vm_cap.lo;
);
);
);
$endif.complex_transport
*** EOF ./modules/40_techpol/NDC2018/bounds.gms
......@@ -15,7 +15,7 @@ vm_cap.lo(t,regi,"apCarElT","1") = p40_TechBound(t,regi,"apCarElT");
display vm_cap.lo;
$ifthen.complex_transport "%transport%" == "complex"
*** additional target for electro mobility, overwriting the general bounds in 35_transport/complex/bounds.gms
*** requiring higher EV and FC vehicle shares, to mirror efficiency mandates and EV legislation in many countries
loop(regi,
......@@ -46,6 +46,6 @@ display vm_cap.lo;
);
);
);
$endif.complex_transport
*** EOF ./modules/40_techpol/NPi2018/bounds.gms
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment