diff --git a/.Rprofile b/.Rprofile index 839dcab92..8811ff237 100644 --- a/.Rprofile +++ b/.Rprofile @@ -76,16 +76,12 @@ if (!dir.exists(".venv/") # REMIND_repos_dirs="C:\my\first\path;D:\my\second\path" remindReposDirs <- Sys.getenv("REMIND_repos_dirs") -# unless specified otherwise, use cluster defaults -use_cluster_defaults <- TRUE - # add local directories, if any if ("" != remindReposDirs) { directories <- unlist(strsplit(remindReposDirs, .Platform$path.sep, fixed = TRUE)) directoriesList <- rep(list(NULL), length(directories)) names(directoriesList) <- directories options(remind_repos = c(options("remind_repos")[[1]], directoriesList)) - use_cluster_defaults <- FALSE } # Include local calibration results, if they exist, from either the main diff --git a/.zenodo.json b/.zenodo.json deleted file mode 100644 index 10f45cbb5..000000000 --- a/.zenodo.json +++ /dev/null @@ -1,265 +0,0 @@ -{ - "title": "REMIND - REgional Model of INvestments and Development", - "version": "3.3.2", - "creators": [ - { - "name": "Luderer, Gunnar", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0002-9057-6155" - }, - { - "name": "Bauer, Nico", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0002-0211-4162" - }, - { - "name": "Baumstark, Lavinia", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0002-6979-6671" - }, - { - "name": "Bertram, Christoph", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0002-0933-4395" - }, - { - "name": "Leimbach, Marian", - "affiliation": "Potsdam Institute for Climate Impact Research" - }, - { - "name": "Pietzcker, Robert", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0002-9403-6711" - }, - { - "name": "Strefler, Jessica", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0002-5279-4629" - }, - { - "name": "Aboumahboub, Tino" - }, - { - "name": "Abrahão, Gabriel", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0003-0336-6246" - }, - { - "name": "Auer, Cornelia", - "affiliation": "Potsdam Institute for Climate Impact Research" - }, - { - "name": "Benke, Falk", - "affiliation": "Potsdam Institute for Climate Impact Research" - }, - { - "name": "Bi, Stephen", - "affiliation": "Potsdam Institute for Climate Impact Research" - }, - { - "name": "Dietrich, Jan Philipp", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0002-4309-6431" - }, - { - "name": "Dirnaichner, Alois", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0002-3240-2608" - }, - { - "name": "Fuchs, Sophie", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0009-0000-7258-1287" - }, - { - "name": "Führlich, Pascal", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0002-6856-8239" - }, - { - "name": "Giannousakis, Anastasis", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0002-4225-0011" - }, - { - "name": "Gong, Chen Chris", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0002-6406-6266" - }, - { - "name": "Haller, Markus" - }, - { - "name": "Hasse, Robin", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0003-1818-3186" - }, - { - "name": "Hilaire, Jerome", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0002-9879-6339" - }, - { - "name": "Hoppe, Johanna", - "affiliation": "Potsdam Institute for Climate Impact Research" - }, - { - "name": "Klein, David", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0009-0001-7917-8041" - }, - { - "name": "Koch, Johannes", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0003-2920-8086" - }, - { - "name": "Köhler-Schindler, Laurin", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0003-4268-3084" - }, - { - "name": "Körner, Alexander" - }, - { - "name": "Kowalczyk, Katarzyna", - "affiliation": "Potsdam Institute for Climate Impact Research" - }, - { - "name": "Kriegler, Elmar", - "affiliation": "Potsdam Institute for Climate Impact Research" - }, - { - "name": "Levesque, Antoine", - "affiliation": "Potsdam Institute for Climate Impact Research" - }, - { - "name": "Lorenz, Alexander" - }, - { - "name": "Ludig, Sylvie" - }, - { - "name": "Lüken, Michael" - }, - { - "name": "Malik, Aman", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0002-7310-8448" - }, - { - "name": "Mandaroux, Rahel", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0001-5596-2571" - }, - { - "name": "Manger, Susanne" - }, - { - "name": "Merfort, Anne", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0002-5929-7748" - }, - { - "name": "Merfort, Leon", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0003-1704-6892" - }, - { - "name": "Moreno-Leiva, Simón", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0002-9625-3955" - }, - { - "name": "Mouratiadou, Ioanna" - }, - { - "name": "Odenweller, Adrian", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0002-1123-8124" - }, - { - "name": "Pehl, Michaja", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0003-2349-6515" - }, - { - "name": "Pflüger, Mika", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0002-7814-8916" - }, - { - "name": "Piontek, Franziska", - "affiliation": "Potsdam Institute for Climate Impact Research" - }, - { - "name": "Popin, Laura" - }, - { - "name": "Rauner, Sebastian", - "affiliation": "Potsdam Institute for Climate Impact Research" - }, - { - "name": "Richters, Oliver", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0001-8253-4716" - }, - { - "name": "Rodrigues, Renato", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0002-5863-5514" - }, - { - "name": "Roming, Niklas" - }, - { - "name": "Rottoli, Marianna", - "affiliation": "Potsdam Institute for Climate Impact Research" - }, - { - "name": "Rüter, Tonn", - "affiliation": "Potsdam Institute for Climate Impact Research" - }, - { - "name": "Schmidt, Eva" - }, - { - "name": "Schötz, Christof", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0003-3528-4544" - }, - { - "name": "Schreyer, Felix", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0003-0376-2599" - }, - { - "name": "Schultes, Anselm", - "affiliation": "Potsdam Institute for Climate Impact Research" - }, - { - "name": "Sörgel, Björn", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0002-2630-7081" - }, - { - "name": "Ueckerdt, Falko", - "affiliation": "Potsdam Institute for Climate Impact Research" - }, - { - "name": "Verpoort, Philipp", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0003-1319-5006" - }, - { - "name": "Weigmann, Pascal", - "affiliation": "Potsdam Institute for Climate Impact Research", - "orcid": "0000-0001-8801-173X" - } - ], - "keywords": ["energy", "economy", "modeling"], - "license": { - "id": "AGPL-3.0-or-later" - }, - "publication_date": "2024-07-04" -} diff --git a/CHANGELOG.md b/CHANGELOG.md index 072a04e3a..f64e4d5ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,13 +8,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### input data/calibration - new input data rev6.84 [[#1757](https://github.com/remindmodel/remind/pull/1757)] +- new input data rev6.95 in US$2017[[#1812]] (https://github.com/remindmodel/remind/pull/1812) - CES parameter and gdx files calibrated with new default diffLin2Lin for NPi [[#1747](https://github.com/remindmodel/remind/pull/1747)] and [[#1757](https://github.com/remindmodel/remind/pull/1757)] - Update of NDC goals with cutoff data August 31, 2024 [[#1816](https://github.com/remindmodel/remind/pull/1816)] +- Prepare to make input data available for externals. Do not stop on missing validation data. + [[1828]][(https://github.com/remindmodel/remind/pull/1828)] ### changed +- shift base unit from US$2005 to US$2017 [[#1812]] (https://github.com/remindmodel/remind/pull/1812) - plastic waste by default does not lag plastics production by ten years anymore; can be re-activated using `cm_wastelag` - moved to edgeTransport 2.0 version [[#1749](https://github.com/remindmodel/remind/pull/1749)] diff --git a/CITATION.cff b/CITATION.cff index 200a39905..0156c2201 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -271,13 +271,14 @@ 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.dev585" -date-released: 2024-09-13 +version: "3.3.2.dev713" +date-released: 2024-09-27 repository-code: https://github.com/remindmodel/remind keywords: - energy - economy - modeling - model + - active-development license: AGPL-3.0-or-later url: https://www.pik-potsdam.de/research/transformation-pathways/models/remind diff --git a/DESCRIPTION b/DESCRIPTION index bf9455e60..d10f40021 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -17,15 +17,15 @@ Imports: data.table, devtools, dplyr, - edgeTransport (>= 2.3.0), - reporttransport (>= 0.0.11), + edgeTransport (>= 2.7.0), + reporttransport (>= 0.5.0), flexdashboard, GDPuc, gdx (>= 1.53.0), gdxdt, gdxrrw, ggplot2, - gms (>= 0.32.1), + gms (>= 0.33.0), goxygen (>= 1.4.4), gridExtra, gtools, @@ -45,13 +45,16 @@ Imports: magpiesets, mip (>= 0.150.0), modelstats, - mrremind, + mrremind (>= 0.191.2), + mrcommons (>= 1.43.6), + mrdrivers (>= 3.0.0), + mrtransport (>= 0.7.1), mrvalidation, ncdf4, nleqslv, optparse, piamenv (>= 0.4.0), - piamInterfaces (>= 0.27.2), + piamInterfaces (>= 0.31.0), piamPlotComparison (>= 0.0.10), piamutils, plotly, @@ -61,7 +64,7 @@ Imports: raster, readr, readxl, - remind2 (>= 1.147.2), + remind2 (>= 1.156.1), renv, reshape2, reticulate, diff --git a/config/default.cfg b/config/default.cfg index e7e442366..cbad0e895 100644 --- a/config/default.cfg +++ b/config/default.cfg @@ -28,10 +28,10 @@ cfg$regionmapping <- "config/regionmappingH12.csv" cfg$extramappings_historic <- "" #### Current input data revision (.) #### -cfg$inputRevision <- "6.92" +cfg$inputRevision <- "6.95" #### Current CES parameter and GDX revision (commit hash) #### -cfg$CESandGDXversion <- "d4c62a8f11e8a6827310519df09c98eb425a4070" +cfg$CESandGDXversion <- "ffbff5da0c24de39586df082716e5af449f5f231" #### Force the model to download new input data #### cfg$force_download <- FALSE @@ -41,7 +41,8 @@ cfg$force_replace <- FALSE #### list of repositories containing input data # defined in your local .Rprofile or on the cluster /p/projects/rd3mod/R/.Rprofile -cfg$repositories <- getOption("remind_repos") +cfg$repositories <- append(list("https://rse.pik-potsdam.de/data/remind/public" = NULL), + getOption("remind_repos")) #### Folder run statistics should be submitted to cfg$runstatistics <- "/p/projects/rd3mod/models/statistics/remind" @@ -72,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.dev585" +cfg$model_version <- "3.3.2.dev713" #### settings #### cfg$gms <- list() diff --git a/config/scenario_config.csv b/config/scenario_config.csv index dc58869c7..30de5795b 100644 --- a/config/scenario_config.csv +++ b/config/scenario_config.csv @@ -1,47 +1,41 @@ -title;start;CES_parameters;optimization;slurmConfig;regionmapping;extramappings_historic;cm_rcp_scen;cm_iterative_target_adj;subsidizeLearning;c_budgetCO2from2020;carbonprice;cm_co2_tax_startyear;cm_peakBudgYr;cm_CO2priceRegConvEndYr;cm_emiscen;c_regi_earlyreti_rate;c_tech_earlyreti_rate;cm_fetaxscen;cm_co2_tax_growth;cm_bioenergy_SustTax;cm_maxProdBiolc;c_ccsinjecratescen;c_ccscapratescen;cm_subsec_model_steel;cm_CESMkup_build;cm_CESMkup_ind;cm_CESMkup_ind_data;cm_wasteIncinerationCCSshare;techpol;regipol;cm_implicitQttyTarget;cm_emiMktTarget;cm_NucRegiPol;cm_CoalRegiPol;cm_altFeEmiFac;cm_POPscen;cm_GDPscen;cm_demScen;cm_oil_scen;cm_gas_scen;cm_coal_scen;c_techAssumptScen;cm_nucscen;cm_so2tax_scen;cm_multigasscen;cm_LU_emi_scen;cm_tradecostBio;cm_1stgen_phaseout;c_SSP_forcing_adjust;cm_APscen;cm_EDGEtr_scen;cm_startyear;path_gdx;path_gdx_ref;path_gdx_bau;path_gdx_refpolicycost;description -# H12 SSP2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -SSP2-NPi-calibrate;calibrate,AMT,compileInTests;calibrate;;14;;;rcp45;;;0;NPi;;;;9;;;;;;;;;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;;;;;;;;;;3;;;;;;Mix1;2005;;;;;SSP2-NPi-calibrate: This reference policy/baseline scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. -SSP2-Base;1,AMT,2;;;5;;;;;;0;;;;;;;off;;;;;;;;;;;;;;;;;;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;Mix1;2005;;;;;SSP2-Base: This baseline calibration scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. -SSP2-NDC;1,AMT,2;;;5;;;rcp45;3;globallyOptimal;0;NDC;;;;9;;;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;2020.2030.EUR_regi.all.year.netGHG_LULUCFGrassi 2.450;on;on;EUR_regi, NEU_regi;;;;;;;;;;3;;;;;;Mix2;2025;;SSP2-NPi;SSP2-NPi;SSP2-NPi;SSP2-NDC: This Nationally Determined Contribution (NDC) scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. The NDC includes all pledged policies even if not yet implemented. It assumes that the moderate and heterogeneous climate ambition reflected in the NDCs at the begining of 2021 continues over the 21st century. -SSP2-NPi;1,AMT,compileInTests,2;;;5;;;rcp45;3;;0;NPi;;;;9;;;;;;;;;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;;;;;;;;;;3;;;;;;Mix1;2005;;;;;SSP2-NPi: This National Policies Implemented (NPi) scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. The NPi assumes that policies fail to achieve NDC targets in 2030. Instead, carbon prices are assumed to grow and converge more slowly, leading to emissions trajectories in line with bottom-up studies on the effect of currently implemented policies. -SSP2-PkBudg500;1,AMT,2;;;5;;;rcp20;9;globallyOptimal;500;diffLin2Lin;200;2045;;9;;;;;;;;;;;;;2050.GLO 0.9;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;Mix4ICEban;2025;;SSP2-NPi;;SSP2-NPi;SSP2-PkBudg500: This climate policy scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. The stylized climate policy scenario assumes a peak budget of 500 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a 1.5C scenario, peak warming is allowed to be well below 1.5C at median climate sensitivity but returns to values below 1.5C in at least 67 % of scenarios by the end of the century. -SSP2-PkBudg650;1,AMT,2;;;5;;;rcp20;9;globallyOptimal;650;diffLin2Lin;75;2055;;9;;;;;;;;;;;;;2050.GLO 0.9;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;Mix4ICEban;2025;;SSP2-NPi;;SSP2-NPi;SSP2-PkBudg650: This climate policy scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. The stylized climate policy scenario assumes a peak budget of 650 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a 1.5C scenario, peak warming is allowed to be at or slightly above 1.5C at median climate sensitivity but returns to values below 1.5C in at least 67 % of scenarios by the end of the century. -SSP2-PkBudg1050;1,AMT,2;;;5;;;rcp26;9;globallyOptimal;1050;diffLin2Lin;40;2100;;9;;;;;;;;;;;;;2050.GLO 0.5;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;Mix3ICEban;2025;;SSP2-NPi;;SSP2-NPi;SSP2-PkBudg1050: This climate policy scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. The stylized climate policy scenario assumes a peak budget of 1150 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a well below 2C scenario at median climate sensitivity but returns to values below 2C in at least 67 % of scenarios during the whole century. -# EU21 SSP2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -SSP2-EU21-NPi-calibrate;calibrate;calibrate;;14;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp45;;;0;NPi;;;;9;;;;;;;;;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;;;;;;;;;;3;;;;;;Mix1;2005;;;;;SSP2-EU21-calibration: This baseline scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. -SSP2-EU21-Base;1,AMT,compileInTests,2;;;14;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;;;;0;;;;;;;off;;;;;;;;;;;;;;;;;;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;Mix1;2005;;;;;SSP2-EU21-Base: This baseline calibration scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. -SSP2-EU21-NDC;1,AMT,2;;;14;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp45;3;globallyOptimal;0;NDC;;;;9;;;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;2020.2030.EUR_regi.all.year.netGHG_LULUCFGrassi 2.450;on;on;EUR_regi, NEU_regi;;;;;;;;;;3;;;;;;Mix2;2025;;SSP2-EU21-NPi;SSP2-EU21-NPi;SSP2-EU21-NPi;SSP2-EU21-NDC: This Nationally Determined Contribution (NDC) scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. The NDC includes all pledged policies even if not yet implemented. It assumes that the moderate and heterogeneous climate ambition reflected in the NDCs at the begining of 2021 continues over the 21st century. -SSP2-EU21-NPi;1,AMT,2;;;14;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp45;3;;0;NPi;;;;9;;;;;;;;;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;;;;;;;;;;3;;;;;;Mix1;2005;;;;;SSP2-EU21-NPi: This National Policies Implemented (NPi) scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. The NPi assumes that policies fail to achieve NDC targets in 2030. Instead, carbon prices are assumed to grow and converge more slowly, leading to emissions trajectories in line with bottom-up studies on the effect of currently implemented policies. -SSP2-EU21-PkBudg500;1,AMT,2;;;14;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;500;diffLin2Lin;200;2045;;9;;;;;;;;;;;;;2050.GLO 0.9;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;Mix4ICEban;2025;;SSP2-EU21-NPi;;SSP2-EU21-NPi;SSP2-EU21-PkBudg500: This climate policy scenario follows the SSP2. The stylized climate policy scenario assumes a peak budget of 500 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a 1.5C scenario, peak warming is allowed to be at or slightly above 1.5C at median climate sensitivity but returns to values below 1.5C in at least 67 % of scenarios by the end of the century. -SSP2-EU21-PkBudg650;1,AMT,2;;;14;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffLin2Lin;75;2055;;9;;;;;;;;;;;;;2050.GLO 0.9;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;Mix4ICEban;2025;;SSP2-EU21-NPi;;SSP2-EU21-NPi;SSP2-EU21-PkBudg650: This climate policy scenario follows the SSP2. The stylized climate policy scenario assumes a peak budget of 650 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a 1.5C scenario, peak warming is allowed to be at or slightly above 1.5C at median climate sensitivity but returns to values below 1.5C in at least 67 % of scenarios by the end of the century. -SSP2-EU21-PkBudg1050;1,AMT,2;;;14;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp26;9;globallyOptimal;1050;diffLin2Lin;40;2100;;9;;;;;;;;;;;;;2050.GLO 0.5;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;Mix3ICEban;2025;;SSP2-EU21-NPi;;SSP2-EU21-NPi;SSP2-EU21-PkBudg1050: This climate policy scenario follows the SSP2. The stylized climate policy scenario assumes a peak budget of 1050 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a well below 2C scenario at median climate sensitivity but returns to values below 2C in at least 67 % of scenarios during the whole century. -# H12 SSP1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -SSP1-NPi-calibrate;calibrate;calibrate;;14;;;rcp45;;;0;NPi;;;;9;;;2;1.025;1.75;;2;;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;pop_SSP1;gdp_SSP1;gdp_SSP1;lowOil;lowGas;lowCoal;2;;4;3;SSP1;0.5;1;forcing_SSP1;SSP1;Mix1;2005;;;;;SSP1-calibration: This baseline calibration scenario follows the Shared Socioeconomic Pathways 1 called Sustainability. -SSP1-NDC;1,AMT,compileInTests;;;;;;rcp45;3;globallyOptimal;0;NDC;;;;9;;;2;1.025;1.75;;2;;;;;;;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;2020.2030.EUR_regi.all.year.netGHG_LULUCFGrassi 2.450;on;on;EUR_regi, NEU_regi;pop_SSP1;gdp_SSP1;gdp_SSP1;lowOil;lowGas;lowCoal;2;;4;3;SSP1;0.5;1;forcing_SSP1;SSP1;Mix2;2025;;SSP2-NPi;SSP1-NPi;SSP1-NPi;SSP1-NDC: This Nationally Determined Contribution (NDC) scenario follows the Shared Socioeconomic Pathways 1 called Sustainability. The NDC includes all pledged policies even if not yet implemented. It assumes that the moderate and heterogeneous climate ambition reflected in the NDCs at the begining of 2021 continues over the 21st century. -SSP1-NPi;1,AMT;;;;;;rcp45;3;;0;NPi;;;;9;;;2;1.025;1.75;;2;;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;pop_SSP1;gdp_SSP1;gdp_SSP1;lowOil;lowGas;lowCoal;2;;4;3;SSP1;0.5;1;forcing_SSP1;SSP1;Mix1;2005;;;;;SSP1-NPi: This National Policies Implemented (NPi) scenario follows the Shared Socioeconomic Pathways 1 called Sustainability. The NPi assumes that policies fail to achieve NDC targets in 2030. Instead, carbon prices are assumed to grow and converge more slowly, leading to emissions trajectories in line with bottom-up studies on the effect of currently implemented policies. -SSP1-PkBudg650;1,AMT;;;;;;rcp20;9;globallyOptimal;650;diffLin2Lin;75;2055;;9;;;2;1.025;1.75;;2;;;;;;2050.GLO 0.9;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;pop_SSP1;gdp_SSP1;gdp_SSP1;lowOil;lowGas;lowCoal;2;;4;;SSP1;0.5;1;forcing_SSP1;SSP1;Mix4ICEban;2025;;SSP2-NPi;;;SSP1-PkBudg650: This climate policy scenario follows the Shared Socioeconomic Pathways 1 called Sustainability. The stylized climate policy scenario assumes a peak budget of 650 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a 1.5C scenario, peak warming is allowed to be at or slightly above 1.5C at median climate sensitivity but returns to values below 1.5C in at least 67 % of scenarios by the end of the century. -SSP1-PkBudg1050;1,AMT;;;;;;rcp26;9;globallyOptimal;1050;diffLin2Lin;40;2100;;9;;;2;1.025;1.75;;2;;;;;;2050.GLO 0.5;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;pop_SSP1;gdp_SSP1;gdp_SSP1;lowOil;lowGas;lowCoal;2;;4;;SSP1;0.5;1;forcing_SSP1;SSP1;Mix3ICEban;2025;;SSP2-NPi;;;SSP1-PkBudg1050: This climate policy scenario follows the Shared Socioeconomic Pathways 1 called Sustainability. The stylized climate policy scenario assumes a peak budget of 1050 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a well below 2C scenario at median climate sensitivity but returns to values below 2C in at least 67 % of scenarios during the whole century. -# H12 SSP5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -SSP5-NPi-calibrate;calibrate;calibrate;;14;;;rcp45;;;0;NPi;;;;9;;;1;;1.75;;3;2;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;pop_SSP5;gdp_SSP5;gdp_SSP5;highOil;highGas;highCoal;3;6;4;3;SSP5;0.5;1;forcing_SSP5;SSP5;Mix1;2005;;;;;SSP5-calibration: This baseline calibration scenario follows the Shared Socioeconomic Pathways 5 called Fossil-Fueled Development. -SSP5-NDC;1,AMT;;;;;;rcp45;3;globallyOptimal;0;NDC;;;;9;;;1;;1.75;;3;2;;;;;;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;2020.2030.EUR_regi.all.year.netGHG_LULUCFGrassi 2.450;on;on;EUR_regi, NEU_regi;pop_SSP5;gdp_SSP5;gdp_SSP5;highOil;highGas;highCoal;3;6;4;3;SSP5;0.5;1;forcing_SSP5;SSP5;Mix2;2025;;SSP2-NPi;SSP5-NPi;SSP5-NPi;SSP5-NDC: This Nationally Determined Contribution (NDC) scenario follows the Shared Socioeconomic Pathways 5 called Fossil-Fueled Development. The NDC includes all pledged policies even if not yet implemented. It assumes that the moderate and heterogeneous climate ambition reflected in the NDCs at the begining of 2021 continues over the 21st century. -SSP5-NPi;1,AMT;;;;;;rcp45;3;;0;NPi;;;;9;;;1;;1.75;;3;2;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;pop_SSP5;gdp_SSP5;gdp_SSP5;highOil;highGas;highCoal;3;6;4;3;SSP5;0.5;1;forcing_SSP5;SSP5;Mix1;2005;;;;;SSP5-NPi: This National Policies Implemented (NPi) scenario follows the Shared Socioeconomic Pathways 5 called Fossil-Fueled Development. The NPi assumes that policies fail to achieve NDC targets in 2030. Instead, carbon prices are assumed to grow and converge more slowly, leading to emissions trajectories in line with bottom-up studies on the effect of currently implemented policies. -SSP5-PkBudg650;1,AMT;;;;;;rcp20;9;globallyOptimal;650;diffLin2Lin;75;2055;;9;;;1;;1.75;;3;2;;;;;2050.GLO 0.9;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;pop_SSP5;gdp_SSP5;gdp_SSP5;highOil;highGas;highCoal;3;6;4;;SSP5;0.5;1;forcing_SSP5;SSP5;Mix4ICEban;2025;;SSP2-NPi;;;SSP5-PkBudg650: This climate policy scenario follows the Shared Socioeconomic Pathways 5 called Fossil-Fueled Development. The stylized climate policy scenario assumes a peak budget of 650 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a 1.5C scenario, peak warming is allowed to be at or slightly above 1.5C at median climate sensitivity but returns to values below 1.5C in at least 67 % of scenarios by the end of the century. -SSP5-PkBudg1050;1,AMT,compileInTests;;;;;;rcp26;9;globallyOptimal;1050;diffLin2Lin;40;2100;;9;;;1;;1.75;;3;2;;;;;2050.GLO 0.5;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;pop_SSP5;gdp_SSP5;gdp_SSP5;highOil;highGas;highCoal;3;6;4;;SSP5;0.5;1;forcing_SSP5;SSP5;Mix3ICEban;2025;;SSP2-NPi;;;SSP5-PkBudg1050: This climate policy scenario follows the Shared Socioeconomic Pathways 5 called Fossil-Fueled Development. The stylized climate policy scenario assumes a peak budget of 1050 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a well below 2C scenario at median climate sensitivity but returns to values below 2C in at least 67 % of scenarios during the whole century. -# H12 SDP_MC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -SDP_MC-NPi-calibrate;calibrate;calibrate;;14;;;rcp45;;;0;NPi;;;;9;GLO 0.12, EUR_regi 0.15;;2;1.025;1.75;152;2;;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;pop_SDP_MC;gdp_SDP_MC;gdp_SDP_MC;lowOil;lowGas;lowCoal;2;;4;3;SDP;0.5;1;forcing_SSP1;MFR;Mix4ICEban;2005;;;;;"SDP_MC-calibration: This baseline calibration scenario follows the Sustainable Development Pathway scenario following the narrative of ""Managing the global commons"": strong global institutions - efficient technological solutions." -SDP_MC-NPi;1,AMT;;;;;;rcp45;3;;0;NPi;;;;9;GLO 0.12, EUR_regi 0.15;;2;1.025;1.75;152;2;;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;pop_SDP_MC;gdp_SDP_MC;gdp_SDP_MC;lowOil;lowGas;lowCoal;2;;4;3;SDP;0.5;1;forcing_SSP1;MFR;Mix4ICEban;2005;;;;;"SDP_MC-NPi: This National Policies Implemented (NPi) scenario follows the Sustainable Development Pathway scenario following the narrative of ""Managing the global commons"": strong global institutions - efficient technological solutions. The NPi assumes that policies fail to achieve NDC targets in 2030. Instead, carbon prices are assumed to grow and converge more slowly, leading to emissions trajectories in line with bottom-up studies on the effect of currently implemented policies." -SDP_MC-PkBudg650;1,AMT,compileInTests;;;;;;rcp20;9;globallyOptimal;650;diffLin2Lin;200;2045;;9;GLO 0.12, EUR_regi 0.15;;2;1.025;1.75;152;2;;;feelhpb 1.05, fehob 1.75, feheb 0.1;manual;feh2_otherInd 1.04, feelhth_otherInd 0.4, feh2_cement 2.0, feelhth_chemicals 1.3, feh2_chemicals 1.04;2050.GLO 0.9;NDCplus;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;pop_SDP_MC;gdp_SDP_MC;gdp_SDP_MC;lowOil;lowGas;lowCoal;2;;4;;SDP;0.5;1;forcing_SSP1;MFR;Mix4ICEban;2025;;SSP2-NPi;;;"SDP_MC-PkBudg650: This climate policy scenario follows the Sustainable Development Pathway scenario following the narrative of ""Managing the global commons"": strong global institutions - efficient technological solutions. The stylized climate policy scenario assumes a peak budget of 650 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a 1.5C scenario, peak warming is allowed to be at or slightly above 1.5C at median climate sensitivity but returns to values below 1.5C in at least 67 % of scenarios by the end of the century." -# H12 SDP_EI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -SDP_EI-NPi-calibrate;calibrate;calibrate;;14;;;rcp45;;;0;NPi;;;;9;GLO 0.14, EUR_regi 0.15;;2;1.025;1.75;300;;2;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;pop_SDP_EI;gdp_SDP_EI;gdp_SDP_EI;lowOil;lowGas;lowCoal;2;;4;3;SDP;0.5;1;forcing_SSP1;SSP1;Mix4ICEban;2005;;;;;"SDP_EI-calibration: This baseline calibration scenario follows the Sustainable Development Pathway scenario following the narrative of ""Economy-driven innovation"": tech & market driven - globalized word - high-growth." -SDP_EI-NPi;0;;;;;;rcp45;3;;0;NPi;;;;9;GLO 0.14, EUR_regi 0.15;;2;1.025;1.75;300;;2;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;pop_SDP_EI;gdp_SDP_EI;gdp_SDP_EI;lowOil;lowGas;lowCoal;2;;4;3;SDP;0.5;1;forcing_SSP1;SSP1;Mix4ICEban;2005;;;;;"SDP_EI-NPi: This National Policies Implemented (NPi) scenario following the narrative of ""Economy-driven innovation"": tech & market driven - globalized word - high-growth. The NPi assumes that policies fail to achieve NDC targets in 2030. Instead, carbon prices are assumed to grow and converge more slowly, leading to emissions trajectories in line with bottom-up studies on the effect of currently implemented policies." -SDP_EI-PkBudg650;0;;;;;;rcp20;9;globallyOptimal;650;diffLin2Lin;200;2045;;9;GLO 0.14, EUR_regi 0.15;;2;1.025;1.75;300;;2;;feelhpb 1.05, fehob 1.75, feheb 0.35;manual;feh2_otherInd 1.05, feelhth_otherInd 0.43, feh2_cement 2.2, feelhth_chemicals 1.4, feh2_chemicals 1.05;2050.GLO 0.9;NDCplus;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;pop_SDP_EI;gdp_SDP_EI;gdp_SDP_EI;lowOil;lowGas;lowCoal;2;;4;;SDP;0.5;1;forcing_SSP1;SSP1;Mix4ICEban;2025;;SSP2-NPi;;;"SDP_EI-PkBudg650: This climate policy scenario following the narrative of ""Economy-driven innovation"": tech & market driven - globalized word - high-growth. The stylized climate policy scenario assumes a peak budget of 650 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a 1.5C scenario, peak warming is allowed to be at or slightly above 1.5C at median climate sensitivity but returns to values below 1.5C in at least 67 % of scenarios by the end of the century." -# H12 SDP_RC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -SDP_RC-NPi-calibrate;calibrate;calibrate;;14;;;rcp45;;;0;NPi;;;;9;;;4;1.025;2;100;5;;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;pop_SDP_RC;gdp_SDP_RC;gdp_SDP_RC;lowOil;lowGas;lowCoal;2;;4;3;SDP;;1;forcing_SSP1;SSP1;Mix3ICEban;2005;;;;;"SDP_RC-calibration: This baseline calibration scenario follows the Sustainable Development Pathway scenario following the narrative of ""Resilient communities"": human well-being - behavioural change - local & less tech-driven." -SDP_RC-NPi;0;;;;;;rcp45;3;;0;NPi;;;;9;;;4;1.025;2;100;5;;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;pop_SDP_RC;gdp_SDP_RC;gdp_SDP_RC;lowOil;lowGas;lowCoal;2;;4;3;SDP;;1;forcing_SSP1;SSP1;Mix3ICEban;2005;;;;;"SDP_RC-NPi: This National Policies Implemented (NPi) scenario follows the Sustainable Development Pathway scenario following the narrative of ""Resilient communities"": human well-being - behavioural change - local & less tech-driven. The NPi assumes that policies fail to achieve NDC targets in 2030. Instead, carbon prices are assumed to grow and converge more slowly, leading to emissions trajectories in line with bottom-up studies on the effect of currently implemented policies." -SDP_RC-PkBudg650;0;;;;;;rcp20;9;globallyOptimal;650;diffLin2Lin;200;2045;2060;9;;;4;1.025;2;100;5;;;feelhpb 1.05, fehob 1.75, feheb 0.35;manual;feh2_otherInd 1.05, feelhth_otherInd 0.43, feh2_cement 2.2, feelhth_chemicals 1.4, feh2_chemicals 1.05;2050.GLO 0.9;NDCplus;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;pop_SDP_RC;gdp_SDP_RC;gdp_SDP_RC;lowOil;lowGas;lowCoal;2;;4;;SDP;;1;forcing_SSP1;SSP1;Mix3ICEban;2025;;SSP2-NPi;;;"SDP_RC-PkBudg650: This climate policy scenario follows the Sustainable Development Pathway scenario following the narrative of ""Resilient communities"": human well-being - behavioural change - local & less tech-driven. The stylized climate policy scenario assumes a peak budget of 650 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a 1.5C scenario, peak warming is allowed to be at or slightly above 1.5C at median climate sensitivity but returns to values below 1.5C in at least 67 % of scenarios by the end of the century." -# H12 SSP2 lowEnergy;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -SSP2_lowEn-NPi-calibrate;calibrate;calibrate;;14;;;rcp45;;;0;NPi;;;;9;;;;;;;;;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;;;gdp_SSP2_lowEn;;;;;;;3;;;;;;Mix1;2005;;;;;SSP2_lowEn-calibration: This baseline scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. This scenario also assumes low energy demand trajectories. -SSP2_lowEn-NDC;0;;;;;;rcp45;3;globallyOptimal;0;NDC;;;;9;;;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;2020.2030.EUR_regi.all.year.netGHG_LULUCFGrassi 2.450;on;on;EUR_regi, NEU_regi;;;gdp_SSP2_lowEn;;;;;;;3;;;;;;Mix2;2025;;SSP2-NPi;SSP2_lowEn-NPi;SSP2_lowEn-NPi;SSP2_lowEn-NDC: This Nationally Determined Contribution (NDC) scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. This scenario also assumes low energy demand trajectories. The NDC includes all pledged policies even if not yet implemented. It assumes that the moderate and heterogeneous climate ambition reflected in the NDCs at the begining of 2021 continues over the 21st century. -SSP2_lowEn-NPi;0;;;;;;rcp45;3;;0;NPi;;;;9;;;;;;;;;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;;;gdp_SSP2_lowEn;;;;;;;3;;;;;;Mix1;2005;;;;;SSP2_lowEn-NPi: This National Policies Implemented (NPi) scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. This scenario also assumes low energy demand trajectories. The NPi assumes that policies fail to achieve NDC targets in 2030. Instead, carbon prices are assumed to grow and converge more slowly, leading to emissions trajectories in line with bottom-up studies on the effect of currently implemented policies. -SSP2_lowEn-PkBudg650;0;;;;;;rcp20;9;globallyOptimal;650;diffLin2Lin;75;2055;;9;;;;;;;;;;;;;2050.GLO 0.9;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;;;gdp_SSP2_lowEn;;;;;;;;;;;;;Mix4ICEban;2025;;SSP2-NPi;;;SSP2_lowEn-PkBudg650: This climate policy scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. This scenario also assumes low energy demand trajectories. The stylized climate policy scenario assumes a peak budget of 650 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a 1.5C scenario, peak warming is allowed to be at or slightly above 1.5C at median climate sensitivity but returns to values below 1.5C in at least 67 % of scenarios by the end of the century. -SSP2_lowEn-PkBudg1050;0;;;;;;rcp26;9;globallyOptimal;1050;diffLin2Lin;40;2100;;9;;;;;;;;;;;;;2050.GLO 0.5;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;;;gdp_SSP2_lowEn;;;;;;;;;;;;;Mix3ICEban;2025;;SSP2-NPi;;;SSP2_lowEn-PkBudg1050: This climate policy scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. This scenario also assumes low energy demand trajectories. The stylized climate policy scenario assumes a peak budget of 1050 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a well below 2C scenario at median climate sensitivity but returns to values below 2C in at least 67 % of scenarios during the whole century. +title;start;CES_parameters;slurmConfig;regionmapping;extramappings_historic;cm_rcp_scen;cm_iterative_target_adj;subsidizeLearning;c_budgetCO2from2020;carbonprice;cm_co2_tax_startyear;cm_peakBudgYr;cm_emiscen;c_regi_earlyreti_rate;c_tech_earlyreti_rate;cm_fetaxscen;cm_co2_tax_growth;cm_bioenergy_SustTax;c_ccsinjecratescen;c_ccscapratescen;cm_CESMkup_build;cm_CESMkup_ind;cm_CESMkup_ind_data;cm_wasteIncinerationCCSshare;techpol;regipol;cm_implicitQttyTarget;cm_emiMktTarget;cm_NucRegiPol;cm_CoalRegiPol;cm_altFeEmiFac;cm_POPscen;cm_GDPscen;cm_demScen;cm_oil_scen;cm_gas_scen;cm_coal_scen;c_techAssumptScen;cm_nucscen;cm_so2tax_scen;cm_multigasscen;cm_LU_emi_scen;cm_tradecostBio;cm_1stgen_phaseout;c_SSP_forcing_adjust;cm_APscen;cm_EDGEtr_scen;cm_startyear;path_gdx;path_gdx_ref;path_gdx_bau;path_gdx_refpolicycost;description +# H12 SSP2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SSP2-NPi-calibrate;calibrate,AMT,compileInTests;calibrate;14;;;rcp45;;;0;NPi;;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;;;;;;;;;;3;;;;;;Mix1;2005;;;;;SSP2-NPi-calibrate: This reference policy/baseline scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. +SSP2-Base;1,AMT,2;;;;;;;;0;;;;;;off;;;;;;;;;;;;;;;;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;Mix1;2005;;;;;SSP2-Base: This baseline calibration scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. +SSP2-NDC;1,AMT,2;;;;;rcp45;3;globallyOptimal;0;NDC;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;2020.2030.EUR_regi.all.year.netGHG_LULUCFGrassi 2.450;on;on;EUR_regi, NEU_regi;;;;;;;;;;3;;;;;;Mix2;2030;;SSP2-NPi;SSP2-NPi;SSP2-NPi;SSP2-NDC: This Nationally Determined Contribution (NDC) scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. The NDC includes all pledged policies even if not yet implemented. It assumes that the moderate and heterogeneous climate ambition reflected in the NDCs at the begining of 2021 continues over the 21st century. +SSP2-NPi;1,AMT,compileInTests,2;;;;;rcp45;3;;0;NPi;;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;;;;;;;;;;3;;;;;;Mix1;2005;;;;;SSP2-NPi: This National Policies Implemented (NPi) scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. The NPi assumes that policies fail to achieve NDC targets in 2030. Instead, carbon prices are assumed to grow and converge more slowly, leading to emissions trajectories in line with bottom-up studies on the effect of currently implemented policies. +SSP2-PkBudg500;1,AMT,2;;;;;rcp20;9;globallyOptimal;500;diffLin2Lin;200;2045;9;;;;;;;;;;;2050.GLO 0.9;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;Mix4ICEban;2030;;SSP2-NPi;;SSP2-NPi;SSP2-PkBudg500: This climate policy scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. The stylized climate policy scenario assumes a peak budget of 500 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a 1.5C scenario, peak warming is allowed to be well below 1.5C at median climate sensitivity but returns to values below 1.5C in at least 67 % of scenarios by the end of the century. +SSP2-PkBudg650;1,AMT,2;;;;;rcp20;9;globallyOptimal;650;diffLin2Lin;75;2055;9;;;;;;;;;;;2050.GLO 0.9;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;Mix4ICEban;2030;;SSP2-NPi;;SSP2-NPi;SSP2-PkBudg650: This climate policy scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. The stylized climate policy scenario assumes a peak budget of 650 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a 1.5C scenario, peak warming is allowed to be at or slightly above 1.5C at median climate sensitivity but returns to values below 1.5C in at least 67 % of scenarios by the end of the century. +SSP2-PkBudg1000;1,AMT,2;;;;;rcp26;9;globallyOptimal;1000;diffLin2Lin;45;2080;9;;;;;;;;;;;2050.GLO 0.5;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;Mix3ICEban;2030;;SSP2-NPi;;SSP2-NPi;SSP2-PkBudg1050: This climate policy scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. The stylized climate policy scenario assumes a peak budget of 1150 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a well below 2C scenario at median climate sensitivity but returns to values below 2C in at least 67 % of scenarios during the whole century. +# EU21 SSP2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SSP2-EU21-NPi-calibrate;calibrate;calibrate;14;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp45;;;0;NPi;;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;;;;;;;;;;3;;;;;;Mix1;2005;;;;;SSP2-EU21-calibration: This baseline scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. +SSP2-EU21-Base;1,AMT,compileInTests,2;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;;;;0;;;;;;off;;;;;;;;;;;;;;;;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;Mix1;2005;;;;;SSP2-EU21-Base: This baseline calibration scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. +SSP2-EU21-NDC;1,AMT,2;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp45;3;globallyOptimal;0;NDC;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;2020.2030.EUR_regi.all.year.netGHG_LULUCFGrassi 2.450;on;on;EUR_regi, NEU_regi;;;;;;;;;;3;;;;;;Mix2;2030;;SSP2-EU21-NPi;SSP2-EU21-NPi;SSP2-EU21-NPi;SSP2-EU21-NDC: This Nationally Determined Contribution (NDC) scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. The NDC includes all pledged policies even if not yet implemented. It assumes that the moderate and heterogeneous climate ambition reflected in the NDCs at the begining of 2021 continues over the 21st century. +SSP2-EU21-NPi;1,AMT,2;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp45;3;;0;NPi;;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;;;;;;;;;;3;;;;;;Mix1;2005;;;;;SSP2-EU21-NPi: This National Policies Implemented (NPi) scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. The NPi assumes that policies fail to achieve NDC targets in 2030. Instead, carbon prices are assumed to grow and converge more slowly, leading to emissions trajectories in line with bottom-up studies on the effect of currently implemented policies. +SSP2-EU21-PkBudg500;1,AMT,2;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;500;diffLin2Lin;200;2045;9;;;;;;;;;;;2050.GLO 0.9;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;Mix4ICEban;2030;;SSP2-EU21-NPi;;SSP2-EU21-NPi;SSP2-EU21-PkBudg500: This climate policy scenario follows the SSP2. The stylized climate policy scenario assumes a peak budget of 500 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a 1.5C scenario, peak warming is allowed to be at or slightly above 1.5C at median climate sensitivity but returns to values below 1.5C in at least 67 % of scenarios by the end of the century. +SSP2-EU21-PkBudg650;1,AMT,2;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffLin2Lin;75;2055;9;;;;;;;;;;;2050.GLO 0.9;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;Mix4ICEban;2030;;SSP2-EU21-NPi;;SSP2-EU21-NPi;SSP2-EU21-PkBudg650: This climate policy scenario follows the SSP2. The stylized climate policy scenario assumes a peak budget of 650 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a 1.5C scenario, peak warming is allowed to be at or slightly above 1.5C at median climate sensitivity but returns to values below 1.5C in at least 67 % of scenarios by the end of the century. +SSP2-EU21-PkBudg1000;1,AMT,2;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp26;9;globallyOptimal;1000;diffLin2Lin;45;2080;9;;;;;;;;;;;2050.GLO 0.5;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;Mix3ICEban;2030;;SSP2-EU21-NPi;;SSP2-EU21-NPi;SSP2-EU21-PkBudg1050: This climate policy scenario follows the SSP2. The stylized climate policy scenario assumes a peak budget of 1050 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a well below 2C scenario at median climate sensitivity but returns to values below 2C in at least 67 % of scenarios during the whole century. +# H12 SSP3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SSP3-NPi-calibrate;calibrate;calibrate;14;;;rcp45;;;0;NPi;;;9;;;;;;;2;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;pop_SSP3;gdp_SSP3;gdp_SSP3;highOil;highGas;highCoal;3;6;4;3;SSP3;;;forcing_SSP3;SSP3;Mix1;2005;;;;;SSP3-NPi-calibrate: This reference policy/baseline scenario follows the Shared Socioeconomic Pathways 3 called High. +SSP3-NDC;0;;;;;rcp45;3;globallyOptimal;0;NDC;;;9;;;;;;;2;;;;;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;2020.2030.EUR_regi.all.year.netGHG_LULUCFGrassi 2.450;on;on;EUR_regi, NEU_regi;pop_SSP3;gdp_SSP3;gdp_SSP3;highOil;highGas;highCoal;3;6;4;3;SSP3;;;forcing_SSP3;SSP3;Mix2;2030;;SSP2-NPi;SSP3-NPi;SSP3-NPi;SSP3-NDC: This Nationally Determined Contribution (NDC) scenario follows the Shared Socioeconomic Pathways 3 called High. The NDC includes all pledged policies even if not yet implemented. It assumes that the moderate and heterogeneous climate ambition reflected in the NDCs at the begining of 2021 continues over the 21st century. +SSP3-NPi;0;;;;;rcp45;3;;0;NPi;;;9;;;;;;;2;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;pop_SSP3;gdp_SSP3;gdp_SSP3;highOil;highGas;highCoal;3;6;4;3;SSP3;;;forcing_SSP3;SSP3;Mix1;2005;;;;;SSP3-NPi: This National Policies Implemented (NPi) scenario follows the Shared Socioeconomic Pathways 3 called High. The NPi assumes that policies fail to achieve NDC targets in 2030. Instead, carbon prices are assumed to grow and converge more slowly, leading to emissions trajectories in line with bottom-up studies on the effect of currently implemented policies. +SSP3-PkBudg650;0;;;;;rcp20;9;globallyOptimal;650;diffLin2Lin;75;2055;9;;;;;;;2;;;;2050.GLO 0.9;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;pop_SSP3;gdp_SSP3;gdp_SSP3;highOil;highGas;highCoal;3;6;4;;SSP3;;;forcing_SSP3;SSP3;Mix4ICEban;2030;;SSP2-NPi;;;SSP3-PkBudg650: This climate policy scenario follows the Shared Socioeconomic Pathways 3 called High. The stylized climate policy scenario assumes a peak budget of 650 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a 1.5C scenario, peak warming is allowed to be at or slightly above 1.5C at median climate sensitivity but returns to values below 1.5C in at least 67 % of scenarios by the end of the century. +SSP3-PkBudg1000;0;;;;;rcp26;9;globallyOptimal;1000;diffLin2Lin;45;2080;9;;;;;;;2;;;;2050.GLO 0.5;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;pop_SSP3;gdp_SSP3;gdp_SSP3;highOil;highGas;highCoal;3;6;4;;SSP3;;;forcing_SSP3;SSP3;Mix3ICEban;2030;;SSP2-NPi;;;SSP3-PkBudg1050: This climate policy scenario follows the Shared Socioeconomic Pathways 3 called High. The stylized climate policy scenario assumes a peak budget of 1150 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a well below 2C scenario at median climate sensitivity but returns to values below 2C in at least 67 % of scenarios during the whole century. +# H12 SSP1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SSP1-NPi-calibrate;calibrate;calibrate;14;;;rcp45;;;0;NPi;;;9;GLO 0.12, EUR_regi 0.15;;2;1.025;1.75;2;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;pop_SSP1;gdp_SSP1;gdp_SSP1;lowOil;lowGas;lowCoal;2;;4;3;SDP;0.5;1;forcing_SSP1;MFR;Mix1;2005;;;;;SSP1-calibration: This baseline calibration scenario follows the Shared Socioeconomic Pathways 1 called Sustainability. +SSP1-NDC;1,AMT,compileInTests;;;;;rcp45;3;globallyOptimal;0;NDC;;;9;GLO 0.12, EUR_regi 0.16;;2;1.025;1.75;2;;;;;;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;2020.2030.EUR_regi.all.year.netGHG_LULUCFGrassi 2.450;on;on;EUR_regi, NEU_regi;pop_SSP1;gdp_SSP1;gdp_SSP1;lowOil;lowGas;lowCoal;2;;4;3;SDP;0.5;1;forcing_SSP1;MFR;Mix2;2030;;SSP2-NPi;SSP1-NPi;SSP1-NPi;SSP1-NDC: This Nationally Determined Contribution (NDC) scenario follows the Shared Socioeconomic Pathways 1 called Sustainability. The NDC includes all pledged policies even if not yet implemented. It assumes that the moderate and heterogeneous climate ambition reflected in the NDCs at the begining of 2021 continues over the 21st century. +SSP1-NPi;1,AMT;;;;;rcp45;3;;0;NPi;;;9;GLO 0.12, EUR_regi 0.15;;2;1.025;1.75;2;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;pop_SSP1;gdp_SSP1;gdp_SSP1;lowOil;lowGas;lowCoal;2;;4;3;SDP;0.5;1;forcing_SSP1;MFR;Mix1;2005;;;;;SSP1-NPi: This National Policies Implemented (NPi) scenario follows the Shared Socioeconomic Pathways 1 called Sustainability. The NPi assumes that policies fail to achieve NDC targets in 2030. Instead, carbon prices are assumed to grow and converge more slowly, leading to emissions trajectories in line with bottom-up studies on the effect of currently implemented policies. +SSP1-PkBudg650;1,AMT;;;;;rcp20;9;globallyOptimal;650;diffLin2Lin;75;2055;9;GLO 0.12, EUR_regi 0.16;;2;1.025;1.75;2;;feelhpb 1.05, fehob 1.75, feheb 0.1;manual;feh2_otherInd 1.04, feelhth_otherInd 0.4, feh2_cement 2.0, feelhth_chemicals 1.3, feh2_chemicals 1.04;2050.GLO 0.9;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;pop_SSP1;gdp_SSP1;gdp_SSP1;lowOil;lowGas;lowCoal;2;;4;;SDP;0.5;1;forcing_SSP1;MFR;Mix4ICEban;2030;;SSP2-NPi;;;SSP1-PkBudg650: This climate policy scenario follows the Shared Socioeconomic Pathways 1 called Sustainability. The stylized climate policy scenario assumes a peak budget of 650 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a 1.5C scenario, peak warming is allowed to be at or slightly above 1.5C at median climate sensitivity but returns to values below 1.5C in at least 67 % of scenarios by the end of the century. +SSP1-PkBudg1000;1,AMT;;;;;rcp26;9;globallyOptimal;1000;diffLin2Lin;45;2080;9;GLO 0.12, EUR_regi 0.16;;2;1.025;1.75;2;;;;;2050.GLO 0.5;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;pop_SSP1;gdp_SSP1;gdp_SSP1;lowOil;lowGas;lowCoal;2;;4;;SDP;0.5;1;forcing_SSP1;MFR;Mix3ICEban;2030;;SSP2-NPi;;;SSP1-PkBudg1050: This climate policy scenario follows the Shared Socioeconomic Pathways 1 called Sustainability. The stylized climate policy scenario assumes a peak budget of 1050 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a well below 2C scenario at median climate sensitivity but returns to values below 2C in at least 67 % of scenarios during the whole century. +# H12 SSP2 lowEnergy;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SSP2_lowEn-NPi-calibrate;calibrate;calibrate;14;;;rcp45;;;0;NPi;;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;;;gdp_SSP2_lowEn;;;;;;;3;;;;;;Mix1;2005;;;;;SSP2_lowEn-calibration: This baseline scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. This scenario also assumes low energy demand trajectories. +SSP2_lowEn-NDC;1,AMT;;;;;rcp45;3;globallyOptimal;0;NDC;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;2020.2030.EUR_regi.all.year.netGHG_LULUCFGrassi 2.450;on;on;EUR_regi, NEU_regi;;;gdp_SSP2_lowEn;;;;;;;3;;;;;;Mix2;2025;;SSP2-NPi;SSP2_lowEn-NPi;SSP2_lowEn-NPi;SSP2_lowEn-NDC: This Nationally Determined Contribution (NDC) scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. This scenario also assumes low energy demand trajectories. The NDC includes all pledged policies even if not yet implemented. It assumes that the moderate and heterogeneous climate ambition reflected in the NDCs at the begining of 2021 continues over the 21st century. +SSP2_lowEn-NPi;1,AMT;;;;;rcp45;3;;0;NPi;;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;;;gdp_SSP2_lowEn;;;;;;;3;;;;;;Mix1;2005;;;;;SSP2_lowEn-NPi: This National Policies Implemented (NPi) scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. This scenario also assumes low energy demand trajectories. The NPi assumes that policies fail to achieve NDC targets in 2030. Instead, carbon prices are assumed to grow and converge more slowly, leading to emissions trajectories in line with bottom-up studies on the effect of currently implemented policies. +SSP2_lowEn-PkBudg650;1,AMT;;;;;rcp20;9;globallyOptimal;650;diffLin2Lin;75;2055;9;;;;;;;;;;;2050.GLO 0.9;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;;;gdp_SSP2_lowEn;;;;;;;;;;;;;Mix4ICEban;2030;;SSP2-NPi;;;SSP2_lowEn-PkBudg650: This climate policy scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. This scenario also assumes low energy demand trajectories. The stylized climate policy scenario assumes a peak budget of 650 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a 1.5C scenario, peak warming is allowed to be at or slightly above 1.5C at median climate sensitivity but returns to values below 1.5C in at least 67 % of scenarios by the end of the century. +SSP2_lowEn-PkBudg1000;1,AMT;;;;;rcp26;9;globallyOptimal;1000;diffLin2Lin;45;2080;9;;;;;;;;;;;2050.GLO 0.5;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;;;gdp_SSP2_lowEn;;;;;;;;;;;;;Mix3ICEban;2030;;SSP2-NPi;;;SSP2_lowEn-PkBudg1050: This climate policy scenario follows the Shared Socioeconomic Pathways 2 called Middle of the Road. This scenario also assumes low energy demand trajectories. The stylized climate policy scenario assumes a peak budget of 1050 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a well below 2C scenario at median climate sensitivity but returns to values below 2C in at least 67 % of scenarios during the whole century. +# H12 SSP5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SSP5-NPi-calibrate;calibrate;calibrate;14;;;rcp45;;;0;NPi;;;9;;;1;;1.75;3;2;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;pop_SSP5;gdp_SSP5;gdp_SSP5;highOil;highGas;highCoal;3;6;4;3;SSP5;0.5;1;forcing_SSP5;SSP5;Mix1;2005;;;;;SSP5-calibration: This baseline calibration scenario follows the Shared Socioeconomic Pathways 5 called Fossil-Fueled Development. +SSP5-NDC;1;;;;;rcp45;3;globallyOptimal;0;NDC;;;9;;;1;;1.75;3;2;;;;;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;2020.2030.EUR_regi.all.year.netGHG_LULUCFGrassi 2.450;on;on;EUR_regi, NEU_regi;pop_SSP5;gdp_SSP5;gdp_SSP5;highOil;highGas;highCoal;3;6;4;3;SSP5;0.5;1;forcing_SSP5;SSP5;Mix2;2030;;SSP2-NPi;SSP5-NPi;SSP5-NPi;SSP5-NDC: This Nationally Determined Contribution (NDC) scenario follows the Shared Socioeconomic Pathways 5 called Fossil-Fueled Development. The NDC includes all pledged policies even if not yet implemented. It assumes that the moderate and heterogeneous climate ambition reflected in the NDCs at the begining of 2021 continues over the 21st century. +SSP5-NPi;1;;;;;rcp45;3;;0;NPi;;;9;;;1;;1.75;3;2;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;pop_SSP5;gdp_SSP5;gdp_SSP5;highOil;highGas;highCoal;3;6;4;3;SSP5;0.5;1;forcing_SSP5;SSP5;Mix1;2005;;;;;SSP5-NPi: This National Policies Implemented (NPi) scenario follows the Shared Socioeconomic Pathways 5 called Fossil-Fueled Development. The NPi assumes that policies fail to achieve NDC targets in 2030. Instead, carbon prices are assumed to grow and converge more slowly, leading to emissions trajectories in line with bottom-up studies on the effect of currently implemented policies. +SSP5-PkBudg650;1;;;;;rcp20;9;globallyOptimal;650;diffLin2Lin;75;2055;9;;;1;;1.75;3;2;;;;2050.GLO 0.9;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;pop_SSP5;gdp_SSP5;gdp_SSP5;highOil;highGas;highCoal;3;6;4;;SSP5;0.5;1;forcing_SSP5;SSP5;Mix4ICEban;2030;;SSP2-NPi;;;SSP5-PkBudg650: This climate policy scenario follows the Shared Socioeconomic Pathways 5 called Fossil-Fueled Development. The stylized climate policy scenario assumes a peak budget of 650 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a 1.5C scenario, peak warming is allowed to be at or slightly above 1.5C at median climate sensitivity but returns to values below 1.5C in at least 67 % of scenarios by the end of the century. +SSP5-PkBudg1000;1,compileInTests;;;;;rcp26;9;globallyOptimal;1000;diffLin2Lin;45;2080;9;;;1;;1.75;3;2;;;;2050.GLO 0.5;NDC;regiCarbonPrice;2030.EUR_regi.tax.t.FE_wo_b_wo_n_e.all 1.2809;;on;on;EUR_regi, NEU_regi;pop_SSP5;gdp_SSP5;gdp_SSP5;highOil;highGas;highCoal;3;6;4;;SSP5;0.5;1;forcing_SSP5;SSP5;Mix3ICEban;2030;;SSP2-NPi;;;SSP5-PkBudg1050: This climate policy scenario follows the Shared Socioeconomic Pathways 5 called Fossil-Fueled Development. The stylized climate policy scenario assumes a peak budget of 1050 Gt CO2 on total CO2 emissions from 2015 to 2100. This is a well below 2C scenario at median climate sensitivity but returns to values below 2C in at least 67 % of scenarios during the whole century. diff --git a/core/bounds.gms b/core/bounds.gms index 778373de7..165215412 100755 --- a/core/bounds.gms +++ b/core/bounds.gms @@ -25,8 +25,14 @@ vm_costTeCapital.fx(t,regi,teNoLearn) = pm_inco0_t(t,regi,teNoLearn); *' #### Model Bounds in Core *' 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"))), +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; @@ -58,17 +64,26 @@ v_capDistr.fx(t,regi,te,rlf)$(rlf.val gt 9) = 0; 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: -vm_cap.fx(t,regi,"solhe",rlf) = 0; -vm_deltaCap.fx(t,regi,"solhe",rlf) = 0; - -vm_cap.fx(t,regi,"fnrs",rlf) = 0; -vm_deltaCap.fx(t,regi,"fnrs",rlf) = 0; - -vm_cap.fx(t,regi,"pcc",rlf) = 0; -vm_deltaCap.fx(t,regi,"pcc",rlf) = 0; +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_cap.fx(t,regi,"pco",rlf) = 0; -vm_deltaCap.fx(t,regi,"pco",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; +*** windoffshore-todo: to remove when removing wind from all_te +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. @@ -259,38 +274,13 @@ vm_emiMac.fx(t,regi,"oc") = 0; *** ------------------------------------------------------------------------- *** Exogenous values: *** ------------------------------------------------------------------------- -***---- -*RP* fix capacities for wind, spv and csp to real world 2010 and 2015 values: -*CG* adding 2020 values -***---- -loop(te$(sameas(te,"csp")), - vm_cap.lo("2015",regi,te,"1") = 0.95 * pm_histCap("2015",regi,te)$(pm_histCap("2015",regi,te) gt 1e-10); - vm_cap.up("2015",regi,te,"1") = 1.05 * pm_histCap("2015",regi,te)$(pm_histCap("2015",regi,te) gt 1e-10); -); - - -$IFTHEN.WindOff %cm_wind_offshore% == "0" -loop(te$(sameas(te,"spv") OR sameas(te,"wind") ), - vm_cap.lo("2015",regi,te,"1") = 0.95 * pm_histCap("2015",regi,te)$(pm_histCap("2015",regi,te) gt 1e-10); - vm_cap.up("2015",regi,te,"1") = 1.05 * pm_histCap("2015",regi,te)$(pm_histCap("2015",regi,te) gt 1e-10); - vm_cap.lo("2020",regi,te,"1") = 0.95 * pm_histCap("2020",regi,te)$(pm_histCap("2020",regi,te) gt 1e-10); - vm_cap.up("2020",regi,te,"1") = 1.05 * pm_histCap("2020",regi,te)$(pm_histCap("2020",regi,te) gt 1e-10); - vm_cap.up("2025",regi,te,"1")$(pm_histCap("2025",regi,te) gt 1e-6) = 1.05 * pm_histCap("2025",regi,te)$(pm_histCap("2025",regi,te) gt 1e-6); !! only set a bound if values >1MW are in pm_histCap -); - -$ENDIF.WindOff - - -$IFTHEN.WindOff %cm_wind_offshore% == "1" -loop(te$(sameas(te,"spv") OR sameas(te,"wind") OR sameas(te,"windoff")), - vm_cap.lo("2015",regi,te,"1") = 0.95 * pm_histCap("2015",regi,te)$(pm_histCap("2015",regi,te) gt 1e-10); - vm_cap.up("2015",regi,te,"1") = 1.05 * pm_histCap("2015",regi,te)$(pm_histCap("2015",regi,te) gt 1e-10); - vm_cap.lo("2020",regi,te,"1") = 0.95 * pm_histCap("2020",regi,te)$(pm_histCap("2020",regi,te) gt 1e-10); - vm_cap.up("2020",regi,te,"1") = 1.05 * pm_histCap("2020",regi,te)$(pm_histCap("2020",regi,te) gt 1e-10); - vm_cap.up("2025",regi,te,"1")$(pm_histCap("2025",regi,te) gt 1e-6) = 1.05 * pm_histCap("2025",regi,te)$(pm_histCap("2025",regi,te) gt 1e-10); !! only set a bound if values >1MW are in pm_histCap -); -$ENDIF.WindOff +*** fix capacities for wind, spv and csp to real world historical values: +vm_cap.lo("2015",regi,teVRE,"1") = 0.95 * pm_histCap("2015",regi,teVRE)$(pm_histCap("2015",regi,teVRE) gt 1e-10); +vm_cap.up("2015",regi,teVRE,"1") = 1.05 * pm_histCap("2015",regi,teVRE)$(pm_histCap("2015",regi,teVRE) gt 1e-10); +vm_cap.lo("2020",regi,teVRE,"1") = 0.95 * pm_histCap("2020",regi,teVRE)$(pm_histCap("2020",regi,teVRE) gt 1e-10); +vm_cap.up("2020",regi,teVRE,"1") = 1.05 * pm_histCap("2020",regi,teVRE)$(pm_histCap("2020",regi,teVRE) gt 1e-10); +vm_cap.up("2025",regi,teVRE,"1")$(pm_histCap("2025",regi,teVRE) gt 1e-6) = 1.05 * pm_histCap("2025",regi,teVRE)$(pm_histCap("2025",regi,teVRE) gt 1e-10); !! only set a bound if values >1MW are in pm_histCap *** lower bound on capacities for ngcc and ngt and gaschp for regions defined at the pm_histCap file loop(te$(sameas(te,"ngcc") OR sameas(te,"ngt") OR sameas(te,"gaschp")), diff --git a/core/datainput.gms b/core/datainput.gms index 5d267d62c..e46239725 100644 --- a/core/datainput.gms +++ b/core/datainput.gms @@ -6,14 +6,14 @@ *** | Contact: remind@pik-potsdam.de *** SOF ./core/datainput.gms -*AJS* technical. initialize parameters so that they are read from gdx +*** technical. initialize parameters so that they are read from gdx vm_co2eq.l(ttot,regi) = 0; vm_emiAll.l(ttot,regi,enty) = 0; vm_emiCO2Sector.l(ttot,all_regi,emi_sectors) = 0; -*AJS* initialize parameter (avoid compilation errors) -* do this at the start of datainput to prevent accidental overwriting +*** initialize parameter (avoid compilation errors) +*** do this at the start of datainput to prevent accidental overwriting pm_SolNonInfes(regi) = 1; !! assume the starting point came from a feasible solution pm_capCum0(ttot,regi,teLearn)$( (ttot.val ge 2005) and (pm_SolNonInfes(regi) eq 1)) = 0; @@ -21,7 +21,7 @@ pm_globalMeanTemperature(tall) = 0; pm_globalMeanTemperatureZeroed1900(tall) = 0; pm_temperatureImpulseResponseCO2(tall,tall) = 0; -*AL* Initialise to avoid compilation errors in presolve if variable not in input.gdx +*** Initialise to avoid compilation errors in presolve if variable not in input.gdx vm_demFeForEs.L(t,regi,entyFe,esty,teEs) = 0; vm_demFeForEs.L(t,regi,fe2es(entyFe,esty,teEs)) = 0.1; @@ -41,14 +41,12 @@ pm_dt("1900") = 5; pm_dt(ttot)$(ttot.val > 1900) = ttot.val - pm_ttot_val(ttot-1); display pm_ts, pm_dt; - loop(ttot, loop(tall$((ttot.val le tall.val) AND (pm_ttot_val(ttot+1) ge tall.val)), pm_interpolWeight_ttot_tall(tall) = ( p_tall_val(tall) - pm_ttot_val(ttot) ) / ( pm_ttot_val(ttot+1) - pm_ttot_val(ttot) ); ); ); - pm_tall_2_ttot(tall, ttot)$((ttot.val lt tall.val) AND (pm_ttot_val(ttot+1) gt tall.val)) = Yes; pm_ttot_2_tall(ttot,tall)$((ttot.val = tall.val) ) = Yes; @@ -106,14 +104,12 @@ $offdelim ; p_developmentState(tall,all_regi) = f_developmentState(tall,all_regi,"%c_GDPpcScen%"); - *** Load information from BAU run Execute_Loadpoint 'input' vm_cesIO, vm_invMacro; pm_gdp_gdx(ttot,regi) = vm_cesIO.l(ttot,regi,"inco"); p_inv_gdx(ttot,regi) = vm_invMacro.l(ttot,regi,"kap"); - *------------------------------------------------------------------------------------ *------------------------------------------------------------------------------------ *** ESM @@ -133,10 +129,10 @@ pm_shGasLiq_fe_lo(ttot,regi,sector)=0; *------------------------------------------------------------------------------------ -*** Technology data input read-in and manipulation +*** Technology data input read-in and manipulation START *------------------------------------------------------------------------------------ -*** Note: future to be its own module perhaps -*** Note: in module 5 there are more cost manipulation after initial capacities are calculated, be aware those can overwrite your technology values for policy runs if you set them here in the core +*** In module 5 there are more cost manipulation after initial capacities are calculated, +*** be aware those can overwrite your technology values for policy runs if you set them here in the core ***--------------------------------------------------------------------------- *** Reading in and initializing global data ***--------------------------------------------------------------------------- @@ -146,8 +142,9 @@ $include "./core/input/generisdata_tech.prn" $include "./core/input/generisdata_trade.prn" ; -*** CG warning: some of the SSP1 and SSP5 costs are not consistent with the story line (e.g. under SSP1 blue H2 and some fossil fuel CCS technologies have lower costs than in SSP2). This is to be fixed in the future when new SSP storylines are implemented, unclear when (29-1-2024). In the future, SSP1 and SSP5 data should be implemented as switches to avoid errors -*JH* SSP energy technology scenario +*** CG warning: some of the SSP1 and SSP5 costs are not consistent with the story line (e.g. under SSP1 blue H2 and some fossil fuel CCS technologies have lower costs than in SSP2). +*** This is to be fixed in the future when new SSP storylines are implemented, unclear when (29-1-2024). +*** In the future, SSP1 and SSP5 data should be implemented as switches to avoid errors table f_dataglob_SSP1(char,all_te) "Techno-economic assumptions consistent with SSP1" $include "./core/input/generisdata_tech_SSP1.prn" $include "./core/input/generisdata_trade.prn" @@ -157,28 +154,6 @@ $include "./core/input/generisdata_tech_SSP5.prn" $include "./core/input/generisdata_trade.prn" ; -$ifthen.WindOff %cm_wind_offshore% == "1" -*CG* set wind offshore, storage and grid to be the same as wind onshore (later should be integrated into input data) -* main difference between onshore and offshore is the difference in f32_factorStorage -fm_dataglob(char,"storwindoff") = fm_dataglob(char,"storwind"); -fm_dataglob(char,"gridwindoff") = fm_dataglob(char,"gridwind"); -f_dataglob_SSP1(char,"storwindoff") = f_dataglob_SSP1(char,"storwind"); -f_dataglob_SSP1(char,"gridwindoff") = f_dataglob_SSP1(char,"gridwind"); -f_dataglob_SSP5(char,"storwindoff") = f_dataglob_SSP5(char,"storwind"); -f_dataglob_SSP5(char,"gridwindoff") = f_dataglob_SSP5(char,"gridwind"); -$endif.WindOff - -***--------------------------------------------------------------------------- -*** Reading in and initializing regional cost data -***--------------------------------------------------------------------------- -parameter p_inco0(ttot,all_regi,all_te) "regionalized technology costs Unit: USD$/KW" -/ -$ondelim -$include "./core/input/p_inco0.cs4r" -$offdelim -/ -; - *** initializing energy service capital pm_esCapCost(tall,all_regi,all_teEs) = 0; @@ -187,22 +162,21 @@ pm_esCapCost(tall,all_regi,all_teEs) = 0; ***--------------------------------------------------------------------------- *** Manipulating global or regional cost technology data - absolute value ***--------------------------------------------------------------------------- -!! Modify spv and storspv parameters for optimistic VRE supply assumptions -if (cm_VRE_supply_assumptions eq 1, +*** Modify spv and storspv parameters for optimistic VRE supply assumptions +if (cm_VRE_supply_assumptions eq 1, !! "optimistic" assumptions on VRE supply fm_dataglob("learn","spv") = 0.257; fm_dataglob("inco0","storspv") = 7000; fm_dataglob("incolearn","storspv") = 4240; fm_dataglob("learn","storspv") = 0.12; ); -if (cm_VRE_supply_assumptions eq 2, +if (cm_VRE_supply_assumptions eq 2, !! "sombre" assumptions on VRE supply fm_dataglob("incolearn","spv") = 5010; ); -if (cm_VRE_supply_assumptions eq 3, +if (cm_VRE_supply_assumptions eq 3, !! "bleak" assumptions on VRE supply fm_dataglob("incolearn","spv") = 4960; ); - -*JH* New nuclear assumption for SSP5 +*** New nuclear assumption for SSP5 if (cm_nucscen eq 6, f_dataglob_SSP5("inco0","tnrs") = 6270; !! increased from 4000 to 6270 with the update of technology costs in REMIND 1.7 to keep the percentage increase between SSP2 and SSP5 constant ); @@ -216,38 +190,51 @@ if (c_techAssumptScen eq 3, *RP* include global flexibility parameters $include "./core/input/generisdata_flexibility.prn" -$ifthen.WindOff %cm_wind_offshore% == "1" -fm_dataglob("flexibility","storwindoff") = 1.93; -fm_dataglob("flexibility","windoff") = -1; -$endif.WindOff display fm_dataglob; -*TD* ccsinje cost scenarios -* low estimate: ccsinje cost prior to 03/2024; i.e. ~11 USD/tCO2 in 2025, decreasing to ~7.5USD/tCO2 as of 2035 +*** ccsinje cost scenarios +*** low estimate: ccsinje cost prior to 03/2024; i.e. ~11 USD/tCO2 in 2025, decreasing to ~7.5USD/tCO2 as of 2035 $if "%cm_ccsinjeCost%" == "low" fm_dataglob("tech_stat","ccsinje") = 2; $if "%cm_ccsinjeCost%" == "low" fm_dataglob("inco0","ccsinje") = 220; $if "%cm_ccsinjeCost%" == "low" fm_dataglob("constrTme","ccsinje") = 0; -* high estimate: ~20USD/tCO2 (constant), assuming upper end of storage cost and long transport distances +*** high estimate: ~20USD/tCO2 (constant), assuming upper end of storage cost and long transport distances $if "%cm_ccsinjeCost%" == "high" fm_dataglob("inco0","ccsinje") = 550; ***--------------------------------------------------------------------------- *** Manipulating global or regional cost technology data - relative value ***--------------------------------------------------------------------------- *** Overwrite default technology cost parameter values based on specific scenario configs -$if not "%cm_incolearn%" == "off" parameter p_new_incolearn(all_te) / %cm_incolearn% /; -$if not "%cm_incolearn%" == "off" fm_dataglob("incolearn",te)$p_new_incolearn(te)=p_new_incolearn(te); -$if not "%cm_inco0Factor%" == "off" parameter p_new_inco0Factor(all_te) / %cm_inco0Factor% /; -$if not "%cm_inco0Factor%" == "off" fm_dataglob("inco0",te)$p_new_inco0Factor(te)=p_new_inco0Factor(te)*fm_dataglob("inco0",te); -$if not "%cm_inco0RegiFactor%" == "off" parameter p_new_inco0RegiFactor(all_te) / %cm_inco0RegiFactor% /; -$if not "%cm_inco0RegiFactor%" == "off" p_inco0(ttot,regi,te)$(p_inco0(ttot,regi,te) and p_new_inco0RegiFactor(te)) = p_new_inco0RegiFactor(te)*p_inco0(ttot,regi,te); -$if not "%cm_learnRate%" == "off" parameter p_new_learnRate(all_te) / %cm_learnRate% /; -$if not "%cm_learnRate%" == "off" fm_dataglob("learn",te)$p_new_learnRate(te)=p_new_learnRate(te); +$if not "%cm_incolearn%" == "off" parameter p_new_incolearn(all_te) / %cm_incolearn% /; +$if not "%cm_incolearn%" == "off" fm_dataglob("incolearn",te)$p_new_incolearn(te) = p_new_incolearn(te); +$if not "%cm_inco0Factor%" == "off" parameter p_new_inco0Factor(all_te) / %cm_inco0Factor% /; +$if not "%cm_inco0Factor%" == "off" fm_dataglob("inco0",te)$p_new_inco0Factor(te) = p_new_inco0Factor(te) * fm_dataglob("inco0",te); +$if not "%cm_learnRate%" == "off" parameter p_new_learnRate(all_te) / %cm_learnRate% /; +$if not "%cm_learnRate%" == "off" fm_dataglob("learn",te)$p_new_learnRate(te) = p_new_learnRate(te); + +*** generisdata_tech is in $2015. Needs to be converted to $2017 +fm_dataglob("inco0",te) = s_D2015_2_D2017 * fm_dataglob("inco0",te); +fm_dataglob("incolearn",te) = s_D2015_2_D2017 * fm_dataglob("incolearn",te); +fm_dataglob("omv",te) = s_D2015_2_D2017 * fm_dataglob("omv",te); + +***--------------------------------------------------------------------------- +*** Reading in and initializing regional cost data +***--------------------------------------------------------------------------- +parameter p_inco0(ttot,all_regi,all_te) "regionalized technology costs Unit: USD$/KW" +/ +$ondelim +$include "./core/input/p_inco0.cs4r" +$offdelim +/ +; + +*** windoffshore-todo +*** allow input data with either "wind" or "windon" until mrremind is updated +p_inco0(ttot,all_regi,"windon") $ (p_inco0(ttot,all_regi,"windon") eq 0) = p_inco0(ttot,all_regi,"wind"); +p_inco0(ttot,all_regi,"wind") = 0; -*RP* the new cost data in generisdata_tech is now in $2015. As long as the model runs in $2005, these values have first to be converted to D2005 by dividing by 1.2 downwards -fm_dataglob("inco0",te) = s_D2015_2_D2005 * fm_dataglob("inco0",te); -fm_dataglob("incolearn",te) = s_D2015_2_D2005 * fm_dataglob("incolearn",te); -fm_dataglob("omv",te) = s_D2015_2_D2005 * fm_dataglob("omv",te); -p_inco0(ttot,regi,te) = s_D2015_2_D2005 * p_inco0(ttot,regi,te); + +$if not "%cm_inco0RegiFactor%" == "off" parameter p_new_inco0RegiFactor(all_te) / %cm_inco0RegiFactor% /; +$if not "%cm_inco0RegiFactor%" == "off" p_inco0(ttot,regi,te)$(p_inco0(ttot,regi,te) and p_new_inco0RegiFactor(te)) = p_new_inco0RegiFactor(te) * p_inco0(ttot,regi,te); *** inco0 (and incolearn) are given in $/kW (or $/(tC/a) for ccs-related tech or $/(t/a) for process-based industry) *** convert to REMIND units, i.e., T$/TW (or T$/(GtC/a) for ccs-related tech or T$/(Gt/a) for process-based industry) @@ -262,10 +249,9 @@ p_inco0(ttot,regi,te) = s_DpKW_2_TDpTW * p_inco0(ttot,regi,te); fm_dataglob("inco0","csp") = 0.7 * fm_dataglob("inco0","csp"); fm_dataglob("incolearn","csp") = 0.7 * fm_dataglob("incolearn","csp"); -*KK* adjust costs for oae from USD/GtCaO to USD/GtC +*** adjust costs for oae from USD/GtCaO to USD/GtC fm_dataglob("inco0", "oae_ng") = fm_dataglob("inco0", "oae_ng") / (cm_33_OAE_eff / sm_c_2_co2); fm_dataglob("inco0", "oae_el") = fm_dataglob("inco0", "oae_el") / (cm_33_OAE_eff / sm_c_2_co2); - *** -------------------------------------------------------------------------------- *** Regionalize technology investment cost data *** ------------------------------------------------------------------------------- @@ -302,7 +288,6 @@ $endif ) ); - *** nuclear sees 3% higher interest rates during construction time due to higher construction time risk, see "The economic future of nuclear power - A study conducted at The University of Chicago" (2004) loop(te$sameas(te,"tnrs"), p_tkpremused(regi,te) = 1/fm_dataglob("constrTme",te) @@ -317,7 +302,6 @@ $endif display p_tkpremused; *** modify regionalized cost data using cost premium during construction time - pm_data(regi,"inco0",te) = (1 + p_tkpremused(regi,te) ) * pm_data(regi,"inco0",te); pm_data(regi,"incolearn",te) = (1 + p_tkpremused(regi,te) ) * pm_data(regi,"incolearn",te); p_inco0(ttot,regi,teRegTechCosts) = (1 + p_tkpremused(regi,teRegTechCosts) ) * p_inco0(ttot,regi,teRegTechCosts); @@ -331,44 +315,42 @@ pm_data(regi,"floorcost",teLearn(te)) = pm_data(regi,"inco0",te) - pm_data(regi, *** report old floor costs pre manipulation in non-default scenario $ifthen.floorscen NOT %cm_floorCostScen% == "default" -p_oldFloorCostdata(regi,teLearn(te)) = pm_data(regi,"inco0",te) - pm_data(regi,"incolearn",te); + p_oldFloorCostdata(regi,teLearn(te)) = pm_data(regi,"inco0",te) - pm_data(regi,"incolearn",te); $endif.floorscen - *** calculate floor costs for learning technologies if historical price structure prevails $ifthen.floorscen %cm_floorCostScen% == "pricestruc" -** compute maximum tech cost in 2015 for a given tech among regions -p_maxRegTechCost2015(teRegTechCosts) = SMax(regi, p_inco0("2015",regi,teRegTechCosts)); -*take the ratio of the tech cost in 2015 and the maximum cost, and multiply with the global floor to get new floorcost that preserves the price structure -pm_data(regi,"floorcost",teLearn(te))$(p_maxRegTechCost2015(te) ne 0) = p_oldFloorCostdata(regi,te) * p_inco0("2015",regi,te) / p_maxRegTechCost2015(te); -* for newer data than 2015, use these -p_maxRegTechCost2020(teRegTechCosts) = SMax(regi, p_inco0("2020",regi,teRegTechCosts)); -pm_data(regi,"floorcost",teLearn(te))$(p_maxRegTechCost2020(te) ne 0) = p_oldFloorCostdata(regi,te) * p_inco0("2020",regi,te) / p_maxRegTechCost2020(te); -* report the new floor cost data -p_newFloorCostdata(regi,teLearn(te))$(p_maxRegTechCost2015(te) ne 0) = p_oldFloorCostdata(regi,te) * p_inco0("2015",regi,te) / p_maxRegTechCost2015(te); -p_newFloorCostdata(regi,teLearn(te))$(p_maxRegTechCost2020(te) ne 0) = p_oldFloorCostdata(regi,te) * p_inco0("2020",regi,te) / p_maxRegTechCost2020(te); +*** compute maximum tech cost in 2015 for a given tech among regions + p_maxRegTechCost2015(teRegTechCosts) = SMax(regi, p_inco0("2015",regi,teRegTechCosts)); +*** take the ratio of the tech cost in 2015 and the maximum cost, and multiply with the global floor to get new floorcost that preserves the price structure + pm_data(regi,"floorcost",teLearn(te))$(p_maxRegTechCost2015(te) ne 0) = p_oldFloorCostdata(regi,te) * p_inco0("2015",regi,te) / p_maxRegTechCost2015(te); +*** for newer data than 2015, use these + p_maxRegTechCost2020(teRegTechCosts) = SMax(regi, p_inco0("2020",regi,teRegTechCosts)); + pm_data(regi,"floorcost",teLearn(te))$(p_maxRegTechCost2020(te) ne 0) = p_oldFloorCostdata(regi,te) * p_inco0("2020",regi,te) / p_maxRegTechCost2020(te); +*** report the new floor cost data + p_newFloorCostdata(regi,teLearn(te))$(p_maxRegTechCost2015(te) ne 0) = p_oldFloorCostdata(regi,te) * p_inco0("2015",regi,te) / p_maxRegTechCost2015(te); + p_newFloorCostdata(regi,teLearn(te))$(p_maxRegTechCost2020(te) ne 0) = p_oldFloorCostdata(regi,te) * p_inco0("2020",regi,te) / p_maxRegTechCost2020(te); $endif.floorscen *** calculate floor costs for learning technologies if there is technology transfer $ifthen.floorscen %cm_floorCostScen% == "techtrans" -** compute maximum income GDP PPP per capita among regions in 2050 -p_gdppcap2050_PPP(regi) = pm_gdp("2050",regi) / pm_shPPPMER(regi) / pm_pop("2050",regi); -p_maxPPP2050 = SMax(regi, p_gdppcap2050_PPP(regi)); -*take the ratio of the PPP income and the maximum income, and multiply with the global floor to get new floorcost that simulates tech transfer where costs are solely dependent on local wages, not on IP rent -pm_data(regi,"floorcost",teLearn(te))$(p_maxPPP2050 ne 0) = p_oldFloorCostdata(regi,te) * p_gdppcap2050_PPP(regi) / p_maxPPP2050; -p_newFloorCostdata(regi,teLearn(te))$(p_maxPPP2050 ne 0) = p_oldFloorCostdata(regi,te) * p_gdppcap2050_PPP(regi) / p_maxPPP2050; +*** compute maximum income GDP PPP per capita among regions in 2050 + p_gdppcap2050_PPP(regi) = pm_gdp("2050",regi) / pm_shPPPMER(regi) / pm_pop("2050",regi); + p_maxPPP2050 = SMax(regi, p_gdppcap2050_PPP(regi)); +*** take the ratio of the PPP income and the maximum income, and multiply with the global floor to get new floorcost that simulates tech transfer where costs are solely dependent on local wages, not on IP rent + pm_data(regi,"floorcost",teLearn(te))$(p_maxPPP2050 ne 0) = p_oldFloorCostdata(regi,te) * p_gdppcap2050_PPP(regi) / p_maxPPP2050; + p_newFloorCostdata(regi,teLearn(te))$(p_maxPPP2050 ne 0) = p_oldFloorCostdata(regi,te) * p_gdppcap2050_PPP(regi) / p_maxPPP2050; $endif.floorscen *** In case regionally differentiated investment costs should be used the corresponding entries are revised: $ifthen.REG_techcosts not "%cm_techcosts%" == "GLO" !! cm_techcosts is REG or REG2040 pm_data(regi,"inco0",teRegTechCosts) = p_inco0("2015",regi,teRegTechCosts); - loop(teRegTechCosts$(sameas(teRegTechCosts,"spv") ), - pm_data(regi,"inco0",teRegTechCosts) = p_inco0("2020",regi,teRegTechCosts); - ); - pm_data(regi,"incolearn",teLearn(te)) = pm_data(regi,"inco0",te) - pm_data(regi,"floorcost",te) ; + pm_data(regi,"inco0","spv") = p_inco0("2020",regi,"spv"); + pm_data(regi,"incolearn",teLearn) = pm_data(regi,"inco0",teLearn) - pm_data(regi,"floorcost",teLearn) ; $endif.REG_techcosts +*** ------------------------------------------------------------------------------- *** Calculate learning parameters: - +*** ------------------------------------------------------------------------------- *** global exponent *** parameter calculation for global level, that regional values can gradually converge to fm_dataglob("learnExp_woFC",teLearn(te)) = log(1 - fm_dataglob("learn",te)) / log(2); @@ -403,8 +385,8 @@ $else pm_data(regi,"learnMult_wFC","spv") = pm_data(regi,"incolearn","spv") / (sum(regi2,p_capCum("2020",regi2,"spv")) ** pm_data(regi,"learnExp_wFC","spv")); $endif -*FS initialize learning curve for most advanced technologies as defined by tech_stat = 4 in generisdata_tech.prn (with very small real-world capacities in 2020) -* equally for all regions based on global cumulate capacity of ccap0 and incolearn (difference between initial investment cost and floor cost) +*FS* initialize learning curve for most advanced technologies as defined by tech_stat = 4 in generisdata_tech.prn (with very small real-world capacities in 2020) +*** equally for all regions based on global cumulate capacity of ccap0 and incolearn (difference between initial investment cost and floor cost) pm_data(regi,"learnMult_wFC",te)$( pm_data(regi,"tech_stat",te) eq 4 ) = pm_data(regi,"incolearn",te) / ( fm_dataglob("ccap0",te) @@ -413,17 +395,18 @@ pm_data(regi,"learnMult_wFC",te)$( pm_data(regi,"tech_stat",te) eq 4 ) display p_capCum; display pm_data; - +*** ------------------------------------------------------------------------------- *** end learning parameters +*** ------------------------------------------------------------------------------- -*RP* 2012-03-07: Markup for advanced technologies +*** Markup for advanced technologies table p_costMarkupAdvTech(s_statusTe,tall) "Multiplicative investment cost markup for early time periods (until 2030) on advanced technologies (CCS, Hydrogen) that are not modeled through endogenous learning" $include "./core/input/p_costMarkupAdvTech.prn" ; *** add mark-up cost for tech_stat 4 and 5 technologies as for tech_stat 3 technologies in first years -p_costMarkupAdvTech("4",ttot)=p_costMarkupAdvTech("3",ttot); -p_costMarkupAdvTech("5",ttot)=p_costMarkupAdvTech("3",ttot); +p_costMarkupAdvTech("4",ttot) = p_costMarkupAdvTech("3",ttot); +p_costMarkupAdvTech("5",ttot) = p_costMarkupAdvTech("3",ttot); loop (teNoLearn(te), pm_inco0_t(ttot,regi,te) = pm_data(regi,"inco0",te); @@ -437,7 +420,7 @@ loop (teNoLearn(te), ); display pm_inco0_t; -*FL* regional differentiation and convergence of non-learning technologies costs +*** regional differentiation and convergence of non-learning technologies costs $ifthen.REG2040_techcosts "%cm_techcosts%" == "REG2040" !! cm_techcosts REG2040 *** for 2015-2040, use differentiated costs when available for a specific non-learning technology loop(te$( teNoLearn(te) AND teRegTechCosts(te) ), @@ -482,17 +465,16 @@ $ifthen.REG_techcosts "%cm_techcosts%" == "REG" !! cm_techcosts REG ); $endif.REG_techcosts - *------------------------------------------------------------------------------------ -*** END of Technology cost data input read-in and manipulation in core +*** Technology data input read-in and manipulation END *------------------------------------------------------------------------------------ *** Note: in modules/05_initialCap/on/preloop.gms, there are additional adjustment to investment *** cost in the near term due to calibration of historical energy conversion efficiencies based on *** initial capacities *------------------------------------------------------------------------------------ -*JH* Determine CCS injection rates -*LP* for c_ccsinjecratescen =0 the storing variable vm_co2CCS will be fixed to 0 in bounds.gms, the sm_ccsinjecrate=0 will cause a division by 0 error in the 21_tax module +*** Determine CCS injection rates +*** for c_ccsinjecratescen =0 the storing variable vm_co2CCS will be fixed to 0 in bounds.gms, the sm_ccsinjecrate=0 will cause a division by 0 error in the 21_tax module s_ccsinjecrate = 0.005 if (c_ccsinjecratescen eq 2, s_ccsinjecrate = s_ccsinjecrate * 0.50 ); !! Lower estimate if (c_ccsinjecratescen eq 3, s_ccsinjecrate = s_ccsinjecrate * 1.50 ); !! Upper estimate @@ -514,7 +496,7 @@ table fm_dataemiglob(all_enty,all_enty,all_te,all_enty) "read-in of emissions f $include "./core/input/generisdata_emi.prn" ; -parameter pm_share_ind_fesos(tall,all_regi) "Share of coal solids (coaltr) used in the industry (rest is residential)" +parameter pm_share_ind_fesos(tall,all_regi) "Share of coal solids (coaltr) used in the industry (rest is residential)" / $ondelim $include "./core/input/p_share_ind_fesos.cs4r" @@ -522,7 +504,7 @@ $offdelim / ; -parameter pm_share_ind_fesos_bio(tall,all_regi) "Share of biomass solids (biotr) used in the industry (rest is residential)" +parameter pm_share_ind_fesos_bio(tall,all_regi) "Share of biomass solids (biotr) used in the industry (rest is residential)" / $ondelim $include "./core/input/p_share_ind_fesos_bio.cs4r" @@ -530,7 +512,7 @@ $offdelim / ; -parameter pm_share_ind_fehos(tall,all_regi) "Share of heating oil used in the industry (rest is residential)" +parameter pm_share_ind_fehos(tall,all_regi) "Share of heating oil used in the industry (rest is residential)" / $ondelim $include "./core/input/p_share_ind_fehos.cs4r" @@ -582,8 +564,7 @@ loop(pe2se(entyPe,entySe,te)$(p_tech_co2capturerate(te)), display fm_dataemiglob; $endif.tech_CO2capturerate - -*JH* CO2 capture rate of CCS technologies (new SSP5 assumptions) +*** CO2 capture rate of CCS technologies (new SSP5 assumptions) if (c_ccscapratescen eq 2, fm_dataemiglob("pecoal","seel","igccc","co2") = 0.2; fm_dataemiglob("pecoal","seel","igccc","cco2") = 25.9; @@ -600,9 +581,6 @@ $endif fm_dataemiglob(enty,enty2,te,"co2")$pe2se(enty,enty2,te) = 1/s_zj_2_twa * fm_dataemiglob(enty,enty2,te,"co2"); fm_dataemiglob(enty,enty2,te,"cco2") = 1/s_zj_2_twa * fm_dataemiglob(enty,enty2,te,"cco2"); -table f_datarenglob(char,rlf,*) "global nur and ren data" -$include "./core/input/generisdata_nur_ren.prn" -; table f_dataetaglob(tall,all_te) "global eta data" $include "./core/input/generisdata_varying_eta.prn" ; @@ -628,7 +606,7 @@ $offdelim *** Import and set regional data ***--------------------------------------------------------------------------- -*RP* 2012-07-24: CO2-technologies don't have own emissions, but the pipeline leakage rate (s_co2pipe_leakage) is multiplied on the individual pe2se +*** CO2-technologies don't have own emissions, but the pipeline leakage rate (s_co2pipe_leakage) is multiplied on the individual pe2se s_co2pipe_leakage = 0.01; loop(emi2te(enty,enty2,te,enty3)$teCCS(te), @@ -670,7 +648,7 @@ $offdelim ; pm_IO_trade(ttot,regi,enty,char) = f_IO_trade(ttot,regi,enty,char) * sm_EJ_2_TWa; -*LB* use scaled data for export to guarantee net trade = 0 for each traded good +*** use scaled data for export to guarantee net trade = 0 for each traded good loop(tradePe, loop(ttot, if(sum(regi2, pm_IO_trade(ttot,regi2,tradePe,"Xport")) ne 0, @@ -693,20 +671,8 @@ p_cint(regi,"co2","peoil","6")=0.1775748800; p_cint(regi,"co2","peoil","7")=0.2283105600; p_cint(regi,"co2","peoil","8")=0.4153983800; -$ifthen.WindOff %cm_wind_offshore% == "0" -** historical installed capacity -*** read-in of pm_histCap.cs3r -$Offlisting -table pm_histCap(tall,all_regi,all_te) "historical installed capacity" -$ondelim -$include "./core/input/pm_histCap.cs3r" -$offdelim -; -$Onlisting -$endif.WindOff - -$ifthen.WindOff %cm_wind_offshore% == "1" -*** read-in of pm_histCap_windoff.cs3r +*** historical installed capacity +*** read-in of pm_histCap_windoff.cs3r *** windoffshore-todo $Offlisting table pm_histCap(tall,all_regi,all_te) "historical installed capacity" $ondelim @@ -714,7 +680,12 @@ $include "./core/input/pm_histCap_windoff.cs3r" $offdelim ; $Onlisting -$endif.WindOff + +*** windoffshore-todo +*** allow input data with either "wind" or "windon" until mrremind is updated +pm_histCap(tall,all_regi,"windon") $ (pm_histCap(tall,all_regi,"windon") eq 0) = pm_histCap(tall,all_regi,"wind"); +pm_histCap(tall,all_regi,"wind") = 0; + *** calculate historic capacity additions pm_delta_histCap(tall,regi,te) = pm_histCap(tall,regi,te) - pm_histCap(tall-1,regi,te); @@ -738,20 +709,25 @@ $offdelim $Onlisting -*CG* setting wind off capacity factor to be the same as onshore here (later adjusting it in vm_capFac) -$ifthen.WindOff %cm_wind_offshore% == "1" -f_cf(ttot,regi,"windoff") = f_cf(ttot,regi,"wind"); -$endif.WindOff +*CG* setting wind offshore capacity factor to be the same as onshore here (later adjusting it in vm_capFac) +*** windoffshore-todo +*** allow input data with either "wind" or "windon" until mrremind is updated +f_cf(ttot,regi,"windon") $ (f_cf(ttot,regi,"windon") eq 0) = f_cf(ttot,regi,"wind"); +f_cf(ttot,regi,"storwindon") $ (f_cf(ttot,regi,"storwindon") eq 0) = f_cf(ttot,regi,"storwind"); +f_cf(ttot,regi,"gridwindon") $ (f_cf(ttot,regi,"gridwindon") eq 0) = f_cf(ttot,regi,"gridwind"); +f_cf(ttot,regi,"windoff") = f_cf(ttot,regi,"windon"); +f_cf(ttot,regi,"storwindoff") = f_cf(ttot,regi,"storwindon"); +f_cf(ttot,regi,"gridwindoff") = f_cf(ttot,regi,"gridwindon"); pm_cf(ttot,regi,te) = f_cf(ttot,regi,te); ***pm_cf(ttot,regi,"h2turbVRE") = 0.15; pm_cf(ttot,regi,"elh2VRE") = 0.6; -*short-term fix for new synfuel td technologies +*** short-term fix for new synfuel td technologies pm_cf(ttot,regi,"tdsyngas") = 0.65; pm_cf(ttot,regi,"tdsynhos") = 0.6; pm_cf(ttot,regi,"tdsynpet") = 0.7; pm_cf(ttot,regi,"tdsyndie") = 0.7; -*JD eternal short-term fix for process-based industry +*** eternal short-term fix for process-based industry pm_cf(ttot,regi,"bf") = 0.8; pm_cf(ttot,regi,"bfcc") = 0.8; pm_cf(ttot,regi,"bof") = 0.8; @@ -775,11 +751,10 @@ pm_cf(ttot,regi,"tdh2i") = pm_cf(ttot,regi,"tdh2s"); *** Region- and tech-specific early retirement rates -***Regional* loop(ext_regi$pm_extRegiEarlyRetiRate(ext_regi), pm_regiEarlyRetiRate(t,regi,te)$(regi_group(ext_regi,regi)) = pm_extRegiEarlyRetiRate(ext_regi); ); -*Tech-specific* +***Tech-specific* *RP*: reduce early retirement for technologies with additional characteristics that are difficult to represent in REMIND, eg. industries built around heating/CHP plants, or flexibility from ngt plants pm_regiEarlyRetiRate(t,regi,"ngt") = 0.3 * pm_regiEarlyRetiRate(t,regi,"ngt"); !! ngt should only be phased out very slowly, as they provide flexibility - which REMIND is not too good at capturing endogeneously pm_regiEarlyRetiRate(t,regi,"gaschp") = 0.5 * pm_regiEarlyRetiRate(t,regi,"gaschp"); !! chp should only be phased out slowly, as district heating networks/ industry uses are designed to a specific heat input @@ -836,7 +811,7 @@ loop(regi, ); ); -*LB* calculate mapping tsu2opTimeYr +*** calculate mapping tsu2opTimeYr alias(ttot, tttot); tsu2opTimeYr(ttot,opTimeYr) = no; tsu2opTimeYr(ttot,"1") = yes; @@ -993,8 +968,12 @@ $if %cm_MAgPIE_coupling% == "on" p_efFossilFuelExtr(regi,"pebiolc","n2obio") = 0 display p_efFossilFuelExtr; -pm_dataren(regi,"nur",rlf,te) = f_datarenglob("nur",rlf,te); -pm_dataren(regi,"maxprod",rlf,te) = sm_EJ_2_TWa * f_datarenglob("maxprod",rlf,te); +*** capacity factors (nur) are 1 by default +pm_dataren(regi,"nur",rlf,te) = 1; + +*** geothermal heatpumps (geohe) do not get maxprod and nur from f_maxProdGradeRegi files +*** we set regional maxprod to 200EJ = 6.342TWa to represent unlimited potential +pm_dataren(regi,"maxprod","1","geohe") = 6.342; *RP* hydro, spv and csp get maxprod for all regions and grades from external file table f_maxProdGradeRegiHydro(all_regi,char,rlf) "input of regionalized maximum from hydro [EJ/a]" @@ -1006,17 +985,16 @@ pm_dataren(all_regi,"maxprod",rlf,"hydro") = sm_EJ_2_TWa * f_maxProdGradeRegiHyd pm_dataren(all_regi,"nur",rlf,"hydro") = f_maxProdGradeRegiHydro(all_regi,"nur",rlf); *CG* separating input of wind onshore and offshore +*** windoffshore-todo table f_maxProdGradeRegiWindOn(all_regi,char,rlf) "input of regionalized maximum from wind onshore [EJ/a]" $ondelim $include "./core/input/f_maxProdGradeRegiWindOn.cs3r" $offdelim ; - -pm_dataren(all_regi,"maxprod",rlf,"wind") = sm_EJ_2_TWa * f_maxProdGradeRegiWindOn(all_regi,"maxprod",rlf); -pm_dataren(all_regi,"nur",rlf,"wind") = f_maxProdGradeRegiWindOn(all_regi,"nur",rlf); +pm_dataren(all_regi,"maxprod",rlf,"windon") = sm_EJ_2_TWa * f_maxProdGradeRegiWindOn(all_regi,"maxprod",rlf); +pm_dataren(all_regi,"nur",rlf,"windon") = f_maxProdGradeRegiWindOn(all_regi,"nur",rlf); -$ifthen.WindOff %cm_wind_offshore% == "1" table f_maxProdGradeRegiWindOff(all_regi,char,rlf) "input of regionalized maximum from wind offshore [EJ/a]" $ondelim $include "./core/input/f_maxProdGradeRegiWindOff.cs3r" @@ -1038,20 +1016,24 @@ pm_shareWindOff("2040",regi) = 0.9; pm_shareWindOff("2045",regi) = 0.95; pm_shareWindOff(ttot,regi)$((ttot.val ge 2050)) = 1; -$endif.WindOff - table f_dataRegiSolar(all_regi,char,all_te,rlf) "input of regionalized data for solar" $ondelim $include "./core/input/f_dataRegiSolar.cs3r" $offdelim ; -pm_dataren(all_regi,"maxprod",rlf,"csp") = sm_EJ_2_TWa * f_dataRegiSolar(all_regi,"maxprod","csp",rlf); -pm_dataren(all_regi,"maxprod",rlf,"spv") = sm_EJ_2_TWa * f_dataRegiSolar(all_regi,"maxprod","spv",rlf); -pm_dataren(all_regi,"nur",rlf,"csp") = f_dataRegiSolar(all_regi,"nur","csp",rlf); -pm_dataren(all_regi,"nur",rlf,"spv") = f_dataRegiSolar(all_regi,"nur","spv",rlf); +pm_dataren(all_regi,"maxprod",rlf,"csp") = sm_EJ_2_TWa * f_dataRegiSolar(all_regi,"maxprod","csp",rlf); +pm_dataren(all_regi,"maxprod",rlf,"spv") = sm_EJ_2_TWa * f_dataRegiSolar(all_regi,"maxprod","spv",rlf); +pm_dataren(all_regi,"nur",rlf,"spv") = f_dataRegiSolar(all_regi,"nur","spv",rlf); p_datapot(all_regi,"limitGeopot",rlf,"pesol") = f_dataRegiSolar(all_regi,"limitGeopot","spv",rlf); -pm_data(all_regi,"luse","spv") = f_dataRegiSolar(all_regi,"luse","spv","1")/1000; +pm_data(all_regi,"luse","spv") = 0.001 * f_dataRegiSolar(all_regi,"luse","spv","1"); + +*** RP: rescale CSP capacity factors in REMIND +*** In the DLR resource data input files, the numbers are based on a SM3/12h setup, +*** while the cost data from IEA seems rather based on a SM2/6h setup (with 40% average CF). +*** Accordingly, decrease CF in REMIND to 2/3 of the DLR values (no need to correct maxprod, +*** as here no miscalculation of total energy yield takes place, in contrast to wind) +pm_dataren(all_regi,"nur",rlf,"csp") = 2/3 * f_dataRegiSolar(all_regi,"nur","csp",rlf); table f_maxProdGeothermal(all_regi,char) "input of regionalized maximum from geothermal [EJ/a]" @@ -1066,10 +1048,6 @@ pm_dataren(all_regi,"maxprod","1","geohdr")$f_maxProdGeothermal(all_regi,"maxpro *** FS: temporary fix: set minimum geothermal potential across all regions to 10 PJ (still negligible even in small regions) to get rid of infeasibilities pm_dataren(all_regi,"maxprod","1","geohdr")$(f_maxProdGeothermal(all_regi,"maxprod") <= 0.01) = sm_EJ_2_TWa * 0.01; - -*mh* set 'nur' for all non renewable technologies to '1': -pm_dataren(regi,"nur",rlf,teNoRe) = 1; - display p_datapot, pm_dataren; ***--------------------------------------------------------------------------- @@ -1079,7 +1057,8 @@ loop(regi, loop(teReNoBio(te), p_aux_capToDistr(regi,te) = pm_histCap("2015",regi,te)$(pm_histCap("2015",regi,te) gt 1e-10); s_aux_cap_remaining = p_aux_capToDistr(regi,te); -*RP* fill up the renewable grades to calculate the total capacity needed to produce the amount calculated in initialcap2, assuming the best grades are filled first (with 20% of each grade not yet used) +*RP* fill up the renewable grades to calculate the total capacity needed to produce the amount calculated in initialcap2, +* assuming the best grades are filled first (with 20% of each grade not yet used) loop(teRe2rlfDetail(te,rlf)$(pm_dataren(regi,"nur",rlf,te) > 0), if(s_aux_cap_remaining > 0, @@ -1096,17 +1075,7 @@ loop(regi, display p_aux_capToDistr, s_aux_cap_remaining, p_aux_capThisGrade, p_avCapFac2015, p_inco0; -$ifthen.WindOff %cm_wind_offshore% == "0" -parameter p_histCapFac(tall,all_regi,all_te) "Capacity factor (fraction of the year that a plant is running) of installed capacity in 2015" -/ -$ondelim -$include "./core/input/p_histCapFac.cs4r" -$offdelim -/ -; -$endif.WindOff -$ifthen.WindOff %cm_wind_offshore% == "1" parameter p_histCapFac(tall,all_regi,all_te) "Capacity factor (fraction of the year that a plant is running) of installed capacity in 2015" / $ondelim @@ -1114,56 +1083,38 @@ $include "./core/input/p_histCapFac_windoff.cs4r" $offdelim / ; -$endif.WindOff +*** windoffshore-todo +*** allow input data with either "wind" or "windon" until mrremind is updated +p_histCapFac(tall,all_regi,"windon") $ (p_histCapFac(tall,all_regi,"windon") eq 0) = p_histCapFac(tall,all_regi,"wind"); +p_histCapFac(tall,all_regi,"wind") = 0; -*** RP rescale wind capacity factors in REMIND to account for very different real-world CF (potentially partially due to assumed low-wind turbine set-ups in the NREL data) -*** Because of the lag effect (turbines in the 2000s were much smaller and thus yielded lower CFs), only implement half of the calculated ratio of historic to REMIND capFac as rescaling for the new CFs - realised as (x+1)/2 +*** RP rescale wind capacity factors in REMIND to account for very different real-world CF +*** (potentially partially due to assumed low-wind turbine set-ups in the NREL data) +*** Because of the lag effect (turbines in the 2000s were much smaller and thus yielded lower CFs), +*** only implement half of the calculated ratio of historic to REMIND capFac as rescaling for the new CFs - realised as (x+1)/2 *cb* CF calibration analogously for wind and spv: calibrate 2015, and assume gradual phase-in of grade-based CF (until 2045 for wind, until 2030 for spv) -p_aux_capacityFactorHistOverREMIND(regi,"wind")$p_avCapFac2015(regi,"wind") = p_histCapFac("2015",regi,"wind") / p_avCapFac2015(regi,"wind"); -$ifthen.WindOff %cm_wind_offshore% == "1" -p_aux_capacityFactorHistOverREMIND(regi,"windoff")$p_avCapFac2015(regi,"windoff") = p_histCapFac("2015",regi,"windoff") / p_avCapFac2015(regi,"windoff"); -$endif.WindOff - -$ifthen.WindOff %cm_wind_offshore% == "0" -loop(t$(t.val ge 2015 AND t.val le 2035 ), -pm_cf(t,regi,"wind") = -(2035 - pm_ttot_val(t)) / 20 * p_aux_capacityFactorHistOverREMIND(regi,"wind") *pm_cf(t,regi,"wind") -+ -(pm_ttot_val(t) - 2015) / 20 * pm_cf(t,regi,"wind") -); -$endif.WindOff - - -$ifthen.WindOff %cm_wind_offshore% == "1" -loop(te$(sameas(te,"wind") OR sameas(te,"windoff")), -loop(t$(t.val ge 2015 AND t.val le 2035 ), -pm_cf(t,regi,te) = -(2035 - pm_ttot_val(t)) / 20 * p_aux_capacityFactorHistOverREMIND(regi,te) *pm_cf(t,regi,te) -+ -(pm_ttot_val(t) - 2015) / 20 * pm_cf(t,regi,te) +p_aux_capacityFactorHistOverREMIND(regi,"windon") $ p_avCapFac2015(regi,"windon") = p_histCapFac("2015",regi,"windon") / p_avCapFac2015(regi,"windon"); +p_aux_capacityFactorHistOverREMIND(regi,"windoff") $ p_avCapFac2015(regi,"windoff") = p_histCapFac("2015",regi,"windoff") / p_avCapFac2015(regi,"windoff"); + +*** linear phase-in of Remind capacity factors instead of historical ones +loop(t$(t.val ge 2015 AND t.val le 2035), + pm_cf(t,regi,teWind) = + (2035 - pm_ttot_val(t)) / (2035-2015) * pm_cf(t,regi,teWind) * p_aux_capacityFactorHistOverREMIND(regi,teWind) + + + (pm_ttot_val(t) - 2015) / (2035-2015) * pm_cf(t,regi,teWind) ); -); -$endif.WindOff - *CG* set storage and grid of windoff to be the same as windon -$ifthen.WindOff %cm_wind_offshore% == "1" -pm_cf(t,regi,"storwindoff") = pm_cf(t,regi,"storwind"); -pm_cf(t,regi,"gridwindoff") = pm_cf(t,regi,"gridwind"); -$endif.WindOff +pm_cf(t,regi,"storwindoff") = pm_cf(t,regi,"storwindon"); +pm_cf(t,regi,"gridwindoff") = pm_cf(t,regi,"gridwindon"); p_aux_capacityFactorHistOverREMIND(regi,"spv")$p_avCapFac2015(regi,"spv") = p_histCapFac("2015",regi,"spv") / p_avCapFac2015(regi,"spv"); pm_cf("2015",regi,"spv") = pm_cf("2015",regi,"spv") * p_aux_capacityFactorHistOverREMIND(regi,"spv"); pm_cf("2020",regi,"spv") = pm_cf("2020",regi,"spv") * (p_aux_capacityFactorHistOverREMIND(regi,"spv")+1)/2; pm_cf("2025",regi,"spv") = pm_cf("2025",regi,"spv") * (p_aux_capacityFactorHistOverREMIND(regi,"spv")+3)/4; -*** RP rescale CSP capacity factors in REMIND - in the DLR resource data input files, the numbers are based on a SM3/12h setup, while the cost data from IEA seems rather based on a SM2/6h setup (with 40% average CF) -*** Accordingly, decrease CF in REMIND to 2/3 of the DLR values (no need to correct maxprod, as here no miscalculation of total energy yield takes place, in contrast to wind) -loop(te$sameas(te,"csp"), - pm_dataren(regi,"nur",rlf,te) = pm_dataren(regi,"nur",rlf,te) * 2/3 ; -); display p_aux_capacityFactorHistOverREMIND, pm_dataren; @@ -1210,9 +1161,11 @@ $offdelim ; p_adj_deltacapoffset("2015",regi,"tnrs")= 1; -$ifthen.WindOff %cm_wind_offshore% == "1" -p_adj_deltacapoffset(t,regi,"windoff")= p_adj_deltacapoffset(t,regi,"wind"); -$endif.WindOff +*** windoffshore-todo +*** allow input data with either "wind" or "windon" until mrremind is updated +p_adj_deltacapoffset(t,regi,"windon") $ (p_adj_deltacapoffset(t,regi,"windon") eq 0) = p_adj_deltacapoffset(t,regi,"wind"); +p_adj_deltacapoffset(t,regi,"windoff")= p_adj_deltacapoffset(t,regi,"windon"); +p_adj_deltacapoffset(t,regi,"wind") = 0; *** share of PE2SE capacities in 2005 depends on GDP-MER p_adj_seed_reg(t,regi) = pm_gdp(t,regi) * 1e-4; @@ -1225,6 +1178,7 @@ loop(ttot$(ttot.val ge 2005), p_adj_seed_te(ttot,regi,"hydro") = 0.25; p_adj_seed_te(ttot,regi,"csp") = 0.25; p_adj_seed_te(ttot,regi,"spv") = 2.00; + p_adj_seed_te(ttot,regi,"windoff") = 0.5; p_adj_seed_te(ttot,regi,"gasftrec") = 0.25; p_adj_seed_te(ttot,regi,"gasftcrec") = 0.25; p_adj_seed_te(ttot,regi,"coalftrec") = 0.25; @@ -1239,10 +1193,6 @@ $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" p_adj_seed_te(ttot,regi,"idrcc") = 0.05; $endif.cm_subsec_model_steel -$ifthen.WindOff %cm_wind_offshore% == "1" - p_adj_seed_te(ttot,regi,"windoff") = 0.5; -$endif.WindOff - *RP: for comparison of different technologies: *** pm_conv_cap_2_MioLDV <- 650 # The world has slightly below 800million cars in 2005 (IEA TECO2), so with a global vm_cap of 1.2, this gives ~650 *** ==> 1TW power plant ~ 650 million LDV @@ -1267,18 +1217,14 @@ $endif.WindOff p_adj_coeff(ttot,regi,teCCS) = 1.0; p_adj_coeff(ttot,regi,"ccsinje") = 1.0; p_adj_coeff(ttot,regi,"spv") = 0.15; - p_adj_coeff(ttot,regi,"wind") = 0.25; + p_adj_coeff(ttot,regi,"windon") = 0.25; + p_adj_coeff(ttot,regi,"windoff") = 0.35; p_adj_coeff(ttot,regi,"geohe") = 0.6; $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" p_adj_coeff(ttot,regi,"bfcc") = 1.0; p_adj_coeff(ttot,regi,"idrcc") = 1.0; $endif.cm_subsec_model_steel -$ifthen.WindOff %cm_wind_offshore% == "1" - - p_adj_coeff(ttot,regi,"windoff") = 0.35; -$endif.WindOff - p_adj_coeff(ttot,regi,"dac") = 0.8; p_adj_coeff(ttot,regi,'oae_ng') = 0.8; p_adj_coeff(ttot,regi,'oae_el') = 0.8; @@ -1394,7 +1340,6 @@ if(c_macscen eq 2, if(c_macscen eq 1, pm_macSwitch(emiMacSector) = 1; ); -*pm_macCostSwitch(enty)=pm_macSwitch(enty); *** for NDC and NPi switch off landuse MACs $if %carbonprice% == "off" pm_macSwitch(emiMacMagpie) = 0; @@ -1412,7 +1357,6 @@ $offdelim ; pm_taxCO2eq(ttot,regi)$(ttot.val le 2020) = f_taxCO2eqHist(ttot,regi) * sm_DptCO2_2_TDpGtC; - *DK* LU emissions are abated in MAgPIE in coupling mode *** An alternative to the approach below could be to introduce a new value for c_macswitch that only deactivates the LU MACs $if %cm_MAgPIE_coupling% == "on" pm_macSwitch(enty)$emiMacMagpie(enty) = 0; @@ -1584,11 +1528,6 @@ table p_vintage_glob_in(opTimeYr,all_te) "read-in of global historical v $include "./core/input/generisdata_vintages.prn" ; -*CG* wind offshore has the same vintage structure as onshore -$ifthen.WindOff %cm_wind_offshore% == "1" -p_vintage_glob_in(opTimeYr,"windoff") = p_vintage_glob_in(opTimeYr,"wind"); -$endif.WindOff - pm_vintage_in(regi,opTimeYr,te) = p_vintage_glob_in(opTimeYr,te); *RP* 2015-12-09: make sure that all technologies have a pm_vintage_in value > 0 in 2005. If a technology should not be built, this is modeled by diff --git a/core/declarations.gms b/core/declarations.gms index f614b679d..4dc12b826 100644 --- a/core/declarations.gms +++ b/core/declarations.gms @@ -151,10 +151,9 @@ p_aux_capacityFactorHistOverREMIND(all_regi,all_te) "aux. param. to calc p_aux_scaleEmiHistorical_n2o(all_regi) "aux. param. to rescale MAgPIE n2o emissions to historical values" p_aux_scaleEmiHistorical_ch4(all_regi) "aux. param. to rescale MAgPIE ch4 emissions to historical values" -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** windoffshore-todo pm_shareWindPotentialOff2On(all_regi) "ratio of technical potential of windoff to windon" pm_shareWindOff(ttot,all_regi) "windoff rollout as a fraction of technical potential" -$ENDIF.WindOff pm_fe2es(tall,all_regi,all_teEs) "Conversion factor from final energies to energy services. Default is 1." @@ -250,7 +249,7 @@ p_co2CCSReference(ttot,all_regi,all_enty,all_enty,all_te,rlf) "Captured CO2 p_prodAllReference(ttot,all_regi,all_te) "Sum of the above in the reference run. As each te has only one type of output, the differing units should not be a problem" -* Energy carrier Prices +*** Energy carrier Prices pm_FEPrice(ttot,all_regi,all_enty,sector,emiMkt) "parameter to capture all FE prices across sectors and markets (tr$2005/TWa)" pm_FEPrice_iter(iteration,ttot,all_regi,all_enty,sector,emiMkt) "parameter to capture all FE prices across sectors and markets (tr$2005/TWa) across iterations" pm_SEPrice(ttot,all_regi,all_enty) "parameter to capture all SE prices (tr$2005/TWa)" @@ -468,10 +467,9 @@ q_cap(tall,all_regi,all_te,rlf) "definition of available ca q_capDistr(tall,all_regi,all_te) "distribute available capacities across grades" q_capTotal(ttot,all_regi,all_enty,all_enty) "calculation of vm_capTotal as total capacity without technology differentation for technologies where there exists differentation" -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** windoffshore-todo q_windoff_low(tall,all_regi) "semi-endogenous offshore wind power generation as a share of onshore wind energy, which is proportional to more than half of maxprod ratio" q_windoff_high(tall,all_regi) "semi-endogenous offshore wind power generation as a share of onshore wind energy, which is proportional to less than twice of maxprod ratio" -$ENDIF.WindOff q_limitCapSe(ttot,all_regi,all_enty,all_enty,all_te) "capacity constraint for se production" q_limitCapSe2se(ttot,all_regi,all_enty,all_enty,all_te) "capacity constraint for se to se transformation" @@ -510,7 +508,7 @@ qm_co2eqCum(all_regi) "cumulate regional emission q_budgetCO2eqGlob "global emission budget balance" q_emiTeDetailMkt(ttot,all_regi,all_enty,all_enty,all_te,all_enty,all_emiMkt) "detailed energy specific emissions per region and market" -q_emiTeMkt(ttot,all_regi,all_enty,all_emiMkt) "total energy-emissions per region and market" +q_emiTeMkt(ttot,all_regi,all_enty,all_emiMkt) "total energy-emissions per region and market" q_emiEnFuelEx(ttot,all_regi,all_enty) "energy emissions from fuel extraction" q_emiAllMkt(ttot,all_regi,all_enty,all_emiMkt) "total regional emissions for each emission market" @@ -566,9 +564,6 @@ $IFTHEN.sehe_upper not "%cm_sehe_upper%" == "off" q_heat_limit(ttot,all_regi) "equation to limit maximum level of secondary energy district heating and heat pumps use" $ENDIF.sehe_upper -***---------------------------------------------------------------------------------------- -***----------------------------------------------trade module------------------------------ - ; ***---------------------------------------------------------------------------------------- *** SCALARS @@ -576,11 +571,6 @@ $ENDIF.sehe_upper scalars o_modelstat "critical solver status for solution" -***---------------------------------------------------------------------------------------- -***------------------------------------------------MACRO module---------------------------- - -***---------------------------------------------------------------------------------------- -***-----------------------------------------------ESM module------------------------------- pm_conv_TWa_EJ "conversion from TWa to EJ" /31.536/, sm_c_2_co2 "conversion from c to co2" /3.666666666667/, *** conversion factors of time units @@ -610,9 +600,12 @@ s_MtCO2_2_GtC "conversion factor from Mt s_MtCH4_2_TWa "Energy content of methane. MtCH4 --> TWa: 1 MtCH4 = 1.23 * 10^6 toe * 42 GJ/toe * 10^-9 EJ/GJ * 1 TWa/31.536 EJ = 0.001638 TWa (BP statistical review)" /0.001638/ -sm_h2kg_2_h2kWh "convert kilogramme of hydrogen to kwh energy value." /32.5/ +s_D2015_2_D2017 "Convert US$2015 to US$2017" /1.0292/ +sm_D2005_2_D2017 "Convert US$2005 to US$2017" /1.231/ +sm_D2020_2_D2017 "Convert US$2020 to US$2017" /0.9469/ +sm_EURO2023_2_D2017 "Convert EURO 2023 to US$2017" /0.8915/ -s_D2015_2_D2005 "Convert $2015 to $2005 by dividing by 1.2: 1/1.2 = 0.8333" /0.8333/ +sm_h2kg_2_h2kWh "convert kilogramme of hydrogen to kwh energy value." /32.5/ sm_DptCO2_2_TDpGtC "Conversion multiplier to go from $/tCO2 to T$/GtC: 44/12/1000" /0.00366667/ s_co2pipe_leakage "Leakage rate of CO2 pipelines. [0..1]" @@ -635,16 +628,13 @@ sm_globalBudget_dev "actual level of global cu sm_eps "small number: 1e-9 " /1e-9/ sm_CES_calibration_iteration "current calibration iteration number, loaded from environment variable cm_CES_calibration_iteration" /0/ - -***---------------------------------------------------------------------------------------- -***----------------------------------------------trade module------------------------------ ; +sm_dmac = sm_D2005_2_D2017 * sm_dmac; sm_tgn_2_pgc = (44/28) * s_gwpN2O * (12/44) * 0.001; sm_tgch4_2_pgc = s_gwpCH4 * (12/44) * 0.001; -***---------------------------------------------------------------------------------------- -*----------------------------------------------carbon intensities of coal, oil, and gas +*** carbon intensities of coal, oil, and gas pm_cintraw("pecoal") = 26.1 / s_zj_2_twa; pm_cintraw("peoil") = 20.0 / s_zj_2_twa; pm_cintraw("pegas") = 15.0 / s_zj_2_twa; diff --git a/core/equations.gms b/core/equations.gms index 760828b25..438947d8e 100644 --- a/core/equations.gms +++ b/core/equations.gms @@ -343,22 +343,20 @@ q_capTotal(t,regi,entyPe,entySe)$( capTotal(entyPe,entySe)).. ***--------------------------------------------------------------------------- *' CG: implementing simple exogenous wind offshore energy production -*' +*** windoffshore-todo ***--------------------------------------------------------------------------- -$IFTHEN.WindOff %cm_wind_offshore% == "1" q_windoff_low(t,regi)$(t.val > 2020).. sum(rlf, vm_deltaCap(t,regi,"windoff",rlf)) =g= - pm_shareWindOff(t,regi) * pm_shareWindPotentialOff2On(regi) * 0.5 * sum(rlf, vm_deltaCap(t,regi,"wind",rlf)) + pm_shareWindOff(t,regi) * pm_shareWindPotentialOff2On(regi) * 0.5 * sum(rlf, vm_deltaCap(t,regi,"windon",rlf)) ; q_windoff_high(t,regi)$(t.val > 2020).. sum(rlf, vm_deltaCap(t,regi,"windoff",rlf)) =l= - pm_shareWindOff(t,regi) * pm_shareWindPotentialOff2On(regi) * 2 * sum(rlf, vm_deltaCap(t,regi,"wind",rlf)) + pm_shareWindOff(t,regi) * pm_shareWindPotentialOff2On(regi) * 2 * sum(rlf, vm_deltaCap(t,regi,"windon",rlf)) ; -$ENDIF.WindOff ***--------------------------------------------------------------------------- *' Technological change is an important driver of the evolution of energy systems. *' For mature technologies, such as coal-fired power plants, the evolution diff --git a/core/input/generisdata_flexibility.prn b/core/input/generisdata_flexibility.prn index a82d3262d..61439a478 100644 --- a/core/input/generisdata_flexibility.prn +++ b/core/input/generisdata_flexibility.prn @@ -1,32 +1,31 @@ *** SOF ./core/input/generisdata_flexibility.prn *** parameterization after simple algorithm -fm_dataglob("flexibility","ngcc") = 0.95; -fm_dataglob("flexibility","ngccc") = 0.85; -fm_dataglob("flexibility","ngt") = 16; -fm_dataglob("flexibility","h2turb") = 16; -fm_dataglob("flexibility","dot") = 6; -fm_dataglob("flexibility","igcc") = 0.85; -fm_dataglob("flexibility","igccc") = 0.7; -fm_dataglob("flexibility","pc") = 0.90; -fm_dataglob("flexibility","gaschp") = 0.85; -fm_dataglob("flexibility","coalchp") = 0.75; -fm_dataglob("flexibility","biochp") = 0.7; -fm_dataglob("flexibility","bioigcc") = 0.75; -fm_dataglob("flexibility","bioigccc") = 0.7; -fm_dataglob("flexibility","tnrs") = 0.6; -fm_dataglob("flexibility","fnrs") = 0.44; -fm_dataglob("flexibility","wind") = -1; -fm_dataglob("flexibility","csp") = -1; -fm_dataglob("flexibility","spv") = -1; -fm_dataglob("flexibility","storwind") = 1.89; -$IFTHEN.WindOff %cm_wind_offshore% == "1" -fm_dataglob("flexibility","storwind") = 1.86; -$ENDIF.WindOff -fm_dataglob("flexibility","storcsp") = 1.85; -fm_dataglob("flexibility","storspv") = 1.85; -fm_dataglob("flexibility","geohdr") = 0.8; -fm_dataglob("flexibility","hydro") = 1.2; -fm_dataglob("flexibility","h2turbVRE") = 16; +fm_dataglob("flexibility","ngcc") = 0.95; +fm_dataglob("flexibility","ngccc") = 0.85; +fm_dataglob("flexibility","ngt") = 16; +fm_dataglob("flexibility","h2turb") = 16; +fm_dataglob("flexibility","dot") = 6; +fm_dataglob("flexibility","igcc") = 0.85; +fm_dataglob("flexibility","igccc") = 0.7; +fm_dataglob("flexibility","pc") = 0.90; +fm_dataglob("flexibility","gaschp") = 0.85; +fm_dataglob("flexibility","coalchp") = 0.75; +fm_dataglob("flexibility","biochp") = 0.7; +fm_dataglob("flexibility","bioigcc") = 0.75; +fm_dataglob("flexibility","bioigccc") = 0.7; +fm_dataglob("flexibility","tnrs") = 0.6; +fm_dataglob("flexibility","fnrs") = 0.44; +fm_dataglob("flexibility","windon") = -1; +fm_dataglob("flexibility","windoff") = -1; +fm_dataglob("flexibility","csp") = -1; +fm_dataglob("flexibility","spv") = -1; +fm_dataglob("flexibility","storwindon") = 1.86; +fm_dataglob("flexibility","storwindoff")= 1.93; +fm_dataglob("flexibility","storcsp") = 1.85; +fm_dataglob("flexibility","storspv") = 1.85; +fm_dataglob("flexibility","geohdr") = 0.8; +fm_dataglob("flexibility","hydro") = 1.2; +fm_dataglob("flexibility","h2turbVRE") = 16; *** EOF ./core/input/generisdata_flexibility.prn diff --git a/core/input/generisdata_nur_ren.prn b/core/input/generisdata_nur_ren.prn deleted file mode 100644 index ed725b05c..000000000 --- a/core/input/generisdata_nur_ren.prn +++ /dev/null @@ -1,35 +0,0 @@ -*** SOF ./core/input/generisdata_nur_ren.prn -*TA: This file includes the capacity factors (nur) for different renewable energy sources and for different grades. -*TA: Max. annual global production (maxprod) is given in EJ/a for wind onshore, hydro, geohdr, geohe. -* The potential is categorized into different greades. - - - - wind spv hydro geohdr geohe csp storspv storwind storcsp gridspv gridwind gridcsp -nur.1 0.31 0.230 0.550 1.000 1.000 0.72 1 1 1 0.85 0.85 0.85 -nur.2 0.28 0.215 0.450 0.68 -nur.3 0.24 0.200 0.350 0.65 -nur.4 0.20 0.185 0.250 0.61 -nur.5 0.17 0.172 0.150 0.57 -nur.6 0.15 0.160 0.53 -nur.7 0.13 0.150 0.48 -nur.8 0.12 0.140 0.43 -nur.9 0.11 0.130 0.40 -nur.10 0.10 -nur.11 0.08 -nur.12 0.07 - - -maxprod.1 50 8 0.112 50.0 -maxprod.2 40 16 -maxprod.3 40 18 -maxprod.4 40 8 -maxprod.5 40 -maxprod.6 40 -maxprod.7 60 - - - - - -*** EOF ./core/input/generisdata_nur_ren.prn diff --git a/core/input/generisdata_tech.prn b/core/input/generisdata_tech.prn index f1f712a65..a236c1989 100644 --- a/core/input/generisdata_tech.prn +++ b/core/input/generisdata_tech.prn @@ -1,6 +1,5 @@ *** SOF ./core/input/generisdata_tech.prn $ontext -IMPORTANT: all costs are now given in $2015! As long as the model runs in $2005, the values need to be converted in datainput.gms tech_stat technology status: how close a technology is to market readiness. Scale: 0-3, with 0 'I can go out and build a GW plant today' to 3 'Still some research necessary' inco0 Initial investment costs given in $[2015] / kW[output] capacity; for dac/prc cc: $[2015] / (tC[captured]/a); for other indutry prc: $[2015]/(t[output]/a) constrTme Construction time in years, needed to calculate turn-key cost premium compared to overnight costs @@ -55,7 +54,7 @@ omv 30.11 25.00 31.50 50 lifetime 35 35 40 40 40 40 40 40 35 35 35 35 35 35 35 -+ geohdr geohe hydro wind windoff spv solhe csp ++ geohdr geohe hydro windon windoff spv solhe csp tech_stat 1 inco0 3600 1200 2700 2400 5000 5160 9999 10320 constrTme 4 1 5 1 4 1 1 3 @@ -138,22 +137,22 @@ omf 0.03 0.03 omv 36 76 lifetime 50 50 -+ storspv storwind storcsp -inco0 7720 2940 2520 -mix0 0.00 0.00 0.00 -eta 0.74 0.85 0.79 -omf 0.02 0.02 0.02 -lifetime 25 25 25 -incolearn 5440 2090 1800 -ccap0 0.00005 0.00005 0.00005 -learn 0.10 0.10 0.10 - -+ gridspv gridwind gridcsp -inco0 2400 720 3120 -mix0 0.00 0.00 0.00 -eta 1.00 1.00 1.00 -omf 0.02 0.02 0.02 -lifetime 45 45 45 ++ storspv storcsp storwindon storwindoff +inco0 7720 2520 2940 2940 +mix0 0.00 0.00 0.00 0.00 +eta 0.74 0.79 0.85 0.85 +omf 0.02 0.02 0.02 0.02 +lifetime 25 25 25 25 +incolearn 5440 1800 2090 2090 +ccap0 0.00005 0.00005 0.00005 0.00005 +learn 0.10 0.10 0.10 0.10 + ++ gridspv gridcsp gridwindon gridwindoff +inco0 2400 3120 720 720 +mix0 0.00 0.00 0.00 0.00 +eta 1.00 1.00 1.00 1.00 +omf 0.02 0.02 0.02 0.02 +lifetime 45 45 45 45 + weathering dac oae_ng oae_el tech_stat 4 diff --git a/core/input/generisdata_tech_SSP1.prn b/core/input/generisdata_tech_SSP1.prn index 8cee32202..aa5dddcfb 100644 --- a/core/input/generisdata_tech_SSP1.prn +++ b/core/input/generisdata_tech_SSP1.prn @@ -1,6 +1,5 @@ *** SOF ./core/input/generisdata_tech_SSP1.prn $ontext -IMPORTANT: all costs are now given in $2015! As long as the model runs in $2005, the values need to be converted in datainput.gms tech_stat technology status: how close a technology is to market readiness. Scale: 0-3, with 0 'I can go out and build a GW plant today' to 3 'Still some research necessary' inco0 Initial investment costs given in $[2015] / kW[output] capacity; for dac: $[2015] / (tC[captured]/a) constrTme Construction time in years, needed to calculate turn-key cost premium compared to overnight costs @@ -55,7 +54,7 @@ omv 30.11 25.00 31.50 50 lifetime 35 35 40 40 40 40 40 40 35 35 35 35 35 35 35 -+ geohdr geohe hydro wind windoff spv solhe csp ++ geohdr geohe hydro windon windoff spv solhe csp tech_stat 1 inco0 3600 1200 2700 2400 5000 5160 9999 10320 constrTme 4 1 5 1 4 1 1 3 @@ -136,22 +135,23 @@ omf 0.03 0.03 omv 36 76 lifetime 50 50 -+ storspv storwind storcsp -inco0 8350 3250 2520 -mix0 0.00 0.00 0.00 -eta 0.78 0.89 0.83 -omf 0.02 0.02 0.02 -lifetime 25 25 25 -incolearn 7000 2430 1940 -ccap0 0.00005 0.00005 0.00005 -learn 0.10 0.10 0.10 - -+ gridspv gridwind gridcsp -inco0 2400 720 3120 -mix0 0.00 0.00 0.00 -eta 1.00 1.00 1.00 -omf 0.02 0.02 0.02 -lifetime 45 45 45 + ++ storspv storcsp storwindon storwindoff +inco0 8350 2520 3250 3250 +mix0 0.00 0.00 0.00 0.00 +eta 0.78 0.83 0.89 0.89 +omf 0.02 0.02 0.02 0.02 +lifetime 25 25 25 25 +incolearn 7000 1940 2430 2430 +ccap0 0.00005 0.00005 0.00005 0.00005 +learn 0.10 0.10 0.10 0.10 + ++ gridspv gridcsp gridwindon gridwindoff +inco0 2400 3120 720 720 +mix0 0.00 0.00 0.00 0.00 +eta 1.00 1.00 1.00 1.00 +omf 0.02 0.02 0.02 0.02 +lifetime 45 45 45 45 + weathering dac oae_ng oae_el tech_stat 4 diff --git a/core/input/generisdata_tech_SSP5.prn b/core/input/generisdata_tech_SSP5.prn index e91cfeb85..74f837c23 100644 --- a/core/input/generisdata_tech_SSP5.prn +++ b/core/input/generisdata_tech_SSP5.prn @@ -1,6 +1,5 @@ *** SOF ./core/input/generisdata_tech_SSP5.prn $ontext -IMPORTANT: all costs are now given in $2015! As long as the model runs in $2005, the values need to be converted in datainput.gms tech_stat technology status: how close a technology is to market readiness. Scale: 0-3, with 0 'I can go out and build a GW plant today' to 3 'Still some research necessary' inco0 Initial investment costs given in $[2015] / kW[output] capacity; for dac: $[2015] / (tC[captured]/a) constrTme Construction time in years, needed to calculate turn-key cost premium compared to overnight costs @@ -54,7 +53,7 @@ omf 0.03 0.04 0.04 0.04 0 omv 30.11 25.00 31.50 50.50 10.90 12.80 10.60 10.60 97.27 38.99 5.05 10.60 lifetime 35 35 40 40 40 40 40 40 35 35 35 20 20 35 35 -+ geohdr geohe hydro wind windoff spv solhe csp ++ geohdr geohe hydro windon windoff spv solhe csp tech_stat 1 inco0 3600 1200 2700 2400 5000 5160 9999 10320 constrTme 4 1 5 1 4 1 1 3 @@ -135,22 +134,23 @@ omf 0.03 0.03 omv 36 76 lifetime 50 50 -+ storspv storwind storcsp -inco0 18000 7500 5400 -mix0 0.00 0.00 0.00 -eta 0.67 0.78 0.72 -omf 0.02 0.02 0.02 -lifetime 25 25 25 -incolearn 12000 4800 3800 -ccap0 0.00005 0.00005 0.00005 -learn 0.10 0.10 0.10 - -+ gridspv gridwind gridcsp -inco0 2400 860 3120 -mix0 0.00 0.00 0.00 -eta 1.00 1.00 1.00 -omf 0.02 0.02 0.02 -lifetime 45 45 45 + ++ storspv storcsp storwindon storwindoff +inco0 18000 5400 7500 7500 +mix0 0.00 0.00 0.00 0.00 +eta 0.67 0.72 0.78 0.78 +omf 0.02 0.02 0.02 0.02 +lifetime 25 25 25 25 +incolearn 12000 3800 4800 4800 +ccap0 0.00005 0.00005 0.00005 0.00005 +learn 0.10 0.10 0.10 0.10 + ++ gridspv gridcsp gridwindon gridwindoff +inco0 2400 3120 860 860 +mix0 0.00 0.00 0.00 0.00 +eta 1.00 1.00 1.00 1.00 +omf 0.02 0.02 0.02 0.02 +lifetime 45 45 45 45 + weathering dac oae_ng oae_el tech_stat 4 diff --git a/core/input/generisdata_trade.prn b/core/input/generisdata_trade.prn index 764f484ef..e171649b9 100644 --- a/core/input/generisdata_trade.prn +++ b/core/input/generisdata_trade.prn @@ -1,6 +1,5 @@ *** SOF ./core/input/generisdata_trade.prn $ontext -IMPORTANT: all costs are now given in $2015! As long as the model runs in $2005, the values need to be converted in datainput.gms tech_stat Technology status: how close a technology is to market readiness. Scale: 0-3, with 0 'I can go out and build a GW plant today' to 3 'Still some research necessary'. inco0 Initial investment costs given in $(2015)/kW(output) capacity. Independent of distance. inco0_d Initial investment costs given in $(2015)/kW(output) capacity. Per 1000km. diff --git a/core/input/generisdata_vintages.prn b/core/input/generisdata_vintages.prn index ead2b4fea..9b5ccb776 100644 --- a/core/input/generisdata_vintages.prn +++ b/core/input/generisdata_vintages.prn @@ -74,14 +74,14 @@ $offtext 36 1.0 41 1.0 -+ hydro wind spv solhe csp elh2 geohdr geohe h2turb h22ch4 MeOH -1 5.0 10.0 10.0 4.5 1.0 1.0 10.0 10.0 1 1.0 1.0 -6 5.0 5.0 5.0 2.8 0.0 5.0 5.0 -11 5.0 1.0 1.0 1.8 0.0 1.0 1.0 -16 5.0 1.1 1.0 -21 5.0 0.0 -26 5.0 0.0 -31 5.0 0.0 ++ hydro windon windoff spv solhe csp elh2 geohdr geohe h2turb h22ch4 MeOH +1 5.0 10.0 10.0 10.0 4.5 1.0 1.0 10.0 10.0 1 1.0 1.0 +6 5.0 5.0 5.0 5.0 2.8 0.0 5.0 5.0 +11 5.0 1.0 1.0 1.0 1.8 0.0 1.0 1.0 +16 5.0 1.1 1.0 +21 5.0 0.0 +26 5.0 0.0 +31 5.0 0.0 36 5.0 41 5.0 46 5.0 @@ -141,8 +141,8 @@ $offtext -+ storspv storwind storcsp gridspv gridwind gridcsp -1 1.0 1.0 1.0 1.0 1.0 1.0 ++ storspv storwindon storwindoff storcsp gridspv gridwindon gridwindoff gridcsp +1 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + ccsinje 1 1.0 diff --git a/core/postsolve.gms b/core/postsolve.gms index ad69844c8..12a35b130 100644 --- a/core/postsolve.gms +++ b/core/postsolve.gms @@ -825,13 +825,13 @@ p_FEPrice_by_SE_Sector_EmiMkt(t,regi,entySe,entyFe,sector,emiMkt)$(abs (qm_budge loop((t,regi,entySe,entyFe,sector,emiMkt)$(sefe(entySe,entyFe) AND sector2emiMkt(sector,emiMkt) AND entyFe2Sector(entyFe,sector)), *** initialize prices - p_FEPrice_by_Sector_EmiMkt(t,regi,entyFe,sector,emiMkt)=0; - pm_FEPrice_by_SE_Sector(t,regi,entySe,entyFe,sector)=0; - p_FEPrice_by_SE_EmiMkt(t,regi,entySe,entyFe,emiMkt)=0; - p_FEPrice_by_SE(t,regi,entySe,entyFe)=0; - p_FEPrice_by_Sector(t,regi,entyFe,sector)=0; - p_FEPrice_by_EmiMkt(t,regi,entyFe,emiMkt)=0; - p_FEPrice_by_FE(t,regi,entyFe)=0; + p_FEPrice_by_Sector_EmiMkt(t,regi,entyFe,sector,emiMkt) = 0; + pm_FEPrice_by_SE_Sector(t,regi,entySe,entyFe,sector) = 0; + p_FEPrice_by_SE_EmiMkt(t,regi,entySe,entyFe,emiMkt) = 0; + p_FEPrice_by_SE(t,regi,entySe,entyFe) = 0; + p_FEPrice_by_Sector(t,regi,entyFe,sector) = 0; + p_FEPrice_by_EmiMkt(t,regi,entyFe,emiMkt) = 0; + p_FEPrice_by_FE(t,regi,entyFe) = 0; *** lower level marginal price is equal to non-zero, non-eps minimal price at higher level loop(entySe2, diff --git a/core/presolve.gms b/core/presolve.gms index 6412b1acf..38954ad66 100644 --- a/core/presolve.gms +++ b/core/presolve.gms @@ -170,6 +170,7 @@ vm_macBase.fx(ttot,regi,"ch4wstl")$(ttot.val ge 2005) = p_emineg_econometric(reg vm_macBase.fx(ttot,regi,"n2owaste")$(ttot.val ge 2005) = p_emineg_econometric(regi,"n2owaste","p1") * pm_pop(ttot,regi) * (1000*pm_gdp(ttot,regi) / (pm_pop(ttot,regi)*pm_shPPPMER(regi)))**p_emineg_econometric(regi,"n2owaste","p2"); +vm_macBase.lo(ttot,regi,"co2cement_process")$( ttot.val ge 2005 ) = 0; $ifthen.fixed_shares "%industry%" == "fixed_shares" vm_macBase.fx(ttot,regi,"co2cement_process")$( ttot.val ge 2005 ) = ( pm_pop(ttot,regi) @@ -349,8 +350,8 @@ p_macLevFree(ttot,regi,enty)$( ttot.val gt 2005 ) $IFTHEN.scaleEmiHist %c_scaleEmiHistorical% == "on" -**p_macLevFree(ttot,regi,emiMacMagpie(enty))=0; -* Set minimum abatment levels based on historical emissions +*** p_macLevFree(ttot,regi,emiMacMagpie(enty))=0; +*** Set minimum abatment levels based on historical emissions p_macLevFree("2010",regi,enty)$(p_histEmiSector("2005",regi,"ch4","agriculture","process") AND (sameas(enty,"ch4rice") OR sameas(enty,"ch4animals") OR sameas(enty,"ch4anmlwst"))) = max( 0, 1 - (p_histEmiSector("2010",regi,"ch4","agriculture","process")+p_histEmiSector("2010",regi,"ch4","lulucf","process"))/(p_histEmiSector("2005",regi,"ch4","agriculture","process")+p_histEmiSector("2005",regi,"ch4","lulucf","process"))); p_macLevFree(ttot,regi,enty)$((ttot.val ge 2015) AND p_histEmiSector("2005",regi,"ch4","agriculture","process") AND (sameas(enty,"ch4rice") OR sameas(enty,"ch4animals") OR sameas(enty,"ch4anmlwst"))) = max( 0, 1 - (p_histEmiSector("2015",regi,"ch4","agriculture","process")+p_histEmiSector("2015",regi,"ch4","lulucf","process"))/(p_histEmiSector("2005",regi,"ch4","agriculture","process")+p_histEmiSector("2005",regi,"ch4","lulucf","process")) ); p_macLevFree("2010",regi,enty)$(p_histEmiSector("2005",regi,"ch4","agriculture","process") AND (sameas(enty,"n2ofertin") OR sameas(enty,"n2ofertcr") OR sameas(enty,"n2oanwstc") OR sameas(enty,"n2oanwstm") OR sameas(enty,"n2oanwstp"))) = max( 0, 1 - (p_histEmiSector("2010",regi,"n2o","agriculture","process")+p_histEmiSector("2010",regi,"n2o","lulucf","process"))/(p_histEmiSector("2005",regi,"n2o","agriculture","process")+p_histEmiSector("2005",regi,"n2o","lulucf","process")) ); @@ -376,7 +377,7 @@ pm_macAbatLev(ttot,regi,enty)$( ttot.val gt 2015 ) pm_macAbat(ttot,regi,enty,steps) ), p_macLevFree(ttot,regi,enty) - ); + ); pm_macAbatLev("2015",regi,"co2luc") = 0; pm_macAbatLev("2020",regi,"co2luc") = 0; diff --git a/core/sets.gms b/core/sets.gms index 88995d976..9ef53b96c 100755 --- a/core/sets.gms +++ b/core/sets.gms @@ -77,7 +77,8 @@ gdp_SSP2EU_NAV_all "NAVIGATE demand scenarios: All measures (ele + act + tec)" gdp_SSP2EU_CAMP_weak "CAMPAIGNers scenario with low ambition lifestyle change" gdp_SSP2EU_CAMP_strong "CAMPAIGNers scenario with high ambition lifestyle change" gdp_SSP2_demDiffer_IKEA "Demand reduction in Global North (CAZ,EUR,JPN,NEU,USA) and demand increase in Emerging regions (IND,LAM,OAS,SSA). Reduction follows the factor f of demRedStrong scenario, while increase uses factor 2-f." -gdp_SSP2EU_demRedStrong "edget internal demScen, might be removed soon" +gdp_SSP2_demRedStrong "edget internal demScen, might be removed soon" +gdp_SSP2_demRedWeak / all_GDPpcScen "all possible GDP per capita scenarios (GDP and Population from the same SSP-scenario" @@ -199,6 +200,7 @@ all_te "all energy technologies, including from modules" geohe "geothermal heat" hydro "hydro electric" wind "wind power converters" + windon "wind onshore power converters" windoff "wind offshore power converters" spv "solar photovoltaic" csp "concentrating solar power" @@ -251,21 +253,19 @@ all_te "all energy technologies, including from modules" tdhei "transmission and distribution for heat to industry" tdheb "transmission and distribution for heat to buildings" - ccsinje "injection of co2" + ccsinje "injection of co2" *RP* Storage technology: storspv "storage technology for photo voltaic (PV)" storwind "storage technology for wind onshore" -$IFTHEN.WindOff %cm_wind_offshore% == "1" + storwindon "storage technology for wind onshore" storwindoff "storage technology for wind offshore" -$ENDIF.WindOff storcsp "storage technology for concentrating solar power (CSP)" -*RP* grid technology +*RP* grid technology: gridspv "grid between areas with high pv production and the rest" gridcsp "grid between areas with high csp production and the rest" gridwind "grid between areas with high wind onshore production and the rest" -$IFTHEN.WindOff %cm_wind_offshore% == "1" + gridwindon "grid between areas with high wind onshore production and the rest" gridwindoff "grid between areas with high wind offshore production and the rest" -$ENDIF.WindOff weathering "enhanced weathering" dac "direct air capture" @@ -1178,10 +1178,9 @@ te(all_te) "energy technologies" geohdr "geothermal electric hot dry rock" geohe "geothermal heat" hydro "hydro electric" - wind "wind power converters" -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** wind "wind power converters" + windon "wind onshore power converters" windoff "wind offshore power converters" -$ENDIF.WindOff spv "solar photovoltaic" csp "concentrating solar power" solhe "solar thermal heat generation" @@ -1197,8 +1196,8 @@ $ENDIF.WindOff tdbiogas "transmission and distribution for gas from biomass origin to stationary users" tdfosgas "transmission and distribution for gas from fossil origin to stationary users" tdsyngas "transmission and distribution for gas from synthetic origin to stationary users" - tdbiogat "transmission and distribution for gas from synthetic origin to transportation" - tdfosgat "transmission and distribution for gas from biomass origin to transportation" + tdbiogat "transmission and distribution for gas from biomass origin to transportation" + tdfosgat "transmission and distribution for gas from fossil origin to transportation" tdsyngat "transmission and distribution for gas from synthetic origin to transportation" tdbiohos "transmission and distribution for heating oil from biomass origin to stationary users" tdfoshos "transmission and distribution for heating oil from fossil origin to stationary users" @@ -1224,18 +1223,16 @@ $ENDIF.WindOff * ccsmoni "monitoring of co2, CCS related" storspv "storage technology for photo voltaic" - storwind "storage technology for wind onshore" -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** storwind "storage technology for wind onshore" + storwindon "storage technology for wind onshore" storwindoff "storage technology for wind offshore" -$ENDIF.WindOff storcsp "storage technology for concentrating solar power" gridspv "grid between areas with high pv production and the rest" gridcsp "grid between areas with high csp production and the rest" - gridwind "grid between areas with high wind onshore production and the rest" -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** gridwind "grid between areas with high wind onshore production and the rest" + gridwindon "grid between areas with high wind onshore production and the rest" gridwindoff "grid between areas with high wind offshore production and the rest" -$ENDIF.WindOff pipe_gas "Pipelines transporting natural gas" termX_lng "Export terminals for LNG (liquification)" termM_lng "Import terminals for LNG (regasification)" @@ -1291,10 +1288,9 @@ teAdj(all_te) "technologies with adjustment costs on capacity addition geohdr "geothermal electric hot dry rock" geohe "geothermal heat" hydro "hydro electric" - wind "wind onshore power converters" -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** wind "wind onshore power converters" + windon "wind onshore power converters" windoff "wind offshore power converters" -$ENDIF.WindOff spv "solar photovoltaic" csp "concentrating solar power" solhe "solar thermal heat generation" @@ -1309,20 +1305,18 @@ $ENDIF.WindOff *** ccsmoni "monitoring of co2, CCS related" storspv "storage technology for PV" - storwind "storage technology for wind onshore" -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** storwind "storage technology for wind onshore" + storwindon "storage technology for wind onshore" storwindoff "storage technology for wind offshore" -$ENDIF.WindOff storcsp "storage technology for CSP" refliq "refinery oil to SE liquids" gridspv "grid between areas with high pv production and the rest" gridcsp "grid between areas with high csp production and the rest" - gridwind "grid between areas with high wind onshore production and the rest" -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** gridwind "grid between areas with high wind onshore production and the rest" + gridwindon "grid between areas with high wind onshore production and the rest" gridwindoff "grid between areas with high wind offshore production and the rest" -$ENDIF.WindOff $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" bfcc "Blast furnace CCS" idrcc "Direct reduction CCS" @@ -1336,17 +1330,15 @@ $endif.cm_subsec_model_steel *** Note: technologies without endogenous learning can also have decreasing (or increasing) capital cost over time, due to for example convergence to global value teLearn(all_te) "Learning technologies (for which investment costs are reduced endogenously through capacity deployment)." / - wind "wind onshore power converters" -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** wind "wind onshore power converters" + windon "wind onshore power converters" windoff "wind offshore power converters" -$ENDIF.WindOff spv "solar photovoltaic" csp "concentrating solar power" storspv "storage technology for spv" - storwind "storage technology for wind onshore" -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** storwind "storage technology for wind onshore" + storwindon "storage technology for wind onshore" storwindoff "storage technology for wind offshore" -$ENDIF.WindOff storcsp "storage technology for csp" elh2 "hydrogen elecrolysis" / @@ -1424,7 +1416,9 @@ teRe(all_te) "renewable technologies including biomass" geohdr "geothermal electric hot dry rock" geohe "geothermal heat" hydro "hydro electric" - wind "wind power converters" +*** wind "wind power converters" + windon "wind onshore power converters" + windoff "wind offshore power converters" spv "solar photovoltaic" csp "concentrating solar power" solhe "solar thermal heat generation" @@ -1434,10 +1428,9 @@ teReNoBio(all_te) "renewable technologies except for biomass" geohdr "geothermal electric hot dry rock" geohe "geothermal heat" hydro "hydro electric" - wind "wind power converters" -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** wind "wind power converters" + windon "wind onshore power converters" windoff "wind offshore power converters" -$ENDIF.WindOff spv "solar photovoltaic" csp "concentrating solar power" *** solhe "solar thermal heat generation" @@ -1446,49 +1439,44 @@ teNoRe(all_te) "Non renewable energy technologies" teVRE(all_te) "technologies requiring storage" / - wind "wind power converters" -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** wind "wind power converters" + windon "wind onshore power converters" windoff "wind offshore power converters" -$ENDIF.WindOff spv "solar photovoltaic" csp "concentrating solar power" / teWind(all_te) "Onshore and offshore wind technologies" / - wind "wind power converters" -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** wind "wind power converters" + windon "wind onshore power converters" windoff "wind offshore power converters" -$ENDIF.WindOff / teStor(all_te) "storage technologies" / storspv "storage technology for spv" - storwind "storage technology for wind onshore" -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** storwind "storage technology for wind onshore" + storwindon "storage technology for wind onshore" storwindoff "storage technology for wind offshore" -$ENDIF.WindOff storcsp "storage technology for csp" / teLoc(all_te) "centralized technologies which require grid" / - wind "wind power converters" spv "solar photovoltaic" csp "concentrating solar power" -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** wind "wind power converters" + windon "wind onshore power converters" windoff "wind offshore power converters" -$ENDIF.WindOff / teGrid(all_te) "grid between areas" / gridspv "grid between areas with high pv production and the rest" gridcsp "grid between areas with high csp production and the rest" - gridwind "grid between areas with high wind onshore production and the rest" -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** gridwind "grid between areas with high wind onshore production and the rest" + gridwindon "grid between areas with high wind onshore production and the rest" gridwindoff "grid between areas with high wind offshore production and the rest" -$ENDIF.WindOff / teFosCCS(all_te) "fossil technologies with CCS" / @@ -1537,18 +1525,16 @@ teBioPebiolc(all_te) "biomass technologies using pebiolc" teNoTransform(all_te) "all technologies that do not transform energy but still have investment and O&M costs (like storage or grid)" / storspv "storage technology for photo voltaic (PV)" - storwind "storage technology for wind onshore" -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** storwind "storage technology for wind onshore" + storwindon "storage technology for wind onshore" storwindoff "storage technology for wind offshore" -$ENDIF.WindOff storcsp "storage technology for concentrating solar power (CSP)" gridspv "grid between areas with high pv production and the rest" gridcsp "grid between areas with high csp production and the rest" - gridwind "grid between areas with high wind onshore production and the rest" -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** gridwind "grid between areas with high wind onshore production and the rest" + gridwindon "grid between areas with high wind onshore production and the rest" gridwindoff "grid between areas with high wind offshore production and the rest" -$ENDIF.WindOff / teRegTechCosts(all_te) "all technologies for which we differantiate tech costs" / @@ -1566,7 +1552,8 @@ teRegTechCosts(all_te) "all technologies for which we differantiate tech costs" hydro spv csp - wind +*** wind + windon / teFlex(all_te) "all technologies which can benefit from flexibility tax" @@ -2438,10 +2425,9 @@ pe2se(all_enty,all_enty,all_te) "map primary energy carriers to secondary" pegeo.seel.geohdr pegeo.sehe.geohe pehyd.seel.hydro - pewin.seel.wind -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** pewin.seel.wind + pewin.seel.windon pewin.seel.windoff -$ENDIF.WindOff pesol.seel.spv pesol.seel.csp pesol.sehe.solhe @@ -2484,10 +2470,9 @@ capTotal(all_enty,all_enty) "mapping of input to output carriers for calculat VRE2teStor(all_te,teStor) "mapping to know which technology uses which storage technology" / spv.storspv - wind.storwind -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** wind.storwind + windon.storwindon windoff.storwindoff -$ENDIF.WindOff csp.storcsp / @@ -2501,10 +2486,9 @@ VRE2teVRElinked(all_te,all_te) "mapping between the technologies requiring st VRE2teGrid(all_te,teGrid) "mapping to know which technology needs which grid technology (length/siting)" / spv.gridspv - wind.gridwind -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** wind.gridwind + windon.gridwindon windoff.gridwindoff -$ENDIF.WindOff csp.gridcsp / @@ -2512,10 +2496,10 @@ te2teLoclinked(teLoc,teLoc2) "mapping between the technologies requiring grids / spv.csp csp.spv -$IFTHEN.WindOff %cm_wind_offshore% == "1" - windoff.wind - wind.windoff -$ENDIF.WindOff +*** windoff.wind +*** wind.windoff + windoff.windon + windon.windoff / se2se(all_enty,all_enty,all_te) "map secondary energy to secondary energy using a technology" @@ -2831,11 +2815,8 @@ prodSeOth2te(all_enty,all_te) "map other se production not directly followi teSe2rlf(all_te,rlf) "mapping for techologies to grades. Currently, the information was shifted to teRe2rlfDetail. Thus, teSe2rlf now only has '1' for the rlf values" / - (wind -$IFTHEN.WindOff %cm_wind_offshore% == "1" - windoff -$ENDIF.WindOff - spv,csp,refliq,hydro,geohe,geohdr,solhe,ngcc,ngccc,ngt,gaschp,gashp,gash2,gash2c,gastr,gasftrec,gasftcrec,dot, +*** wind + (windon,windoff,spv,csp,refliq,hydro,geohe,geohdr,solhe,ngcc,ngccc,ngt,gaschp,gashp,gash2,gash2c,gastr,gasftrec,gasftcrec,dot, igcc,igccc,pc,coaltr,coalgas,coalh2,coalh2c,coalchp,coalhp,coalftrec,coalftcrec, biotr,biotrmod,biogas,biogasc,bioftrec,bioftcrec,bioh2,bioh2c,biohp,biochp,bioigcc,bioigccc, elh2,h2turb,elh2VRE,h2turbVRE,bioethl,bioeths,biodiesel,tnrs,fnrs @@ -2844,10 +2825,9 @@ $ENDIF.WindOff teRe2rlfDetail(all_te,rlf) "mapping for SE techologies to grades" / - wind.(1*9) -$IFTHEN.WindOff %cm_wind_offshore% == "1" +*** wind.(1*9) + windon.(1*9) windoff.(1*9) -$ENDIF.WindOff spv.(1*9) csp.(1*9) hydro.(1*5) @@ -2879,11 +2859,8 @@ teCCS2rlf(all_te,rlf) "mapping for CCS technologies to grades" teNoTransform2rlf(all_te,rlf) "mapping for no transformation technologies to grades" / - (storspv,storwind -$IFTHEN.WindOff %cm_wind_offshore% == "1" -storwindoff,gridwindoff -$ENDIF.WindOff - storcsp,gridspv,gridwind,gridcsp,h2curt) . 1 +*** storwind, gridwind + (storspv,storcsp,storwindon,storwindoff,gridwindon,gridwindoff,gridspv,gridcsp,h2curt) . 1 / diff --git a/main.gms b/main.gms index 6b91f3833..3f26b96f9 100755 --- a/main.gms +++ b/main.gms @@ -353,7 +353,7 @@ $setglobal CCU on !! def = on *' * (coalPhaseout): [works only with Negishi] global phase-out of new freely-emitting coal conversion, caps all coal routes with the exception of coaltr: coal solids can still expand *' * (coalPhaseoutRegional): [works only with Negishi] global phase-out of new freely-emitting coal conversion, caps all coal routes with the exception of coaltr: coal solids can still expand *' * (CombLowCandCoalPO): [works only with Negishi] combination of lowCarbonPush and coalPhaseout -*' * (NDC): Technology targets for 2030 for spv,wind,tnrs. +*' * (NDC): Technology targets for 2030 for spv,windon,tnrs. *' * (NPi): Reference technology targets, mostly already enacted (N)ational (P)olicies (i)mplemented, mostly for 2020 *' * (EVmandates): mandate for electric vehicles - used for UBA project $setglobal techpol none !! def = none @@ -1214,7 +1214,7 @@ $setglobal cm_rcp_scen none !! def = "none" !! regexp = none|rcp20|rcp *' * (2023_cond): all NDCs conditional to international financial support published until December 31, 2023 *' * (2023_uncond): all NDCs independent of international financial support published until December 31, 2023 *' * Other supported years are 2022, 2021 and 2018, always containing NDCs published until December 31 of that year -$setglobal cm_NDC_version 2023_cond !! def = "2023_cond" !! regexp = 20(18|2[1-4])_(un)?cond +$setglobal cm_NDC_version 2024_cond !! def = "2024_cond" !! regexp = 20(18|2[1-4])_(un)?cond *' cm_netZeroScen "choose scenario of net zero targets of netZero realization of module 46_carbonpriceRegi" *' *' (NGFS_v4): settings used for NGFS v4, 2023 @@ -1555,8 +1555,8 @@ $setglobal cm_eni off !! def = off $setglobal cm_enb off !! def = off *** cm_incolearn "change floor investment cost value" *** Example on how to use: -*** cm_incolearn "wind=1600,spv=5160,csp=9500" -*** floor investment costs from learning set to 17000 for EVs; and 1600, 5160 and 9500 for wind, solar pv and solar csp respectively. +*** cm_incolearn "windon=1600,spv=5160,csp=9500" +*** floor investment costs from learning set to 1600 for wind onshore, 5160 for solar photovoltaic and 9500 for concentrated solar power. $setglobal cm_incolearn off !! def = off *** cm_storageFactor "scale curtailment and storage requirements. [factor]" *** def <- "off" = no change for curtailment and storage requirements; @@ -1580,11 +1580,11 @@ $setglobal cm_adj_coeff off $setglobal cm_adj_coeff_cont off *** cm_adj_seed_multiplier "rescale adjustment cost seed value relative to default value. [factor]. Smaller means slower scale-up." *** def <- "off" = use default adj seed values. -*** or list of techs to change adj_seed value by a multiplication factor. (ex. "spv 0.5, storspv 0.5, wind 0.25") +*** or list of techs to change adj_seed value by a multiplication factor. (ex. "spv 0.5, storspv 0.5, windon 0.25") $setglobal cm_adj_seed_multiplier off *** cm_adj_coeff_multiplier "rescale adjustment cost coefficient value relative to default value. [factor]. Higher means higher adjustment cost." *** def <- "off" = use default adj coefficient values. -*** or list of techs to change adj_cost value by a multiplication factor. (ex. "spv 2, storspv 2, wind 4") +*** or list of techs to change adj_cost value by a multiplication factor. (ex. "spv 2, storspv 2, windon 4") *** A note on adjustment cost changes: A common practice of changing the adjustment cost parameterization is by using the same factor to *** increase the adjustment cost coefficent and to decrease the adjustment cost seed value at the same time. $setglobal cm_adj_coeff_multiplier off @@ -1595,7 +1595,7 @@ $setglobal cm_adj_coeff_multiplier off $setglobal cm_inco0Factor off !! def = off *** cm_inco0RegiFactor "change investment costs regionalized technology values. [factor]." *' * def <- "off" = use default p_inco0 values. -*' * or list of techs with respective factor to change p_inco0 value by a multiplication factor. (ex. "wind 0.33, spv 0.33" makes investment costs for wind and spv 3 times cheaper) +*' * or list of techs with respective factor to change p_inco0 value by a multiplication factor. (ex. "windon 0.33, spv 0.33" makes investment costs for windon and spv 3 times cheaper) *' * (note: if %cm_techcosts% == "GLO", switch will not work for policy runs, i.e. cm_startyear > 2005, for pc, ngt and ngcc as this gets overwritten in 05_initialCap module) $setglobal cm_inco0RegiFactor off !! def = off *** cm_CCS_markup "multiplicative factor for CSS cost markup" @@ -1717,11 +1717,9 @@ $setglobal cm_feedstockEmiUnknownFate off !! def = off *** cm_feShareLimits <- "off" # def <- "off", limit the electricity final energy share to be in line with the industry maximum electrification levels (60% by 2050 in the electric scenario), 10% lower (=50% in 2050) in an increased efficiency World, or 20% lower (40% in 2050) in an incumbents future (incumbents). The incumbents scenario also limits a minimal coverage of buildings heat provided by gas and liquids (25% by 2050). $setglobal cm_feShareLimits off !! def = off *** VRE potential switches -*** rescaling factor for sensitivity analysis on renewable potentials, this factor rescales all grades of a renewable technology which have not been used by 2020 (to avoid infeasiblities swith existing capacities) -*** (ex. "spv 0.5, wind 0.75" rescales solar and wind potential by the respective factors) *** rescaling factor for sensitivity analysis on renewable potentials. *** This factor rescales all grades of a renewable technology which have not been used by 2020 (to avoid infeasiblities with existing capacities) -*** (example: "spv 0.5, wind 0.75" rescales solar and wind potential by the respective factors) +*** (example: "spv 0.5, windon 0.75" rescales solar and wind potential by the respective factors) $setGlobal c_VREPot_Factor off !! def = off *** FE tax switches, allows scaling up or down FE taxes on all sectors, energy carriers flexibly *** cm_FEtax_trajectory_abs "switch for setting the aboslute FE tax level explicitly from a given year onwards, before tax levels increases or decreases linearly to that value" @@ -1741,10 +1739,6 @@ $setGlobal cm_FEtax_trajectory_rel off !! def = off *** then the values from the region group disaggregation will be overwritten by this region-specific value. *** For example: "DEU -0.2, EU27_regi -0.4". $setGLobal c_agricult_base_shift off !! def off -*** wind offshore switch -*** cm_wind_offshore 1, wind energy is represented by "wind" and "windoff", where "wind" means wind onshore. Later this will be the default and the name "wind" will be made to change to windon -*** cm_wind_offshore 0, means wind energy is only represented by "wind", which is a mixture of both wind onshore and wind offshore -$setglobal cm_wind_offshore 1 !! def = 1 *** cm_INCONV_PENALTY on !! def = on *** *RP* 2012-03-06 Flag to turn on inconvenience penalties, e.g. for air pollution $setglobal cm_INCONV_PENALTY on !! def = on !! regexp = off|on diff --git a/modules/02_welfare/ineqLognormal/datainput.gms b/modules/02_welfare/ineqLognormal/datainput.gms index 5f7460555..ba0effb47 100644 --- a/modules/02_welfare/ineqLognormal/datainput.gms +++ b/modules/02_welfare/ineqLognormal/datainput.gms @@ -11,15 +11,15 @@ $if %cm_less_TS% == "on" pm_welf("2060") = 0.9; *RP* 2012-03-06: Inconvenience costs on seprod $IFTHEN.INCONV %cm_INCONV_PENALTY% == "on" -p02_inconvpen_lap(ttot,regi,"coaltr")$(ttot.val ge 2005) = 0.5; !! In dollar per GJ seprod at 1.000$/cap GDP, or 10$/GJ at 10.000$_GDP/cap -p02_inconvpen_lap(ttot,regi,"biotr")$(ttot.val ge 2005) = 1.0; !! In dollar per GJ seprod -p02_inconvpen_lap(ttot,regi,"biotrmod")$(ttot.val ge 2005) = 0.25; !! In dollar per GJ seprod. Biotrmod is a mix of wood stoves and automated wood pellets for heating, which has lower air pollution and other discomfort effects +p02_inconvpen_lap(ttot,regi,"coaltr")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.5; !! In dollar per GJ seprod at 1.000$/cap GDP, or 10$/GJ at 10.000$_GDP/cap +p02_inconvpen_lap(ttot,regi,"biotr")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 1.0; !! In dollar per GJ seprod +p02_inconvpen_lap(ttot,regi,"biotrmod")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.25; !! In dollar per GJ seprod. Biotrmod is a mix of wood stoves and automated wood pellets for heating, which has lower air pollution and other discomfort effects *' Transformation of coal to liquids/gases/H2 brings local pollution, which is less accepted at higher incomes -> use the inconvenience cost channel -p02_inconvpen_lap(ttot,regi,"coalftrec")$(ttot.val ge 2005) = 0.9; !! In dollar per GJ seprod -p02_inconvpen_lap(ttot,regi,"coalftcrec")$(ttot.val ge 2005) = 0.9; !! equivalent to 4$/GJ at 40.000$_GDP/cap, or 10$/GJ at 100.000$_GDP/cap -p02_inconvpen_lap(ttot,regi,"coalgas")$(ttot.val ge 2005) = 0.9; !! -p02_inconvpen_lap(ttot,regi,"coalh2")$(ttot.val ge 2005) = 0.9; !! -p02_inconvpen_lap(ttot,regi,"coalh2c")$(ttot.val ge 2005) = 0.9; !! +p02_inconvpen_lap(ttot,regi,"coalftrec")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.9; !! In dollar per GJ seprod +p02_inconvpen_lap(ttot,regi,"coalftcrec")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.9; !! equivalent to 4$/GJ at 40.000$_GDP/cap, or 10$/GJ at 100.000$_GDP/cap +p02_inconvpen_lap(ttot,regi,"coalgas")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.9; +p02_inconvpen_lap(ttot,regi,"coalh2")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.9; +p02_inconvpen_lap(ttot,regi,"coalh2c")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.9; p02_inconvpen_lap(ttot,regi,te)$(ttot.val ge 2005) = p02_inconvpen_lap(ttot,regi,te) * 4.3 * 1E-4; !! this is now equivalent to 1$/GJ at 1000$/per Capita in the welfare logarithm p02_inconvpen_lap(ttot,regi,te)$(ttot.val ge 2005) = p02_inconvpen_lap(ttot,regi,te) * (1/sm_giga_2_non) / sm_GJ_2_TWa; !! conversion util/(GJ/cap) -> util/(TWa/Gcap) *RP* these values are all calculated on seprod level. @@ -27,7 +27,7 @@ display p02_inconvpen_lap; $ENDIF.INCONV *BS* 2020-03-12: additional inputs for inequality -* To Do: rename file, then also in "files" and moinput::fullREMIND.R +*** To Do: rename file, then also in "files" and mrremind::fullREMIND.R parameter f02_ineqTheil(tall,all_regi,all_GDPscen) "Gini data" / $ondelim @@ -39,23 +39,19 @@ p02_ineqTheil(ttot,regi)$(ttot.val ge 2005) = f02_ineqTheil(ttot,regi,"%cm_GDPsc display p02_ineqTheil; -* for a policy run, we need to load values coming from the baseline for consumption, tax revenues and energy expenditures: +*** for a policy run, we need to load values coming from the baseline for consumption, tax revenues and energy expenditures: if ((cm_emiscen ne 1), Execute_Loadpoint 'input_ref' p02_taxrev_redistr0_ref=v02_taxrev_Add.l; Execute_Loadpoint 'input_ref' p02_cons_ref=vm_cons.l; Execute_Loadpoint 'input_ref' p02_energyExp_ref=v02_energyExp.l; Execute_Loadpoint 'input_ref' p02_damageFactor_ref=vm_damageFactor.l; - -* if energy system costs are used: -* Execute_Loadpoint 'input_ref' p02_energyExp_ref=vm_costEnergySys.l; - ); -* income elasticity of tax revenues redistribution. +*** income elasticity of tax revenues redistribution. p02_distrBeta(ttot,regi)$(ttot.val ge 2005) = cm_distrBeta; -* for a baseline we need the following variables to be 0: +*** for a baseline we need the following variables to be 0: p02_energyExp_ref(ttot,regi)$(cm_emiscen eq 1)=0; p02_taxrev_redistr0_ref(ttot,regi)$(cm_emiscen eq 1)=0; v02_taxrev_Add.l(ttot,regi)$(cm_emiscen eq 1)=0; @@ -63,13 +59,13 @@ v02_energyExp_Add.l(ttot,regi)$(cm_emiscen eq 1)=0; v02_energyexpShare.l(ttot,regi)$(cm_emiscen eq 1)=0; v02_revShare.l(ttot,regi)$(cm_emiscen eq 1)=0; -* For runs that are not baseline, we need to initialize: -* taxrev_Add, because they are used in the condition sign: +*** For runs that are not baseline, we need to initialize: +*** taxrev_Add, because they are used in the condition sign: v02_taxrev_Add.l(ttot,regi)$(cm_emiscen ne 1)=0; -* and v02_energyExp to the level in the baseline so the model can have a start value +*** and v02_energyExp to the level in the baseline so the model can have a start value v02_energyExp.l(ttot,regi)$(cm_emiscen eq 1)=p02_energyExp_ref(ttot,regi)$(cm_emiscen eq 1); -*parameters for translating output damage into consumption loss +*** parameters for translating output damage into consumption loss parameter f02_damConsFactor(all_regi,dam_factors) "for translating output to consumption losses from KW damage function" / $ondelim diff --git a/modules/02_welfare/utilitarian/datainput.gms b/modules/02_welfare/utilitarian/datainput.gms index 0aedb70f3..4579c365a 100644 --- a/modules/02_welfare/utilitarian/datainput.gms +++ b/modules/02_welfare/utilitarian/datainput.gms @@ -11,15 +11,15 @@ pm_welf("2060") = 0.9; *RP* 2012-03-06: Inconvenience costs on seprod $IFTHEN.INCONV %cm_INCONV_PENALTY% == "on" -p02_inconvpen_lap(ttot,regi,"coaltr")$(ttot.val ge 2005) = 0.5; !! In dollar per GJ seprod at 1.000$/cap GDP, or 10$/GJ at 10.000$_GDP/cap -p02_inconvpen_lap(ttot,regi,"biotr")$(ttot.val ge 2005) = 1.0; !! In dollar per GJ seprod -p02_inconvpen_lap(ttot,regi,"biotrmod")$(ttot.val ge 2005) = 0.25; !! In dollar per GJ seprod. Biotrmod is a mix of wood stoves and automated wood pellets for heating, which has lower air pollution and other discomfort effects +p02_inconvpen_lap(ttot,regi,"coaltr")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.5; !! In dollar per GJ seprod at 1.000$/cap GDP, or 10$/GJ at 10.000$_GDP/cap +p02_inconvpen_lap(ttot,regi,"biotr")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 1.0; !! In dollar per GJ seprod +p02_inconvpen_lap(ttot,regi,"biotrmod")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.25; !! In dollar per GJ seprod. Biotrmod is a mix of wood stoves and automated wood pellets for heating, which has lower air pollution and other discomfort effects *' Transformation of coal to liquids/gases/H2 brings local pollution, which is less accepted at higher incomes -> use the inconvenience cost channel -p02_inconvpen_lap(ttot,regi,"coalftrec")$(ttot.val ge 2005) = 0.9; !! In dollar per GJ seprod -p02_inconvpen_lap(ttot,regi,"coalftcrec")$(ttot.val ge 2005) = 0.9; !! equivalent to 4$/GJ at 40.000$_GDP/cap, or 10$/GJ at 100.000$_GDP/cap -p02_inconvpen_lap(ttot,regi,"coalgas")$(ttot.val ge 2005) = 0.9; !! -p02_inconvpen_lap(ttot,regi,"coalh2")$(ttot.val ge 2005) = 0.9; !! -p02_inconvpen_lap(ttot,regi,"coalh2c")$(ttot.val ge 2005) = 0.9; !! +p02_inconvpen_lap(ttot,regi,"coalftrec")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.9; !! In dollar per GJ seprod +p02_inconvpen_lap(ttot,regi,"coalftcrec")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.9; !! equivalent to 4$/GJ at 40.000$_GDP/cap, or 10$/GJ at 100.000$_GDP/cap +p02_inconvpen_lap(ttot,regi,"coalgas")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.9; +p02_inconvpen_lap(ttot,regi,"coalh2")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.9; +p02_inconvpen_lap(ttot,regi,"coalh2c")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.9; p02_inconvpen_lap(ttot,regi,te)$(ttot.val ge 2005) = p02_inconvpen_lap(ttot,regi,te) * 4.3 * 1E-4; !! this is now equivalent to 1$/GJ at 1000$/per Capita in the welfare logarithm p02_inconvpen_lap(ttot,regi,te)$(ttot.val ge 2005) = p02_inconvpen_lap(ttot,regi,te) * (1/sm_giga_2_non) / sm_GJ_2_TWa; !! conversion util/(GJ/cap) -> util/(TWa/Gcap) *RP* these values are all calculated on seprod level. diff --git a/modules/04_PE_FE_parameters/iea2014/datainput.gms b/modules/04_PE_FE_parameters/iea2014/datainput.gms index d90c718c0..88ea098c6 100644 --- a/modules/04_PE_FE_parameters/iea2014/datainput.gms +++ b/modules/04_PE_FE_parameters/iea2014/datainput.gms @@ -6,7 +6,7 @@ *** | Contact: remind@pik-potsdam.de *** SOF ./modules/04_PE_FE_parameters/iea2014/datainput.gms -parameter f04_IO_input(tall,all_regi,all_enty,all_enty,all_te) "Energy input based on IEA data" +parameter f04_IO_input(tall,all_regi,all_enty,all_enty,all_te) "Energy input based on IEA data" / $ondelim $include "./modules/04_PE_FE_parameters/iea2014/input/f04_IO_input.cs4r" @@ -14,6 +14,13 @@ $offdelim / ; +*** windoffshore-todo +*** allow input data with either "wind" or "windon" until mrremind is updated +f04_IO_input(tall,all_regi,"pewin","seel","windon") $ (f04_IO_input(tall,all_regi,"pewin","seel","windon") eq 0) = f04_IO_input(tall,all_regi,"pewin","seel","wind"); +f04_IO_input(tall,all_regi,"pewin","seel","wind") = 0; +*CG* setting historical production from wind offshore to 0 (due to the scarcity of offshore wind before 2015) +f04_IO_input(tall,all_regi,"pewin","seel","windoff") = 0; + if (smin((t,regi,pe2se(entyPe,entySe,te)), f04_IO_input(t,regi,entyPe,entySe,te)) lt 0, put_utility "msg" / "**""** input data problem: f04_IO_input has negative values that are overwritten"; put_utility "msg" / "**""** to still allow model solving. Check input data." /; @@ -28,12 +35,10 @@ if (smin((t,regi,pe2se(entyPe,entySe,te)), f04_IO_input(t,regi,entyPe,entySe,te) *' overwrite negative values with 0 to allow the model to solve. In the mid-term, the input data/mapping needs to be improved to prevent negative values f04_IO_input(tall,regi,entyPe,entySe,te)$(f04_IO_input(tall,regi,entyPe,entySe,te) lt 0) = 0; -*CG* setting historical production from wind offshore to 0 (due to the scarcity of offshore wind before 2015) -$IFTHEN.WindOff %cm_wind_offshore% == "1" -f04_IO_input(tall,all_regi,"pewin","seel","windoff") = 0; -$ENDIF.WindOff -parameter f04_IO_output(tall,all_regi,all_enty,all_enty,all_te) "Energy output based on IEA data" +*** RP 2019-02-19: From rev 8352 on, f04_IO_output contains gross generation for power plants. Power plant autoconsumption is contained in t&d losses. +*** This facilitates comparison with other sources which usually report gross electricity generation as well as gross capacity factors +parameter f04_IO_output(tall,all_regi,all_enty,all_enty,all_te) "Energy output based on IEA data" / $ondelim $include "./modules/04_PE_FE_parameters/iea2014/input/f04_IO_output.cs4r" @@ -41,6 +46,11 @@ $offdelim / ; +*** windoffshore-todo +*** allow input data with either "wind" or "windon" until mrremind is updated +f04_IO_output(tall,all_regi,"pewin","seel","windon") $ (f04_IO_output(tall,all_regi,"pewin","seel","windon") eq 0) = f04_IO_output(tall,all_regi,"pewin","seel","wind"); +f04_IO_output(tall,all_regi,"pewin","seel","wind") = 0; + if (smin((t,regi,pe2se(entyPe,entySe,te)), f04_IO_output(t,regi,entyPe,entySe,te)) lt 0, put_utility "msg" / "**""** input data problem: f04_IO_output has negative values that are overwritten" / put_utility "msg" / "**""** to still allow model solving. Check input data." /; @@ -58,7 +68,6 @@ f04_IO_output(tall,regi,entyPe,entySe,te)$(f04_IO_output(tall,regi,entyPe,entySe - *** making sure f04_IO_output is compatible with pm_fedemand values in 2005 *** this will become irrelevant to the model once the input data routines can be fixed so that pm_fedemand is again the same as f04_IO_output *** these lines should be removed once this is fixed at mrremind side. @@ -245,12 +254,7 @@ loop(regi, ); ); -*RP 2019-02-19: This is now changed starting from rev 8352. Power plant output is from now on gross production instead of net, and power plant autoconsumption is shifted to t&d losses -*RP This was done to facilitate comparison with other sources which usually report gross electricity generation as well as gross capacity factors -***------------------ allocate own power consumption to electricity technologies ----------------------------- -***p04_IO_output(regi,enty,enty2,te)$(sameas(enty2,"seel") AND (NOT sameas(te,"wind")) AND (NOT sameas(te,"spv")) ) = p04_IO_output(regi,enty,enty2,te) -*** - ( p04_IO_output(regi,enty,enty2,te) / sum(pe2se(enty3,enty2,te2)$((NOT sameas(te2,"wind")) AND (NOT sameas(te2,"spv"))), p04_IO_output(regi,enty3,enty2,te2)) ) -*** * f04_IO_output("2005",regi,"seel","feel","o_feel"); + display pm_IO_input, p04_IO_output; *** ---------------------------------------------------------------------------------------------------------- diff --git a/modules/11_aerosols/exoGAINS/input/mappingGAINSmixedtoREMIND17activities.csv b/modules/11_aerosols/exoGAINS/input/mappingGAINSmixedtoREMIND17activities.csv index 10414de26..b10a4b9dc 100644 --- a/modules/11_aerosols/exoGAINS/input/mappingGAINSmixedtoREMIND17activities.csv +++ b/modules/11_aerosols/exoGAINS/input/mappingGAINSmixedtoREMIND17activities.csv @@ -1,11 +1,11 @@ GAINS,REMIND,noef,elasticity -CEMENT,GDP|MER (billion US$2005/yr),0,0.4 -CHEM,GDP|MER (billion US$2005/yr),1,0.4 -CHEMBULK,GDP|MER (billion US$2005/yr),1,0.4 -CUSM,GDP|MER (billion US$2005/yr),1,0.4 -NACID,GDP|MER (billion US$2005/yr),0,0.4 -PAPER,GDP|MER (billion US$2005/yr),0,0.4 -STEEL,GDP|MER (billion US$2005/yr),0,0.4 +CEMENT,GDP|MER (billion US$2017/yr),0,0.4 +CHEM,GDP|MER (billion US$2017/yr),1,0.4 +CHEMBULK,GDP|MER (billion US$2017/yr),1,0.4 +CUSM,GDP|MER (billion US$2017/yr),1,0.4 +NACID,GDP|MER (billion US$2017/yr),0,0.4 +PAPER,GDP|MER (billion US$2017/yr),0,0.4 +STEEL,GDP|MER (billion US$2017/yr),0,0.4 End_Use_Industry_Bio_Trad,FE|Industry|Solids|Biomass|Traditional (EJ/yr),0,1 End_Use_Industry_Coal,FE|Industry|Solids|Coal (EJ/yr),0,1 End_Use_Industry_HLF,FE|Industry|Liquids (EJ/yr),0,1 @@ -35,7 +35,7 @@ Transformations_HLF,PE|Oil (EJ/yr),1,1 Transformations_HLF_Refinery,PE|Oil (EJ/yr),0,1 Transformations_LLF,PE|Oil (EJ/yr),0,1 Transformations_NatGas,PE|Gas (EJ/yr),1,1 -Waste_Solid_Industrial,GDP|MER (billion US$2005/yr),1,0.4 -Waste_Solid_Municipal,GDP|MER (billion US$2005/yr),1,0.4 -Waste_Water_Industrial,GDP|MER (billion US$2005/yr),1,0.4 -Waste_Water_Municipal,GDP|MER (billion US$2005/yr),1,0.4 +Waste_Solid_Industrial,GDP|MER (billion US$2017/yr),1,0.4 +Waste_Solid_Municipal,GDP|MER (billion US$2017/yr),1,0.4 +Waste_Water_Industrial,GDP|MER (billion US$2017/yr),1,0.4 +Waste_Water_Municipal,GDP|MER (billion US$2017/yr),1,0.4 diff --git a/modules/21_tax/off/not_used.txt b/modules/21_tax/off/not_used.txt index 12e8c638e..d50474410 100644 --- a/modules/21_tax/off/not_used.txt +++ b/modules/21_tax/off/not_used.txt @@ -24,7 +24,6 @@ cm_fetaxscen, switch, ??? cm_gdximport_target, switch, ??? pm_pop,parameter,??? cm_so2tax_scen,switch,??? -sm_DpGJ_2_TDpTWa,switch,??? vm_cesIO,variable,??? vm_co2eq,variable,??? cm_emiscen,input,questionnaire @@ -72,3 +71,4 @@ pm_gdp,input,only needed if tax is on pm_cf,input,only needed if tax is on vm_shDemSeel,input,only needed if tax is on pm_teAnnuity,input,only needed if tax is on +sm_D2005_2_D2017,input,no conversion needed diff --git a/modules/21_tax/on/datainput.gms b/modules/21_tax/on/datainput.gms index 0f9b64208..781b768fc 100644 --- a/modules/21_tax/on/datainput.gms +++ b/modules/21_tax/on/datainput.gms @@ -77,33 +77,22 @@ if(cm_fetaxscen eq 0, *** -------------------------PE2SE Taxes--------------------------(Primary to secondary energy technology taxes, specified by technology) *** cb 20110923 load paths for technology taxes, subsidies and inconvenience costs p21_tau_pe2se_tax(tall,regi,te) = 0; -p21_tau_pe2se_inconv(tall,regi,te) = 0; p21_tau_pe2se_sub(tall,regi,te)= 0; *RP* FILE changed by hand after introduction of SO2 taxes and inconvenience penalties on 2012-03-08 -*GL* Values try to account for excessive water use, further pollution -*GL* Taxes are given in USD(2005) per GJ -p21_tau_pe2se_tax(ttot,regi,"igcc")$(ttot.val ge 2005) = 0.25; -p21_tau_pe2se_tax(ttot,regi,"igccc")$(ttot.val ge 2005) = 0.25; -p21_tau_pe2se_tax(ttot,regi,"coalftrec")$(ttot.val ge 2005) = 1.0; -p21_tau_pe2se_tax(ttot,regi,"coalftcrec")$(ttot.val ge 2005) = 1.0; -p21_tau_pe2se_tax(ttot,regi,"coalh2")$(ttot.val ge 2005) = 0.5; -p21_tau_pe2se_tax(ttot,regi,"coalh2c")$(ttot.val ge 2005) = 0.5; -p21_tau_pe2se_tax(ttot,regi,"coalgas")$(ttot.val ge 2005) = 0.5; - -***JaS* Introduces inconvenience costs as taxes for the transformation of primary to secondary energy types -***JaS* Taxes are given in USD(2005) per GJ -*cb* to be exchanged for file with values if needed -p21_tau_pe2se_inconv(ttot,regi,te)$(ttot.val ge 2005)=0.000000; -*** description: Taxes/subsidies are given in USD(2005) per GJ -*** unit: USD(2005) per GJ -p21_tau_pe2se_inconv(ttot,regi,te)$(ttot.val ge 2005)=0.000000; - +*** Values try to account for excessive water use, further pollution +*** Taxes are given in USD(2005) and converted to USD(2017) per GJ +p21_tau_pe2se_tax(ttot,regi,"igcc")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.25; +p21_tau_pe2se_tax(ttot,regi,"igccc")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.25; +p21_tau_pe2se_tax(ttot,regi,"coalftrec")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 1.0; +p21_tau_pe2se_tax(ttot,regi,"coalftcrec")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 1.0; +p21_tau_pe2se_tax(ttot,regi,"coalh2")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.5; +p21_tau_pe2se_tax(ttot,regi,"coalh2c")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.5; +p21_tau_pe2se_tax(ttot,regi,"coalgas")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.5; ***cb20110923 rescaling of PE2SE parameters from $/GJ to trillion $ / TWa p21_tau_pe2se_tax(ttot,regi,te)$(ttot.val ge 2005) = p21_tau_pe2se_tax(ttot,regi,te) * 0.001 / sm_EJ_2_TWa; p21_tau_pe2se_sub(ttot,regi,te)$(ttot.val ge 2005) = p21_tau_pe2se_sub(ttot,regi,te) * 0.001 / sm_EJ_2_TWa; -p21_tau_pe2se_inconv(ttot,regi,te)$(ttot.val ge 2005) = p21_tau_pe2se_inconv(ttot,regi,te) * 0.001 / sm_EJ_2_TWa; *** SE electricity tax rate tech specific ramp up logistic function parameters p21_tau_SE_tax_rampup(t,regi,te,teSeTax_coeff) = 0; @@ -115,20 +104,7 @@ $ifThen.SEtaxRampUpParam not "%cm_SEtaxRampUpParam%" == "off" ); $endif.SEtaxRampUpParam -***cb 20110923 load paths for ressource export taxes -***cb* file for resource export taxes, not used in default settings -Parameter p21_tau_xpres_tax(tall,all_regi,all_enty) "tax path for ressource export" - / -$ondelim -$include "./modules/21_tax/on/input/p21_tau_xpres_tax.cs4r" -$offdelim - / ; -*** converted to T$/TWyr -p21_tau_xpres_tax(ttot,regi,"peoil")$(ttot.val ge 2005) = p21_tau_xpres_tax(ttot,regi,"peoil") * sm_DpGJ_2_TDpTWa; -*LB* use 0 for all regions as default -p21_tau_xpres_tax(ttot,regi,all_enty) = 0; - -*JeS for SO2 tax case: tax path in 10^12$/TgS (= 10^6 $/t S) @ GDP/cap of 1000$/cap (value gets scaled by GDP/cap) +***JeS for SO2 tax case: tax path in 10^12$/TgS (= 10^6 $/t S) @ GDP/cap of 1000$/cap (value gets scaled by GDP/cap) if((cm_so2tax_scen eq 0), s21_so2_tax_2010=0.0; elseif(cm_so2tax_scen eq 1), diff --git a/modules/21_tax/on/declarations.gms b/modules/21_tax/on/declarations.gms index 0da2ba55d..c26eac3bf 100644 --- a/modules/21_tax/on/declarations.gms +++ b/modules/21_tax/on/declarations.gms @@ -8,7 +8,6 @@ Parameters p21_tau_so2_tax(tall,all_regi) "so2 tax path" p21_tau_pe2se_tax(tall,all_regi,all_te) "tax path for primary energy technologies" -p21_tau_pe2se_inconv(tall,all_regi,all_te) "inconvenience cost path for primary energy technologies" p21_tau_pe2se_sub(tall,all_regi,all_te) "subsidy path for primary energy technologies" p21_max_fe_sub(tall,all_regi,all_enty) "maximum final energy subsidy levels from REMIND version prior to rev. 5429 [$/TWa]" p21_prop_fe_sub(tall,all_regi,all_enty) "subsidy proportional cap to avoid liquids increasing dramatically" @@ -32,7 +31,6 @@ p21_taxrevFE0(ttot,all_regi) "reference level va p21_taxrevCES0(ttot,all_regi,all_in) "reference level value of ces production tax" p21_taxrevResEx0(ttot,all_regi) "reference level value of resource extraction tax" p21_taxrevPE2SE0(ttot,all_regi) "reference level value of pe2se technologies tax" -p21_taxrevXport0(ttot,all_regi) "reference level value of exports tax" p21_taxrevSO20(ttot,all_regi) "reference level value of SO2 tax" p21_taxrevBio0(ttot,all_regi) "reference level value of bioenergy tax" p21_implicitDiscRate0(ttot,all_regi) "reference level value of implicit tax on energy efficient capital" @@ -50,7 +48,6 @@ p21_taxrevFE_iter(iteration,ttot,all_regi) "reference level valu p21_taxrevCES_iter(iteration,ttot,all_regi,all_in) "reference level value of ces production tax revenue" p21_taxrevResEx_iter(iteration,ttot,all_regi) "reference level value of resource extraction tax revenue" p21_taxrevPE2SE_iter(iteration,ttot,all_regi) "reference level value of pe2se technologies tax revenue" -p21_taxrevXport_iter(iteration,ttot,all_regi) "reference level value of exports tax revenue" p21_taxrevSO2_iter(iteration,ttot,all_regi) "reference level value of SO2 tax revenue" p21_taxrevBio_iter(iteration,ttot,all_regi) "reference level value of bioenergy tax revenue" p21_implicitDiscRate_iter(iteration,ttot,all_regi) "reference level value of implicit tax on energy efficient capital" @@ -117,7 +114,6 @@ v21_taxrevFE(ttot,all_regi) "tax on final energy (?)" v21_taxrevCES(ttot,all_regi,all_in) "tax on ces production function" v21_taxrevResEx(ttot,all_regi) "tax on resource extraction (?)" v21_taxrevPE2SE(ttot,all_regi) "tax on pe2se technologies (?)" -v21_taxrevXport(ttot,all_regi) "tax on exports (?)" v21_taxrevSO2(ttot,all_regi) "tax on SO2 (to reflect health impacts)" v21_taxrevBio(ttot,all_regi) "tax on bioenergy (to reflect sustainability constraints on bioenergy production)" v21_taxrevFlex(ttot,all_regi) "tax on technologies with flexible or inflexible electricity input" @@ -148,7 +144,6 @@ q21_taxrevFE(ttot,all_regi) "calculation of tax on final ene q21_taxrevCES(ttot,all_regi,all_in) "calculation of tax on ces production function" q21_taxrevResEx(ttot,all_regi) "calculation of tax on resource extraction" q21_taxrevPE2SE(ttot,all_regi) "calculation of tax on pe2se technologies" -q21_taxrevXport(ttot,all_regi) "calculation of tax on exports" q21_taxrevSO2(ttot,all_regi) "calculation of tax on SO2" q21_taxrevBio(ttot,all_regi) "calculation of tax on bioenergy" q21_taxrevFlex(ttot,all_regi) "tax on technologies with flexible or inflexible electricity input" diff --git a/modules/21_tax/on/equations.gms b/modules/21_tax/on/equations.gms index 463b2b781..c2198d7ec 100644 --- a/modules/21_tax/on/equations.gms +++ b/modules/21_tax/on/equations.gms @@ -43,7 +43,6 @@ q21_taxrev(t,regi)$(t.val ge max(2010,cm_startyear)).. + sum(in, v21_taxrevCES(t,regi,in)) + v21_taxrevResEx(t,regi) + v21_taxrevPE2SE(t,regi) - + v21_taxrevXport(t,regi) + v21_taxrevSO2(t,regi) + v21_taxrevBio(t,regi) - vm_costSubsidizeLearning(t,regi) @@ -187,18 +186,10 @@ v21_taxrevResEx(t,regi) =e= sum(pe2rlf(peEx(enty),rlf), p21_tau_fuEx_sub(t,regi q21_taxrevPE2SE(t,regi)$(t.val ge max(2010,cm_startyear)).. v21_taxrevPE2SE(t,regi) =e= SUM(pe2se(enty,enty2,te), - (p21_tau_pe2se_tax(t,regi,te) + p21_tau_pe2se_sub(t,regi,te) + p21_tau_pe2se_inconv(t,regi,te)) * vm_prodSe(t,regi,enty,enty2,te) + (p21_tau_pe2se_tax(t,regi,te) + p21_tau_pe2se_sub(t,regi,te)) * vm_prodSe(t,regi,enty,enty2,te) ) - p21_taxrevPE2SE0(t,regi); -***--------------------------------------------------------------------------- -*' Calculation of export taxes: tax rate times export volume -*' Documentation of overall tax approach is above at q21_taxrev. -***--------------------------------------------------------------------------- -q21_taxrevXport(t,regi)$(t.val ge max(2010,cm_startyear)).. -v21_taxrevXport(t,regi) =e= SUM(tradePe(enty), p21_tau_xpres_tax(t,regi,enty) * vm_Xport(t,regi,enty)) - - p21_taxrevXport0(t,regi); - ***--------------------------------------------------------------------------- *' Calculation of so2 tax: tax rate times emissions *' Documentation of overall tax approach is above at q21_taxrev. @@ -287,7 +278,7 @@ q21_taxrevFlex(t,regi)$( t.val ge max(2010, cm_startyear) ) .. !! vm_flexAdj is electricity price reduction/increases for flexible/ !! inflexible technologies change sign such that flexible technologies !! get subsidy - -vm_flexAdj(t,regi,te) + - vm_flexAdj(t,regi,te) * vm_demSe(t,regi,enty,enty2,te) ) - p21_taxrevFlex0(t,regi) diff --git a/modules/21_tax/on/input/files b/modules/21_tax/on/input/files index 14cf390f2..5bb4a6ad7 100644 --- a/modules/21_tax/on/input/files +++ b/modules/21_tax/on/input/files @@ -5,4 +5,4 @@ f21_prop_fe_sub.cs4r f21_tau_pe_sub.cs4r f21_max_pe_sub.cs4r f21_tax_convergence.cs4r -p21_tau_xpres_tax.cs4r + diff --git a/modules/21_tax/on/postsolve.gms b/modules/21_tax/on/postsolve.gms index ecc4f8855..72bcf0775 100644 --- a/modules/21_tax/on/postsolve.gms +++ b/modules/21_tax/on/postsolve.gms @@ -39,16 +39,15 @@ p21_taxrevResEx0(ttot,regi) = sum(pe2rlf(peEx(enty),rlf), p21_tau_fuEx_sub(ttot, p21_taxrevPE0(ttot,regi,entyPe) = pm_tau_pe_tax(ttot,regi,entyPe) * vm_prodPe.l(ttot,regi,entyPe); p21_taxrevCES0(ttot,regi,in) = pm_tau_ces_tax(ttot,regi,in) * vm_cesIO.l(ttot,regi,in); p21_taxrevPE2SE0(ttot,regi) = sum(pe2se(enty,enty2,te), - (p21_tau_pe2se_tax(ttot,regi,te) + p21_tau_pe2se_sub(ttot,regi,te) + p21_tau_pe2se_inconv(ttot,regi,te)) * vm_prodSe.l(ttot,regi,enty,enty2,te) + (p21_tau_pe2se_tax(ttot,regi,te) + p21_tau_pe2se_sub(ttot,regi,te)) * vm_prodSe.l(ttot,regi,enty,enty2,te) ); -p21_taxrevXport0(ttot,regi) = sum(tradePe(enty), p21_tau_xpres_tax(ttot,regi,enty) * vm_Xport.l(ttot,regi,enty)); p21_taxrevSO20(ttot,regi) = p21_tau_so2_tax(ttot,regi) * vm_emiTe.l(ttot,regi,"so2"); p21_taxrevBio0(ttot,regi) = v21_tau_bio.l(ttot) * vm_pebiolc_price.l(ttot,regi) * vm_fuExtr.l(ttot,regi,"pebiolc","1") + p21_bio_EF(ttot,regi) * pm_taxCO2eq(ttot,regi) * (vm_fuExtr.l(ttot,regi,"pebiolc","1") - (vm_Xport.l(ttot,regi,"pebiolc")-vm_Mport.l(ttot,regi,"pebiolc"))); p21_implicitDiscRate0(ttot,regi) = sum(ppfKap(in), p21_implicitDiscRateMarg(ttot,regi,in) * vm_cesIO.l(ttot,regi,in) ); p21_taxemiMkt0(ttot,regi,emiMkt) = pm_taxemiMkt(ttot,regi,emiMkt) * vm_co2eqMkt.l(ttot,regi,emiMkt); p21_taxrevFlex0(ttot,regi) = sum(en2en(enty,enty2,te)$(teFlexTax(te)), - -vm_flexAdj.l(ttot,regi,te) * vm_demSe.l(ttot,regi,enty,enty2,te)); + - vm_flexAdj.l(ttot,regi,te) * vm_demSe.l(ttot,regi,enty,enty2,te)); p21_taxrevImport0(ttot,regi,tradePe,tax_import_type_21) = p21_tau_Import(ttot,regi,tradePe,tax_import_type_21)$sameas(tax_import_type_21, "worldPricemarkup") * pm_pvp(ttot,tradePe) / pm_pvp(ttot,"good") * vm_Mport.l(ttot,regi,tradePe)+ p21_tau_Import(ttot, regi, tradePe, tax_import_type_21)$sameas(tax_import_type_21, "CO2taxmarkup") * pm_taxCO2eqSum(ttot,regi) * pm_cintraw(tradePe) * vm_Mport.l(ttot,regi,tradePe)+ @@ -72,7 +71,6 @@ p21_taxrevResEx_iter(iteration+1,ttot,regi) = v21_taxrevResEx.l(ttot,regi); p21_taxrevPE_iter(iteration+1,ttot,regi,entyPe) = v21_taxrevPE.l(ttot,regi,entyPe); p21_taxrevCES_iter(iteration+1,ttot,regi,in) = v21_taxrevCES.l(ttot,regi,in); p21_taxrevPE2SE_iter(iteration+1,ttot,regi) = v21_taxrevPE2SE.l(ttot,regi); -p21_taxrevXport_iter(iteration+1,ttot,regi) = v21_taxrevXport.l(ttot,regi); p21_taxrevSO2_iter(iteration+1,ttot,regi) = v21_taxrevSO2.l(ttot,regi); p21_taxrevBio_iter(iteration+1,ttot,regi) = v21_taxrevBio.l(ttot,regi); p21_implicitDiscRate_iter(iteration+1,ttot,regi) = v21_implicitDiscRate.l(ttot,regi); diff --git a/modules/21_tax/on/presolve.gms b/modules/21_tax/on/presolve.gms index b8db92642..c89b0eca5 100644 --- a/modules/21_tax/on/presolve.gms +++ b/modules/21_tax/on/presolve.gms @@ -38,16 +38,15 @@ p21_taxrevResEx0(ttot,regi) = sum(pe2rlf(peEx(enty),rlf), p21_tau_fuEx_sub(ttot, p21_taxrevPE0(ttot,regi,entyPe) = pm_tau_pe_tax(ttot,regi,entyPe) * vm_prodPe.l(ttot,regi,entyPe); p21_taxrevCES0(ttot,regi,in) = pm_tau_ces_tax(ttot,regi,in) * vm_cesIO.l(ttot,regi,in); p21_taxrevPE2SE0(ttot,regi) = sum(pe2se(enty,enty2,te), - (p21_tau_pe2se_tax(ttot,regi,te) + p21_tau_pe2se_sub(ttot,regi,te) + p21_tau_pe2se_inconv(ttot,regi,te)) * vm_prodSe.l(ttot,regi,enty,enty2,te) + (p21_tau_pe2se_tax(ttot,regi,te) + p21_tau_pe2se_sub(ttot,regi,te)) * vm_prodSe.l(ttot,regi,enty,enty2,te) ); -p21_taxrevXport0(ttot,regi) = sum(tradePe(enty), p21_tau_xpres_tax(ttot,regi,enty) * vm_Xport.l(ttot,regi,enty)); p21_taxrevSO20(ttot,regi) = p21_tau_so2_tax(ttot,regi) * vm_emiTe.l(ttot,regi,"so2"); p21_taxrevBio0(ttot,regi) = v21_tau_bio.l(ttot) * vm_pebiolc_price.l(ttot,regi) * vm_fuExtr.l(ttot,regi,"pebiolc","1") + p21_bio_EF(ttot,regi) * pm_taxCO2eq(ttot,regi) * (vm_fuExtr.l(ttot,regi,"pebiolc","1") - (vm_Xport.l(ttot,regi,"pebiolc")-vm_Mport.l(ttot,regi,"pebiolc"))); p21_implicitDiscRate0(ttot,regi) = sum(ppfKap(in), p21_implicitDiscRateMarg(ttot,regi,in) * vm_cesIO.l(ttot,regi,in) ); p21_taxemiMkt0(ttot,regi,emiMkt) = pm_taxemiMkt(ttot,regi,emiMkt) * vm_co2eqMkt.l(ttot,regi,emiMkt); p21_taxrevFlex0(ttot,regi) = sum(en2en(enty,enty2,te)$(teFlexTax(te)), - -vm_flexAdj.l(ttot,regi,te) * vm_demSe.l(ttot,regi,enty,enty2,te)); + - vm_flexAdj.l(ttot,regi,te) * vm_demSe.l(ttot,regi,enty,enty2,te)); p21_taxrevImport0(ttot,regi,tradePe,tax_import_type_21) = p21_tau_Import(ttot,regi,tradePe,tax_import_type_21)$sameas(tax_import_type_21, "worldPricemarkup") * pm_pvp(ttot,tradePe) / pm_pvp(ttot,"good") * vm_Mport.l(ttot,regi,tradePe)+ p21_tau_Import(ttot, regi, tradePe, tax_import_type_21)$sameas(tax_import_type_21, "CO2taxmarkup") * pm_taxCO2eqSum(ttot,regi) * pm_cintraw(tradePe) * vm_Mport.l(ttot,regi,tradePe)+ p21_tau_Import(ttot, regi, tradePe, tax_import_type_21)$sameas(tax_import_type_21, "avCO2taxmarkup") * max(pm_taxCO2eqSum(ttot,regi), sum(regi2, pm_taxCO2eqSum(ttot,regi2))/(card(regi2))) * pm_cintraw(tradePe) * vm_Mport.l(ttot,regi,tradePe); diff --git a/modules/32_power/IntC/datainput.gms b/modules/32_power/IntC/datainput.gms index 19f7191fa..fad62cf0d 100644 --- a/modules/32_power/IntC/datainput.gms +++ b/modules/32_power/IntC/datainput.gms @@ -10,7 +10,7 @@ *** IntC specific data input *------------------------------------------------------------------------------------ -parameter f32_shCHP(ttot,all_regi) "upper boundary of chp electricity generation" +parameter f32_shCHP(ttot,all_regi) "upper boundary of chp electricity generation" / $ondelim $include "./modules/32_power/IntC/input/f32_shCHP.cs4r" @@ -21,8 +21,7 @@ p32_shCHP(ttot,all_regi) = f32_shCHP(ttot,all_regi) + 0.05; p32_shCHP(ttot,all_regi)$(ttot.val ge 2050) = min(p32_shCHP("2020",all_regi) + 0.15, 0.75); p32_shCHP(ttot,all_regi)$((ttot.val gt 2020) and (ttot.val lt 2050)) = p32_shCHP("2020",all_regi) + ((p32_shCHP("2050",all_regi) - p32_shCHP("2020",all_regi)) / 30 * (ttot.val - 2020)); -***parameter p32_grid_factor(all_regi) - multiplicative factor that scales total grid requirements down in comparatively small or homogeneous regions like Japan, Europe or India -parameter p32_grid_factor(all_regi) "multiplicative factor that scales total grid requirements down in comparatively small or homogeneous regions like Japan, Europe or India" +parameter p32_grid_factor(all_regi) "multiplicative factor that scales total grid requirements down in comparatively small or homogeneous regions like Japan, Europe or India" / $ondelim $include "./modules/32_power/IntC/input/p32_grid_factor.cs4r" @@ -30,8 +29,7 @@ $offdelim / ; -***parameter p32_factorStorage(all_regi,all_te) - multiplicative factor that scales total curtailment and storage requirements up or down in different regions for different technologies (e.g. down for PV in regions where high solar radiation coincides with high electricity demand) -parameter f32_factorStorage(all_regi,all_te) "multiplicative factor that scales total curtailment and storage requirements up or down in different regions for different technologies (e.g. down for PV in regions where high solar radiation coincides with high electricity demand)" +parameter f32_factorStorage(all_regi,all_te) "multiplicative factor that scales total curtailment and storage requirements up or down in different regions for different technologies (e.g. down for PV in regions where high solar radiation coincides with high electricity demand)" / $ondelim $include "./modules/32_power/IntC/input/f32_factorStorage.cs4r" @@ -39,37 +37,26 @@ $offdelim / ; -$IFTHEN.WindOff %cm_wind_offshore% == "1" -f32_factorStorage(all_regi,"windoff") = f32_factorStorage(all_regi,"wind"); -f32_factorStorage(all_regi,"wind") = 1.35 * f32_factorStorage(all_regi,"wind"); -$ENDIF.WindOff -p32_factorStorage(all_regi,all_te) = f32_factorStorage(all_regi,all_te); +*** windoffshore-todo +*** allow input data with either "wind" or "windon" until mrremind is updated +f32_factorStorage(all_regi,"windon") $ (f32_factorStorage(all_regi,"windon") eq 0) = f32_factorStorage(all_regi,"wind"); +f32_factorStorage(all_regi,"windoff") = f32_factorStorage(all_regi,"windon"); +f32_factorStorage(all_regi,"windon") = 1.35 * f32_factorStorage(all_regi,"windon"); + +p32_factorStorage(all_regi,teVRE) = f32_factorStorage(all_regi,teVRE); $if not "%cm_storageFactor%" == "off" p32_factorStorage(all_regi,all_te)=%cm_storageFactor%*p32_factorStorage(all_regi,all_te); ***parameter p32_storexp(all_regi,all_te) - exponent that determines how curtailment and storage requirements per kW increase with market share of wind and solar. 1 means specific marginal costs increase linearly -p32_storexp(regi,"spv") = 1; -p32_storexp(regi,"csp") = 1; -p32_storexp(regi,"wind") = 1; -$IFTHEN.WindOff %cm_wind_offshore% == "1" -p32_storexp(regi,"windoff") = 1; -$ENDIF.WindOff - - +p32_storexp(regi,teVRE) = 1; ***parameter p32_gridexp(all_regi,all_te) - exponent that determines how grid requirement per kW increases with market share of wind and solar. 1 means specific marginal costs increase linearly -p32_gridexp(regi,"spv") = 1; -p32_gridexp(regi,"csp") = 1; -p32_gridexp(regi,"wind") = 1; +p32_gridexp(regi,teVRE) = 1; -table f32_storageCap(char, all_te) "multiplicative factor between dummy seel<-->h2 technologies and storXXX technologies" +table f32_storageCap(char, all_te) "multiplicative factor between dummy seel<-->h2 technologies and storXXX technologies" $include "./modules/32_power/IntC/input/f32_storageCap.prn" ; -$IFTHEN.WindOff %cm_wind_offshore% == "1" -f32_storageCap(char,"windoff") = f32_storageCap(char,"wind"); -$ENDIF.WindOff - p32_storageCap(te,char) = f32_storageCap(char,te); display p32_storageCap; @@ -83,19 +70,6 @@ p32_shThresholdTotVREAddIntCost(t)$(t.val > 2045) = 95; p32_FactorAddIntCostTotVRE = 1.5; -$ontext -parameter p32_flex_maxdiscount(all_regi,all_te) "maximum electricity price discount for flexible technologies reached at high VRE shares" -/ -$ondelim -$include "./modules/32_power/IntC/input/p32_flex_maxdiscount.cs4r" -$offdelim -/ -; -*** convert from USD2015/MWh to trUSD2005/TWa -p32_flex_maxdiscount(regi,te) = p32_flex_maxdiscount(regi,te) * sm_TWa_2_MWh * s_D2015_2_D2005 * 1e-12; -display p32_flex_maxdiscount; -$offtext - *** Flexibility Tax Parameter *** Both flexibility tax parameters are based on a regression analysis with hourly dispatch data from high-VRE scenarios of the Langfristszenarien diff --git a/modules/32_power/IntC/equations.gms b/modules/32_power/IntC/equations.gms index be046fafc..22eb4cc4b 100644 --- a/modules/32_power/IntC/equations.gms +++ b/modules/32_power/IntC/equations.gms @@ -56,8 +56,9 @@ q32_usableSeTe(t,regi,entySe,te)$(sameas(entySe,"seel") AND teVRE(te)).. ***--------------------------------------------------------------------------- *' Definition of capacity constraints for storage: ***--------------------------------------------------------------------------- -*' This equation calculates the storage cpacity for each testor that needs to be installed based on the amount of v32_storloss that is calculated below in -*' q32_storloss. Multiplying v32_storloss with "eta/(1-eta)" yields the total output of a storage technology; this output has to be smaller than cap * capfac. +*' This equation calculates the storage capacity for each teStor that needs to be installed based on the amount of +*' v32_storloss that is calculated below in q32_storloss. Multiplying v32_storloss with "eta/(1-eta)" yields +*' the total output of a storage technology; this output has to be smaller than cap * capfac. q32_limitCapTeStor(t,regi,teStor)$( t.val ge 2020 ) .. ( 0.5$( cm_VRE_supply_assumptions eq 1 ) !! reduce storage investment needs by half for VRE_supply_assumptions = 1 + 1$( cm_VRE_supply_assumptions ne 1 ) @@ -68,23 +69,23 @@ q32_limitCapTeStor(t,regi,teStor)$( t.val ge 2020 ) .. =l= sum(te2rlf(teStor,rlf), vm_capFac(t,regi,teStor) - * pm_dataren(regi,"nur",rlf,teStor) * vm_cap(t,regi,teStor,rlf) ) ; -*** H2 storage implementation: Storage technologies (storspv, storwind etc.) also -*** represent H2 storage. This is implemented by scaling up capacities of -*** H2 turbines (h2turbVRE, seh2 -> seel) with VRE capacities which require storage (according to q32_limitCapTeStor). +*** H2 storage implementation: +*** Storage technologies (storspv, storwind etc.) also represent H2 storage. +*** This is implemented by scaling up capacities of H2 turbines (h2turbVRE, seh2 -> seel) +*** with VRE capacities which require storage (according to q32_limitCapTeStor). *** These H2 turbines (h2turbVRE) do not have capital cost. Their cost are already considered in storage technologies. -*** H2 turbines do not need be built if sufficient gas turbines (ngt) are available to provide flexibility. -*' Require a certain capacity of either hydrogen or gas turbines as peaking backup capacity. The driver is the testor capacity, which in turn is determined by v32_storloss +*** H2 turbines are not needed if sufficient gas turbines (ngt) are available to provide flexibility. +*' Require a certain capacity of either hydrogen or gas turbines as peaking backup capacity. The driver is the teStor capacity, which in turn is determined by v32_storloss q32_h2turbVREcapfromTestor(t,regi).. vm_cap(t,regi,"h2turbVRE","1") + vm_cap(t,regi,"ngt","1") =g= - sum(teStor, + sum(teStor, p32_storageCap(teStor,"h2turbVREcapratio") * vm_cap(t,regi,teStor,"1") ) ; @@ -92,15 +93,18 @@ q32_h2turbVREcapfromTestor(t,regi).. q32_h2turbVREcapfromTestorUp(t,regi).. vm_cap(t,regi,"h2turbVRE","1") =l= - sum(te$teStor(te), - p32_storageCap(te,"h2turbVREcapratio") * vm_cap(t,regi,te,"1") ) + sum(teStor, + p32_storageCap(teStor,"h2turbVREcapratio") * vm_cap(t,regi,teStor,"1") ) ; *** build additional electrolysis capacities with stored VRE electricity, phase-in from 2030 to 2040 q32_elh2VREcapfromTestor(t,regi).. vm_cap(t,regi,"elh2","1") =g= - sum(te$teStor(te), p32_storageCap(te,"elh2VREcapratio") * vm_cap(t,regi,te,"1") ) * p32_phaseInElh2VREcap(t) + sum(teStor, + p32_storageCap(teStor,"elh2VREcapratio") * vm_cap(t,regi,teStor,"1") + ) + * p32_phaseInElh2VREcap(t) ; @@ -119,15 +123,13 @@ q32_limitCapTeChp(t,regi).. ***--------------------------------------------------------------------------- *' Additional grid expansion to integrate VRE are driven linearly by VRE output q32_limitCapTeGrid(t,regi)$( t.val ge 2020 ) .. - vm_cap(t,regi,"gridwind",'1') !! Technology is now parameterized to yield marginal costs of ~3.5$/MWh VRE electricity + vm_cap(t,regi,"gridwindon",'1') !! Technology is now parameterized to yield marginal costs of ~3.5$/MWh VRE electricity / p32_grid_factor(regi) !! It is assumed that large regions require higher grid investment =g= vm_prodSe(t,regi,"pesol","seel","spv") + vm_prodSe(t,regi,"pesol","seel","csp") - + 1.5 * vm_prodSe(t,regi,"pewin","seel","wind") !! wind has larger variations accross space, so adding grid is more important for wind (result of REMIX runs for ADVANCE project) -$IFTHEN.WindOff %cm_wind_offshore% == "1" - + 3 * vm_prodSe(t,regi,"pewin","seel","windoff") !! Getting offshore wind connected has even higher grid costs -$ENDIF.WindOff + + 1.5 * vm_prodSe(t,regi,"pewin","seel","windon") !! wind has larger variations accross space, so adding grid is more important for wind (result of REMIX runs for ADVANCE project) + + 3 * vm_prodSe(t,regi,"pewin","seel","windoff") !! Getting offshore wind connected has even higher grid costs ; ***--------------------------------------------------------------------------- @@ -165,7 +167,7 @@ q32_shStor(t,regi,teVRE)$(t.val ge 2015).. *' as it drives storage investments and thus the additional costs seen by VRE. It depends linearly on the usableSE output from this VRE, and linearly on the *' SPECIFIC integration challenges, which in turn are mainly the adjusted share of the technology itself (v32_shSTor), but also increase when the total VRE share *' increases beyond a (time-dependent) threshold. -*' The term "(1-eta)/eta" is equal to the ratio "losses of a testor" to "output of a testor". +*' The term "(1-eta)/eta" is equal to the ratio "losses of a teStor" to "output of a teStor". *' An example: If the specific integration challenges (v32_shStor + p32_Fact * v32_shAddInt) of eg. PV would reach 100%, then ALL the usable output of PV *' would have to be "stabilized" by going through storsp, so the total storage losses & curtailment would exactly represent the (1-eta) values of storspv. When *' the specific integration challenge term () is below 100%, the required storage and resulting losses are scaled down accordingly. @@ -187,7 +189,7 @@ q32_TotVREshare(t,regi).. ) ; -*' Calculate additional integration costs if total VRE share is above a certain threshold. (A system with only 40% VRE will be less challenged to handle 30% PV than +*' Calculate additional integration costs if total VRE share is above a certain threshold. A system with only 40% VRE will be less challenged to handle 30% PV than *' a system with 70% VRE, because you have less thermal plants that can act as backup and provide inertia. This threshold increases over time to represent that *' network operators learn about managing high-VRE systems, and that technologies such as grid-stabilizing VRE and batteries become widespread. q32_shAddIntCostTotVRE(t,regi).. @@ -195,9 +197,7 @@ q32_shAddIntCostTotVRE(t,regi).. =g= v32_TotVREshare(t,regi) - p32_shThresholdTotVREAddIntCost(t) -$IFTHEN.WindOff %cm_wind_offshore% == "1" - 0.5 * vm_shSeEl(t,regi,"windoff") !! for offshore wind, the correlation with other VRE is much smaller, reducing the additional integration challenge -$ENDIF.WindOff ; ***--------------------------------------------------------------------------- diff --git a/modules/32_power/IntC/input/f32_storageCap.prn b/modules/32_power/IntC/input/f32_storageCap.prn index 98424de5b..b6ce64840 100644 --- a/modules/32_power/IntC/input/f32_storageCap.prn +++ b/modules/32_power/IntC/input/f32_storageCap.prn @@ -1,7 +1,7 @@ *** SOF ./modules/32_power/IntC/input/storageCap.prn - storspv storwind storcsp -elh2VREcapratio 0.16 0.12 0.12 -h2turbVREcapratio 1.2 0.90 0.90 -batteryVREcapRatio 3 1.1 0 + storspv storcsp storwindon storwindoff +elh2VREcapratio 0.16 0.12 0.12 0.12 +h2turbVREcapratio 1.2 0.9 0.9 0.9 +batteryVREcapRatio 3 0 1.1 1.1 *** EOF ./modules/32_power/IntC/input/storageCap.prn diff --git a/modules/35_transport/edge_esm/presolve.gms b/modules/35_transport/edge_esm/presolve.gms index ca297ab5a..6e16e1050 100644 --- a/modules/35_transport/edge_esm/presolve.gms +++ b/modules/35_transport/edge_esm/presolve.gms @@ -13,7 +13,7 @@ if( (ord(iteration) le 25 and ord(iteration) ge cm_startIter_EDGET and (mod(ord( Execute "Rscript -e 'edgeTransport::iterativeEdgeTransport()'"; Execute_Loadpoint 'p35_esCapCost' p35_esCapCost; - pm_esCapCost(t,regi,teEs_dyn35)$(t.val gt 2010 AND t.val ge cm_startyear AND t.val le 2100) = p35_esCapCost(t,regi,"%cm_GDPscen%","%cm_demScen%","%cm_EDGEtr_scen%",teEs_dyn35); + pm_esCapCost(t,regi,teEs_dyn35)$(t.val gt 2010 AND t.val le 2100) = p35_esCapCost(t,regi,"%cm_GDPscen%","%cm_demScen%","%cm_EDGEtr_scen%",teEs_dyn35); !! load FE-to-ES results from EDGE-Transport into auxilliary parameter Execute_Loadpoint "p35_fe2es", p35_fe2es_aux = p35_fe2es; diff --git a/modules/36_buildings/simple/datainput.gms b/modules/36_buildings/simple/datainput.gms index a092646ac..95b38a4e6 100644 --- a/modules/36_buildings/simple/datainput.gms +++ b/modules/36_buildings/simple/datainput.gms @@ -120,10 +120,10 @@ p36_CESMkup(ttot,regi,in) = 0; *' mark-up cost on heat pumps and district heating are incurred as actual cost to the budget (see option (a) above) *' place markup cost on heat pumps electricity of 200 USD/MWh(el) to represent demand-side cost of electrification *' and reach higher efficiency during calibration to model higher energy efficiency of heat pumps -p36_CESMkup(ttot,regi,"feelhpb") = 200 * sm_TWa_2_MWh * 1e-12; +p36_CESMkup(ttot,regi,"feelhpb") = 200 * sm_D2005_2_D2017 * sm_TWa_2_MWh * 1e-12; *' place markup cost on district heating of 25 USD/MWh(heat) to represent additional t&d cost of expanding district heating networks for buildings *' which makes district heating in buildings more expensive than in industry -p36_CESMkup(ttot,regi,"feheb") = 25 * sm_TWa_2_MWh * 1e-12; +p36_CESMkup(ttot,regi,"feheb") = 25 * sm_D2005_2_D2017 * sm_TWa_2_MWh * 1e-12; *' overwrite or extent CES markup cost if specified by switch $ifThen.CESMkup not "%cm_CESMkup_build%" == "standard" diff --git a/modules/37_industry/fixed_shares/datainput.gms b/modules/37_industry/fixed_shares/datainput.gms index 3cda8fe57..a40f175c5 100644 --- a/modules/37_industry/fixed_shares/datainput.gms +++ b/modules/37_industry/fixed_shares/datainput.gms @@ -61,7 +61,7 @@ $offdelim $include "./modules/37_industry/fixed_shares/input/pm_abatparam_Ind.gms"; $IFTHEN.Industry_CCS_markup not "%cm_Industry_CCS_markup%" == "off" - pm_abatparam_Ind(ttot,regi,all_enty,steps)$pm_abatparam_Ind(ttot,regi,all_enty,steps) = (1/%cm_Industry_CCS_markup%)*pm_abatparam_Ind(ttot,regi,all_enty,steps); + pm_abatparam_Ind(ttot,regi,all_enty,steps)$pm_abatparam_Ind(ttot,regi,all_enty,steps) = (1/%cm_Industry_CCS_markup%)*pm_abatparam_Ind(ttot,regi,all_enty,steps); $ENDIF.Industry_CCS_markup *** fill in share of other industry sector diff --git a/modules/37_industry/fixed_shares/input/pm_abatparam_Ind.gms b/modules/37_industry/fixed_shares/input/pm_abatparam_Ind.gms index df9d96b89..5d2110b44 100644 --- a/modules/37_industry/fixed_shares/input/pm_abatparam_Ind.gms +++ b/modules/37_industry/fixed_shares/input/pm_abatparam_Ind.gms @@ -17,15 +17,15 @@ $endif !! short-term (until 2025) if (ttot.val le 2025, - pm_abatparam_Ind(ttot,regi,"co2cement",steps)$( sm_tmp ge 95 ) = 0.63; - pm_abatparam_Ind(ttot,regi,"co2cement",steps)$( sm_tmp ge 133 ) = 0.756; + pm_abatparam_Ind(ttot,regi,"co2cement",steps)$( sm_tmp ge sm_D2005_2_D2017 * 95 ) = 0.63; + pm_abatparam_Ind(ttot,regi,"co2cement",steps)$( sm_tmp ge sm_D2005_2_D2017 *133 ) = 0.756; - pm_abatparam_Ind(ttot,regi,"co2chemicals",steps)$( sm_tmp ge 78 ) = 0.121; - pm_abatparam_Ind(ttot,regi,"co2chemicals",steps)$( sm_tmp ge 80 ) = 0.572; + pm_abatparam_Ind(ttot,regi,"co2chemicals",steps)$( sm_tmp ge sm_D2005_2_D2017 *78 ) = 0.121; + pm_abatparam_Ind(ttot,regi,"co2chemicals",steps)$( sm_tmp ge sm_D2005_2_D2017 *80 ) = 0.572; $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" - pm_abatparam_Ind(ttot,regi,"co2steel",steps)$( sm_tmp ge 59 ) = 0.117; - pm_abatparam_Ind(ttot,regi,"co2steel",steps)$( sm_tmp ge 82 ) = 0.234; + pm_abatparam_Ind(ttot,regi,"co2steel",steps)$( sm_tmp ge sm_D2005_2_D2017 *59 ) = 0.117; + pm_abatparam_Ind(ttot,regi,"co2steel",steps)$( sm_tmp ge sm_D2005_2_D2017 *82 ) = 0.234; $endif.cm_subsec_model_steel !! long-term (from 2030 on) @@ -43,16 +43,16 @@ $endif.cm_subsec_model_steel = max(0, min(0.95, 0.2159 + 0.1365 * log(sm_tmp))); else - pm_abatparam_Ind(ttot,regi,"co2cement",steps)$( sm_tmp ge 54 ) = 0.702; - pm_abatparam_Ind(ttot,regi,"co2cement",steps)$( sm_tmp ge 133 ) = 0.756; + pm_abatparam_Ind(ttot,regi,"co2cement",steps)$( sm_tmp ge sm_D2005_2_D2017 * 54 ) = 0.702; + pm_abatparam_Ind(ttot,regi,"co2cement",steps)$( sm_tmp ge sm_D2005_2_D2017 * 133 ) = 0.756; - pm_abatparam_Ind(ttot,regi,"co2chemicals",steps)$( sm_tmp ge 46 ) = 0.363; - pm_abatparam_Ind(ttot,regi,"co2chemicals",steps)$( sm_tmp ge 78 ) = 0.484; - pm_abatparam_Ind(ttot,regi,"co2chemicals",steps)$( sm_tmp ge 80 ) = 0.572; + pm_abatparam_Ind(ttot,regi,"co2chemicals",steps)$( sm_tmp ge sm_D2005_2_D2017 * 46 ) = 0.363; + pm_abatparam_Ind(ttot,regi,"co2chemicals",steps)$( sm_tmp ge sm_D2005_2_D2017 * 78 ) = 0.484; + pm_abatparam_Ind(ttot,regi,"co2chemicals",steps)$( sm_tmp ge sm_D2005_2_D2017 *80 ) = 0.572; $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" - pm_abatparam_Ind(ttot,regi,"co2steel",steps)$( sm_tmp ge 48 ) = 0.117; - pm_abatparam_Ind(ttot,regi,"co2steel",steps)$( sm_tmp ge 62 ) = 0.275; + pm_abatparam_Ind(ttot,regi,"co2steel",steps)$( sm_tmp ge sm_D2005_2_D2017 *48 ) = 0.117; + pm_abatparam_Ind(ttot,regi,"co2steel",steps)$( sm_tmp ge sm_D2005_2_D2017 *62 ) = 0.275; $endif.cm_subsec_model_steel ); ); diff --git a/modules/37_industry/fixed_shares/not_used.txt b/modules/37_industry/fixed_shares/not_used.txt index a73aa7d40..3082cb3c0 100644 --- a/modules/37_industry/fixed_shares/not_used.txt +++ b/modules/37_industry/fixed_shares/not_used.txt @@ -34,3 +34,5 @@ vm_incinerationCCS, variable, does not want to play vm_incinerationEmi, variable, not needed vm_nonIncineratedPlastics, variable, not needed vm_outflowPrc, variable, not needed +sm_D2020_2_D2017,input,no conversion needed +sm_EURO2023_2_D2017,input,no conversion needed diff --git a/modules/37_industry/subsectors/datainput.gms b/modules/37_industry/subsectors/datainput.gms index 97e6c03ee..13a3f08bd 100644 --- a/modules/37_industry/subsectors/datainput.gms +++ b/modules/37_industry/subsectors/datainput.gms @@ -693,13 +693,13 @@ $endif.cm_subsec_model_steel p37_priceMat(all_enty) = 0.; $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" !! IEA STeel Roadmap Fig 1.3 Caption: Scrap price 200-300 $/t -!! => take 250 $/t, inflation 2005 --> 2020 / 1.33 -p37_priceMat("eafscrap") = 0.188; -p37_priceMat("bofscrap") = 0.188; -!! Agora KSV-Rechner: 114 €/tSteel / (1.4 2005$/2023€) / (tn$ /bn t) -p37_priceMat("ironore") = 0.081; -!! Agora KSV-Rechner: 154 €/tSteel / (1.4 2005$/2023€) / (tn$ /bn t) -p37_priceMat("dripell") = 0.110; +!! => take 250 $/t, unit 2020$US +p37_priceMat("eafscrap") = sm_D2020_2_D2017 * 0.250 ; +p37_priceMat("bofscrap") = sm_D2020_2_D2017 * 0.250; +!! Agora KSV-Rechner: 114 €2023/tSteel / (tn$ /bn t) +p37_priceMat("ironore") = sm_EURO2023_2_D2017 * 0.114; +!! Agora KSV-Rechner: 154 €2023/tSteel / (tn$ /bn t) +p37_priceMat("dripell") = sm_EURO2023_2_D2017 * 0.154; $endif.cm_subsec_model_steel *** -------------------------------- diff --git a/modules/37_industry/subsectors/declarations.gms b/modules/37_industry/subsectors/declarations.gms index 827d4cace..340e79598 100644 --- a/modules/37_industry/subsectors/declarations.gms +++ b/modules/37_industry/subsectors/declarations.gms @@ -38,7 +38,7 @@ Parameters p37_teMatShareHist(all_te,opmoPrc,mat) "Share that a tePrc/opmoPrc historically contibrutes to production of a matFin" p37_captureRate(all_te) "Capture rate of CCS technology" p37_selfCaptureRate(all_te) "Share of emissions from fossil fuels used for a CCS process which are captured by the CCS process itself" - p37_priceMat(all_enty) "Prices of external material input [2005$/kg = trn2005$/Gt]" + p37_priceMat(all_enty) "Prices of external material input [US$/kg] = [trn$US/Gt]" p37_chemicals_feedstock_share(ttot,all_regi) "minimum share of feso/feli/fega in total chemicals FE input [0-1]" p37_FeedstockCarbonContent(ttot,all_regi,all_enty) "carbon content of feedstocks [GtC/TWa]" @@ -115,7 +115,6 @@ $endif.no_calibration q37_costCESmarkup(ttot,all_regi,all_in) "calculation of additional CES markup cost to represent demand-side technology cost of end-use transformation, for example, cost of heat pumps etc." q37_chemicals_feedstocks_limit(ttot,all_regi) "lower bound on feso/feli/fega in chemicals FE input for feedstocks" q37_demFeFeedstockChemIndst(ttot,all_regi,all_enty,all_emiMkt) "defines energy flow of non-energy feedstocks for the chemicals industry. It is used for emissions accounting" - q37_FossilFeedstock_Base(ttot,all_regi,all_enty,all_emiMkt) "in baseline runs feedstocks only come from fossil energy carriers" q37_FeedstocksCarbon(ttot,all_regi,all_enty,all_enty,all_emiMkt) "calculate carbon contained in feedstocks [GtC]" q37_plasticsCarbon(ttot,all_regi,all_enty,all_enty,all_emiMkt) "calculate carbon contained in plastics [GtC]" q37_plasticWaste(ttot,all_regi,all_enty,all_enty,all_emiMkt) "calculate carbon contained in plastic waste [GtC]" diff --git a/modules/37_industry/subsectors/equations.gms b/modules/37_industry/subsectors/equations.gms index ae83992fc..e6011ce34 100644 --- a/modules/37_industry/subsectors/equations.gms +++ b/modules/37_industry/subsectors/equations.gms @@ -81,8 +81,10 @@ $endif.exogDem_scen *' energy mix, as that is what can be captured); vm_emiIndBase itself is not used for emission *' accounting, just as a CCS baseline. ***------------------------------------------------------ -q37_emiIndBase(t,regi,enty,secInd37)$( entyFeCC37(enty) - OR sameas(enty,"co2cement_process") ) .. +q37_emiIndBase(t,regi,enty,secInd37)$( + entyFeCC37(enty) + OR ( sameas(enty,"co2cement_process") + AND cm_CCS_cement eq 1 ) ) .. vm_emiIndBase(t,regi,enty,secInd37) =e= sum((secInd37_2_pf(secInd37,ppfen_industry_dyn37(in)),fe2ppfEn(entyFeCC37(enty),in)), @@ -348,18 +350,6 @@ $else.cm_feedstockEmiUnknownFate $endIf.cm_feedstockEmiUnknownFate ; -*' in baseline runs, all industrial feedstocks should come from fossil energy -*' carriers, no biofuels or synfuels -q37_FossilFeedstock_Base(t,regi,entyFe,emiMkt)$( - entyFE2sector2emiMkt_NonEn(entyFe,"indst",emiMkt) - AND cm_emiscen eq 1 ) .. - sum(entySe, vm_demFENonEnergySector(t,regi,entySe,entyFe,"indst",emiMkt)) - =e= - sum(entySeFos, - vm_demFENonEnergySector(t,regi,entySeFos,entyFe,"indst",emiMkt) - ) -; - *** --------------------------------------------------------------------------- *** 2. Process-Based *** --------------------------------------------------------------------------- diff --git a/modules/37_industry/subsectors/not_used.txt b/modules/37_industry/subsectors/not_used.txt index 2b2763d7f..eb33d72e1 100644 --- a/modules/37_industry/subsectors/not_used.txt +++ b/modules/37_industry/subsectors/not_used.txt @@ -24,3 +24,4 @@ pm_shfe_up,parameter,not needed sm_trillion_2_non,input,questionnaire sm_TWa_2_kWh,input,questionnaire vm_macBase,input,questionnaire +sm_D2005_2_D2017,input,no conversion needed diff --git a/modules/37_industry/subsectors/sets.gms b/modules/37_industry/subsectors/sets.gms index f0abe2819..26f615ca1 100644 --- a/modules/37_industry/subsectors/sets.gms +++ b/modules/37_industry/subsectors/sets.gms @@ -381,6 +381,15 @@ $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" $endif.cm_subsec_model_steel / + teCCPrc(tePrc) "Technologies used in process-based model (only CCS)" + / + $$ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" + bfcc + idrcc + $$endif.cm_subsec_model_steel + / + + mat(all_enty) "Materials considered in process-based model; Can be input and/or output of a process" / $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" @@ -634,7 +643,7 @@ pf_quan_target_dyn29(pf_quan_target_dyn37) = YES; $endif.calibrate teMat2rlf(tePrc,"1") = YES; -alias(tePrc,teCCPrc,tePrc1,tePrc2); +alias(tePrc,tePrc1,tePrc2); alias(opmoPrc,opmoCCPrc,opmoPrc1,opmoPrc2); alias(route,route2); alias(entyFeCC37,entyFeCC37_2); diff --git a/modules/40_techpol/CombLowCandCoalPO/datainput.gms b/modules/40_techpol/CombLowCandCoalPO/datainput.gms index 1ce3c18b7..f7248eb30 100644 --- a/modules/40_techpol/CombLowCandCoalPO/datainput.gms +++ b/modules/40_techpol/CombLowCandCoalPO/datainput.gms @@ -9,16 +9,16 @@ *cb targets for renewable upscaling: CSP and SPV from plausible extrapolation of current trends, Wind taken from Optimal immediate policy run (slightly optimistic at beginning) p40_NewRenBound("2015","csp")=2.267; p40_NewRenBound("2015","spv")=180; -p40_NewRenBound("2015","wind")=506.022; +p40_NewRenBound("2015","windon")=506.022; p40_NewRenBound("2020","csp")=4.5; p40_NewRenBound("2020","spv")=400; -p40_NewRenBound("2020","wind")=826.341; +p40_NewRenBound("2020","windon")=826.341; p40_NewRenBound("2025","csp")=8.5; p40_NewRenBound("2025","spv")=610; -p40_NewRenBound("2025","wind")=1208.034; +p40_NewRenBound("2025","windon")=1208.034; p40_NewRenBound("2030","csp")=18.5; p40_NewRenBound("2030","spv")=900; -p40_NewRenBound("2030","wind")=1646.939; +p40_NewRenBound("2030","windon")=1646.939; *cb plausible, quite conservative upscaling (much lower than in optimal immediate) p40_NewRenBound("2020","bioftcrec")=2.4; diff --git a/modules/40_techpol/CombLowCandCoalPO/equations.gms b/modules/40_techpol/CombLowCandCoalPO/equations.gms index 0894f2c93..ef5f65e29 100644 --- a/modules/40_techpol/CombLowCandCoalPO/equations.gms +++ b/modules/40_techpol/CombLowCandCoalPO/equations.gms @@ -5,7 +5,7 @@ *** | REMIND License Exception, version 1.0 (see LICENSE file). *** | Contact: remind@pik-potsdam.de *** SOF ./modules/40_techpol/CombLowCandCoalPO/equations.gms -q40_NewRenBound(t,te)$(t.val gt 2010 AND t.val lt 2031 AND (sameas(te,"spv") OR sameas(te,"csp") OR sameas(te,"wind") OR sameas(te,"bioftcrec") OR sameas(te,"ngccc") )).. +q40_NewRenBound(t,te)$(t.val gt 2010 AND t.val lt 2031 AND (sameas(te,"spv") OR sameas(te,"csp") OR sameas(te,"windon") OR sameas(te,"bioftcrec") OR sameas(te,"ngccc") )).. *** attention: sum(regi will not work with Nash, therefore please reformulate with the usual iterative update mechanism sum(regi, sum(te2rlf(te,rlf), vm_cap(t,regi,te,rlf)) diff --git a/modules/40_techpol/NDC/bounds.gms b/modules/40_techpol/NDC/bounds.gms index 3a4a50594..4d62220e3 100755 --- a/modules/40_techpol/NDC/bounds.gms +++ b/modules/40_techpol/NDC/bounds.gms @@ -12,6 +12,8 @@ vm_cap.lo(t,regi,"spv","1")$(t.val ge 2025) = p40_TechBound(t,regi,"spv")*0.001; vm_cap.lo(t,regi,"tnrs","1")$(t.val ge 2025) = p40_TechBound(t,regi,"tnrs")*0.001; vm_cap.lo(t,regi_nucscen,"tnrs",rlf)$((t.val ge 2025) and (cm_nucscen eq 5)) = 0; !! we assume: Nucscen (limiting nuclear deployment) overrides NDC targets -> resetting lower bound to value defined at cm_nucscen switch vm_cap.lo(t,regi,"hydro","1")$(t.val ge 2025) = p40_TechBound(t,regi,"hydro")*0.001; +vm_cap.lo(t,regi,"windon","1")$(t.val gt 2025) = p40_TechBound(t,regi,"windon")*0.001; +vm_cap.lo(t,regi,"windoff","1")$(t.val gt 2025) = p40_TechBound(t,regi,"windoff")*0.001; *** FS: if cm_H2Targets on: include capacity targets for electrolysis following national Hydrogen Strategies diff --git a/modules/40_techpol/NDC/datainput.gms b/modules/40_techpol/NDC/datainput.gms index 5a6bf2e66..49d4541fc 100644 --- a/modules/40_techpol/NDC/datainput.gms +++ b/modules/40_techpol/NDC/datainput.gms @@ -14,7 +14,9 @@ $offdelim $onlisting ; -p40_TechBound(ttot,all_regi,all_te) = f40_TechBound(ttot,all_regi,"%cm_NDC_version%",all_te); +p40_TechBound(ttot,all_regi,te) = f40_TechBound(ttot,all_regi,"%cm_NDC_version%",te); +*** windoffshore-todo: separate NDC targets for windon and windoff +p40_TechBound(ttot,all_regi,"wind") = f40_TechBound(ttot,all_regi,"%cm_NDC_version%","wind"); p40_ElecBioBound("2030",regi) = p40_TechBound("2030",regi,"bioigcc"); @@ -50,8 +52,8 @@ $offdelim p40_FE_RenShare(tall,regi) = f40_FE_RenShare(tall,regi); !! rescale unit from [million people] to [billion] people *** Chinese PE targets are defined with substitution accounting method -p40_noncombust_acc_eff(t,"CHN",te)$(sameas(te,"spv") OR sameas(te,"csp") OR sameas(te,"wind") OR sameas(te,"windoff") OR sameas(te,"tnrs") OR sameas(te,"spv") OR sameas(te,"geohdr") OR sameas(te,"hydro")) = 0.38; !! substitution accounting for low-carbon electricity generation at coal efficiency of 38% -p40_noncombust_acc_eff(t,"CHA",te)$(sameas(te,"spv") OR sameas(te,"csp") OR sameas(te,"wind") OR sameas(te,"windoff") OR sameas(te,"tnrs") OR sameas(te,"spv") OR sameas(te,"geohdr") OR sameas(te,"hydro")) = 0.38; !! substitution accounting for low-carbon electricity generation at coal efficiency of 38% +p40_noncombust_acc_eff(t,"CHN",te)$(sameas(te,"spv") OR sameas(te,"csp") OR sameas(te,"windon") OR sameas(te,"windoff") OR sameas(te,"tnrs") OR sameas(te,"spv") OR sameas(te,"geohdr") OR sameas(te,"hydro")) = 0.38; !! substitution accounting for low-carbon electricity generation at coal efficiency of 38% +p40_noncombust_acc_eff(t,"CHA",te)$(sameas(te,"spv") OR sameas(te,"csp") OR sameas(te,"windon") OR sameas(te,"windoff") OR sameas(te,"tnrs") OR sameas(te,"spv") OR sameas(te,"geohdr") OR sameas(te,"hydro")) = 0.38; !! substitution accounting for low-carbon electricity generation at coal efficiency of 38% *** lower bound on gas share in PE p40_PEgasBound("2020","CHN") = 0.08; p40_PEgasBound(t,"CHN")$(t.val gt 2020) = min(0.08 + (t.val -2020) * 0.004 ,0.1 - (t.val - 2030) * 0.005 ); !! rising to 10% in 2025 and 2030 and then declining to zero around 2050 diff --git a/modules/40_techpol/NDC/declarations.gms b/modules/40_techpol/NDC/declarations.gms index 0ebc425e8..3a5d4c2d9 100644 --- a/modules/40_techpol/NDC/declarations.gms +++ b/modules/40_techpol/NDC/declarations.gms @@ -24,7 +24,7 @@ Equation q40_FE_RenShare "Lower bound on renewable Equation q40_El_RenShare "Lower bound on low carbon share in electricity"; Equation q40_CoalBound "Restricting new coal power plants in regions with regulation"; Equation q40_ElCap_RenShare "Lower bound on low carbon share in total installed capacity"; -Equation q40_windBound "lower bound on combined wind onshore and offshore"; +Equation q40_windBound "lower bound on combined wind onshore and offshore"; *** EOF ./modules/40_techpol/NDC/declarations.gms diff --git a/modules/40_techpol/NDC/equations.gms b/modules/40_techpol/NDC/equations.gms index 301fa6cf4..4ff337c82 100644 --- a/modules/40_techpol/NDC/equations.gms +++ b/modules/40_techpol/NDC/equations.gms @@ -8,15 +8,17 @@ *' @equations -q40_ElecBioBound(t,regi)$(t.val gt 2015).. + ***am minimum targets for certain technologies +q40_ElecBioBound(t,regi)$(t.val gt 2015).. sum(te2rlf(te,rlf)$(sameas(te,"biochp") OR sameas(te,"bioigcc") OR sameas(te,"bioigccc")), vm_cap(t,regi,te,rlf)) - * 1000 =g= p40_ElecBioBound(t,regi); + =g= p40_ElecBioBound(t,regi) * 0.001 +; -q40_windBound(t,regi)$(t.val gt 2025).. -***making target apply to both wind onshore and offshore, when offshore switch is on -sum(teWind(te), vm_cap(t,regi,te,"1")) - =g= p40_TechBound(t,regi,"wind")*0.001 +*** windoffshore-todo: as long as there is a "wind" target, it is for the sum windon+windoff +q40_windBound(t,regi)$(t.val gt 2025 AND p40_TechBound(t,regi,"wind") gt 0).. + sum(teWind, vm_cap(t,regi,teWind,"1")) + =g= p40_TechBound(t,regi,"wind") * 0.001 ; q40_PEgasBound(t,regi)$(t.val gt 2015 AND (sameas(regi,"CHN") OR sameas(regi,"CHA"))).. diff --git a/modules/40_techpol/NDCplus/bounds.gms b/modules/40_techpol/NDCplus/bounds.gms index 9c88c7063..13a1fd983 100644 --- a/modules/40_techpol/NDCplus/bounds.gms +++ b/modules/40_techpol/NDCplus/bounds.gms @@ -11,6 +11,8 @@ vm_cap.lo(t,regi,"spv","1")$(t.val lt 2031 AND t.val gt 2024) = p40_TechBound(t, vm_cap.lo(t,regi,"tnrs","1")$(t.val ge 2025) = p40_TechBound(t,regi,"tnrs")*0.001; vm_cap.lo(t,regi_nucscen,"tnrs",rlf)$((t.val ge 2025) and (cm_nucscen eq 5)) = 0; !! we assume: Nucscen (limiting nuclear deployment) overrides NDC targets -> resetting lower bound to value defined at cm_nucscen switch vm_cap.lo(t,regi,"hydro","1")$(t.val lt 2031 AND t.val gt 2024) = p40_TechBound(t,regi,"hydro")*0.001; +vm_cap.lo(t,regi,"windon","1")$(t.val gt 2025) = p40_TechBound(t,regi,"windon")*0.001; +vm_cap.lo(t,regi,"windoff","1")$(t.val gt 2025) = p40_TechBound(t,regi,"windoff")*0.001; display vm_cap.lo; diff --git a/modules/40_techpol/NDCplus/datainput.gms b/modules/40_techpol/NDCplus/datainput.gms index a2bddd21d..c6eab4771 100644 --- a/modules/40_techpol/NDCplus/datainput.gms +++ b/modules/40_techpol/NDCplus/datainput.gms @@ -14,7 +14,9 @@ $offdelim $onlisting ; -p40_TechBound(ttot,all_regi,all_te) = f40_TechBound(ttot,all_regi,"%cm_NDC_version%",all_te); +p40_TechBound(ttot,all_regi,te) = f40_TechBound(ttot,all_regi,"%cm_NDC_version%",te); +*** windoffshore-todo: separate NDC targets for windon and windoff +p40_TechBound(ttot,all_regi,"wind") = f40_TechBound(ttot,all_regi,"%cm_NDC_version%","wind"); p40_ElecBioBound("2030",regi) = p40_TechBound("2030",regi,"bioigcc"); @@ -44,8 +46,8 @@ $offdelim p40_FE_RenShare(tall,regi) = f40_FE_RenShare(tall,regi); !! rescale unit from [million people] to [billion] people *** Chinese PE targets are defined with substitution accounting method -p40_noncombust_acc_eff(t,"CHN",te)$(sameas(te,"spv") OR sameas(te,"csp") OR sameas(te,"wind") OR sameas(te,"windoff") OR sameas(te,"tnrs") OR sameas(te,"spv") OR sameas(te,"geohdr") OR sameas(te,"hydro")) = 0.38; !! substitution accounting for low-carbon electricity generation at coal efficiency of 38% -p40_noncombust_acc_eff(t,"CHA",te)$(sameas(te,"spv") OR sameas(te,"csp") OR sameas(te,"wind") OR sameas(te,"windoff") OR sameas(te,"tnrs") OR sameas(te,"spv") OR sameas(te,"geohdr") OR sameas(te,"hydro")) = 0.38; !! substitution accounting for low-carbon electricity generation at coal efficiency of 38% +p40_noncombust_acc_eff(t,"CHN",te)$(sameas(te,"spv") OR sameas(te,"csp") OR sameas(te,"windon") OR sameas(te,"windoff") OR sameas(te,"tnrs") OR sameas(te,"spv") OR sameas(te,"geohdr") OR sameas(te,"hydro")) = 0.38; !! substitution accounting for low-carbon electricity generation at coal efficiency of 38% +p40_noncombust_acc_eff(t,"CHA",te)$(sameas(te,"spv") OR sameas(te,"csp") OR sameas(te,"windon") OR sameas(te,"windoff") OR sameas(te,"tnrs") OR sameas(te,"spv") OR sameas(te,"geohdr") OR sameas(te,"hydro")) = 0.38; !! substitution accounting for low-carbon electricity generation at coal efficiency of 38% *** lower bound on gas share in PE p40_PEgasBound("2020","CHN") = 0.08; p40_PEgasBound(t,"CHN")$(t.val gt 2020) = min(0.08 + (t.val -2020) * 0.004 ,0.1 - (t.val - 2030) * 0.005 ); !! rising to 10% in 2025 and 2030 and then declining to zero around 2050 diff --git a/modules/40_techpol/NDCplus/declarations.gms b/modules/40_techpol/NDCplus/declarations.gms index 08bedaec8..1bb65451f 100644 --- a/modules/40_techpol/NDCplus/declarations.gms +++ b/modules/40_techpol/NDCplus/declarations.gms @@ -24,7 +24,7 @@ Equation q40_FE_RenShare "Lower bound on renewable Equation q40_El_RenShare "Lower bound on low carbon share in electricity"; Equation q40_CoalBound "Restricting new coal power plants in regions with regulation"; Equation q40_ElCap_RenShare "Lower bound on low carbon share in total installed capacity"; -Equation q40_windBound "lower bound on combined wind onshore and offshore"; +Equation q40_windBound "lower bound on combined wind onshore and offshore"; *** EOF ./modules/40_techpol/NDCplus/declarations.gms diff --git a/modules/40_techpol/NDCplus/equations.gms b/modules/40_techpol/NDCplus/equations.gms index 46ade5806..a9bb2382a 100644 --- a/modules/40_techpol/NDCplus/equations.gms +++ b/modules/40_techpol/NDCplus/equations.gms @@ -8,15 +8,17 @@ *' @equations -q40_ElecBioBound(t,regi)$(t.val gt 2015).. + ***am minimum targets for certain technologies +q40_ElecBioBound(t,regi)$(t.val gt 2015).. sum(te2rlf(te,rlf)$(sameas(te,"biochp") OR sameas(te,"bioigcc") OR sameas(te,"bioigccc")), vm_cap(t,regi,te,rlf)) - * 1000 =g= p40_ElecBioBound(t,regi); + =g= p40_ElecBioBound(t,regi) * 0.001 +; -q40_windBound(t,regi)$(t.val gt 2025).. -***making target apply to both wind onshore and offshore, when offshore switch is on -sum(teWind(te), vm_cap(t,regi,te,"1")) - =g= p40_TechBound(t,regi,"wind")*0.001 +*** windoffshore-todo: as long as there is a "wind" target, it is for the sum windon+windoff +q40_windBound(t,regi)$(t.val gt 2025 AND p40_TechBound(t,regi,"wind") gt 0).. + sum(teWind, vm_cap(t,regi,teWind,"1")) + =g= p40_TechBound(t,regi,"wind") * 0.001 ; q40_PEgasBound(t,regi)$(t.val gt 2015 AND (sameas(regi,"CHN") OR sameas(regi,"CHA"))).. diff --git a/modules/40_techpol/NPi2018/bounds.gms b/modules/40_techpol/NPi2018/bounds.gms index 2188a52f0..e25911649 100644 --- a/modules/40_techpol/NPi2018/bounds.gms +++ b/modules/40_techpol/NPi2018/bounds.gms @@ -12,6 +12,8 @@ vm_cap.lo(t,regi,"spv","1")$(t.val gt 2020) = p40_TechBound(t,regi,"spv")*0.001; vm_cap.lo(t,regi,"tnrs","1")$(t.val ge 2025) = p40_TechBound(t,regi,"tnrs")*0.001; vm_cap.lo(t,regi_nucscen,"tnrs",rlf)$((t.val ge 2025) and (cm_nucscen eq 5)) = 0; !! we assume: Nucscen (limiting nuclear deployment) overrides NDC targets -> resetting lower bound to value defined at cm_nucscen switch vm_cap.lo(t,regi,"hydro","1")$(t.val gt 2020) = p40_TechBound(t,regi,"hydro")*0.001; +vm_cap.lo(t,regi,"windon","1")$(t.val gt 2025) = p40_TechBound(t,regi,"windon")*0.001; +vm_cap.lo(t,regi,"windoff","1")$(t.val gt 2025) = p40_TechBound(t,regi,"windoff")*0.001; display vm_cap.lo; diff --git a/modules/40_techpol/NPi2018/datainput.gms b/modules/40_techpol/NPi2018/datainput.gms index 9243046f8..d3725bcb5 100644 --- a/modules/40_techpol/NPi2018/datainput.gms +++ b/modules/40_techpol/NPi2018/datainput.gms @@ -14,7 +14,9 @@ $offdelim $onlisting ; -p40_TechBound(ttot,all_regi,all_te) = f40_TechBound(ttot,all_regi,"%cm_NDC_version%",all_te); +p40_TechBound(ttot,all_regi,te) = f40_TechBound(ttot,all_regi,"%cm_NDC_version%",te); +*** windoffshore-todo: separate NDC targets for windon and windoff +p40_TechBound(ttot,all_regi,"wind") = f40_TechBound(ttot,all_regi,"%cm_NDC_version%","wind"); p40_ElecBioBound("2030",regi) = p40_TechBound("2030",regi,"bioigcc"); @@ -28,15 +30,15 @@ if (cm_phaseoutBiolc eq 1, *** otherwise, they are not considered in the model *** to add further targets, include both the respective parameter value below, and extend the equation domain in equations.gms p40_noncombust_acc_eff(t,iso_regi,te) = 1;!!general efficiency 100% -p40_PEgasBound(t,iso_regi) = 0; -p40_PElowcarbonBound(t,iso_regi) = 0; -p40_El_RenShare(t,iso_regi) = 0; -p40_CoalBound(t,iso_regi) = 0; -p40_FE_RenShare(t,iso_regi) = 0; +p40_PEgasBound(t,iso_regi) = 0; +p40_PElowcarbonBound(t,iso_regi) = 0; +p40_El_RenShare(t,iso_regi) = 0; +p40_CoalBound(t,iso_regi) = 0; +p40_FE_RenShare(t,iso_regi) = 0; *** Chinese PE targets are defined with substitution accounting method -p40_noncombust_acc_eff(t,"CHN",te)$(sameas(te,"spv") OR sameas(te,"csp") OR sameas(te,"wind") OR sameas(te,"windoff") OR sameas(te,"tnrs") OR sameas(te,"spv") OR sameas(te,"geohdr") OR sameas(te,"hydro")) = 0.38; !! substitution accounting for low-carbon electricity generation at coal efficiency of 38% -p40_noncombust_acc_eff(t,"CHA",te)$(sameas(te,"spv") OR sameas(te,"csp") OR sameas(te,"wind") OR sameas(te,"windoff") OR sameas(te,"tnrs") OR sameas(te,"spv") OR sameas(te,"geohdr") OR sameas(te,"hydro")) = 0.38; !! substitution accounting for low-carbon electricity generation at coal efficiency of 38% +p40_noncombust_acc_eff(t,"CHN",te)$(sameas(te,"spv") OR sameas(te,"csp") OR sameas(te,"windon") OR sameas(te,"windoff") OR sameas(te,"tnrs") OR sameas(te,"spv") OR sameas(te,"geohdr") OR sameas(te,"hydro")) = 0.38; !! substitution accounting for low-carbon electricity generation at coal efficiency of 38% +p40_noncombust_acc_eff(t,"CHA",te)$(sameas(te,"spv") OR sameas(te,"csp") OR sameas(te,"windon") OR sameas(te,"windoff") OR sameas(te,"tnrs") OR sameas(te,"spv") OR sameas(te,"geohdr") OR sameas(te,"hydro")) = 0.38; !! substitution accounting for low-carbon electricity generation at coal efficiency of 38% *** lower bound on gas share in PE p40_PEgasBound("2020","CHN") = 0.08; p40_PEgasBound(t,"CHN")$(t.val gt 2020) = min(0.08 ,0.08 - (t.val - 2030) * 0.005 ); !! 8% until 2030 and then declining again diff --git a/modules/40_techpol/NPi2018/declarations.gms b/modules/40_techpol/NPi2018/declarations.gms index d32a0baf8..ca3011ec8 100644 --- a/modules/40_techpol/NPi2018/declarations.gms +++ b/modules/40_techpol/NPi2018/declarations.gms @@ -21,7 +21,7 @@ Equation q40_ElecBioBound "equation low-carbon push Equation q40_PEgasBound "Mandating minimum PE gas share"; Equation q40_PElowcarbonBound "Lower bound on low carbon share"; Equation q40_FE_RenShare "Lower bound on renewable share"; -Equation q40_windBound "lower bound on combined wind onshore and offshore"; +Equation q40_windBound "lower bound on combined wind onshore and offshore"; *** EOF ./modules/40_techpol/NPi2018/declarations.gms diff --git a/modules/40_techpol/NPi2018/equations.gms b/modules/40_techpol/NPi2018/equations.gms index 3c5110b89..35349b8bf 100644 --- a/modules/40_techpol/NPi2018/equations.gms +++ b/modules/40_techpol/NPi2018/equations.gms @@ -8,15 +8,17 @@ *' @equations -q40_ElecBioBound(t,regi)$(t.val gt 2015).. + ***am minimum targets for certain technologies +q40_ElecBioBound(t,regi)$(t.val gt 2015).. sum(te2rlf(te,rlf)$(sameas(te,"biochp") OR sameas(te,"bioigcc") OR sameas(te,"bioigccc")), vm_cap(t,regi,te,rlf)) - * 1000 =g= p40_ElecBioBound(t,regi); + =g= p40_ElecBioBound(t,regi) * 0.001 +; -q40_windBound(t,regi)$(t.val gt 2025).. -***making target apply to both wind onshore and offshore, when offshore switch is on -sum(teWind(te), vm_cap(t,regi,te,"1")) - =g= p40_TechBound(t,regi,"wind")*0.001 +*** windoffshore-todo: as long as there is a "wind" target, it is for the sum windon+windoff +q40_windBound(t,regi)$(t.val gt 2025 AND p40_TechBound(t,regi,"wind") gt 0).. + sum(teWind, vm_cap(t,regi,teWind,"1")) + =g= p40_TechBound(t,regi,"wind") * 0.001 ; q40_PEgasBound(t,regi)$(t.val gt 2015 AND (sameas(regi,"CHN") OR sameas(regi,"CHA"))).. diff --git a/modules/40_techpol/lowCarbonPush/datainput.gms b/modules/40_techpol/lowCarbonPush/datainput.gms index d8f5baf87..2b42c281c 100644 --- a/modules/40_techpol/lowCarbonPush/datainput.gms +++ b/modules/40_techpol/lowCarbonPush/datainput.gms @@ -9,16 +9,16 @@ *cb targets for renewable upscaling: CSP and SPV from plausible extrapolation of current trends, Wind taken from Optimal immediate policy run (slightly optimistic at beginning) p40_NewRenBound("2015","csp")=2.267; p40_NewRenBound("2015","spv")=180; -p40_NewRenBound("2015","wind")=506.022; +p40_NewRenBound("2015","windon")=506.022; p40_NewRenBound("2020","csp")=4.5; p40_NewRenBound("2020","spv")=400; -p40_NewRenBound("2020","wind")=826.341; +p40_NewRenBound("2020","windon")=826.341; p40_NewRenBound("2025","csp")=8.5; p40_NewRenBound("2025","spv")=610; -p40_NewRenBound("2025","wind")=1208.034; +p40_NewRenBound("2025","windon")=1208.034; p40_NewRenBound("2030","csp")=18.5; p40_NewRenBound("2030","spv")=900; -p40_NewRenBound("2030","wind")=1646.939; +p40_NewRenBound("2030","windon")=1646.939; *cb plausible, quite conservative upscaling (much lower than in optimal immediate) p40_NewRenBound("2020","bioftcrec")=2.4; diff --git a/modules/40_techpol/lowCarbonPush/equations.gms b/modules/40_techpol/lowCarbonPush/equations.gms index 346049ea7..052196a2c 100644 --- a/modules/40_techpol/lowCarbonPush/equations.gms +++ b/modules/40_techpol/lowCarbonPush/equations.gms @@ -5,7 +5,7 @@ *** | REMIND License Exception, version 1.0 (see LICENSE file). *** | Contact: remind@pik-potsdam.de *** SOF ./modules/40_techpol/lowCarbonPush/equations.gms -q40_NewRenBound(t,te)$(t.val gt 2010 AND t.val lt 2031 AND (sameas(te,"spv") OR sameas(te,"csp") OR sameas(te,"wind") OR sameas(te,"bioftcrec") OR sameas(te,"ngccc") )).. +q40_NewRenBound(t,te)$(t.val gt 2010 AND t.val lt 2031 AND (sameas(te,"spv") OR sameas(te,"csp") OR sameas(te,"windon") OR sameas(te,"bioftcrec") OR sameas(te,"ngccc") )).. *** attention: sum(regi will not work with Nash, therefore please reformulate with the usual iterative update mechanism sum(regi, sum(te2rlf(te,rlf), vm_cap(t,regi,te,rlf)) diff --git a/modules/45_carbonprice/NDC/datainput.gms b/modules/45_carbonprice/NDC/datainput.gms index 4e1cb9347..eaaf27486 100644 --- a/modules/45_carbonprice/NDC/datainput.gms +++ b/modules/45_carbonprice/NDC/datainput.gms @@ -12,9 +12,9 @@ Execute_Loadpoint "input_ref" p45_taxCO2eq_bau = pm_taxCO2eq; pm_taxCO2eq(t,regi) = p45_taxCO2eq_bau(t,regi) *** parameters for exponential increase after NDC targets -Scalar p45_taxCO2eqGlobal2030 "startprice in 2030 (unit TDpGtC) of global CO2eq taxes towards which countries converge"; -p45_taxCO2eqGlobal2030 = 30 * sm_DptCO2_2_TDpGtC; -Scalar p45_taxCO2eqYearlyIncrease "yearly multiplicative increase of co2 tax, write 3% as 1.03" /1.0125/; +Scalar p45_taxCO2eqGlobal2030 "startprice in 2030 of global CO2eq taxes towards which countries converge [T$/GtC]"; +p45_taxCO2eqGlobal2030 = 30 * sm_D2005_2_D2017 * sm_DptCO2_2_TDpGtC; +Scalar p45_taxCO2eqYearlyIncrease "yearly multiplicative increase of co2 tax, write 3% as 1.03 [1]" /1.0125/; Scalar p45_taxCO2eqConvergenceYear "year until which CO2eq taxes have converged globally" /2100/; *** set Years for CO2eq taxes to converge after 2030 diff --git a/modules/45_carbonprice/NPi/datainput.gms b/modules/45_carbonprice/NPi/datainput.gms index e522bd2c4..c74a2fbfd 100644 --- a/modules/45_carbonprice/NPi/datainput.gms +++ b/modules/45_carbonprice/NPi/datainput.gms @@ -12,7 +12,7 @@ pm_taxCO2eq(ttot,regi)$( (ttot.val ge 2025) AND (ttot.val le 2100)) = pm_taxCO2eq("2020",regi) + ( - ( 25 * sm_DptCO2_2_TDpGtC - pm_taxCO2eq("2020",regi) ) + ( 25 * sm_D2005_2_D2017 * sm_DptCO2_2_TDpGtC - pm_taxCO2eq("2020",regi) ) * ( (ttot.val - 2020) / (2100 - 2020) ) ** 2 diff --git a/modules/45_carbonprice/diffCurvPhaseIn2Lin/not_used.txt b/modules/45_carbonprice/diffCurvPhaseIn2Lin/not_used.txt index ee46cce97..73edac052 100644 --- a/modules/45_carbonprice/diffCurvPhaseIn2Lin/not_used.txt +++ b/modules/45_carbonprice/diffCurvPhaseIn2Lin/not_used.txt @@ -28,3 +28,4 @@ cm_co2_tax_startyear,input,added by codeCheck cm_peakBudgYr,input,added by codeCheck cm_startyear,input,added by codeCheck cm_taxCO2inc_after_peakBudgYr,input,added by codeCheck +sm_D2005_2_D2017,input,not needed diff --git a/modules/45_carbonprice/diffExp2Lin/not_used.txt b/modules/45_carbonprice/diffExp2Lin/not_used.txt index 23121ad97..17aba2d68 100644 --- a/modules/45_carbonprice/diffExp2Lin/not_used.txt +++ b/modules/45_carbonprice/diffExp2Lin/not_used.txt @@ -22,3 +22,4 @@ pm_ttot_2_tall,input,questionnaire cm_NDC_divergentScenario,input,questionnaire vm_demFeSector,input,questionnaire pm_emifac,input,questionnaire +sm_D2005_2_D2017,input,not needed diff --git a/modules/45_carbonprice/diffLin2Lin/not_used.txt b/modules/45_carbonprice/diffLin2Lin/not_used.txt index 9e1d86d3f..8d668392d 100644 --- a/modules/45_carbonprice/diffLin2Lin/not_used.txt +++ b/modules/45_carbonprice/diffLin2Lin/not_used.txt @@ -23,3 +23,4 @@ pm_prtp,input,questionnaire vm_demFeSector,input,questionnaire pm_emifac,input,questionnaire cm_co2_tax_2020,input,replaced by cm_co2_tax_startyear in this realization +sm_D2005_2_D2017,input,not needed diff --git a/modules/45_carbonprice/exogenous/not_used.txt b/modules/45_carbonprice/exogenous/not_used.txt index 8575250b1..4eecba445 100644 --- a/modules/45_carbonprice/exogenous/not_used.txt +++ b/modules/45_carbonprice/exogenous/not_used.txt @@ -32,3 +32,4 @@ cm_co2_tax_spread,switch,no carbon price differentiation in this realization cm_co2_tax_startyear,input,added by codeCheck cm_peakBudgYr,input,added by codeCheck cm_taxCO2inc_after_peakBudgYr,input,added by codeCheck +sm_D2005_2_D2017,input,not needed diff --git a/modules/45_carbonprice/expoLinear/not_used.txt b/modules/45_carbonprice/expoLinear/not_used.txt index 7140d84f5..8e3448563 100644 --- a/modules/45_carbonprice/expoLinear/not_used.txt +++ b/modules/45_carbonprice/expoLinear/not_used.txt @@ -28,3 +28,4 @@ cm_co2_tax_spread,input,No carbon price differentiation in this realization cm_peakBudgYr,input,added by codeCheck cm_co2_tax_2020,input,added by codeCheck cm_taxCO2inc_after_peakBudgYr,input,added by codeCheck +sm_D2005_2_D2017,input,not needed diff --git a/modules/45_carbonprice/exponential/not_used.txt b/modules/45_carbonprice/exponential/not_used.txt index d5488de47..d007e2abc 100644 --- a/modules/45_carbonprice/exponential/not_used.txt +++ b/modules/45_carbonprice/exponential/not_used.txt @@ -31,3 +31,4 @@ cm_co2_tax_spread,input,No carbon price differentiation in this realization cm_co2_tax_startyear,input,added by codeCheck cm_peakBudgYr,input,added by codeCheck cm_taxCO2inc_after_peakBudgYr,input,added by codeCheck +sm_D2005_2_D2017,input,not needed diff --git a/modules/45_carbonprice/linear/not_used.txt b/modules/45_carbonprice/linear/not_used.txt index d8ed2f5f0..d37abf864 100644 --- a/modules/45_carbonprice/linear/not_used.txt +++ b/modules/45_carbonprice/linear/not_used.txt @@ -31,3 +31,4 @@ cm_co2_tax_spread,switch,no carbon price differentiation in this realization cm_co2_tax_startyear,input,added by codeCheck cm_peakBudgYr,input,added by codeCheck cm_taxCO2inc_after_peakBudgYr,input,added by codeCheck +sm_D2005_2_D2017,input,not needed diff --git a/modules/45_carbonprice/none/not_used.txt b/modules/45_carbonprice/none/not_used.txt index 62d6c911a..63ad62de7 100644 --- a/modules/45_carbonprice/none/not_used.txt +++ b/modules/45_carbonprice/none/not_used.txt @@ -34,3 +34,4 @@ cm_co2_tax_spread,input,no carbon price differentiation in this realization cm_co2_tax_startyear,input,added by codeCheck cm_peakBudgYr,input,added by codeCheck cm_taxCO2inc_after_peakBudgYr,input,added by codeCheck +sm_D2005_2_D2017,input,not needed diff --git a/modules/45_carbonprice/temperatureNotToExceed/not_used.txt b/modules/45_carbonprice/temperatureNotToExceed/not_used.txt index 3f2491e46..82b3b0a52 100644 --- a/modules/45_carbonprice/temperatureNotToExceed/not_used.txt +++ b/modules/45_carbonprice/temperatureNotToExceed/not_used.txt @@ -26,3 +26,4 @@ cm_co2_tax_spread,input,no carbon price differentiation in this realization cm_co2_tax_startyear,input,added by codeCheck cm_peakBudgYr,input,added by codeCheck cm_taxCO2inc_after_peakBudgYr,input,added by codeCheck +sm_D2005_2_D2017,input,not needed diff --git a/modules/47_regipol/none/bounds.gms b/modules/47_regipol/none/bounds.gms index 99fef8e71..32ba639b5 100644 --- a/modules/47_regipol/none/bounds.gms +++ b/modules/47_regipol/none/bounds.gms @@ -15,7 +15,7 @@ *** upper bound on capacity additions for 2025 based on near-term trends *** for now only REMIND-EU/Germany, upper bound is double the historic maximum capacity addition in 2011-2020 loop(regi$(sameAs(regi,"DEU")), - vm_deltaCap.up("2025",regi,"wind","1")=2*smax(tall$(tall.val ge 2011 and tall.val le 2020), pm_delta_histCap(tall,regi,"wind")); + 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")); ); diff --git a/modules/47_regipol/none/datainput.gms b/modules/47_regipol/none/datainput.gms index 4691e7e60..a223d565e 100644 --- a/modules/47_regipol/none/datainput.gms +++ b/modules/47_regipol/none/datainput.gms @@ -23,7 +23,7 @@ loop(ext_regi$altFeEmiFac_regi(ext_regi), $endif.altFeEmiFac *** VRE capacity factor adjustments for Germany in line with results from detailed models in ARIADNE project - loop(te$sameas(te,"wind"), + loop(te$sameas(te,"windon"), loop(regi$sameas(regi,"DEU"), pm_cf("2025",regi,te) = 1.04 * pm_cf("2025",regi,te); pm_cf("2030",regi,te) = 1.08 * pm_cf("2030",regi,te); diff --git a/modules/47_regipol/none/not_used.txt b/modules/47_regipol/none/not_used.txt index b352534d9..254d6d59e 100644 --- a/modules/47_regipol/none/not_used.txt +++ b/modules/47_regipol/none/not_used.txt @@ -80,3 +80,4 @@ vm_prodSe,input,not needed pm_cesdata,input,not needed pm_prodCouple,input,not needed vm_emiIndCCS,input,not needed +sm_D2005_2_D2017,input,no conversion needed diff --git a/modules/47_regipol/regiCarbonPrice/bounds.gms b/modules/47_regipol/regiCarbonPrice/bounds.gms index 7eb31a7d8..ca213fc38 100644 --- a/modules/47_regipol/regiCarbonPrice/bounds.gms +++ b/modules/47_regipol/regiCarbonPrice/bounds.gms @@ -25,7 +25,7 @@ $ifThen.tech_bounds_2025 "%cm_tech_bounds_2025%" == "on" *' 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,"wind","1")=2*smax(tall$(tall.val ge 2011 and tall.val le 2020), pm_delta_histCap(tall,regi,"wind")); + 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; ); diff --git a/modules/47_regipol/regiCarbonPrice/datainput.gms b/modules/47_regipol/regiCarbonPrice/datainput.gms index 2670a6309..1bedcd258 100644 --- a/modules/47_regipol/regiCarbonPrice/datainput.gms +++ b/modules/47_regipol/regiCarbonPrice/datainput.gms @@ -82,7 +82,7 @@ p47_taxemiMkt_init(ttot,regi,emiMkt)$(p47_taxCO2eq_ref(ttot,regi) and (NOT(p47_t loop((ttot,ttot2,ext_regi,emiMktExt,target_type_47,emi_type_47)$pm_emiMktTarget(ttot,ttot2,ext_regi,emiMktExt,target_type_47,emi_type_47), loop(regi$regi_groupExt(ext_regi,regi), loop(emiMkt$emiMktGroup(emiMktExt,emiMkt), - p47_taxemiMkt_init(t,regi,emiMkt)$(t.val gt 2020) = (20*sm_DptCO2_2_TDpGtC) + (1*sm_DptCO2_2_TDpGtC)*(t.val-2020); + p47_taxemiMkt_init(t,regi,emiMkt)$(t.val gt 2020) = (20*sm_D2005_2_D2017*sm_DptCO2_2_TDpGtC) + (1*sm_DptCO2_2_TDpGtC)*(t.val-2020); ); ); ); @@ -93,23 +93,23 @@ p47_taxemiMkt_init(ttot,regi,emiMkt)$(p47_taxCO2eq_ref(ttot,regi) and (NOT(p47_t loop(regi$(regi_groupExt(ext_regi,regi) and regi_groupExt("EUR_regi",regi)), !!second condition is necessary to support also country targets if((cm_startyear le 2010), p47_taxemiMkt_init("2010",regi,emiMkt) = 0; - p47_taxemiMkt_init("2010",regi,"ETS") = 15*sm_DptCO2_2_TDpGtC; + p47_taxemiMkt_init("2010",regi,"ETS") = 15*sm_D2005_2_D2017*sm_DptCO2_2_TDpGtC; ); if((cm_startyear le 2015), p47_taxemiMkt_init("2015",regi,emiMkt) = 0; - p47_taxemiMkt_init("2015",regi,"ETS") = 8*sm_DptCO2_2_TDpGtC; + p47_taxemiMkt_init("2015",regi,"ETS") = 8*sm_D2005_2_D2017*sm_DptCO2_2_TDpGtC; ); if((cm_startyear le 2020), p47_taxemiMkt_init("2020",regi,emiMkt) = 0; *** p47_taxemiMkt_init("2020",regi,"ETS") = 41.28*sm_DptCO2_2_TDpGtC; !! 2018 = 16.5€/tCO2, 2019 = 25€/tCO2, 2020 = 25€/tCO2, 2021 = 53.65€/tCO2, 2022 = 80€/tCO2 -> average 2020 = 40€/tCO2 -> 40*1.032 $/tCO2 = 41.28 $/t CO2 - p47_taxemiMkt_init("2020",regi,"ETS") = 30*sm_DptCO2_2_TDpGtC; + p47_taxemiMkt_init("2020",regi,"ETS") = 30*sm_D2005_2_D2017*sm_DptCO2_2_TDpGtC; *** p47_taxemiMkt_init("2020",regi,"ES") = 30*sm_DptCO2_2_TDpGtC; *** p47_taxemiMkt_init("2020",regi,"other")= 30*sm_DptCO2_2_TDpGtC; ); *** intialize EUR price trajectory after 2020 with an yearly increase of 1$/tCO2 from a base value of 30$/tCO2 when no price is available. *** p47_taxemiMkt_init(t,regi,emiMkt)$(not(p47_taxemiMkt_init(t,regi,emiMkt)) and (t.val gt 2020)) = (30*sm_DptCO2_2_TDpGtC) + (1*sm_DptCO2_2_TDpGtC)*(t.val-2020); *** intialize EUR price trajectory after 2020 with a yearly increase of 1$/tCO2 from a base value of 30$/tCO2 - p47_taxemiMkt_init(t,regi,emiMkt)$(t.val gt 2020) = (30*sm_DptCO2_2_TDpGtC) + (1*sm_DptCO2_2_TDpGtC)*(t.val-2020); + p47_taxemiMkt_init(t,regi,emiMkt)$(t.val gt 2020) = (30*sm_D2005_2_D2017*sm_DptCO2_2_TDpGtC) + (1*sm_D2005_2_D2017*sm_DptCO2_2_TDpGtC)*(t.val-2020); ); ); @@ -176,7 +176,8 @@ $offdelim loop((t,ext_regi,entyFe,entySe,sector)$f47_implicitPriceTarget("%cm_implicitPriceTarget%",ext_regi,entyFe,entySe,sector,t), loop(regi$regi_groupExt(ext_regi,regi), - pm_implicitPriceTarget(t,regi,entyFe,entySe,sector)=f47_implicitPriceTarget("%cm_implicitPriceTarget%",ext_regi,entyFe,entySe,sector,t)*sm_DpGJ_2_TDpTWa; + !! convert data from US$2005 to US$2017 + pm_implicitPriceTarget(t,regi,entyFe,entySe,sector) = sm_D2005_2_D2017 * f47_implicitPriceTarget("%cm_implicitPriceTarget%",ext_regi,entyFe,entySe,sector,t)*sm_DpGJ_2_TDpTWa; ); ); @@ -210,7 +211,8 @@ $offdelim loop((t,ext_regi,entyPe)$f47_implicitPePriceTarget("%cm_implicitPePriceTarget%",ext_regi,entyPe,t), loop(regi$regi_groupExt(ext_regi,regi), - pm_implicitPePriceTarget(t,regi,entyPe)=f47_implicitPePriceTarget("%cm_implicitPePriceTarget%",ext_regi,entyPe,t)*sm_DpGJ_2_TDpTWa; + !! convert data from US$2005 to US$2017 + pm_implicitPePriceTarget(t,regi,entyPe) = sm_D2005_2_D2017 * f47_implicitPePriceTarget("%cm_implicitPePriceTarget%",ext_regi,entyPe,t)*sm_DpGJ_2_TDpTWa; ); ); @@ -251,7 +253,7 @@ loop(ext_regi$altFeEmiFac_regi(ext_regi), $endif.altFeEmiFac *** VRE capacity factor adjustments for Germany in line with results from detailed models in ARIADNE project - loop(te$sameas(te,"wind"), + loop(te$sameas(te,"windon"), loop(regi$sameas(regi,"DEU"), pm_cf("2025",regi,te) = 1.04 * pm_cf("2025",regi,te); pm_cf("2030",regi,te) = 1.08 * pm_cf("2030",regi,te); @@ -302,32 +304,32 @@ p47_LULUCFEmi_GrassiShift(t,regi)$(p47_EmiLULUCFCountryAcc("2020",regi)) = *PW* charge tax on PE gas,oil,coal in energy security scenario for Germany (in trUSD/TWa) to hit Ariadne energy security price trajectories $ifThen.cm_EnSecScen_price "%cm_EnSecScen_price%" == "on" - pm_tau_pe_tax("2025",regi,"pegas")$(sameAs(regi,"DEU")) = 0.32; - pm_tau_pe_tax("2030",regi,"pegas")$(sameAs(regi,"DEU")) = 0.24; - pm_tau_pe_tax("2035",regi,"pegas")$(sameAs(regi,"DEU")) = 0.2; - pm_tau_pe_tax("2040",regi,"pegas")$(sameAs(regi,"DEU")) = 0.16; - pm_tau_pe_tax("2045",regi,"pegas")$(sameAs(regi,"DEU")) = 0.16; - pm_tau_pe_tax("2050",regi,"pegas")$(sameAs(regi,"DEU")) = 0.16; - pm_tau_pe_tax("2055",regi,"pegas")$(sameAs(regi,"DEU")) = 0.12; - pm_tau_pe_tax("2060",regi,"pegas")$(sameAs(regi,"DEU")) = 0.08; - - pm_tau_pe_tax("2025",regi,"peoil")$(sameAs(regi,"DEU")) = 0.08; - pm_tau_pe_tax("2030",regi,"peoil")$(sameAs(regi,"DEU")) = 0.08; - pm_tau_pe_tax("2035",regi,"peoil")$(sameAs(regi,"DEU")) = 0.12; - pm_tau_pe_tax("2040",regi,"peoil")$(sameAs(regi,"DEU")) = 0.16; - pm_tau_pe_tax("2045",regi,"peoil")$(sameAs(regi,"DEU")) = 0.16; - pm_tau_pe_tax("2050",regi,"peoil")$(sameAs(regi,"DEU")) = 0.16; - pm_tau_pe_tax("2055",regi,"peoil")$(sameAs(regi,"DEU")) = 0.12; - pm_tau_pe_tax("2060",regi,"peoil")$(sameAs(regi,"DEU")) = 0.08; - - pm_tau_pe_tax("2025",regi,"pecoal")$(sameAs(regi,"DEU")) = 0.024; - pm_tau_pe_tax("2030",regi,"pecoal")$(sameAs(regi,"DEU")) = 0.016; - pm_tau_pe_tax("2035",regi,"pecoal")$(sameAs(regi,"DEU")) = 0.016; - pm_tau_pe_tax("2040",regi,"pecoal")$(sameAs(regi,"DEU")) = 0.016; - pm_tau_pe_tax("2045",regi,"pecoal")$(sameAs(regi,"DEU")) = 0.016; - pm_tau_pe_tax("2050",regi,"pecoal")$(sameAs(regi,"DEU")) = 0.016; - pm_tau_pe_tax("2055",regi,"pecoal")$(sameAs(regi,"DEU")) = 0.008; - pm_tau_pe_tax("2060",regi,"pecoal")$(sameAs(regi,"DEU")) = 0.008; + pm_tau_pe_tax("2025",regi,"pegas")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.32; + pm_tau_pe_tax("2030",regi,"pegas")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.24; + pm_tau_pe_tax("2035",regi,"pegas")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.2; + pm_tau_pe_tax("2040",regi,"pegas")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.16; + pm_tau_pe_tax("2045",regi,"pegas")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.16; + pm_tau_pe_tax("2050",regi,"pegas")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.16; + pm_tau_pe_tax("2055",regi,"pegas")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.12; + pm_tau_pe_tax("2060",regi,"pegas")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.08; + + pm_tau_pe_tax("2025",regi,"peoil")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.08; + pm_tau_pe_tax("2030",regi,"peoil")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.08; + pm_tau_pe_tax("2035",regi,"peoil")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.12; + pm_tau_pe_tax("2040",regi,"peoil")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.16; + pm_tau_pe_tax("2045",regi,"peoil")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.16; + pm_tau_pe_tax("2050",regi,"peoil")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.16; + pm_tau_pe_tax("2055",regi,"peoil")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.12; + pm_tau_pe_tax("2060",regi,"peoil")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.08; + + pm_tau_pe_tax("2025",regi,"pecoal")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.024; + pm_tau_pe_tax("2030",regi,"pecoal")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.016; + pm_tau_pe_tax("2035",regi,"pecoal")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.016; + pm_tau_pe_tax("2040",regi,"pecoal")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.016; + pm_tau_pe_tax("2045",regi,"pecoal")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.016; + pm_tau_pe_tax("2050",regi,"pecoal")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.016; + pm_tau_pe_tax("2055",regi,"pecoal")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.008; + pm_tau_pe_tax("2060",regi,"pecoal")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.008; $endIf.cm_EnSecScen_price *** adapt parameters that determine the ratio of wind onshore and wind offshore installation for Germany diff --git a/modules/50_damages/KWTCint/datainput.gms b/modules/50_damages/KWTCint/datainput.gms index 15f433a1d..3fd7e4ecf 100755 --- a/modules/50_damages/KWTCint/datainput.gms +++ b/modules/50_damages/KWTCint/datainput.gms @@ -52,7 +52,7 @@ pm_damageMarginalT(tall,regi) = 0; pm_damageMarginalTm1(tall,regi) = 0; pm_damageMarginalTm2(tall,regi) = 0; -*read in GDP to calculate fraction of countries in a region +*** read in GDP to calculate fraction of countries in a region table f50_countryGDP(tall,iso,all_GDPscen) "ratio country to regional GDP" $ondelim $include "./modules/50_damages/KWTCint/input/f50_gdp.cs3r" diff --git a/modules/50_damages/TC/datainput.gms b/modules/50_damages/TC/datainput.gms index 092ba1214..a4a5878f9 100755 --- a/modules/50_damages/TC/datainput.gms +++ b/modules/50_damages/TC/datainput.gms @@ -33,18 +33,17 @@ p50_damageFuncCoefTC1(iso) = f50_TCtasK(iso,"%cm_TCspec%"); display p50_damageFuncCoefTC0; -*initialize +*** initialize pm_damage(tall,regi) = 1; -*read in GDP to calculate GDP fraction of countries in a region and convert to MER +*** read in GDP to calculate GDP fraction of countries in a region and convert to MER table f50_countryGDP(tall,iso,all_GDPscen) "ratio of country to regional GDP" $ondelim $include "./modules/50_damages/TC/input/f50_gdp.cs3r" $offdelim ; - -*calculate and interpolate country GDP fraction of regional GDP for SSP2 scenario, country GDP is in PPP, regional GDP in trl MER! +*** calculate and interpolate country GDP fraction of regional GDP for SSP2 scenario, country GDP is in PPP, regional GDP in trl MER! pm_GDPfrac(tall,iso)=f50_countryGDP(tall,iso,"gdp_SSP2")/1000000/sum(regi2iso(regi,iso),pm_gdp(tall,regi)/pm_shPPPMER(regi)); loop(ttot$(ttot.val ge 2005), diff --git a/modules/70_water/heat/output.gms b/modules/70_water/heat/output.gms index 93e6419dc..9c04e3a4a 100644 --- a/modules/70_water/heat/output.gms +++ b/modules/70_water/heat/output.gms @@ -234,7 +234,7 @@ p70_water_output(ttot,regi,"Water Consumption|Electricity|Solar; km3/yr;") = ; p70_water_output(ttot,regi,"Water Consumption|Electricity|Wind; km3/yr;") = - sum(te_elcool70$(sameas(te_elcool70,"wind")), + sum(te_elcool70$(sameas(te_elcool70,"windon")), o70_water_consumption(ttot,regi,te_elcool70)) ; @@ -426,7 +426,7 @@ p70_water_output(ttot,regi,"Water Withdrawal|Electricity|Solar; km3/yr;") = ; p70_water_output(ttot,regi,"Water Withdrawal|Electricity|Wind; km3/yr;") = - sum(te_elcool70$(sameas(te_elcool70,"wind")), + sum(te_elcool70$(sameas(te_elcool70,"windon")), o70_water_withdrawal(ttot,regi,te_elcool70)) ; diff --git a/modules/80_optimization/nash/sets.gms b/modules/80_optimization/nash/sets.gms index e03b0a77a..797318379 100644 --- a/modules/80_optimization/nash/sets.gms +++ b/modules/80_optimization/nash/sets.gms @@ -9,18 +9,14 @@ sets learnte_dyn80(all_te) "learnte for nash" / - wind "wind onshore power converters" -$IFTHEN.WindOff %cm_wind_offshore% == "1" - windoff "wind offshore power converters" -$ENDIF.WindOff spv "solar photovoltaic" csp "concentrating solar power" + windon "wind onshore power converters" + windoff "wind offshore power converters" storspv "storage technology for spv" - storwind "storage technology for wind onshore" -$IFTHEN.WindOff %cm_wind_offshore% == "1" - storwindoff "storage technology for wind offshore" -$ENDIF.WindOff storcsp "storage technology for csp" + storwindon "storage technology for wind onshore" + storwindoff "storage technology for wind offshore" /, solveinfo80 "Nash solution stats" diff --git a/scripts/output/export/xlsx_IIASA.R b/scripts/output/export/xlsx_IIASA.R index 743ca297d..772c4d17f 100644 --- a/scripts/output/export/xlsx_IIASA.R +++ b/scripts/output/export/xlsx_IIASA.R @@ -21,11 +21,13 @@ model <- paste("REMIND", paste0(strsplit(gms::readDefaultConfig(".")$model_versi removeFromScen <- "" # you can use regex such as: "_diff|_expoLinear" +renameScen <- NULL # c(oldname1 = "newname1", …), without the `C_` and `-rem-[0-9]` stuff addToScen <- NULL # is added at the beginning # filenames relative to REMIND main directory (or use absolute path) mapping <- NULL # file obtained from piamInterfaces, or AR6/SHAPE/NAVIGATE or NULL to get asked iiasatemplate <- NULL # provided for each project, can be yaml or xlsx with a column 'Variable' +checkSummation <- TRUE # if TRUE, tries to use the one from mapping. Or specify here # note: you can also pass all these options to output.R, so 'Rscript output.R logFile=mylogfile.txt' works. lucode2::readArgs("project") @@ -41,6 +43,11 @@ projects <- list( mapping = c("AR6", "AR6_NGFS"), iiasatemplate = "https://files.ece.iiasa.ac.at/ngfs-phase-5/ngfs-phase-5-template.xlsx", removeFromScen = "C_|_bIT|_bit|_bIt|_KLW"), + ScenarioMIP = list(model = "REMIND-MAgPIE 3.4-4.8", + mapping = "ScenarioMIP", + iiasatemplate = "https://files.ece.iiasa.ac.at/ssp-submission/ssp-submission-template.xlsx", + renameScen = c("SMIPv03-M-SSP2-NPi-def" = "SSP2 - Medium Emissions", "SMIPv03-LOS-SSP2-EcBudg400-def" = "SSP2 - Low Overshoot", "SMIPv03-ML-SSP2-PkPrice200-fromL" = "SSP2 - Medium-Low Emissions","SMIPv03-L-SSP2-PkPrice265-inc6-def" = "SSP2 - Low Emissions", "SMIPv03-VL-SSP2_SDP_MC-PkPrice300-def" = "SSP2 - Very Low Emissions"), + checkSummation = "NAVIGATE"), SHAPE = list(mapping = c("NAVIGATE", "SHAPE")), TESTTHAT = list(mapping = "AR6") ) @@ -58,14 +65,15 @@ if (! exists("project")) { } projectdata <- projects[[project]] message("# Overwrite settings with project settings for '", project, "'.") -varnames <- c("mapping", "iiasatemplate", "addToScen", "removeFromScen", "model", "outputFilename", "logFile") +varnames <- c("mapping", "iiasatemplate", "addToScen", "removeFromScen", "renameScen", + "model", "outputFilename", "logFile", "checkSummation") for (p in intersect(varnames, names(projectdata))) { assign(p, projectdata[[p]]) } # overwrite settings with those specified as command-line arguments -lucode2::readArgs("outputdirs", "filename_prefix", "outputFilename", "model", - "mapping", "logFile", "removeFromScen", "addToScen", "iiasatemplate") +lucode2::readArgs("outputdirs", "filename_prefix", "outputFilename", "model", "mapping", + "summationFile", "logFile", "removeFromScen", "addToScen", "iiasatemplate") if (is.null(mapping)) { mapping <- gms::chooseFromList(names(piamInterfaces::mappingNames()), type = "mapping") @@ -130,6 +138,14 @@ withCallingHandlers({ # piping messages to logFile mifdata <- rbind(mifdata, thismifdata) } + mifdata$scenario <- gsub("^C_", "", mifdata$scenario) + message("Old names: ", paste(sort(unique(mifdata$scenario)), collapse = ", ")) + for (i in names(renameScen)) { + message("Rename scenario: ", i, " -> ", renameScen[[i]]) + mifdata$scenario[i == mifdata$scenario] <- renameScen[[i]] + } + message("New names: ", paste(sort(unique(mifdata$scenario)), collapse = ", ")) + message("# ", length(temporarydelete), " variables are in the list to be temporarily deleted, ", length(unique(mifdata$variable[mifdata$variable %in% temporarydelete])), " were deleted.") write(paste0(" - ", paste(unique(mifdata$variable[mifdata$variable %in% temporarydelete]), collapse = "\n - "), "\n\n"), @@ -141,7 +157,7 @@ withCallingHandlers({ # piping messages to logFile generateIIASASubmission(mifdata, mapping = mapping, model = model, removeFromScen = removeFromScen, addToScen = addToScen, - outputDirectory = outputFolder, + outputDirectory = outputFolder, checkSummation = checkSummation, logFile = logFile, outputFilename = basename(OUTPUT_xlsx), iiasatemplate = iiasatemplate, generatePlots = TRUE) diff --git a/scripts/output/single/notebook_templates/cesCalibrationReport.Rmd b/scripts/output/single/notebook_templates/cesCalibrationReport.Rmd index 73866d6ae..f5d87ffa7 100644 --- a/scripts/output/single/notebook_templates/cesCalibrationReport.Rmd +++ b/scripts/output/single/notebook_templates/cesCalibrationReport.Rmd @@ -144,7 +144,7 @@ knitr::kable(df, caption = "Prices below 0.01") ```{r line plots} te <- c( "gastr", "refliq", "biotr", "coaltr", "hydro", "ngcc", "ngt", - "pc", "dot", "gaschp", "wind", "tnrs" + "pc", "dot", "gaschp", "windon", "tnrs" ) in_set <- readGDX(gdx, "in", "sets") structure <- sort(intersect(in_set, getColValues(ces, "pf"))) diff --git a/scripts/start/readCheckScenarioConfig.R b/scripts/start/readCheckScenarioConfig.R index a3d132dad..d52ec41fd 100644 --- a/scripts/start/readCheckScenarioConfig.R +++ b/scripts/start/readCheckScenarioConfig.R @@ -168,7 +168,8 @@ readCheckScenarioConfig <- function(filename, remindPath = ".", testmode = FALSE "c_taxCO2inc_after_peakBudgYr" = "Rename to cm_taxCO2inc_after_peakBudgYr, see https://github.com/remindmodel/remind/pull/1776", "c_solscen" = "Deleted, not used anymore, see https://github.com/remindmodel/remind/pull/1515", "cm_regNetNegCO2" = "Deleted, not used, see https://github.com/remindmodel/remind/pull/1517", - "cm_solwindenergyscen"= "Deleted, not used, see https://github.com/remindmodel/remind/pull/1532", + "cm_solwindenergyscen" = "Deleted, not used, see https://github.com/remindmodel/remind/pull/1532", + "cm_wind_offshore" = "Deleted, not used, see https://github.com/remindmodel/development_issues/issues/272", NULL) for (i in intersect(names(forbiddenColumnNames), unknownColumnNames)) { msg <- paste0("Column name ", i, " in remind settings is outdated. ", forbiddenColumnNames[i]) diff --git a/scripts/start/updateInputData.R b/scripts/start/updateInputData.R index 123efb62f..6f83d4635 100644 --- a/scripts/start/updateInputData.R +++ b/scripts/start/updateInputData.R @@ -10,8 +10,8 @@ #' @param gamsCompile if set to TRUE, missing files don't trigger reload and most messages are suppressed updateInputData <- function(cfg, remindPath = ".", gamsCompile = FALSE) { - # write name of corresponding CES file to datainput.gms + # write name of corresponding CES file to datainput.gms cfg$gms$cm_CES_configuration <- calculate_CES_configuration(cfg, path = remindPath) if(file.exists("input/source_files.log")) { @@ -22,8 +22,12 @@ updateInputData <- function(cfg, remindPath = ".", gamsCompile = FALSE) { regicode <- madrat::regionscode(file.path(remindPath, cfg$regionmapping)) input_new <- c(paste0("rev",cfg$inputRevision,"_",regicode,"_", tolower(cfg$model_name),".tgz"), paste0("rev",cfg$inputRevision,"_",regicode,ifelse(cfg$extramappings_historic == "","",paste0("-", madrat::regionscode(cfg$extramappings_historic))),"_", tolower(cfg$validationmodel_name),".tgz"), - paste0("CESparametersAndGDX_",cfg$CESandGDXversion,".tgz")) - # check if all input files are there + paste0("CESparametersAndGDX_",cfg$CESandGDXversion,".tgz")) + + # Specify for each element of input_new whether to stop if the respective file could not be downloaded + stopOnMissing <- c(TRUE, FALSE, TRUE) + + # check if all input files are already there missinginput <- if (isTRUE(gamsCompile)) NULL else missingInputData() # download and distribute needed data @@ -37,7 +41,7 @@ updateInputData <- function(cfg, remindPath = ".", gamsCompile = FALSE) { repositories = cfg$repositories, # defined in your environment variables modelfolder = remindPath, debug = FALSE, - stopOnMissing = ! isTRUE(gamsCompile)) + stopOnMissing = if (isTRUE(gamsCompile)) FALSE else stopOnMissing) ) } else if (! isTRUE(gamsCompile)) { message("No input data downloaded and distributed. To enable that, delete input/source_files.log or set cfg$force_download to TRUE.") diff --git a/standalone/MOFEX/MOFEX.gms b/standalone/MOFEX/MOFEX.gms index badc6b07e..5c6c0e4d2 100644 --- a/standalone/MOFEX/MOFEX.gms +++ b/standalone/MOFEX/MOFEX.gms @@ -479,8 +479,6 @@ $setglobal cm_feShareLimits off !! def = off $setglobal c_fuelprice_init off !! def = off $setglobal cm_seTradeScenario off !! def = off -$setglobal cm_wind_offshore 0 !! def = 0 - *** -------------------------------------------------------------------------------------------------------------------------------------------------------------------- *** -------------------------------------------------------------------------------------------------------------------------------------------------------------------- *** END OF WARNING ZONE diff --git a/standalone/trade/trade.gms b/standalone/trade/trade.gms index 572735ec4..fab524d7d 100644 --- a/standalone/trade/trade.gms +++ b/standalone/trade/trade.gms @@ -483,7 +483,6 @@ $setglobal cm_feShareLimits off !! def = off $setglobal c_fuelprice_init off !! def = off $setglobal cm_seTradeScenario off !! def = off -$setglobal cm_wind_offshore 0 !! def = 0 *** -------------------------------------------------------------------------------------------------------------------------------------------------------------------- *** -------------------------------------------------------------------------------------------------------------------------------------------------------------------- *** END OF WARNING ZONE diff --git a/start.R b/start.R index bd1601d03..06fdefafd 100755 --- a/start.R +++ b/start.R @@ -251,7 +251,7 @@ if (any(c("--reprepare", "--restart") %in% flags)) { if (! exists("slurmConfig") & (any(c("--debug", "--quick", "--testOneRegi") %in% flags) | ! "slurmConfig" %in% names(scenarios) || any(is.na(scenarios$slurmConfig)))) { slurmConfig <- choose_slurmConfig(flags = flags) - if ("--quick" %in% flags) slurmConfig <- combine_slurmConfig(slurmConfig, "--time=60") + if ("--quick" %in% flags && ! slurmConfig == "direct") slurmConfig <- combine_slurmConfig(slurmConfig, "--time=60") if (any(c("--debug", "--quick", "--testOneRegi") %in% flags) && ! length(config.file) == 0) { message("\nYour slurmConfig selection will overwrite the settings in your scenario_config file.") } diff --git a/tutorials/10_DebuggingREMIND.md b/tutorials/10_DebuggingREMIND.md index 691022b07..5993c7aa4 100644 --- a/tutorials/10_DebuggingREMIND.md +++ b/tutorials/10_DebuggingREMIND.md @@ -47,7 +47,7 @@ If full.log exists, this is the next place to look at. Either open it in your fa ```bash less full.log ``` -and then type `G` to get to the end of the file. `q` finishes looking at the file. +and then type `G` to get to the end of the file. Type `q` to close the file. Another option is to use the editor `vi` by typing `vi full.log`, in which case `:q` closes the editor. `less` is generally faster when looking at large file, but doesn’t offer color coding. You may find: diff --git a/tutorials/13_Submit_to_IIASA_database.md b/tutorials/13_Submit_to_IIASA_database.md index 1a2b851bc..c41e35e62 100644 --- a/tutorials/13_Submit_to_IIASA_database.md +++ b/tutorials/13_Submit_to_IIASA_database.md @@ -97,6 +97,16 @@ The following functions from `piamInterfaces` might be helpful for further analy - [`fixOnRef()`](https://github.com/pik-piam/piamInterfaces/blob/master/R/fixOnRef.R) checks whether the runs are correctly fixed on their reference run for delayed transition scenarios. - [`plotIntercomparison()`](https://github.com/pik-piam/piamInterfaces/blob/master/R/plotIntercomparison.R) plots area and line plots of selected variables. +If you like to generate a 'historical.mif' file for a different regional resolution than the REMIND one to pass it to plotIntercomparison, you can use the [regionmapping](https://github.com/pik-piam/piamInterfaces/tree/master/inst/regionmapping) ISO files from piamInterfaces or a similarly formatted file, for example like this: +``` +library(madrat) +library(mrremind) +setConfig(regionmapping = system.file("regionmapping/ISO_2_R10.csv", package = "piamInterfaces")) +d <- madrat::retrieveData("VALIDATIONREMIND") +system(paste("tar xvf", d)) +quitte::write.mif(piamInterfaces::convertHistoricalData("historical.mif", "ScenarioMIP"), "historical_R10.mif") +``` + ## Further Information Please refer to [this repository](https://gitlab.pik-potsdam.de/REMIND/miptemplate) for a showcase of all the tools and best practices when working with data from the IIASA database, including: